public StreamableEntityCollection(QueryResult result) { this.result = result; this.size = result.size(); }
private void assertCityIndexes(EntityBag bag, String[] cities, Map<String, Integer> expectedCounts) throws Exception { for(String city : cities) { QueryResult r = bag.find(QueryBuilder.createBuilder().field("city").value(city)).execute(); int expectedCount = expectedCounts.get(city); assertEquals("Counts are unexpected for city: " + city, expectedCount, r.size()); } }
@Test public void testNotEqualsAge() throws Exception { DBSession pojoDb = sessionFactory.createSession(); EntityBag bag = pojoDb.createOrGetBag("inverted"); try { for(int age = 0; age < MAX_AGE; age++) { QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("age").notEquals(age)); long start = System.nanoTime(); long end = System.nanoTime(); long passed = end - start; LOG.info("Query execution took: {}", passed); try (QueryResult result = executor.execute()) { int expected = NUMBER_ENTITIES - ageAmounts.get((long) age); for (Entity entity : result) { assertThat(entity.getValue("age").toString(), not(equalTo(String.valueOf(age)))); } assertThat(result.size(), is((long) expected)); } } } finally { pojoDb.closeSession(); JasDBMain.shutdown(); } }
@Override public <T> List<T> findEntities(Class<T> types, QueryBuilder builder, int start, int limit) throws JasDBStorageException { List<T> entities = new ArrayList<>(); EntityMetadata entityMetadata = ENTITY_MAPPER.getEntityMetadata(types); EntityBag bag = session.getBag(entityMetadata.getBagName()); if(bag != null) { QueryExecutor executor = bag.find(builder); if(start > 0 && limit > 0) { executor.paging(start, limit); } else if(limit > 0) { executor.limit(limit); } QueryResult result = executor.execute(); LOG.debug("Executing Query: {} results: {}", builder, result.size()); for(Entity entity : result) { entities.add(ENTITY_MAPPER.mapFrom(types, entity)); } } return entities; } }
@Test public void testEqualsAgeWithLimiting() throws Exception { DBSession pojoDb = sessionFactory.createSession(); EntityBag bag = pojoDb.createOrGetBag("inverted"); try { int limit = 3; Integer maxAmount = ageAmounts.get((long) 20); assertTrue(maxAmount > 5); QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("age").value(20)); executor.limit(limit); long start = System.nanoTime(); QueryResult result = executor.execute(); long end = System.nanoTime(); long passed = (end - start); LOG.info("Age query took: {} with: {} results", passed, result.size()); List<Entity> entities = aggregateResult(result); assertEquals("There should only be three results", limit, entities.size()); } finally { pojoDb.closeSession(); JasDBMain.shutdown(); } }
@Test public void testCreateAndInsertEntities() throws JasDBException, IOException { DBSession session = sessionFactory.createSession(); session.addInstance(MY_INSTANCE); EntityBag bag = session.createOrGetBag(MY_INSTANCE, BAG_1); bag.addEntity(new SimpleEntity().addProperty("test", "value")); QueryResult result = bag.getEntities(); assertThat(result.size(), is(1l)); Entity entity = result.next(); assertThat(entity, notNullValue()); assertThat(entity.getProperty("test").getFirstValue().toString(), is("value")); }
try (QueryResult result = executor.execute()) { assertNotNull(result); assertEquals("Results for city: '" + city + "' are unexpected", new Long(cityCounters.get(city)), new Long(result.size())); assertNotNull(result); assertEquals("Results for combined cities: '" + firstCity + ", " + secondCity + "' are unexpected", new Long(cityCounters.get(firstCity + "_" + secondCity)), new Long(result.size()));
@Test public void testInsertOrUpdatePersist() throws JasDBException { DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("insertOrUpdateBag"); SimpleEntity entity = new SimpleEntity(); entity.addProperty("Test", "value1"); String id = bag.persist(entity).getInternalId(); assertThat(bag.getEntities().size(), is(1L)); assertThat(bag.getEntity(id).getProperty("Test").getFirstValueObject(), is("value1")); SimpleEntity updatedEntity = new SimpleEntity(id); updatedEntity.addProperty("AnotherProperty", "AnotherValue"); bag.persist(updatedEntity); assertThat(bag.getEntities().size(), is(1L)); assertThat(bag.getEntity(id).getProperty("AnotherProperty").getFirstValueObject(), is("AnotherValue")); }
@Test public void testCompoundKeyQuery() throws Exception { DBSession pojoDb = sessionFactory.createSession(); EntityBag bag = pojoDb.createOrGetBag("inverted"); try { for(String city : SimpleBaseTest.possibleCities) { for(int i=0; i<MAX_AGE; i++) { QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("age").value(i).field("mainCity").value(city)); try (QueryResult result = executor.execute()) { String key = city + "_" + i; if (cityCounters.containsKey(key)) { Long counter = (long) cityCounters.get(city + "_" + i); assertEquals(counter, new Long(result.size())); for (Entity entity : result) { assertEquals((long) i, (long)entity.getProperty("age").getFirstValueObject()); assertEquals(city, entity.getProperty("mainCity").getFirstValueObject()); } } else { assertEquals(new Long(0), new Long(result.size())); } } } } } finally { pojoDb.closeSession(); JasDBMain.shutdown(); } }
@Test public void testMultivaluePagingEqualsOperation() throws Exception { DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("inverted"); try { int start = 0; long lage = (long) (MAX_AGE / 2); int ageSize = ageAmounts.get(lage); int batchSize = ageSize / 4; while(start + batchSize <= ageSize) { int end = start + batchSize; LOG.debug("Starting retrieval of start: {} and end: {} for age: {}", start, end, lage); QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("age").value(lage)); executor.paging(start, batchSize); QueryResult result = executor.execute(); assertEquals("Unexpected query size", batchSize, result.size()); for(Entity entity : result) { String age = entity.getProperty("age").getFirstValueObject().toString(); assertEquals("Unexpected age", String.valueOf(MAX_AGE / 2), age); } start = end; } } finally { session.closeSession(); JasDBMain.shutdown(); } }
@Test public void testInvalidJsonInsert() throws Exception { DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("MySpecialBag"); SimpleEntity entity = new SimpleEntity(); entity.addProperty("title", "Title of my content"); entity.addProperty("text", "Some big piece of text content"); bag.addEntity(entity); QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("text").value("Some big piece of text content")); QueryResult result = executor.execute(); assertThat(result.size(), is(1L)); for(Entity resultEntity : result) { String json = SimpleEntity.toJson(resultEntity); log.info("Output: {}", json); } }
@Test public void testEqualsMultivaluePagingRangeOperationTableScan() throws Exception { int batchSize = 100; DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("inverted"); try { int start = 0; long current = 0; while(start + batchSize <= NUMBER_ENTITIES) { int end = start + batchSize; LOG.debug("Starting retrieval of start: {} and end: {}", start, end); QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("field9").greaterThanOrEquals(0)); executor.paging(start, batchSize); QueryResult result = executor.execute(); assertEquals("Unexpected query size", batchSize, result.size()); for(Entity entity : result) { Property property = entity.getProperty("field9"); Property fProperty = entity.getProperty("field1"); assertEquals("Unexpected value", current, (long) property.getFirstValueObject()); LOG.debug("Field1: {} Field5: {}", fProperty.getFirstValueObject().toString(), property.getFirstValueObject().toString()); current++; } start = end; } } finally { session.closeSession(); JasDBMain.shutdown(); } }
@Test public void testEqualsMultivaluePagingRangeOperation() throws Exception { int batchSize = 100; DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("inverted"); try { int start = 0; long current = 0; while(start + batchSize <= NUMBER_ENTITIES) { int end = start + batchSize; LOG.debug("Starting retrieval of start: {} and end: {}", start, end); QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("field5").greaterThanOrEquals(0)); executor.paging(start, batchSize); try (QueryResult result = executor.execute()) { assertEquals("Unexpected query size", batchSize, result.size()); for (Entity entity : result) { Property property = entity.getProperty("field5"); Property fProperty = entity.getProperty("field1"); assertEquals("Unexpected value", current, (long) property.getFirstValueObject()); LOG.debug("Field1: {} Field5: {}", fProperty.getFirstValueObject().toString(), property.getFirstValueObject().toString()); current++; } } start = end; } } finally { session.closeSession(); JasDBMain.shutdown(); } }
@Test public void testPersistIndexNonUniqueQuery() throws JasDBException, InterruptedException { DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("testbag"); bag.addEntity(new SimpleEntity().addProperty("city", "Amsterdam")); bag.addEntity(new SimpleEntity().addProperty("city", "Amsterdam")); bag.addEntity(new SimpleEntity().addProperty("city", "Rotterdam")); bag.addEntity(new SimpleEntity().addProperty("city", "Utrecht")); bag.addEntity(new SimpleEntity().addProperty("city", "Utrecht")); QueryResult result = bag.find(QueryBuilder.createBuilder().field("city").value("Amsterdam")).execute(); assertThat(result.size(), is(2L)); result.close(); bag.ensureIndex(new SimpleIndexField("city", new StringKeyType()), false); //let's give the index some time to build Thread.sleep(5000); result = bag.find(QueryBuilder.createBuilder().field("city").value("Amsterdam")).execute(); assertThat(result.size(), is(2L)); result.close(); } }
@Test public void testSortDescendingInvalidType() throws Exception { DBSession session = sessionFactory.createSession(); try{ EntityBag bag = session.createOrGetBag("Bag"); SimpleEntity entity = new SimpleEntity(); entity.addProperty("name", "xxx"); entity.addProperty("v", "3"); bag.addEntity(entity); entity = new SimpleEntity(); entity.addProperty("name", 1); entity.addProperty("v", "1"); bag.addEntity(entity); entity = new SimpleEntity(); entity.addProperty("name", "xxx"); entity.addProperty("v", "2"); bag.addEntity(entity); QueryBuilder innerQuery = QueryBuilder.createBuilder(); innerQuery.field("name").value("xxx").sortBy("v", Order.DESCENDING); QueryExecutor executor = bag.find(innerQuery); QueryResult result = executor.execute(); assertThat(result.size(), is(2l)); assertThat(result.next().getValue("v"), is("3")); assertThat(result.next().getValue("v"), is("2")); } finally { JasDBMain.shutdown(); } }
@Test public void testSortByNonExistingField() throws Exception { DBSession session = sessionFactory.createSession(); try{ EntityBag bag = session.createOrGetBag("Bag"); SimpleEntity entity = new SimpleEntity(); entity.addProperty("name", "xxx"); entity.addProperty("v", "1"); bag.addEntity(entity); entity = new SimpleEntity(); entity.addProperty("name", "xxx"); entity.addProperty("v", "2"); bag.addEntity(entity); QueryBuilder innerQuery = QueryBuilder.createBuilder(); innerQuery.field("name").value("xxx").sortBy("_id",Order.DESCENDING).sortBy("id", Order.DESCENDING); QueryExecutor executor = bag.find(innerQuery); QueryResult result = executor.execute(); assertThat(result.size(), is(2l)); } finally { JasDBMain.shutdown(); } }
@Test public void testRangeQuery() throws Exception { DBSession pojoDb = sessionFactory.createSession(); EntityBag bag = pojoDb.createOrGetBag("inverted"); try { QueryExecutor executor = bag.find(QueryBuilder.createBuilder().field("field5").greaterThan(10).field("field5").smallerThan(30)); try (QueryResult result = executor.execute()) { assertEquals(19, result.size()); assertNotNull(result); assertTrue("There should be a result", result.hasNext()); assertResult(11, 18, result); } } finally { pojoDb.closeSession(); JasDBMain.shutdown(); } }
@Test public void testQueryNonExistingProperty() throws Exception { DBSession pojoDb = sessionFactory.createSession(); EntityBag bag = pojoDb.createOrGetBag("thosha"); bag.addEntity(new SimpleEntity("00005442-4961-c49d-0000-013d73bba1f7").addProperty("type", "thing")); bag.addEntity(new SimpleEntity("00005442-4961-c49d-0000-013d73bba1f8").addProperty("type", "thing")); bag.addEntity(new SimpleEntity("00005442-4961-c49d-0000-013dad2eefd2").addProperty("type", "contribution")); bag.addEntity(new SimpleEntity("00005442-4961-c49d-0000-013dd66f0aed").addProperty("type", "contribution")); try { QueryBuilder builder = QueryBuilder.createBuilder(BlockType.AND); builder.addQueryBlock(QueryBuilder.createBuilder().field("NonExistingProperty").value("00005442-4961-c49d-0000-013dad2eefd2")); builder.addQueryBlock(QueryBuilder.createBuilder().field("type").value("contribution")); QueryExecutor executor = bag.find(builder); try (QueryResult result = executor.execute()) { assertThat(result.size(), is(0l)); } } finally { pojoDb.closeSession(); JasDBMain.shutdown(); } }
@Test public void testPersisterRemove() throws Exception { int testSize = 1000; DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("testbag"); bag.ensureIndex(new SimpleIndexField("city", new StringKeyType(100)), false); bag.ensureIndex(new SimpleIndexField("testField", new LongKeyType()), true); Random rnd = new Random(); for(int i=0; i<testSize; i++) { int cityIdx = rnd.nextInt(SimpleBaseTest.possibleCities.length); String city = SimpleBaseTest.possibleCities[cityIdx]; SimpleEntity entity = new SimpleEntity(); entity.addProperty("city", city); entity.addProperty("testField", (long)i); bag.addEntity(entity); } for(String city : SimpleBaseTest.possibleCities) { QueryResult result = bag.find(QueryBuilder.createBuilder().field("city").value(city)).execute(); for(Entity foundEntity : result) { Long testFieldValue = foundEntity.getProperty("testField").getFirstValueObject(); bag.removeEntity(foundEntity); assertFalse("There should no longer be a result", bag.find(QueryBuilder.createBuilder().field("testField").value(testFieldValue)).execute().hasNext()); } result = bag.find(QueryBuilder.createBuilder().field("city").value(city)).execute(); assertEquals("There should no longer be any entity", (long) 0, result.size()); } }
@Test public void testNotEqualsMultiIndexes() throws Exception { try { DBSession session = sessionFactory.createSession(); EntityBag bag = session.createOrGetBag("websites"); bag.ensureIndex(new SimpleIndexField("url", new StringKeyType()), false); bag.ensureIndex( new SimpleCompositeIndexField( new SimpleIndexField("stepid", new StringKeyType()), new SimpleIndexField("workflow", new LongKeyType()) ),false); bag.addEntity(new SimpleEntity().addProperty("url", "").addProperty("stepid", 1L).addProperty("workflow", 1L)); bag.addEntity(new SimpleEntity().addProperty("url", "").addProperty("stepid", 1L).addProperty("workflow", 1L)); bag.addEntity(new SimpleEntity().addProperty("url", "").addProperty("stepid", 1L).addProperty("workflow", 1L)); bag.addEntity(new SimpleEntity().addProperty("url", "http://someurl.nl/1").addProperty("stepid", 1L).addProperty("workflow", 1L)); bag.addEntity(new SimpleEntity().addProperty("url", "http://someurl.nl/2").addProperty("stepid", 1L).addProperty("workflow", 1L)); QueryResult r = bag.find(QueryBuilder.createBuilder() .field("stepid").value(1L) .field("workflow").value(1L) .field("url").notEquals("")).execute(); assertThat(r.size(), is(2L)); } finally { JasDBMain.shutdown(); } }