From da0a7a62a940a270b0bee2c70ba1c118d23bd001 Mon Sep 17 00:00:00 2001 From: RoyMontoya Date: Mon, 19 Oct 2015 17:58:59 -0700 Subject: [PATCH 1/2] added test --- .../src/main/java/com/orm/query/Select.java | 59 +++++++++++-------- .../test/java/com/orm/query/SelectTest.java | 30 +++++++++- 2 files changed, 64 insertions(+), 25 deletions(-) diff --git a/library/src/main/java/com/orm/query/Select.java b/library/src/main/java/com/orm/query/Select.java index 9c52a9b4..3275c7bb 100644 --- a/library/src/main/java/com/orm/query/Select.java +++ b/library/src/main/java/com/orm/query/Select.java @@ -1,5 +1,7 @@ package com.orm.query; +import android.database.sqlite.SQLiteQueryBuilder; + import com.orm.SugarRecord; import com.orm.util.NamingHelper; @@ -12,10 +14,10 @@ public class Select implements Iterable { private Class record; private String[] arguments; private String whereClause = ""; - private String orderBy; - private String groupBy; - private String limit; - private String offset; + private String orderBy = ""; + private String groupBy = ""; + private String limit = ""; + private String offset = ""; private List args = new ArrayList(); public Select(Class record) { @@ -41,6 +43,11 @@ public Select limit(String limit) { return this; } + public Select offset(String offset) { + this.offset = offset; + return this; + } + public Select where(String whereClause) { this.whereClause = whereClause; return this; @@ -63,25 +70,25 @@ private void mergeConditions(Condition[] conditions, Condition.Type type) { if (Condition.Check.LIKE.equals(condition.getCheck()) || Condition.Check.NOT_LIKE.equals(condition.getCheck())) { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()) - .append("'") - .append(condition.getValue().toString()) - .append("'"); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()) + .append("'") + .append(condition.getValue().toString()) + .append("'"); } else if (Condition.Check.IS_NULL.equals(condition.getCheck()) || Condition.Check.IS_NOT_NULL.equals(condition.getCheck())) { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()); } else { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()) - .append("? "); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()) + .append("? "); args.add(condition.getValue()); } } - + if (!"".equals(whereClause)) { whereClause += " " + type.name() + " "; } @@ -117,12 +124,12 @@ public List list() { return SugarRecord.find(record, whereClause, arguments, groupBy, orderBy, limit); } - + public long count() { if (arguments == null) { arguments = convertArgs(args); } - + return SugarRecord.count(record, whereClause, arguments, groupBy, orderBy, limit); } @@ -134,24 +141,28 @@ public T first() { List list = SugarRecord.find(record, whereClause, arguments, groupBy, orderBy, "1"); return list.size() > 0 ? list.get(0) : null; } - + String toSql() { StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM ").append(NamingHelper.toSQLName(this.record)).append(" "); - if (whereClause != null) { + if (!whereClause.isEmpty()) { sql.append("WHERE ").append(whereClause).append(" "); } - if (orderBy != null) { + if (!orderBy.isEmpty()) { sql.append("ORDER BY ").append(orderBy).append(" "); } - if (limit != null) { + if (!groupBy.isEmpty()) { + sql.append("GROUP BY ").append(groupBy).append(" "); + } + + if (!limit.isEmpty()) { sql.append("LIMIT ").append(limit).append(" "); } - if (offset != null) { + if (!offset.isEmpty()) { sql.append("OFFSET ").append(offset).append(" "); } @@ -170,7 +181,7 @@ private String[] convertArgs(List argsList) { String[] argsArray = new String[argsList.size()]; for (int i = 0; i < argsList.size(); i++) { - argsArray[i] = argsList.get(i).toString(); + argsArray[i] = argsList.get(i).toString(); } return argsArray; @@ -185,4 +196,4 @@ public Iterator iterator() { return SugarRecord.findAsIterator(record, whereClause, arguments, groupBy, orderBy, limit); } -} +} \ No newline at end of file diff --git a/library/src/test/java/com/orm/query/SelectTest.java b/library/src/test/java/com/orm/query/SelectTest.java index 3ab345ae..372f0a5d 100644 --- a/library/src/test/java/com/orm/query/SelectTest.java +++ b/library/src/test/java/com/orm/query/SelectTest.java @@ -35,6 +35,34 @@ public void testWhere(){ assertEquals("2", where.getArgs()[1]); } + @Test + public void toSqlAllClauses(){ + String toSql = Select.from(TestRecord.class) + .where("test") + .groupBy("test") + .orderBy("test") + .limit("test") + .offset("test") + .toSql(); + assertEquals("SELECT * FROM TEST_RECORD WHERE test ORDER BY test GROUP BY test LIMIT test OFFSET test ", toSql); + } + + @Test + public void toSqlNoClauses(){ + String toSql = Select.from(TestRecord.class) + .toSql(); + assertEquals("SELECT * FROM TEST_RECORD ", toSql); + } + + @Test + public void toSqlWhereLimitClauses(){ + String toSql = Select.from(TestRecord.class) + .where("test") + .limit("test") + .toSql(); + assertEquals("SELECT * FROM TEST_RECORD WHERE test LIMIT test ", toSql); + } + @Test public void testWhereOr(){ @@ -101,4 +129,4 @@ public void testIsNotNull() { assertEquals("(test IS NOT NULL )", where.getWhereCond()); assertEquals(0, where.getArgs().length); } -} +} \ No newline at end of file From 3cc5cf1b240b3befdea9531495080fd7b0187ce2 Mon Sep 17 00:00:00 2001 From: RoyMontoya Date: Mon, 19 Oct 2015 18:10:41 -0700 Subject: [PATCH 2/2] format fix --- .../src/main/java/com/orm/query/Select.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/library/src/main/java/com/orm/query/Select.java b/library/src/main/java/com/orm/query/Select.java index 3275c7bb..40f1107b 100644 --- a/library/src/main/java/com/orm/query/Select.java +++ b/library/src/main/java/com/orm/query/Select.java @@ -1,7 +1,5 @@ package com.orm.query; -import android.database.sqlite.SQLiteQueryBuilder; - import com.orm.SugarRecord; import com.orm.util.NamingHelper; @@ -70,21 +68,21 @@ private void mergeConditions(Condition[] conditions, Condition.Type type) { if (Condition.Check.LIKE.equals(condition.getCheck()) || Condition.Check.NOT_LIKE.equals(condition.getCheck())) { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()) - .append("'") - .append(condition.getValue().toString()) - .append("'"); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()) + .append("'") + .append(condition.getValue().toString()) + .append("'"); } else if (Condition.Check.IS_NULL.equals(condition.getCheck()) || Condition.Check.IS_NOT_NULL.equals(condition.getCheck())) { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()); } else { toAppend - .append(condition.getProperty()) - .append(condition.getCheckSymbol()) - .append("? "); + .append(condition.getProperty()) + .append(condition.getCheckSymbol()) + .append("? "); args.add(condition.getValue()); } } @@ -181,7 +179,7 @@ private String[] convertArgs(List argsList) { String[] argsArray = new String[argsList.size()]; for (int i = 0; i < argsList.size(); i++) { - argsArray[i] = argsList.get(i).toString(); + argsArray[i] = argsList.get(i).toString(); } return argsArray; @@ -196,4 +194,4 @@ public Iterator iterator() { return SugarRecord.findAsIterator(record, whereClause, arguments, groupBy, orderBy, limit); } -} \ No newline at end of file +}