@Override protected SqlPredicateFragment notEqualHelper(String cn, Object argument) { return of("(" + cn + " != ?)").add(argument); }
/** * Returns the COLLATE fragment needed to make ORDER BY statements sort correctly, using default collation * @return the COLLATE fragment needed to make ORDER BY statements sort correctly, using default collation */ default SqlPredicateFragment getCollateFragment() { return of(""); }
private SqlPredicateFragment inStringHelper(String cn, FieldPredicate<?> model, boolean negated) { final Set<?> set = getFirstOperandAsRawSet(model); if (set.isEmpty()) { return negated ? alwaysTrue() : alwaysFalse(); } else if (set.size() == 1) { final Object arg = set.iterator().next(); return negated ? notEqualHelper(cn, String.class, arg) : equalHelper(cn, String.class, arg); } return of("(" + cn + " IN (" + set.stream().map($ -> "?").collect(joining(",")) + " COLLATE "+ binaryCollationName +"))", negated ).addAll(set); }
final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); sql.append(fragment.getSql()); fragment.objects().map(tm::toDatabaseType).forEachOrdered(values::add); } else if (predicate instanceof CombinedPredicate) { final CombinedPredicate<ENTITY> combinedPredicate = (CombinedPredicate<ENTITY>) predicate;
public static <ENTITY> void modifySource( final List<FieldPredicate<ENTITY>> predicateBuilders, final SqlStreamOptimizerInfo<ENTITY> info, final AsynchronousQueryResult<ENTITY> query ) { requireNonNull(predicateBuilders); requireNonNull(info); requireNonNull(query); final List<FieldPredicate<ENTITY>> optimizedPredicateBuilders = optimize(predicateBuilders); final FieldPredicateView spv = info.getDbmsType().getFieldPredicateView(); final List<SqlPredicateFragment> fragments = optimizedPredicateBuilders.stream() .map(sp -> spv.transform(info.getSqlColumnNamer(), info.getSqlDatabaseTypeFunction(), sp)) .collect(toList()); final String sql = info.getSqlSelect() + " WHERE " + fragments.stream() .map(SqlPredicateFragment::getSql) .collect(joining(" AND ")); final List<Object> values = new ArrayList<>(fragments.size()); for (int i = 0; i < fragments.size(); i++) { final FieldPredicate<ENTITY> p = optimizedPredicateBuilders.get(i); final Field<ENTITY> referenceFieldTrait = p.getField(); @SuppressWarnings("unchecked") final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); fragments.get(i).objects() .map(tm::toDatabaseType) .forEach(values::add); } query.setSql(sql); query.setValues(values); }
sql.append(dbmsType.getCollateFragment().getSql());
final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); sql.append(fragment.getSql()); fragment.objects().map(tm::toDatabaseType).forEachOrdered(values::add); } else if (predicate instanceof CombinedPredicate) { final CombinedPredicate<ENTITY> combinedPredicate = (CombinedPredicate<ENTITY>) predicate;
public static <ENTITY> void modifySource( final List<FieldPredicate<ENTITY>> predicateBuilders, final SqlStreamOptimizerInfo<ENTITY> info, final AsynchronousQueryResult<ENTITY> query ) { requireNonNull(predicateBuilders); requireNonNull(info); requireNonNull(query); final List<FieldPredicate<ENTITY>> optimizedPredicateBuilders = optimize(predicateBuilders); final FieldPredicateView spv = info.getDbmsType().getFieldPredicateView(); final List<SqlPredicateFragment> fragments = optimizedPredicateBuilders.stream() .map(sp -> spv.transform(info.getSqlColumnNamer(), info.getSqlDatabaseTypeFunction(), sp)) .collect(toList()); final String sql = info.getSqlSelect() + " WHERE " + fragments.stream() .map(SqlPredicateFragment::getSql) .collect(joining(" AND ")); final List<Object> values = new ArrayList<>(fragments.size()); for (int i = 0; i < fragments.size(); i++) { final FieldPredicate<ENTITY> p = optimizedPredicateBuilders.get(i); final Field<ENTITY> referenceFieldTrait = p.getField(); @SuppressWarnings("unchecked") final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); fragments.get(i).objects() .map(tm::toDatabaseType) .forEach(values::add); } query.setSql(sql); query.setValues(values); }
sql.append(dbmsType.getCollateFragment().getSql());
protected SqlPredicateFragment notEqualHelper(String cn, Object argument) { return of("(NOT (" + cn + " = ?))").add(argument); }
@Override public SqlPredicateFragment getCollateFragment() { return of(" COLLATE " + binaryCollationName); }
final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); sql.append(fragment.getSql()); fragment.objects().map(tm::toDatabaseType).forEachOrdered(values::add); } else if (predicate instanceof CombinedPredicate) { final CombinedPredicate<ENTITY> combinedPredicate = (CombinedPredicate<ENTITY>) predicate;
protected SqlPredicateFragment inHelper(String cn, FieldPredicate<?> model, boolean negated) { final Set<?> set = getFirstOperandAsRawSet(model); if (set.isEmpty()) { return negated ? alwaysTrue() : alwaysFalse(); } else if (set.size() == 1) { final Object arg = set.iterator().next(); return negated ? notEqualHelper(cn, arg) : equalHelper(cn, arg); } else { return of("(" + cn + " IN (" + set.stream().map($ -> "?").collect(joining(",")) + "))", negated ).addAll(set); } } }
@Override protected SqlPredicateFragment equalHelper(String cn, Object argument) { return of("(" + cn + " = ?)").add(argument); }
protected static SqlPredicateFragment of(String sql) { return SqlPredicateFragment.of(sql); }
final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); sql.append(fragment.getSql()); fragment.objects().map(tm::toDatabaseType).forEachOrdered(values::add); } else if (predicate instanceof CombinedPredicate) { final CombinedPredicate<ENTITY> combinedPredicate = (CombinedPredicate<ENTITY>) predicate;
protected SqlPredicateFragment inHelper(String cn, FieldPredicate<?> model, boolean negated) { final Set<?> set = getFirstOperandAsRawSet(model); if (set.isEmpty()) { return negated ? alwaysTrue() : alwaysFalse(); } else if (set.size() == 1) { final Object arg = set.iterator().next(); return negated ? notEqualHelper(cn, arg) : equalHelper(cn, arg); } else { return of("(" + cn + " IN (" + set.stream().map($ -> "?").collect(joining(",")) + "))", negated ).addAll(set); } } }
protected SqlPredicateFragment equalHelper(String cn, Object argument) { return of("(" + cn + " = ?)").add(argument); }
@Override public SqlPredicateFragment getCollateFragment() { return of(" COLLATE " + binaryCollationName); }