[#2434] Added new public SubqueryComparator

This commit is contained in:
Lukas Eder 2013-05-03 10:23:46 +02:00
parent 626b4aad5c
commit b4ef723bcf
9 changed files with 95 additions and 59 deletions

View File

@ -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<Row> list = new QueryPartList<Row>(rows);
return new RowInCondition(this, list, SubqueryOperator.IN);
return new RowInCondition(this, list, SubqueryComparator.IN);
}
@Override
public final Condition notIn(Collection rows) {
QueryPartList<Row> list = new QueryPartList<Row>(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);
}
// ------------------------------------------------------------------------

View File

@ -36,10 +36,17 @@
package org.jooq;
/**
* A comparator to be used in conditions
* A comparator to be used in conditions.
* <p>
* 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 {

View File

@ -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.
* <p>
* 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;
}

View File

@ -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<T> extends AbstractQueryPart implements Field<T> {
return falseCondition();
}
else {
return new InCondition<T>(this, nullSafe(values), SubqueryOperator.IN);
return new InCondition<T>(this, nullSafe(values), SubqueryComparator.IN);
}
}
@ -601,7 +602,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition in(Select<? extends Record1<T>> query) {
return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.IN);
return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.IN);
}
@Override
@ -616,7 +617,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition notIn(Field<?>... values) {
return new InCondition<T>(this, nullSafe(values), SubqueryOperator.NOT_IN);
return new InCondition<T>(this, nullSafe(values), SubqueryComparator.NOT_IN);
}
@Override
@ -632,7 +633,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition notIn(Select<? extends Record1<T>> 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<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition equal(Select<? extends Record1<T>> query) {
return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.EQUALS);
return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.EQUALS);
}
@Override
@ -887,7 +888,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition notEqual(Select<? extends Record1<T>> 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<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition lessThan(Select<? extends Record1<T>> query) {
return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.LESS);
return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.LESS);
}
@Override
@ -927,7 +928,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition lessOrEqual(Select<? extends Record1<T>> 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<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition greaterThan(Select<? extends Record1<T>> query) {
return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.GREATER);
return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.GREATER);
}
@Override
@ -967,7 +968,7 @@ abstract class AbstractField<T> extends AbstractQueryPart implements Field<T> {
@Override
public final Condition greaterOrEqual(Select<? extends Record1<T>> query) {
return new SelectQueryAsSubQueryCondition(query, this, SubqueryOperator.GREATER_OR_EQUAL);
return new SelectQueryAsSubQueryCondition(query, this, SubqueryComparator.GREATER_OR_EQUAL);
}
@Override

View File

@ -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<T> 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<T> field;
private final Field<?>[] values;
private final SubqueryOperator operator;
private final Field<T> field;
private final Field<?>[] values;
private final SubqueryComparator operator;
InCondition(Field<T> field, Field<?>[] values, SubqueryOperator operator) {
InCondition(Field<T> field, Field<?>[] values, SubqueryComparator operator) {
this.field = field;
this.values = values;
this.operator = operator;
@ -87,7 +88,7 @@ class InCondition<T> extends AbstractCondition {
// [#1515] The connector depends on the IN / NOT IN
// operator
if (operator == SubqueryOperator.IN) {
if (operator == SubqueryComparator.IN) {
context.formatSeparator()
.keyword("or ");
}

View File

@ -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<Row> list = new QueryPartList<Row>(rows);
return new RowInCondition(this, list, SubqueryOperator.IN);
return new RowInCondition(this, list, SubqueryComparator.IN);
}
@Override
public final Condition notIn(Collection rows) {
QueryPartList<Row> list = new QueryPartList<Row>(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);
}
// ------------------------------------------------------------------------

View File

@ -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<? extends Row> right;
private final SubqueryOperator operator;
private final SubqueryComparator operator;
RowInCondition(Row left, QueryPartList<? extends Row> right, SubqueryOperator operator) {
RowInCondition(Row left, QueryPartList<? extends Row> right, SubqueryComparator operator) {
this.left = left;
this.right = right;
this.operator = operator;

View File

@ -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;

View File

@ -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;