Skip to content

Commit 3f10bbf

Browse files
authored
Merge pull request #86 from divrsity/Support-db.where().count()
Support db.where().count(), since falling back to db.sql every time feels wrong
2 parents b9ad2fc + a39fb91 commit 3f10bbf

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

src/main/java/com/dieselpoint/norm/Query.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@ public <T> T first(Class<T> clazz) {
109109
}
110110
}
111111

112+
public Long count() {
113+
sql = sqlMaker.getSelectCountSql(this, null);
114+
return first( Long.class );
115+
}
116+
117+
public Long count(Class<?> clazz) {
118+
sql = sqlMaker.getSelectCountSql(this, clazz);
119+
return first( Long.class );
120+
}
121+
112122
/**
113123
* Provides the results as a list of Map objects instead of a list of pojos.
114124
*/

src/main/java/com/dieselpoint/norm/sqlmakers/SqlMaker.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public interface SqlMaker {
2121
public Object[] getUpsertArgs(Query query, Object row);
2222

2323
public String getSelectSql(Query query, Class<?> rowClass);
24+
public String getSelectCountSql(Query query, Class<?> tableClass);
2425

2526
public String getCreateTableSql(Class<?> clazz);
2627

src/main/java/com/dieselpoint/norm/sqlmakers/StandardSqlMaker.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,34 @@ public String getSelectSql(Query query, Class<?> rowClass) {
182182
return out.toString();
183183
}
184184

185+
@Override
186+
public String getSelectCountSql(Query query, Class<?> tableClass) {
187+
188+
// unlike insert and update, this needs to be done dynamically
189+
// and can't be precalculated because of the where and order by
190+
191+
String table = query.getTable();
192+
if (table == null) {
193+
if (tableClass != null) {
194+
StandardPojoInfo pojoInfo = getPojoInfo(tableClass);
195+
table = pojoInfo.table;
196+
}
197+
else {
198+
throw new DbException("You must specify a table name. Use either db.table(\"XXX\").where(...).count(...), or db.where(...).count(Pojoclass.class)" );
199+
}
200+
}
201+
StringBuilder out = new StringBuilder();
202+
out.append("select count(*) from ");
203+
out.append(table);
204+
String where = query.getWhere();
205+
if (where != null) {
206+
out.append(" where ");
207+
out.append(where);
208+
}
209+
return out.toString();
210+
}
211+
212+
185213
@Override
186214
public String getCreateTableSql(Class<?> clazz) {
187215

0 commit comments

Comments
 (0)