/** * Shorthand for {@link QueryBuilder#build() build()}.{@link Query#uniqueOrThrow() uniqueOrThrow()}; see * {@link Query#uniqueOrThrow()} for details. To execute a query more than once, you should build the query and * keep * the {@link Query} object for efficiency reasons. */ public T uniqueOrThrow() { return build().uniqueOrThrow(); }
public void testJoinOfJoin() { prepareData(); List<RelationEntity> relationEntities = relationEntityDao.loadAll(); relationEntities.get(2).setParent(relationEntities.get(4)); relationEntities.get(3).setParent(relationEntities.get(5)); relationEntities.get(7).setParent(relationEntities.get(5)); relationEntityDao.updateInTx(relationEntities); QueryBuilder<RelationEntity> queryBuilder = relationEntityDao.queryBuilder(); Join<RelationEntity, RelationEntity> join1 = queryBuilder.join(RelationEntityDao.Properties.ParentId, RelationEntity.class); queryBuilder.join(join1, RelationEntityDao.Properties.TestIdNotNull, TestEntity.class, Properties.Id) .where(Properties.SimpleInt.lt(6)); Query<RelationEntity> query = queryBuilder.build(); RelationEntity entity = query.uniqueOrThrow(); assertEquals(relationEntities.get(2).getSimpleString(), entity.getSimpleString()); query.setParameter(0, 99); assertEquals(3, query.list().size()); }
public void testJoinSimpleParameterValue() { prepareData(); QueryBuilder<RelationEntity> queryBuilder = createQueryBuilder(-1); Query<RelationEntity> query = queryBuilder.build(); for (int i = 0; i < 10; i++) { query.setParameter(0, i + 1); RelationEntity unique = query.uniqueOrThrow(); assertEquals("entity-" + (i + 1), unique.getSimpleString()); } }
public void testLike() { TestEntity entity = insert(3).get(1); entity.setSimpleString("greenrobot"); dao.update(entity); Query<TestEntity> query = dao.queryBuilder().where(Properties.SimpleString.like("%robot")).build(); TestEntity entity2 = query.uniqueOrThrow(); assertEquals(entity.getId(), entity2.getId()); query.setParameter(0, "green%"); entity2 = query.uniqueOrThrow(); assertEquals(entity.getId(), entity2.getId()); query.setParameter(0, "%enrob%"); entity2 = query.uniqueOrThrow(); assertEquals(entity.getId(), entity2.getId()); query.setParameter(0, "%nothere%"); entity2 = query.unique(); assertNull(entity2); }
public void testDistinct() { TestEntity entity = insert(3).get(1); Query<TestEntity> query = dao.queryBuilder().distinct() .where(Properties.SimpleString.eq(entity.getSimpleString())).build(); TestEntity entity2 = query.uniqueOrThrow(); assertEquals(entity.getId(), entity2.getId()); // TODO improve test to check functionality }
public void testEqDate() { ArrayList<TestEntity> inserted = insert(3); TestEntity testEntity = inserted.get(1); Date date = new Date(); testEntity.setSimpleDate(date); dao.update(testEntity); Query<TestEntity> queryDate = dao.queryBuilder().where(Properties.SimpleDate.eq(date)).build(); TestEntity testEntity2 = queryDate.uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); queryDate.setParameter(0, date); testEntity2 = queryDate.uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); testEntity2 = dao.queryBuilder().where(Properties.SimpleDate.eq(date.getTime())).uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); }
public void testEqByteArray() { ArrayList<TestEntity> inserted = insert(3); TestEntity testEntity = inserted.get(1); byte[] byteArray = {96, 77, 37, -21}; testEntity.setSimpleByteArray(byteArray); dao.update(testEntity); // Unsupported: Query<TestEntity> query = dao.queryBuilder().where(Properties.SimpleByteArray.eq(byteArray)).build(); // Works, but probably voids any index on BLOBs (Note: there's no hex2blob function and X'?' is bad syntax): // String conditionString = "HEX(" + Properties.SimpleByteArray.columnName + ")=?"; // WhereCondition condition = new WhereCondition.StringCondition(conditionString, SqlUtils.toHex(byteArray)); String conditionString = Properties.SimpleByteArray.columnName + '=' + SqlUtils.escapeBlobArgument(byteArray); WhereCondition condition = new WhereCondition.StringCondition(conditionString); Query<TestEntity> query = dao.queryBuilder().where(condition).build(); TestEntity testEntity2 = query.uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); // Unsupported: query.setParameter(0, new byte[]{96, 77, 37, -21, 99}); // Unsupported: assertNull(query.unique()); }
public void testGetForCurrentThread_TwoThreads() throws InterruptedException { insert(3); createQueryFromOtherThread(); Query<TestEntity> query = queryFromOtherThread.forCurrentThread(); assertNotSame(queryFromOtherThread, query); query.setLimit(10); query.setOffset(0); assertEquals(getSimpleInteger(1), (int) query.uniqueOrThrow().getSimpleInteger()); int expected = getSimpleInteger(2); query.setParameter(0, expected); assertEquals(expected, (int) query.list().get(0).getSimpleInteger()); assertEquals(expected, (int) query.listLazy().get(0).getSimpleInteger()); assertEquals(expected, (int) query.listLazyUncached().get(0).getSimpleInteger()); assertEquals(expected, (int) query.unique().getSimpleInteger()); assertEquals(expected, (int) query.uniqueOrThrow().getSimpleInteger()); }
public void testEqBoolean() { ArrayList<TestEntity> inserted = insert(3); TestEntity testEntity = inserted.get(1); testEntity.setSimpleBoolean(true); dao.update(testEntity); Query<TestEntity> queryBoolean = dao.queryBuilder().where(Properties.SimpleBoolean.eq(true)).build(); TestEntity testEntity2 = queryBoolean.uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); queryBoolean.setParameter(0, true); testEntity2 = queryBoolean.uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); testEntity2 = dao.queryBuilder().where(Properties.SimpleBoolean.eq(Boolean.TRUE)).uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); testEntity2 = dao.queryBuilder().where(Properties.SimpleBoolean.eq("TRUE")).uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); testEntity2 = dao.queryBuilder().where(Properties.SimpleBoolean.eq("truE")).uniqueOrThrow(); assertEquals(testEntity.getId(), testEntity2.getId()); }
queryFromOtherThread.uniqueOrThrow(); fail("Did not throw"); } catch (DaoException expected) {
/** * Shorthand for {@link QueryBuilder#build() build()}.{@link Query#uniqueOrThrow() uniqueOrThrow()}; see * {@link Query#uniqueOrThrow()} for details. To execute a query more than once, you should build the query and * keep * the {@link Query} object for efficiency reasons. */ public T uniqueOrThrow() { return build().uniqueOrThrow(); }