aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/iciql/Query.java21
-rw-r--r--src/com/iciql/QueryBetween.java35
-rw-r--r--src/com/iciql/QueryCondition.java11
-rw-r--r--tests/com/iciql/test/ModelsTest.java10
4 files changed, 60 insertions, 17 deletions
diff --git a/src/com/iciql/Query.java b/src/com/iciql/Query.java
index d6ee0ef..2d31e8d 100644
--- a/src/com/iciql/Query.java
+++ b/src/com/iciql/Query.java
@@ -367,7 +367,7 @@ public class Query<T> {
stat.appendSQL("?");
addParameter(stat, alias, value);
}
-
+
/**
* INTERNAL
*
@@ -375,19 +375,28 @@ public class Query<T> {
* the statement
* @param alias
* the alias object (can be null)
- * @param value
- * the value
+ * @param valueLeft
+ * the value on the left of the compound clause
+ * @param valueRight
+ * the value on the right of the compound clause
+ * @param compareType
+ * the current compare type (e.g. BETWEEN)
*/
- public void appendSQL(SQLStatement stat, Object alias, Object valueLeft, Object valueRight, CompareType compareType) {
+ public void appendSQL(SQLStatement stat, Object alias, Object valueLeft, Object valueRight,
+ CompareType compareType) {
stat.appendSQL("?");
stat.appendSQL(" ");
- stat.appendSQL("AND");
+ switch (compareType) {
+ case BETWEEN:
+ stat.appendSQL("AND");
+ break;
+ }
stat.appendSQL(" ");
stat.appendSQL("?");
addParameter(stat, alias, valueLeft);
addParameter(stat, alias, valueRight);
}
-
+
private void addParameter(SQLStatement stat, Object alias, Object value) {
if (alias != null && value.getClass().isEnum()) {
SelectColumn<T> col = aliasMap.get(alias);
diff --git a/src/com/iciql/QueryBetween.java b/src/com/iciql/QueryBetween.java
new file mode 100644
index 0000000..26ac40e
--- /dev/null
+++ b/src/com/iciql/QueryBetween.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2011 James Moger.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.iciql;
+
+public class QueryBetween<T, A> {
+
+ private Query<T> query;
+ private A x;
+ private A y;
+
+ public QueryBetween(Query<T> query, A x, A y) {
+ this.query = query;
+ this.x = x;
+ this.y = y;
+ }
+
+ public QueryWhere<T> and(A z) {
+ query.addConditionToken(new Condition<A>(x, y, z, CompareType.BETWEEN));
+ return new QueryWhere<T>(query);
+ }
+}
diff --git a/src/com/iciql/QueryCondition.java b/src/com/iciql/QueryCondition.java
index efaccb6..583f26d 100644
--- a/src/com/iciql/QueryCondition.java
+++ b/src/com/iciql/QueryCondition.java
@@ -45,7 +45,7 @@ public class QueryCondition<T, A> {
query.addConditionToken(new Condition<A>(x, y, CompareType.NOT_EQUAL));
return new QueryWhere<T>(query);
}
-
+
public QueryWhere<T> isNull() {
query.addConditionToken(new Condition<A>(x, null, CompareType.IS_NULL));
return new QueryWhere<T>(query);
@@ -75,12 +75,11 @@ public class QueryCondition<T, A> {
query.addConditionToken(new Condition<A>(x, y, CompareType.AT_MOST));
return new QueryWhere<T>(query);
}
-
- public QueryWhere<T> between(A y, A z) {
- query.addConditionToken(new Condition<A>(x, y, z, CompareType.BETWEEN));
- return new QueryWhere<T>(query);
+
+ public QueryBetween<T, A> between(A y) {
+ return new QueryBetween<T, A>(query, x, y);
}
-
+
public QueryWhere<T> like(A pattern) {
query.addConditionToken(new Condition<A>(x, pattern, CompareType.LIKE));
return new QueryWhere<T>(query);
diff --git a/tests/com/iciql/test/ModelsTest.java b/tests/com/iciql/test/ModelsTest.java
index c529012..0caae4b 100644
--- a/tests/com/iciql/test/ModelsTest.java
+++ b/tests/com/iciql/test/ModelsTest.java
@@ -131,13 +131,13 @@ public class ModelsTest {
List<EnumModels> list = db.from(e).where(e.tree()).atLeast(Tree.BIRCH).select();
assertEquals(3, list.size());
-
+
// between is an int compare
- list = db.from(e).where(e.tree()).between(Tree.BIRCH, Tree.WALNUT).select();
+ list = db.from(e).where(e.tree()).between(Tree.BIRCH).and(Tree.WALNUT).select();
assertEquals(2, list.size());
}
-
+
private void testStringEnums(EnumModels e, List<?> models) {
db.insertAll(models);
@@ -148,9 +148,9 @@ public class ModelsTest {
List<EnumModels> list = db.from(e).where(e.tree()).isNot(Tree.BIRCH).select();
assertEquals(models.size() - 1, list.size());
-
+
// between is a string compare
- list = db.from(e).where(e.tree()).between(Tree.MAPLE, Tree.PINE).select();
+ list = db.from(e).where(e.tree()).between(Tree.MAPLE).and(Tree.PINE).select();
assertEquals(3, list.size());
}