diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/PredicateTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/PredicateTests.java index 9a2d0c42c6..e44ab223f9 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/PredicateTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/PredicateTests.java @@ -40,7 +40,6 @@ import static junit.framework.Assert.assertEquals; import static org.jooq.SQLDialect.ASE; import static org.jooq.SQLDialect.DB2; import static org.jooq.SQLDialect.DERBY; -import static org.jooq.SQLDialect.MYSQL; import static org.jooq.conf.StatementType.STATIC_STATEMENT; import static org.jooq.impl.Factory.all; import static org.jooq.impl.Factory.any; @@ -48,12 +47,15 @@ import static org.jooq.impl.Factory.castNull; import static org.jooq.impl.Factory.concat; import static org.jooq.impl.Factory.count; import static org.jooq.impl.Factory.escape; +import static org.jooq.impl.Factory.field; import static org.jooq.impl.Factory.lower; +import static org.jooq.impl.Factory.one; import static org.jooq.impl.Factory.select; import static org.jooq.impl.Factory.selectOne; import static org.jooq.impl.Factory.trueCondition; import static org.jooq.impl.Factory.upper; import static org.jooq.impl.Factory.val; +import static org.jooq.impl.Factory.zero; import java.sql.Date; import java.util.ArrayList; @@ -63,6 +65,7 @@ import java.util.List; import org.jooq.Condition; import org.jooq.Field; +import org.jooq.Record; import org.jooq.Record1; import org.jooq.Record2; import org.jooq.Record3; @@ -459,7 +462,7 @@ extends BaseTest { + + /** + * Generated UID + */ + private static final long serialVersionUID = -5921673852489483721L; + private final Condition condition; + + ConditionAsField(Condition condition) { + super(condition.toString(), SQLDataType.BOOLEAN); + + this.condition = condition; + } + + @Override + final QueryPart getFunction0(Configuration configuration) { + switch (configuration.getDialect()) { + + // Most databases don't accept predicates where column expressions + // are expected. + case CUBRID: + case DB2: + case ORACLE: + case SQLSERVER: + return Factory.decode().when(condition, inline(true)).otherwise(inline(false)); + + // These databases can inline predicates in column expression contexts + case DERBY: + case H2: + case HSQLDB: + case MYSQL: + case POSTGRES: + case SQLITE: + + // Unknown (to be evaluated): + case ASE: + case FIREBIRD: + case INGRES: + case SYBASE: + return condition; + } + + // The default, for new dialects + return condition; + } +} diff --git a/jOOQ/src/main/java/org/jooq/impl/Factory.java b/jOOQ/src/main/java/org/jooq/impl/Factory.java index 6e17ad354a..6bbb0ca528 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Factory.java +++ b/jOOQ/src/main/java/org/jooq/impl/Factory.java @@ -3053,6 +3053,14 @@ public class Factory { return condition.not(); } + /** + * Transform a condition into a boolean field + */ + @Support + public static Field field(Condition condition) { + return new ConditionAsField(condition); + } + // ------------------------------------------------------------------------- // XXX Global Field and Function factory // -------------------------------------------------------------------------