From b4ef723bcf06d970553673a244cd37c66007396e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 3 May 2013 10:23:46 +0200 Subject: [PATCH] [#2434] Added new public SubqueryComparator --- jOOQ-tools/src/org/jooq/xtend/Rows.xtend | 21 ++++++------- jOOQ/src/main/java/org/jooq/Comparator.java | 9 +++++- ...yOperator.java => SubqueryComparator.java} | 30 ++++++++++++++++--- .../java/org/jooq/impl/AbstractField.java | 21 ++++++------- .../main/java/org/jooq/impl/InCondition.java | 15 +++++----- jOOQ/src/main/java/org/jooq/impl/RowImpl.java | 21 ++++++------- .../java/org/jooq/impl/RowInCondition.java | 7 +++-- .../org/jooq/impl/RowSubqueryCondition.java | 19 ++++++------ .../impl/SelectQueryAsSubQueryCondition.java | 11 +++---- 9 files changed, 95 insertions(+), 59 deletions(-) rename jOOQ/src/main/java/org/jooq/{impl/SubqueryOperator.java => SubqueryComparator.java} (79%) diff --git a/jOOQ-tools/src/org/jooq/xtend/Rows.xtend b/jOOQ-tools/src/org/jooq/xtend/Rows.xtend index 240a5f8099..944f2f0020 100644 --- a/jOOQ-tools/src/org/jooq/xtend/Rows.xtend +++ b/jOOQ-tools/src/org/jooq/xtend/Rows.xtend @@ -1179,6 +1179,7 @@ class Rows extends Generators { import org.jooq.Row«typeSuffixRaw(degree)»; «ENDFOR» import org.jooq.Select; + import org.jooq.SubqueryComparator; /** * @author Lukas Eder @@ -1787,13 +1788,13 @@ class Rows extends Generators { @Override public final Condition in(Collection rows) { QueryPartList list = new QueryPartList(rows); - return new RowInCondition(this, list, SubqueryOperator.IN); + return new RowInCondition(this, list, SubqueryComparator.IN); } @Override public final Condition notIn(Collection rows) { QueryPartList list = new QueryPartList(rows); - return new RowInCondition(this, list, SubqueryOperator.NOT_IN); + return new RowInCondition(this, list, SubqueryComparator.NOT_IN); } // ------------------------------------------------------------------------ @@ -1802,7 +1803,7 @@ class Rows extends Generators { @Override public final Condition equal(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.EQUALS); + return new RowSubqueryCondition(this, select, SubqueryComparator.EQUALS); } @Override @@ -1812,7 +1813,7 @@ class Rows extends Generators { @Override public final Condition notEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.NOT_EQUALS); + return new RowSubqueryCondition(this, select, SubqueryComparator.NOT_EQUALS); } @Override @@ -1822,7 +1823,7 @@ class Rows extends Generators { @Override public final Condition greaterThan(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.GREATER); + return new RowSubqueryCondition(this, select, SubqueryComparator.GREATER); } @Override @@ -1832,7 +1833,7 @@ class Rows extends Generators { @Override public final Condition greaterOrEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.GREATER_OR_EQUAL); + return new RowSubqueryCondition(this, select, SubqueryComparator.GREATER_OR_EQUAL); } @Override @@ -1842,7 +1843,7 @@ class Rows extends Generators { @Override public final Condition lessThan(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.LESS); + return new RowSubqueryCondition(this, select, SubqueryComparator.LESS); } @Override @@ -1852,7 +1853,7 @@ class Rows extends Generators { @Override public final Condition lessOrEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.LESS_OR_EQUAL); + return new RowSubqueryCondition(this, select, SubqueryComparator.LESS_OR_EQUAL); } @Override @@ -1862,12 +1863,12 @@ class Rows extends Generators { @Override public final Condition in(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.IN); + return new RowSubqueryCondition(this, select, SubqueryComparator.IN); } @Override public final Condition notIn(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.NOT_IN); + return new RowSubqueryCondition(this, select, SubqueryComparator.NOT_IN); } // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/Comparator.java b/jOOQ/src/main/java/org/jooq/Comparator.java index ca29de91de..35308c3912 100644 --- a/jOOQ/src/main/java/org/jooq/Comparator.java +++ b/jOOQ/src/main/java/org/jooq/Comparator.java @@ -36,10 +36,17 @@ package org.jooq; + /** - * A comparator to be used in conditions + * A comparator to be used in conditions. + *

+ * Comparison operators listed here can be used to compare {@link Field} or + * {@link Row} values with other {@link Field} or {@link Row} values. See + * {@link SubqueryComparator} for comparing {@link Field} or {@link Row} values + * with subselects. * * @author Lukas Eder + * @see SubqueryComparator */ public enum Comparator { diff --git a/jOOQ/src/main/java/org/jooq/impl/SubqueryOperator.java b/jOOQ/src/main/java/org/jooq/SubqueryComparator.java similarity index 79% rename from jOOQ/src/main/java/org/jooq/impl/SubqueryOperator.java rename to jOOQ/src/main/java/org/jooq/SubqueryComparator.java index 46ed46d191..ac721d6b82 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SubqueryOperator.java +++ b/jOOQ/src/main/java/org/jooq/SubqueryComparator.java @@ -34,29 +34,51 @@ * POSSIBILITY OF SUCH DAMAGE. */ -package org.jooq.impl; +package org.jooq; + /** - * Any operator used in a {@link SubQueryCondition} + * A comparator to be used in subquery conditions. + *

+ * Comparison operators listed here can be used to compare {@link Field} or + * {@link Row} values with subqueries. See {@link Comparator} for comparing + * {@link Field} or {@link Row} values with other {@link Field} or {@link Row} + * values. * * @author Lukas Eder + * @see Comparator */ -enum SubqueryOperator { +public enum SubqueryComparator { + @Support IN("in"), + + @Support NOT_IN("not in"), + + @Support EQUALS("="), + + @Support NOT_EQUALS("<>"), + + @Support LESS("<"), + + @Support LESS_OR_EQUAL("<="), + + @Support GREATER(">"), + + @Support GREATER_OR_EQUAL(">="), ; private final String sql; - private SubqueryOperator(String sql) { + private SubqueryComparator(String sql) { this.sql = sql; } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index 754386f8ef..49b2baccb2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -70,6 +70,7 @@ import org.jooq.RenderContext; import org.jooq.Select; import org.jooq.SortField; import org.jooq.SortOrder; +import org.jooq.SubqueryComparator; import org.jooq.WindowIgnoreNullsStep; import org.jooq.WindowPartitionByStep; import org.jooq.tools.Convert; @@ -584,7 +585,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { return falseCondition(); } else { - return new InCondition(this, nullSafe(values), SubqueryOperator.IN); + return new InCondition(this, nullSafe(values), SubqueryComparator.IN); } } @@ -601,7 +602,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition in(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.IN); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.IN); } @Override @@ -616,7 +617,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition notIn(Field... values) { - return new InCondition(this, nullSafe(values), SubqueryOperator.NOT_IN); + return new InCondition(this, nullSafe(values), SubqueryComparator.NOT_IN); } @Override @@ -632,7 +633,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition notIn(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.NOT_IN); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.NOT_IN); } @Override @@ -857,7 +858,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition equal(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.EQUALS); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.EQUALS); } @Override @@ -887,7 +888,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition notEqual(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.NOT_EQUALS); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.NOT_EQUALS); } @Override @@ -907,7 +908,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition lessThan(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.LESS); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.LESS); } @Override @@ -927,7 +928,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition lessOrEqual(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.LESS_OR_EQUAL); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.LESS_OR_EQUAL); } @Override @@ -947,7 +948,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition greaterThan(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.GREATER); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.GREATER); } @Override @@ -967,7 +968,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field { @Override public final Condition greaterOrEqual(Select> query) { - return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.GREATER_OR_EQUAL); + return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.GREATER_OR_EQUAL); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/InCondition.java b/jOOQ/src/main/java/org/jooq/impl/InCondition.java index 0648261755..c82600b88e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/InCondition.java @@ -42,20 +42,21 @@ import java.util.List; import org.jooq.BindContext; import org.jooq.Field; import org.jooq.RenderContext; +import org.jooq.SubqueryComparator; /** * @author Lukas Eder */ class InCondition extends AbstractCondition { - private static final long serialVersionUID = -1653924248576930761L; - private static final int IN_LIMIT = 1000; + private static final long serialVersionUID = -1653924248576930761L; + private static final int IN_LIMIT = 1000; - private final Field field; - private final Field[] values; - private final SubqueryOperator operator; + private final Field field; + private final Field[] values; + private final SubqueryComparator operator; - InCondition(Field field, Field[] values, SubqueryOperator operator) { + InCondition(Field field, Field[] values, SubqueryComparator operator) { this.field = field; this.values = values; this.operator = operator; @@ -87,7 +88,7 @@ class InCondition extends AbstractCondition { // [#1515] The connector depends on the IN / NOT IN // operator - if (operator == SubqueryOperator.IN) { + if (operator == SubqueryComparator.IN) { context.formatSeparator() .keyword("or "); } diff --git a/jOOQ/src/main/java/org/jooq/impl/RowImpl.java b/jOOQ/src/main/java/org/jooq/impl/RowImpl.java index 030a00caa8..4b049bc8c7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowImpl.java @@ -119,6 +119,7 @@ import org.jooq.Row20; import org.jooq.Row21; import org.jooq.Row22; import org.jooq.Select; +import org.jooq.SubqueryComparator; /** * @author Lukas Eder @@ -9446,13 +9447,13 @@ implements @Override public final Condition in(Collection rows) { QueryPartList list = new QueryPartList(rows); - return new RowInCondition(this, list, SubqueryOperator.IN); + return new RowInCondition(this, list, SubqueryComparator.IN); } @Override public final Condition notIn(Collection rows) { QueryPartList list = new QueryPartList(rows); - return new RowInCondition(this, list, SubqueryOperator.NOT_IN); + return new RowInCondition(this, list, SubqueryComparator.NOT_IN); } // ------------------------------------------------------------------------ @@ -9461,7 +9462,7 @@ implements @Override public final Condition equal(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.EQUALS); + return new RowSubqueryCondition(this, select, SubqueryComparator.EQUALS); } @Override @@ -9471,7 +9472,7 @@ implements @Override public final Condition notEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.NOT_EQUALS); + return new RowSubqueryCondition(this, select, SubqueryComparator.NOT_EQUALS); } @Override @@ -9481,7 +9482,7 @@ implements @Override public final Condition greaterThan(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.GREATER); + return new RowSubqueryCondition(this, select, SubqueryComparator.GREATER); } @Override @@ -9491,7 +9492,7 @@ implements @Override public final Condition greaterOrEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.GREATER_OR_EQUAL); + return new RowSubqueryCondition(this, select, SubqueryComparator.GREATER_OR_EQUAL); } @Override @@ -9501,7 +9502,7 @@ implements @Override public final Condition lessThan(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.LESS); + return new RowSubqueryCondition(this, select, SubqueryComparator.LESS); } @Override @@ -9511,7 +9512,7 @@ implements @Override public final Condition lessOrEqual(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.LESS_OR_EQUAL); + return new RowSubqueryCondition(this, select, SubqueryComparator.LESS_OR_EQUAL); } @Override @@ -9521,12 +9522,12 @@ implements @Override public final Condition in(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.IN); + return new RowSubqueryCondition(this, select, SubqueryComparator.IN); } @Override public final Condition notIn(Select select) { - return new RowSubqueryCondition(this, select, SubqueryOperator.NOT_IN); + return new RowSubqueryCondition(this, select, SubqueryComparator.NOT_IN); } // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java b/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java index 3c7a8b66a3..2d8474ba7b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java @@ -45,7 +45,7 @@ import static org.jooq.SQLDialect.INGRES; import static org.jooq.SQLDialect.SQLITE; import static org.jooq.SQLDialect.SQLSERVER; import static org.jooq.SQLDialect.SYBASE; -import static org.jooq.impl.SubqueryOperator.NOT_IN; +import static org.jooq.SubqueryComparator.NOT_IN; import java.util.ArrayList; import java.util.List; @@ -58,6 +58,7 @@ import org.jooq.QueryPart; import org.jooq.QueryPartInternal; import org.jooq.RenderContext; import org.jooq.Row; +import org.jooq.SubqueryComparator; /** * @author Lukas Eder @@ -71,9 +72,9 @@ class RowInCondition extends AbstractCondition { private final Row left; private final QueryPartList right; - private final SubqueryOperator operator; + private final SubqueryComparator operator; - RowInCondition(Row left, QueryPartList right, SubqueryOperator operator) { + RowInCondition(Row left, QueryPartList right, SubqueryComparator operator) { this.left = left; this.right = right; this.operator = operator; diff --git a/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java b/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java index 0b176414e5..83acb68ce0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java @@ -42,15 +42,15 @@ import static org.jooq.SQLDialect.HSQLDB; import static org.jooq.SQLDialect.MYSQL; import static org.jooq.SQLDialect.ORACLE; import static org.jooq.SQLDialect.POSTGRES; +import static org.jooq.SubqueryComparator.EQUALS; +import static org.jooq.SubqueryComparator.IN; +import static org.jooq.SubqueryComparator.NOT_EQUALS; +import static org.jooq.SubqueryComparator.NOT_IN; import static org.jooq.impl.DSL.exists; import static org.jooq.impl.DSL.fieldByName; import static org.jooq.impl.DSL.notExists; import static org.jooq.impl.DSL.row; import static org.jooq.impl.DSL.select; -import static org.jooq.impl.SubqueryOperator.EQUALS; -import static org.jooq.impl.SubqueryOperator.IN; -import static org.jooq.impl.SubqueryOperator.NOT_EQUALS; -import static org.jooq.impl.SubqueryOperator.NOT_IN; import static org.jooq.impl.Utils.DATA_ROW_VALUE_EXPRESSION_PREDICATE_SUBQUERY; import java.util.ArrayList; @@ -67,6 +67,7 @@ import org.jooq.Row; import org.jooq.RowN; import org.jooq.SQLDialect; import org.jooq.Select; +import org.jooq.SubqueryComparator; /** * @author Lukas Eder @@ -76,13 +77,13 @@ class RowSubqueryCondition extends AbstractCondition { /** * Generated UID */ - private static final long serialVersionUID = -1806139685201770706L; + private static final long serialVersionUID = -1806139685201770706L; - private final Row left; - private final Select right; - private final SubqueryOperator operator; + private final Row left; + private final Select right; + private final SubqueryComparator operator; - RowSubqueryCondition(Row left, Select right, SubqueryOperator operator) { + RowSubqueryCondition(Row left, Select right, SubqueryComparator operator) { this.left = left; this.right = right; this.operator = operator; diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryAsSubQueryCondition.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryAsSubQueryCondition.java index ab0454a934..ca6ed4b1ea 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryAsSubQueryCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryAsSubQueryCondition.java @@ -40,19 +40,20 @@ import org.jooq.BindContext; import org.jooq.Field; import org.jooq.RenderContext; import org.jooq.Select; +import org.jooq.SubqueryComparator; /** * @author Lukas Eder */ class SelectQueryAsSubQueryCondition extends AbstractCondition { - private static final long serialVersionUID = -402776705884329740L; + private static final long serialVersionUID = -402776705884329740L; - private final Select query; - private final Field field; - private final SubqueryOperator operator; + private final Select query; + private final Field field; + private final SubqueryComparator operator; - SelectQueryAsSubQueryCondition(Select query, Field field, SubqueryOperator operator) { + SelectQueryAsSubQueryCondition(Select query, Field field, SubqueryComparator operator) { this.query = query; this.field = field; this.operator = operator;