/** * Shorthand for {@link QueryBuilder#buildCount() buildCount()}.{@link CountQuery#count() count()}; see * {@link CountQuery#count()} for details. To execute a query more than once, you should build the query and keep * the {@link CountQuery} object for efficiency reasons. */ public long count() { return buildCount().count(); }
@Override protected CountQuery<T2> createQuery() { return new CountQuery<T2>(this, dao, sql, initialValues.clone()); } }
/** Returns the count (number of results matching the query). Uses SELECT COUNT (*) sematics. */ public long count() { checkThread(); Cursor cursor = dao.getDatabase().rawQuery(sql, parameters); try { if (!cursor.moveToNext()) { throw new DaoException("No result for count"); } else if (!cursor.isLast()) { throw new DaoException("Unexpected row count: " + cursor.getCount()); } else if (cursor.getColumnCount() != 1) { throw new DaoException("Unexpected column count: " + cursor.getColumnCount()); } return cursor.getLong(0); } finally { cursor.close(); } }
public void testGetForCurrentThread_TwoThreads() throws InterruptedException { insert(3); createQueryFromOtherThread(); CountQuery<TestEntity> query = queryFromOtherThread.forCurrentThread(); assertNotSame(queryFromOtherThread, query); assertEquals(1, query.count()); query.setParameter(0, -10); assertEquals(0, query.count()); }
public void testCountQueryChangeParameter() { insert(3); String value = "not existing value"; CountQuery<TestEntity> query = dao.queryBuilder().where(Properties.SimpleString.eq(value)).buildCount(); assertEquals(0, query.count()); query.setParameter(0, getSimpleString(1)); assertEquals(1, query.count()); query.setParameter(0, getSimpleString(2)); assertEquals(1, query.count()); query.setParameter(0, "you won't find me either"); assertEquals(0, query.count()); }
static <T2> CountQuery<T2> create(AbstractDao<T2, ?> dao, String sql, Object[] initialValues) { QueryData<T2> queryData = new QueryData<T2>(dao, sql, toStringArray(initialValues)); return queryData.forCurrentThread(); }
/** * Builds a reusable query object for counting rows (Query objects can be executed more efficiently than creating a * QueryBuilder for each execution. */ public CountQuery<T> buildCount() { String tablename = dao.getTablename(); String baseSql = SqlUtils.createSqlSelectCountStar(tablename, tablePrefix); StringBuilder builder = new StringBuilder(baseSql); appendJoinsAndWheres(builder, tablePrefix); String sql = builder.toString(); checkLog(sql); return CountQuery.create(dao, sql, values.toArray()); }
public void testGetForCurrentThread_SameInstance() { CountQuery<TestEntity> query = dao.queryBuilder().buildCount(); assertSame(query, query.forCurrentThread()); }
public void testGetForCurrentThread_ParametersAreReset() { insert(3); int value = getSimpleInteger(1); CountQuery<TestEntity> query = dao.queryBuilder().where(Properties.SimpleInteger.eq(value)).buildCount(); query.setParameter(0, value + 100); assertEquals(0, query.count()); query = query.forCurrentThread(); assertEquals(1, query.count()); }
public void testThrowOutsideOwnerThread() throws InterruptedException { createQueryFromOtherThread(); try { queryFromOtherThread.count(); fail("Did not throw"); } catch (DaoException expected) { } try { queryFromOtherThread.setParameter(0, 42); fail("Did not throw"); } catch (DaoException expected) { } }
static <T2> CountQuery<T2> create(AbstractDao<T2, ?> dao, String sql, Object[] initialValues) { QueryData<T2> queryData = new QueryData<T2>(dao, sql, toStringArray(initialValues)); return queryData.forCurrentThread(); }
/** * Builds a reusable query object for counting rows (Query objects can be executed more efficiently than creating a * QueryBuilder for each execution. */ public CountQuery<T> buildCount() { String tablename = dao.getTablename(); String baseSql = SqlUtils.createSqlSelectCountStar(tablename, tablePrefix); StringBuilder builder = new StringBuilder(baseSql); appendJoinsAndWheres(builder, tablePrefix); String sql = builder.toString(); checkLog(sql); return CountQuery.create(dao, sql, values.toArray()); }
@Test public void testMockitoMocks() { mock(DaoMaster.class).newSession(); mock(DaoSession.class).getDatabase(); mock(Database.class).getRawDatabase(); mock(DatabaseStatement.class).execute(); mock(IdentityScope.class).clear(); mock(AbstractDao.class).queryBuilder(); mock(MinimalEntityDao.class).queryBuilder(); mock(MinimalEntity.class).getId(); mock(Query.class).forCurrentThread(); mock(QueryBuilder.class).build(); mock(CountQuery.class).forCurrentThread(); mock(DeleteQuery.class).forCurrentThread(); mock(Join.class).getTablePrefix(); mock(LazyList.class).getLoadedCount(); mock(WhereCondition.class).appendValuesTo(null); mock(Property.class).isNull(); mock(DaoException.class).getMessage(); }
public void testCountQuerySimple() { int value = getSimpleInteger(1); CountQuery<TestEntity> query = dao.queryBuilder().where(Properties.SimpleInteger.eq(value)).buildCount(); assertEquals(0, query.count()); ArrayList<TestEntity> inserted = insert(3); assertEquals(1, query.count()); inserted.get(2).setSimpleInteger(value); dao.update(inserted.get(2)); assertEquals(2, query.count()); dao.deleteAll(); assertEquals(0, query.count()); }
@Override protected CountQuery<T2> createQuery() { return new CountQuery<T2>(this, dao, sql, initialValues.clone()); } }
/** Returns the count (number of results matching the query). Uses SELECT COUNT (*) sematics. */ public long count() { checkThread(); Cursor cursor = dao.getDatabase().rawQuery(sql, parameters); try { if (!cursor.moveToNext()) { throw new DaoException("No result for count"); } else if (!cursor.isLast()) { throw new DaoException("Unexpected row count: " + cursor.getCount()); } else if (cursor.getColumnCount() != 1) { throw new DaoException("Unexpected column count: " + cursor.getColumnCount()); } return cursor.getLong(0); } finally { cursor.close(); } }
public void testCountQueryTwoParameters() { int value = getSimpleInteger(1); String valueString = getSimpleString(1); QueryBuilder<TestEntity> queryBuilder = dao.queryBuilder(); queryBuilder.where(Properties.SimpleInteger.eq(value), Properties.SimpleString.eq(valueString)); CountQuery<TestEntity> query = queryBuilder.buildCount(); assertEquals(0, query.count()); ArrayList<TestEntity> inserted = insert(3); assertEquals(1, query.count()); inserted.get(2).setSimpleInteger(value); dao.update(inserted.get(2)); assertEquals(1, query.count()); inserted.get(2).setSimpleString(valueString); dao.update(inserted.get(2)); assertEquals(2, query.count()); dao.deleteAll(); assertEquals(0, query.count()); }
public void testCountQueryTwoParametersOr() { int value = getSimpleInteger(1); String valueString = getSimpleString(2); QueryBuilder<TestEntity> queryBuilder = dao.queryBuilder(); queryBuilder.whereOr(Properties.SimpleInteger.eq(value), Properties.SimpleString.eq(valueString)); CountQuery<TestEntity> query = queryBuilder.buildCount(); assertEquals(0, query.count()); ArrayList<TestEntity> inserted = insert(3); assertEquals(2, query.count()); inserted.get(1).setSimpleInteger(getSimpleInteger(2)); dao.update(inserted.get(1)); assertEquals(1, query.count()); inserted.get(2).setSimpleString(getSimpleString(3)); dao.update(inserted.get(2)); assertEquals(0, query.count()); }
public void testBuildQueryAndCountQuery() { insert(3); int value = getSimpleInteger(1); QueryBuilder<TestEntity> builder = dao.queryBuilder().where(Properties.SimpleInteger.eq(value)); Query<TestEntity> query = builder.build(); CountQuery<TestEntity> countQuery = builder.buildCount(); assertEquals(1, query.list().size()); assertEquals(1, countQuery.count()); }
public void testWhereWithSpecialNames() { QueryBuilder<SpecialNamesEntity> queryBuilder = dao.queryBuilder(); queryBuilder.where(Properties.Avg.isNotNull()); queryBuilder.where(Properties.Count.isNotNull()); queryBuilder.where(Properties.Distinct.isNotNull()); queryBuilder.where(Properties.Index.isNotNull()); queryBuilder.where(Properties.Join.isNotNull()); queryBuilder.where(Properties.On.isNotNull()); queryBuilder.where(Properties.Select.isNotNull()); queryBuilder.where(Properties.Sum.isNotNull()); queryBuilder.where(Properties.Order.isNotNull()); queryBuilder.list(); queryBuilder.buildCount().count(); queryBuilder.buildDelete().executeDeleteWithoutDetachingEntities(); }