encodeIDConditionIN method

  1. @override
FutureOr<EncodingContext> encodeIDConditionIN(
  1. ConditionIdIN c,
  2. EncodingContext context
)
override

Implementation

@override
FutureOr<EncodingContext> encodeIDConditionIN(
    ConditionIdIN c, EncodingContext context) {
  var tableName = context.tableNameOrEntityName;
  var tableAlias = context.resolveEntityAlias(tableName);

  var schemeProvider = this.schemeProvider;
  if (schemeProvider == null) {
    var idKey = context.addEncodingParameter('id', c.idsValues);
    var q = sqlElementQuote;
    var tableKey = '$q$tableAlias$q.$q$idKey$q';

    return encodeConditionValuesWithOperator(
        context, int, idKey, tableKey, 'IN', c.idsValues, true);
  } else {
    var tableSchemeRet = schemeProvider.getTableScheme(tableName);

    return tableSchemeRet.resolveMapped((tableScheme) {
      if (tableScheme == null) {
        var errorMsg =
            "Can't find `TableScheme` for entity/table: $tableName";
        _log.severe(errorMsg);
        throw StateError(errorMsg);
      }

      var idFieldName = tableScheme.idFieldName ?? 'id';
      var idType = tableScheme.fieldsTypes[idFieldName] ?? int;

      var idKey = context.addEncodingParameter(idFieldName, c.idsValues);
      var q = sqlElementQuote;
      var tableKey = '$q$tableAlias$q.$q$idKey$q';

      return encodeConditionValuesWithOperator(
          context, idType, idFieldName, tableKey, 'IN', c.idsValues, true);
    });
  }
}