From 15e62bbae66774d82b4728c61aa341159cbb5124 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 27 Jan 2012 15:11:07 +0000 Subject: [PATCH] [#1074] Add Field.notBetween(T, T) for convenience --- .../src/org/jooq/test/jOOQAbstractTest.java | 11 +++++++++++ jOOQ/src/main/java/org/jooq/Field.java | 16 ++++++++++++++++ .../main/java/org/jooq/impl/AbstractField.java | 12 +++++++++++- .../java/org/jooq/impl/BetweenCondition.java | 5 ++++- jOOQ/src/test/java/org/jooq/test/jOOQTest.java | 4 ++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 895004cf60..d5d3f21779 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -3060,6 +3060,17 @@ public abstract class jOOQAbstractTest< .where(val(3).between(TBook_AUTHOR_ID(), TBook_ID())) .orderBy(TBook_ID()).fetch(TBook_ID())); + // [#1074] The NOT BETWEEN clause + assertEquals(Arrays.asList(1, 4), create().select() + .from(TBook()) + .where(TBook_ID().notBetween(2, 3)) + .orderBy(TBook_ID()).fetch(TBook_ID())); + + assertEquals(Arrays.asList(1, 2), create().select() + .from(TBook()) + .where(val(3).notBetween(TBook_AUTHOR_ID(), TBook_ID())) + .orderBy(TBook_ID()).fetch(TBook_ID())); + // The IN clause // [#502] empty set checks assertEquals(Arrays.asList(), create().select() diff --git a/jOOQ/src/main/java/org/jooq/Field.java b/jOOQ/src/main/java/org/jooq/Field.java index 3971cb7cfd..d28dc7c823 100644 --- a/jOOQ/src/main/java/org/jooq/Field.java +++ b/jOOQ/src/main/java/org/jooq/Field.java @@ -579,6 +579,22 @@ public interface Field extends NamedTypeProviderQueryPart, AliasProvider minValue, Field maxValue); + /** + * Create a condition to check this field against some bounds + *

+ * SQL: this not between minValue and maxValue + */ + @Support + Condition notBetween(T minValue, T maxValue); + + /** + * Create a condition to check this field against some bounds + *

+ * SQL: this not between minValue and maxValue + */ + @Support + Condition notBetween(Field minValue, Field maxValue); + /** * this = value *

diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index deb3dc42f6..10b70134d8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -448,7 +448,17 @@ abstract class AbstractField extends AbstractNamedTypeProviderQueryPart im @Override public final Condition between(Field minValue, Field maxValue) { - return new BetweenCondition(this, nullSafe(minValue), nullSafe(maxValue)); + return new BetweenCondition(this, nullSafe(minValue), nullSafe(maxValue), false); + } + + @Override + public final Condition notBetween(T minValue, T maxValue) { + return notBetween(val(minValue), val(maxValue)); + } + + @Override + public final Condition notBetween(Field minValue, Field maxValue) { + return new BetweenCondition(this, nullSafe(minValue), nullSafe(maxValue), true); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java b/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java index faf4f1ec9c..71bb81cfaf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/BetweenCondition.java @@ -50,14 +50,16 @@ class BetweenCondition extends AbstractCondition { private static final long serialVersionUID = -4666251100802237878L; + private final boolean not; private final Field field; private final Field minValue; private final Field maxValue; - BetweenCondition(Field field, Field minValue, Field maxValue) { + BetweenCondition(Field field, Field minValue, Field maxValue, boolean not) { this.field = field; this.minValue = minValue; this.maxValue = maxValue; + this.not = not; } @Override @@ -73,6 +75,7 @@ class BetweenCondition extends AbstractCondition { @Override public final void toSQL(RenderContext context) { context.sql(field) + .sql(not ? " not" : "") .sql(" between ") .sql(minValue) .sql(" and ") diff --git a/jOOQ/src/test/java/org/jooq/test/jOOQTest.java b/jOOQ/src/test/java/org/jooq/test/jOOQTest.java index 7736aa7828..d579497c65 100644 --- a/jOOQ/src/test/java/org/jooq/test/jOOQTest.java +++ b/jOOQ/src/test/java/org/jooq/test/jOOQTest.java @@ -631,6 +631,10 @@ public class jOOQTest { assertEquals("\"TABLE1\".\"ID1\" between 1 and 10", r_refI().render(c)); assertEquals("\"TABLE1\".\"ID1\" between ? and ?", r_ref().render(c)); + c = FIELD_ID1.notBetween(1, 10); + assertEquals("\"TABLE1\".\"ID1\" not between 1 and 10", r_refI().render(c)); + assertEquals("\"TABLE1\".\"ID1\" not between ? and ?", r_ref().render(c)); + context.checking(new Expectations() {{ oneOf(statement).setInt(1, 1); oneOf(statement).setInt(2, 10);