@Override public GraphQuery has(String key, Object value) { this.q.has(key, value); hasFilter = true; return this; }
public void deleteProperty(String propertyIri, User user, String workspaceId) { checkDeletePrivileges(user, workspaceId); OntologyProperty property = getPropertyByIRI(propertyIri, workspaceId); if (property != null) { if (property.getSandboxStatus().equals(SandboxStatus.PRIVATE)) { Graph graph = getGraph(); Authorizations authorizations = graph.createAuthorizations(workspaceId); GraphQuery query = graph.query(authorizations); query.has(propertyIri); query.limit(0); long results = query.search().getTotalHits(); if (results == 0) { internalDeleteProperty(property, workspaceId); } else { throw new VisalloException("Unable to delete property that have elements using it"); } } else { throw new VisalloException("Unable to delete published properties"); } } else throw new VisalloResourceNotFoundException("Property not found"); }
@Override public GraphQuery hasNot(String key) { this.q.hasNot(key); hasFilter = true; return this; }
QueryResultsIterable<Vertex> vertices = graph.query(AUTHORIZATIONS_A).vertices(); assertResultsCount(2, 2, vertices); vertices = graph.query(AUTHORIZATIONS_A).skip(1).vertices(); assertResultsCount(1, 2, vertices); vertices = graph.query(AUTHORIZATIONS_A).limit(1).vertices(); assertResultsCount(1, 2, vertices); vertices = graph.query(AUTHORIZATIONS_A).skip(1).limit(1).vertices(); assertResultsCount(1, 2, vertices); vertices = graph.query(AUTHORIZATIONS_A).skip(2).vertices(); assertResultsCount(0, 2, vertices); vertices = graph.query(AUTHORIZATIONS_A).skip(1).limit(2).vertices(); assertResultsCount(1, 2, vertices); QueryResultsIterable<Edge> edges = graph.query(AUTHORIZATIONS_A).edges(); assertResultsCount(2, 2, edges); edges = graph.query(AUTHORIZATIONS_A).hasEdgeLabel(LABEL_LABEL1).edges(); assertResultsCount(1, 1, edges); edges = graph.query(AUTHORIZATIONS_A).hasEdgeLabel(LABEL_LABEL1, LABEL_LABEL2).edges(); assertResultsCount(2, 2, edges); QueryResultsIterable<Element> elements = graph.query(AUTHORIZATIONS_A).elements(); assertResultsCount(4, 4, elements);
QueryResultsIterable<String> idsIterable = graph.query(AUTHORIZATIONS_A).vertexIds(); assertIdsAnyOrder(idsIterable, "v1", "v2", "v3"); assertResultsCount(3, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).skip(1).vertexIds(); assertResultsCount(2, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).limit(1).vertexIds(); assertResultsCount(1, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).skip(1).limit(1).vertexIds(); assertResultsCount(1, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).skip(3).vertexIds(); assertResultsCount(0, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).skip(2).limit(2).vertexIds(); assertResultsCount(1, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).edgeIds(); assertIdsAnyOrder(idsIterable, "e1", "e2"); assertResultsCount(2, 2, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).hasEdgeLabel(LABEL_LABEL1).edgeIds(); assertIdsAnyOrder(idsIterable, "e1"); assertResultsCount(1, 1, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).hasEdgeLabel(LABEL_LABEL1, LABEL_LABEL2).edgeIds(); assertResultsCount(2, 2, idsIterable);
.has(String.class) .vertices(); assertResultsCount(2, vertices); .hasNot(String.class) .vertices(); assertResultsCount(0, vertices); .has(Double.class) .vertices(); fail("Should not allow searching for a dataType that there are no mappings for"); .has(Float.class) .vertices(); assertResultsCount(0, vertices); .hasNot(Float.class) .vertices(); assertResultsCount(2, vertices); .has(Arrays.asList("text3", "unusedStringProp")) .vertices(); assertResultsCount(1, vertices); .hasNot(Arrays.asList("text3", "unusedStringProp")) .vertices(); assertResultsCount(1, vertices); .has(String.class, Compare.EQUAL, "hello")
graph.flush(); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("int", 5).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("double", 5.6).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).range("float", 6.3f, 6.5f).vertices())); // can't search for 6.4f her because of float precision Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("string", "test").vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("byte", 5).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("long", 5).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("boolean", true).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("short", 5).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("date", date).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("bigInteger", BigInteger.valueOf(10)).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("bigInteger", 10).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("bigDecimal", BigDecimal.valueOf(1.1)).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("bigDecimal", 1.1).vertices())); Assert.assertEquals(1, count(graph.query(AUTHORIZATIONS_A).has("geopoint", GeoCompare.WITHIN, new GeoCircle(77, -33, 1)).vertices()));
@Override public GraphQuery limit(int limit) { q.limit(limit); hasFilter = true; return this; }
@Test public void testGraphQueryWithBoolean() { graph.defineProperty("boolean").dataType(Boolean.class).define(); graph.prepareVertex("v1", VISIBILITY_A) .addPropertyValue("k1", "boolean", true, VISIBILITY_A) .save(AUTHORIZATIONS_A); graph.flush(); QueryResultsIterable<Vertex> vertices = graph.query("zzzzz", AUTHORIZATIONS_A).vertices(); assertResultsCount(0, 0, vertices); vertices = graph.query(AUTHORIZATIONS_A).has("boolean", true).vertices(); assertResultsCount(1, 1, vertices); vertices = graph.query(AUTHORIZATIONS_A).has("boolean", false).vertices(); assertResultsCount(0, 0, vertices); }
@Test public void testGraphQuerySortOnPropertyWhichIsFullTextAndExactMatchIndexed() { graph.defineProperty("name") .dataType(String.class) .sortable(true) .textIndexHint(TextIndexHint.EXACT_MATCH, TextIndexHint.FULL_TEXT) .define(); graph.prepareVertex("v1", VISIBILITY_A) .setProperty("name", "1-2", VISIBILITY_A) .save(AUTHORIZATIONS_A_AND_B); graph.prepareVertex("v2", VISIBILITY_A) .setProperty("name", "1-1", VISIBILITY_B) .save(AUTHORIZATIONS_A_AND_B); graph.prepareVertex("v3", VISIBILITY_A) .setProperty("name", "3-1", VISIBILITY_B) .save(AUTHORIZATIONS_A_AND_B); graph.flush(); QueryResultsIterable<Vertex> vertices = graph.query(AUTHORIZATIONS_A_AND_B).sort("name", SortDirection.ASCENDING).vertices(); assertVertexIds(vertices, "v2", "v1", "v3"); vertices = graph.query("3", AUTHORIZATIONS_A_AND_B).vertices(); assertVertexIds(vertices, "v3"); vertices = graph.query("*", AUTHORIZATIONS_A_AND_B) .has("name", Compare.EQUAL, "3-1") .vertices(); assertVertexIds(vertices, "v3"); }
QueryResultsIterable<Vertex> vertices = graph.query(AUTHORIZATIONS_A).vertices(FetchHints.ALL); assertResultsCount(2, vertices); assertVertexIdsAnyOrder(vertices, v2.getId(), v3.getId()); QueryResultsIterable<String> vertexIds = graph.query(AUTHORIZATIONS_A).vertexIds(IdFetchHint.NONE); assertResultsCount(2, 2, vertexIds); assertIdsAnyOrder(vertexIds, v2.getId(), v3.getId()); vertexIds = graph.query(AUTHORIZATIONS_A).vertexIds(); assertResultsCount(2, 2, vertexIds); assertIdsAnyOrder(vertexIds, v2.getId(), v3.getId()); vertices = graph.query(AUTHORIZATIONS_A).vertices(FetchHints.ALL_INCLUDING_HIDDEN); assertResultsCount(3, vertices); assertVertexIdsAnyOrder(vertices, v1.getId(), v2.getId(), v3.getId()); vertexIds = graph.query(AUTHORIZATIONS_A).vertexIds(IdFetchHint.ALL_INCLUDING_HIDDEN); assertResultsCount(3, 3, vertexIds); assertIdsAnyOrder(vertexIds, v1.getId(), v2.getId(), v3.getId()); QueryResultsIterable<Edge> edges = graph.query(AUTHORIZATIONS_A).edges(FetchHints.ALL); assertResultsCount(1, edges); assertEdgeIdsAnyOrder(edges, e2.getId()); QueryResultsIterable<String> edgeIds = graph.query(AUTHORIZATIONS_A).edgeIds(IdFetchHint.NONE); assertResultsCount(1, 1, edgeIds); assertIdsAnyOrder(edgeIds, e2.getId()); edgeIds = graph.query(AUTHORIZATIONS_A).edgeIds();
.has(dateColumnName, date1) .sort(dateColumnName, SortDirection.ASCENDING) .vertices(); .has(dateColumnName, date1) .sort(dateColumnName, SortDirection.ASCENDING) .search(); .search(); assertEquals(2, searchResults.getTotalHits()); searchResultsList = toList(searchResults); .hasExtendedData(ElementType.VERTEX, "v1", tableName) .search(); assertEquals(2, searchResults.getTotalHits()); .hasExtendedData(tableName) .search(); assertEquals(2, searchResults.getTotalHits());
GraphQuery query = graph.query(authorizations); addEdgeLabelFilterToQuery(query, relationshipIri, false, workspaceId); query.limit(0); long results = query.search().getTotalHits(); if (results == 0) { List<OntologyProperty> removeProperties = relationship.getProperties().stream().filter(ontologyProperty ->
.has("date", date1) .edges(); assertEquals(0, queryResults.getTotalHits()); .has("date", date1) .search(); assertEquals(1, searchResults.getTotalHits()); .has("name", "value 1") .search(); assertEquals(1, searchResults.getTotalHits()); .has("name", TextPredicate.CONTAINS, "value") .search(); assertEquals(2, searchResults.getTotalHits()); .search(); assertEquals(2, searchResults.getTotalHits()); searchResultsList = toList(searchResults);
.sort(Element.ID_PROPERTY_NAME, SortDirection.ASCENDING) .skip(0) .limit(1) .sort(Element.ID_PROPERTY_NAME, SortDirection.ASCENDING) .skip(1) .limit(1) .sort(Element.ID_PROPERTY_NAME, SortDirection.ASCENDING) .skip(2) .limit(1) assertIdsAnyOrder(idsIterable, "v3"); idsIterable = graph.query(AUTHORIZATIONS_A).sort(namePropertyName, SortDirection.ASCENDING).vertexIds(); assertResultsCount(3, 3, idsIterable); idsIterable = graph.query(AUTHORIZATIONS_A).limit((Long) null).vertexIds(); assertResultsCount(3, 3, idsIterable); .sort(namePropertyName, SortDirection.ASCENDING) .skip(0) .limit(1)
@Test public void testLimitingNumberOfQueryStringTerms() { graph.prepareVertex("v1", VISIBILITY_A).setProperty("prop1", "value1", VISIBILITY_A).save(AUTHORIZATIONS_A); graph.flush(); StringBuilder q = new StringBuilder(); for (int i = 0; i < getSearchIndex().getConfig().getMaxQueryStringTerms(); i++) { q.append("jeff").append(i).append(" "); } // should succeed graph.query(q.toString(), AUTHORIZATIONS_A).search().getTotalHits(); try { q.append("done"); graph.query(q.toString(), AUTHORIZATIONS_A).search().getTotalHits(); fail("Exceeding max query terms should have thrown an exception"); } catch (VertexiumException e) { // expected } }
@Test public void testQueryExecutionCountWhenPaging() { graph.prepareVertex("v1", VISIBILITY_A).save(AUTHORIZATIONS_A); graph.addVertex("v2", VISIBILITY_A, AUTHORIZATIONS_A); graph.flush(); long startingNumQueries = getNumQueries(); QueryResultsIterable<Vertex> vertices = graph.query(AUTHORIZATIONS_A).vertices(); assertEquals(startingNumQueries, getNumQueries()); assertResultsCount(2, 2, vertices); assertEquals(startingNumQueries + 2, getNumQueries()); vertices = graph.query(AUTHORIZATIONS_A).limit(1).vertices(); assertEquals(startingNumQueries + 4, getNumQueries()); assertResultsCount(1, 2, vertices); assertEquals(startingNumQueries + 4, getNumQueries()); vertices = graph.query(AUTHORIZATIONS_A).limit(10).vertices(); assertEquals(startingNumQueries + 6, getNumQueries()); assertResultsCount(2, 2, vertices); assertEquals(startingNumQueries + 6, getNumQueries()); }
@Override public Iterable<Vertex> vertices() { if (!hasFilter) { return VertexiumBlueprintsConvert.toBlueprintsVertices(graph, graph.getGraph().getVertices(graph.getFetchHints(), authorizations), authorizations); } Iterable<org.vertexium.Vertex> vertices = q.vertices(graph.getFetchHints()); return VertexiumBlueprintsConvert.toBlueprintsVertices(graph, vertices, authorizations); } }
@Test public void testGraphQueryWithQueryStringWithAuthorizations() { Vertex v1 = graph.addVertex("v1", VISIBILITY_A, AUTHORIZATIONS_ALL); v1.setProperty("description", "This is vertex 1 - dog.", VISIBILITY_A, AUTHORIZATIONS_ALL); Vertex v2 = graph.addVertex("v2", VISIBILITY_B, AUTHORIZATIONS_ALL); v2.setProperty("description", "This is vertex 2 - cat.", VISIBILITY_B, AUTHORIZATIONS_ALL); Edge e1 = graph.addEdge("e1", v1, v2, LABEL_LABEL1, VISIBILITY_A, AUTHORIZATIONS_A); e1.setProperty("edgeDescription", "This is edge 1 - dog to cat.", VISIBILITY_A, AUTHORIZATIONS_ALL); getGraph().flush(); Iterable<Vertex> vertices = graph.query(AUTHORIZATIONS_A).vertices(); assertEquals(1, count(vertices)); if (isIterableWithTotalHitsSupported(vertices)) { IterableWithTotalHits hits = (IterableWithTotalHits) vertices; assertEquals(1, hits.getTotalHits()); } Iterable<Edge> edges = graph.query(AUTHORIZATIONS_A).edges(); assertEquals(1, count(edges)); }
@Override public Iterable<Edge> edges() { if (!hasFilter) { return VertexiumBlueprintsConvert.toBlueprintsEdges(graph, graph.getGraph().getEdges(graph.getFetchHints(), authorizations), authorizations); } Iterable<org.vertexium.Edge> edges = q.edges(graph.getFetchHints()); return VertexiumBlueprintsConvert.toBlueprintsEdges(graph, edges, authorizations); }