@Test public void testQueryOrder() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("intData", Integer.class)); query.addSort("stringData", Query.SortDirection.DESCENDING); List<Entity> results = service.prepare(query).asList(fetchOption); assertEquals(count, results.size()); int first = new Integer(results.get(0).getProperty("intData").toString()); int last = new Integer(results.get(count - 1).getProperty("intData").toString()); assertTrue(first > last); }
@Test public void testListQuery() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringList", String.class)); query.addProjection(new PropertyProjection("intList", Integer.class)); List<Entity> results = service.prepare(query).asList(fetchOption); // Distinct stringList data 2 * Distinct intList data 3 * entity's count 10 assertEquals(60, results.size()); Entity e = results.get(0); assertEquals(2, e.getProperties().size()); assertTrue(e.getProperties().containsKey("stringList")); assertTrue(e.getProperties().containsKey("intList")); }
@Test(expected = IllegalArgumentException.class) public void testWrongType() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", Integer.class)); service.prepare(query).asIterator(fetchOption).next(); }
@Test public void testProjection() { Query query = new Query(kindName, rootKey); Projection pp = new PropertyProjection("stringData", String.class); assertEquals("stringData", pp.getName()); query.addProjection(pp); assertEquals(1, query.getProjections().size()); pp = new PropertyProjection("intData", Integer.class); query.addProjection(pp); for (Projection p : query.getProjections()) { String pName = p.getName(); assertTrue(pName.endsWith("stringData") || pName.endsWith("intData")); } }
private void checkQueryType(String property, Class<?> type) { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection(property, type)); String sql = "SELECT " + property + " FROM " + kindName + " WHERE __ancestor__ is " + rootKey; assertEquals(sql.toLowerCase(), query.toString().toLowerCase()); List<Entity> results = service.prepare(query).asList(fetchOption); for (Entity e : results) { assertEquals(1, e.getProperties().size()); assertTrue(e.getProperties().containsKey(property)); } }
@Test public void testBasicQuery() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("intData", Integer.class)); String sql = "SELECT stringData, intData FROM " + kindName + " WHERE __ancestor__ is " + rootKey; assertEquals(sql.toLowerCase(), query.toString().toLowerCase()); List<Entity> results = service.prepare(query).asList(fetchOption); assertEquals(count, results.size()); for (Entity e : results) { assertEquals(2, e.getProperties().size()); assertTrue(e.getProperties().containsKey("stringData")); assertTrue(e.getProperties().containsKey("intData")); } }
private void checkQueryWithLimit(int limit) { FetchOptions fo = FetchOptions.Builder.withLimit(limit); Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); List<Entity> results = service.prepare(query).asList(fo); assertEquals(limit, results.size()); } }
@Test public void testQueryFilter() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.setFilter(new FilterPredicate("intData", FilterOperator.NOT_EQUAL, 50)); query.addSort("intData"); List<Entity> results = service.prepare(query).asList(fetchOption); assertEquals(count - 1, results.size()); for (Entity e : results) { assertTrue(e.getProperty("stringData").toString().contains("5") == false); } }
@Test public void testDistinctMix() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setDistinct(true); assertEquals(7, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); // distinct false query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setDistinct(false); assertEquals(count, service.prepare(query).countEntities(fo)); assertFalse(query.getDistinct()); }
@Test public void testCount() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); assertEquals(count, service.prepare(query).countEntities(fetchOption)); }
protected List<Entity> doQuery(String kind, String pName, Class<?> type, boolean indexed) { FetchOptions fo = FetchOptions.Builder.withDefaults(); Query query = new Query(kind, rootKey); if (indexed) { query.addProjection(new PropertyProjection(pName, type)); query.addSort(pName); } return service.prepare(query).asList(fo); }
@Test public void testProjectionQueryOperatingOnlyOnASinglePropertyDoesNotRequireConfiguredIndex() throws Exception { executeQuery(new Query("Unindexed") .addProjection(new PropertyProjection("someProperty", null))); executeQuery(new Query("Unindexed") .addProjection(new PropertyProjection("someProperty", null)) .setFilter(new Query.FilterPredicate("someProperty", GREATER_THAN, "a"))); executeQuery(new Query("Unindexed") .addProjection(new PropertyProjection("someProperty", null)) .setFilter(new Query.FilterPredicate("someProperty", GREATER_THAN, "a")) .addSort("someProperty")); executeQuery(new Query("Unindexed") .addProjection(new PropertyProjection("someProperty", null)) .setFilter(new Query.FilterPredicate("someProperty", GREATER_THAN, "a")) .addSort("someProperty", Query.SortDirection.DESCENDING)); }
@Test public void testDistinctFilter() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setFilter(new FilterPredicate("stringData", Query.FilterOperator.NOT_EQUAL, "string1")); query.addSort("stringData", Query.SortDirection.DESCENDING); query.setDistinct(true); assertEquals(5, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); }
@Test public void testDistinctSort() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("floatData", Float.class)); query.addSort("stringData", Query.SortDirection.DESCENDING); query.setDistinct(true); assertEquals(7, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); query.addSort("floatData", Query.SortDirection.DESCENDING); assertEquals(7, service.prepare(query).countEntities(fo)); }
@Test public void testDistinctStr() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.setDistinct(true); assertTrue(query.getDistinct()); // distinct false query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.setDistinct(false); assertEquals(count, service.prepare(query).countEntities(fo)); assertFalse(query.getDistinct()); }
@Test public void testDistinctFilter2() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("stringData", String.class)); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setFilter(new FilterPredicate("stringData", Query.FilterOperator.GREATER_THAN, "string0")); query.addSort("stringData", Query.SortDirection.DESCENDING); query.addSort("floatData", Query.SortDirection.DESCENDING); query.setDistinct(true); assertEquals(2, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); } }
@Test public void testDistinctNum() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setDistinct(true); assertEquals(4, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("floatData", Float.class)); query.setDistinct(false); assertEquals(count, service.prepare(query).countEntities(fo)); assertFalse(query.getDistinct()); }
@Test public void testProjectionQueryReturnsEntitiesContainingProjectedPropertyEvenIfPropertyValueIsNull() throws Exception { String methodName = "testProjectionQueryOnlyReturnsEntitiesContainingProjectedPropertyEvenIfPropertyValueIsNull"; Entity parent = createTestEntityWithUniqueMethodNameKey("Kind", methodName); Key key = parent.getKey(); Entity e1 = createEntity("Kind", key) .withProperty("foo", null) .store(); Query query = new Query("Kind") .setAncestor(key) .addProjection(new PropertyProjection("foo", String.class)); List<Entity> results = service.prepare(query).asList(withDefaults()); assertEquals(Collections.singletonList(e1), results); }
@Test public void testDistinctList() { Query query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("intList", Integer.class)); query.setDistinct(true); assertEquals("Expecting 24 entities: " + service.prepare(query).asList(fo), 24, service.prepare(query).countEntities(fo)); assertTrue(query.getDistinct()); // distinct false query = new Query(kindName, rootKey); query.addProjection(new PropertyProjection("intList", Integer.class)); query.setDistinct(false); // 3 cols * 30 rows assertEquals(count * 3, service.prepare(query).countEntities(fo)); assertFalse(query.getDistinct()); }
@Test public void testProjectionQueryOnlyReturnsEntitiesContainingProjectedProperty() throws Exception { String methodName = "testProjectionQueryOnlyReturnsEntitiesContainingProjectedProperty"; Entity parent = createTestEntityWithUniqueMethodNameKey("Kind", methodName); Key key = parent.getKey(); Entity e1 = createEntity("Kind", key) .withProperty("foo", "foo") .store(); Entity e2 = createEntity("Kind", key) .withProperty("bar", "bar") .store(); Query query = new Query("Kind") .setAncestor(key) .addProjection(new PropertyProjection("foo", String.class)); List<Entity> results = service.prepare(query).asList(withDefaults()); assertEquals(Collections.singletonList(e1), results); }