@Test public void testVertexQueryWithNestedTermsAggregationOnExtendedData() { graph.defineProperty("name").dataType(String.class).textIndexHint(TextIndexHint.EXACT_MATCH, TextIndexHint.FULL_TEXT).define(); graph.defineProperty("gender").dataType(String.class).textIndexHint(TextIndexHint.EXACT_MATCH).define(); graph.prepareVertex("v1", VISIBILITY_EMPTY) .addExtendedData("t1", "r1", "name", "Joe", VISIBILITY_EMPTY) .addExtendedData("t1", "r1", "gender", "male", VISIBILITY_EMPTY) .addExtendedData("t1", "r2", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r2", "gender", "male", VISIBILITY_EMPTY) .addExtendedData("t1", "r3", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r3", "gender", "female", VISIBILITY_EMPTY) .addExtendedData("t1", "r4", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r4", "gender", "female", VISIBILITY_EMPTY) .save(AUTHORIZATIONS_A_AND_B); graph.flush(); Vertex v1 = graph.getVertex("v1", AUTHORIZATIONS_A_AND_B); Query q = v1.getExtendedData("t1").query(AUTHORIZATIONS_A_AND_B).limit(0); TermsAggregation agg = new TermsAggregation("terms-count", "name"); agg.addNestedAggregation(new TermsAggregation("nested", "gender")); assumeTrue("terms aggregation not supported", q.isAggregationSupported(agg)); q.addAggregation(agg); TermsResult aggregationResult = q.extendedDataRows().getAggregationResult("terms-count", TermsResult.class); Map<Object, Map<Object, Long>> vertexPropertyCountByValue = nestedTermsBucketToMap(aggregationResult.getBuckets(), "nested"); assertEquals(2, vertexPropertyCountByValue.size()); assertEquals(1, vertexPropertyCountByValue.get("Joe").size()); assertEquals(1L, (long) vertexPropertyCountByValue.get("Joe").get("male")); assertEquals(2, vertexPropertyCountByValue.get("Sam").size()); assertEquals(1L, (long) vertexPropertyCountByValue.get("Sam").get("male")); assertEquals(2L, (long) vertexPropertyCountByValue.get("Sam").get("female")); }
assertRowIdsAnyOrder(Lists.newArrayList("row3", "row4", "row5", "row6"), searchResultsList); QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).hasId("v1").extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A).hasId("v1", "v2").extendedDataRows(); assertResultsCount(4, 4, rows); .sort(ExtendedDataRow.TABLE_NAME, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row3", "row4"), searchResultsList); .sort(ExtendedDataRow.ELEMENT_ID, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row1", "row2", "row3", "row4"), searchResultsList); .sort(ExtendedDataRow.ELEMENT_TYPE, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row1", "row2", "row3", "row4"), searchResultsList);
@Test public void testExtendedDataEdgeQuery() { graph.prepareVertex("v1", VISIBILITY_A) .addExtendedData("table1", "row1", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row2", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.prepareVertex("v2", VISIBILITY_A) .addExtendedData("table1", "row3", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row4", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.prepareEdge("e1", "v1", "v2", LABEL_LABEL1, VISIBILITY_A) .addExtendedData("table1", "row5", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row6", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.flush(); Edge e1 = graph.getEdge("e1", AUTHORIZATIONS_A); List<ExtendedDataRow> searchResultsList = toList( getGraph().query("*", AUTHORIZATIONS_A) .hasExtendedData(ElementType.EDGE, e1.getId(), "table1") .extendedDataRows() ); assertRowIdsAnyOrder(Lists.newArrayList("row5", "row6"), searchResultsList); QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).hasId("e1").extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A).hasId("v1", "e1").extendedDataRows(); assertResultsCount(4, 4, rows); }
@Test public void testVertexQueryWithNestedTermsAggregationOnExtendedData() { graph.defineProperty("name").dataType(String.class).textIndexHint(TextIndexHint.EXACT_MATCH, TextIndexHint.FULL_TEXT).define(); graph.defineProperty("gender").dataType(String.class).textIndexHint(TextIndexHint.EXACT_MATCH).define(); graph.prepareVertex("v1", VISIBILITY_EMPTY) .addExtendedData("t1", "r1", "name", "Joe", VISIBILITY_EMPTY) .addExtendedData("t1", "r1", "gender", "male", VISIBILITY_EMPTY) .addExtendedData("t1", "r2", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r2", "gender", "male", VISIBILITY_EMPTY) .addExtendedData("t1", "r3", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r3", "gender", "female", VISIBILITY_EMPTY) .addExtendedData("t1", "r4", "name", "Sam", VISIBILITY_EMPTY) .addExtendedData("t1", "r4", "gender", "female", VISIBILITY_EMPTY) .save(AUTHORIZATIONS_A_AND_B); graph.flush(); Vertex v1 = graph.getVertex("v1", AUTHORIZATIONS_A_AND_B); Query q = v1.getExtendedData("t1").query(AUTHORIZATIONS_A_AND_B).limit(0); TermsAggregation agg = new TermsAggregation("terms-count", "name"); agg.addNestedAggregation(new TermsAggregation("nested", "gender")); assumeTrue("terms aggregation not supported", q.isAggregationSupported(agg)); q.addAggregation(agg); TermsResult aggregationResult = q.extendedDataRows().getAggregationResult("terms-count", TermsResult.class); Map<Object, Map<Object, Long>> vertexPropertyCountByValue = nestedTermsBucketToMap(aggregationResult.getBuckets(), "nested"); assertEquals(2, vertexPropertyCountByValue.size()); assertEquals(1, vertexPropertyCountByValue.get("Joe").size()); assertEquals(1L, (long) vertexPropertyCountByValue.get("Joe").get("male")); assertEquals(2, vertexPropertyCountByValue.get("Sam").size()); assertEquals(1L, (long) vertexPropertyCountByValue.get("Sam").get("male")); assertEquals(2L, (long) vertexPropertyCountByValue.get("Sam").get("female")); }
assumeTrue("terms aggregation not supported", q.isAggregationSupported(agg)); q.addAggregation(agg); QueryResultsIterable<ExtendedDataRow> rows = q.extendedDataRows(); Map<Object, Long> aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(2, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ELEMENT_ID)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(3, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ROW_ID)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(6, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ELEMENT_TYPE)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(2, aggResult.size());
assumeTrue("terms aggregation not supported", q.isAggregationSupported(agg)); q.addAggregation(agg); QueryResultsIterable<ExtendedDataRow> rows = q.extendedDataRows(); Map<Object, Long> aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(2, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ELEMENT_ID)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(3, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ROW_ID)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(6, aggResult.size()); .addAggregation(new TermsAggregation("agg", ExtendedDataRow.ELEMENT_TYPE)) .limit(0L); rows = q.extendedDataRows(); aggResult = termsBucketToMap(rows.getAggregationResult("agg", TermsResult.class).getBuckets()); assertEquals(2, aggResult.size());
assertRowIdsAnyOrder(Lists.newArrayList("row3", "row4", "row5", "row6"), searchResultsList); QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).hasId("v1").extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A).hasId("v1", "v2").extendedDataRows(); assertResultsCount(4, 4, rows); .sort(ExtendedDataRow.TABLE_NAME, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row3", "row4"), searchResultsList); .sort(ExtendedDataRow.ELEMENT_ID, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row1", "row2", "row3", "row4"), searchResultsList); .sort(ExtendedDataRow.ELEMENT_TYPE, SortDirection.ASCENDING) .sort(ExtendedDataRow.ROW_ID, SortDirection.ASCENDING) .extendedDataRows() ); assertRowIds(Lists.newArrayList("row5", "row6", "row1", "row2", "row3", "row4"), searchResultsList);
@Test public void testExtendedDataEdgeQuery() { graph.prepareVertex("v1", VISIBILITY_A) .addExtendedData("table1", "row1", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row2", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.prepareVertex("v2", VISIBILITY_A) .addExtendedData("table1", "row3", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row4", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.prepareEdge("e1", "v1", "v2", LABEL_LABEL1, VISIBILITY_A) .addExtendedData("table1", "row5", "name", "value 1", VISIBILITY_A) .addExtendedData("table1", "row6", "name", "value 2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.flush(); Edge e1 = graph.getEdge("e1", AUTHORIZATIONS_A); List<ExtendedDataRow> searchResultsList = toList( getGraph().query("*", AUTHORIZATIONS_A) .hasExtendedData(ElementType.EDGE, e1.getId(), "table1") .extendedDataRows() ); assertRowIdsAnyOrder(Lists.newArrayList("row5", "row6"), searchResultsList); QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).hasId("e1").extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A).hasId("v1", "e1").extendedDataRows(); assertResultsCount(4, 4, rows); }
@Test public void testAddExtendedDataRows() { graph.prepareVertex("v1", VISIBILITY_A) .addExtendedData("table1", "row1", "name", "value1", VISIBILITY_A) .addExtendedData("table1", "row2", "name", "value2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.flush(); if (graph instanceof GraphWithSearchIndex) { SearchIndex searchIndex = ((GraphWithSearchIndex) graph).getSearchIndex(); searchIndex.truncate(graph); searchIndex.flush(graph); Iterable<ExtendedDataRow> extendedData = graph.getExtendedData(ElementType.VERTEX, "v1", "table1", AUTHORIZATIONS_A); searchIndex.addExtendedData(graph, extendedData, AUTHORIZATIONS_A); graph.flush(); } QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A) .has("name", "value1") .extendedDataRows(); assertResultsCount(1, 1, rows); ExtendedDataRow row = IterableUtils.single(rows); assertEquals("v1", row.getId().getElementId()); assertEquals("table1", row.getId().getTableName()); assertEquals("row1", row.getId().getRowId()); }
@Test public void testAddExtendedDataRows() { graph.prepareVertex("v1", VISIBILITY_A) .addExtendedData("table1", "row1", "name", "value1", VISIBILITY_A) .addExtendedData("table1", "row2", "name", "value2", VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.flush(); if (graph instanceof GraphWithSearchIndex) { SearchIndex searchIndex = ((GraphWithSearchIndex) graph).getSearchIndex(); searchIndex.truncate(graph); searchIndex.flush(graph); Iterable<ExtendedDataRow> extendedData = graph.getExtendedData(ElementType.VERTEX, "v1", "table1", AUTHORIZATIONS_A); searchIndex.addExtendedData(graph, extendedData, AUTHORIZATIONS_A); graph.flush(); } QueryResultsIterable<ExtendedDataRow> rows = graph.query(AUTHORIZATIONS_A).extendedDataRows(); assertResultsCount(2, 2, rows); rows = graph.query(AUTHORIZATIONS_A) .has("name", "value1") .extendedDataRows(); assertResultsCount(1, 1, rows); ExtendedDataRow row = IterableUtils.single(rows); assertEquals("v1", row.getId().getElementId()); assertEquals("table1", row.getId().getTableName()); assertEquals("row1", row.getId().getRowId()); }
assertResultsCount(1, 1, searchResults); results = graph.query(AUTHORIZATIONS_A).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(0, 0, results); assertResultsCount(0, 0, searchResults); results = graph.query(AUTHORIZATIONS_B).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(0, 0, results); assertResultsCount(0, 0, searchResults); results = graph.query(AUTHORIZATIONS_A_AND_B).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(2, 2, results);
assertResultsCount(1, 1, searchResults); results = graph.query(AUTHORIZATIONS_A).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(0, 0, results); assertResultsCount(0, 0, searchResults); results = graph.query(AUTHORIZATIONS_B).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(0, 0, results); assertResultsCount(0, 0, searchResults); results = graph.query(AUTHORIZATIONS_A_AND_B).hasExtendedData(ElementType.VERTEX, "v1").extendedDataRows(); assertResultsCount(2, 2, results);