return new OrP((List<P>) value); case "between": return P.between(((List) value).get(0), ((List) value).get(1)); case "inside": return P.inside(((List) value).get(0), ((List) value).get(1));
else if (value instanceof Collection) { if (predicate.equals("between")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("inside")) return P.inside(((List) value).get(0), ((List) value).get(1));
else if (value instanceof Collection) { if (predicate.equals("between")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("inside")) return P.inside(((List) value).get(0), ((List) value).get(1));
if (value instanceof Collection) { if (predicate.equals("between")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("inside")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("outside")) return P.outside(((List) value).get(0), ((List) value).get(1));
if (value instanceof Collection) { if (predicate.equals("between")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("inside")) return P.between(((List) value).get(0), ((List) value).get(1)); else if (predicate.equals("outside")) return P.outside(((List) value).get(0), ((List) value).get(1));
assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * numV, 2, gts.V().has("id", sid).values("names"), TitanGraphStep.class, TitanPropertiesStep.class); t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)).profile(); assertCount(superV * 10, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get();
@Test public void testQueryByRangeIndexWithLimitAndOffset() { initPersonIndex(false); init5Persons(); List<Vertex> vertices = graph().traversal().V() .has("age", P.between(5, 22)).toList(); Assert.assertEquals(4, vertices.size()); List<Vertex> vertices1 = graph().traversal().V() .has("age", P.between(5, 22)) .range(0, 3).toList(); Assert.assertEquals(3, vertices1.size()); List<Vertex> vertices2 = graph().traversal().V() .has("age", P.between(5, 22)) .range(3, 4).toList(); Assert.assertEquals(1, vertices2.size()); vertices1.addAll(vertices2); Assert.assertEquals(vertices.size(), vertices1.size()); Assert.assertTrue(vertices.containsAll(vertices1)); }
assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), JanusGraphStep.class, JanusGraphVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), JanusGraphStep.class, JanusGraphVertexStep.class); assertNumStep(superV * 10, 1, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), JanusGraphStep.class); assertNumStep(superV * 10, 0, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), LocalStep.class); clopen(option(USE_MULTIQUERY), true); gts = graph.traversal(); assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), JanusGraphStep.class, JanusGraphVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), JanusGraphStep.class, JanusGraphVertexStep.class); assertNumStep(superV * 10, 1, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), JanusGraphStep.class); assertNumStep(superV * 10, 0, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), LocalStep.class); assertNumStep(superV * numV, 2, gts.V().has("id", sid).values("names"), JanusGraphStep.class, JanusGraphPropertiesStep.class); t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)).profile("~metrics"); assertCount(superV * 10, t); metrics = t.asAdmin().getSideEffects().get("~metrics");
@Test public void testQueryByIntPropUsingBetweenWithNonResult() { Assume.assumeTrue("Not support range condition query", storeFeatures().supportsQueryWithRangeCondition()); HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); // 4 <= age && age < 19 List<Vertex> vertexes = graph.traversal().V() .hasLabel("person") .has("age", P.between(4, 19)) .toList(); Assert.assertEquals(0, vertexes.size()); // 3 <= age && age < 3 vertexes = graph.traversal().V() .hasLabel("person").has("age", P.between(3, 3)) .toList(); Assert.assertEquals(0, vertexes.size()); // 21 <= age && age < 20 vertexes = graph.traversal().V() .hasLabel("person").has("age", P.between(21, 20)) .toList(); Assert.assertEquals(0, vertexes.size()); }
@Test public void testQueryByIntPropUsingBetweenWithMultiResults() { Assume.assumeTrue("Not support range condition query", storeFeatures().supportsQueryWithRangeCondition()); HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); // 19 <= age && age < 21 List<Vertex> vertexes = graph.traversal().V() .hasLabel("person") .has("age", P.between(19, 21)) .toList(); Assert.assertEquals(3, vertexes.size()); // 3 <= age && age < 21 vertexes = graph.traversal().V() .hasLabel("person").has("age", P.between(3, 21)) .toList(); Assert.assertEquals(4, vertexes.size()); }
@Test public void testQueryByIntPropUsingBetweenWithOneResult() { Assume.assumeTrue("Not support range condition query", storeFeatures().supportsQueryWithRangeCondition()); HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); // 3 <= age && age < 19 (that's age == 3) List<Vertex> vertexes = graph.traversal().V() .hasLabel("person") .has("age", P.between(3, 19)) .toList(); Assert.assertEquals(1, vertexes.size()); }
@Test public void testQueryWithMultiLayerConditions() { HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); List<Object> vertices = graph.traversal().V().hasLabel("person").has( "age", P.not(P.lte(10).and(P.not(P.between(11, 20)))) .and(P.lt(29).or(P.eq(35)).or(P.gt(45))) ).values("name").toList(); Assert.assertEquals(4, vertices.size()); Set<String> names = ImmutableSet.of("Hebe", "James", "Tom Cat", "Lisa"); for (Object name : vertices) { Assert.assertTrue(names.contains(name)); } }
@Override public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name() { return g.V().hasLabel("person").has("age", P.not(P.lte(10).and(P.not(P.between(11, 20)))).and(P.lt(29).or(P.eq(35)))).values("name"); }
@Test public void testQueryByDatePropertyInString() { HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); List<Vertex> vertices = null; String[] dates = new String[]{ "2012-01-01 00:00:00.000", "2013-01-01 00:00:00.000", "2014-01-01 00:00:00.000", "2015-01-01 00:00:00.000", "2016-01-01 00:00:00.000" }; vertices = graph.traversal().V().hasLabel("person") .has("birth", dates[0]) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[0]), vertices.get(0).value("birth")); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.gt(dates[0])) .toList(); Assert.assertEquals(4, vertices.size()); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.between(dates[3], dates[4])) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[3]), vertices.get(0).value("birth")); }
@Test public void testQueryByDatePropertyInMultiFormatString() { HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); List<Vertex> vertices = null; String[] dates = new String[]{ "2012-01-01", "2013-01-01 00:00:00.000", "2014-01-01 00:00:00.000", "2015-01-01 00:00:00", "2016-01-01 00:00:00.000" }; vertices = graph.traversal().V().hasLabel("person") .has("birth", dates[0]) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[0]), vertices.get(0).value("birth")); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.gt(dates[0])) .toList(); Assert.assertEquals(4, vertices.size()); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.between(dates[3], dates[4])) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[3]), vertices.get(0).value("birth")); }
@Test public void testQueryByDateProperty() { HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); List<Vertex> vertices = null; Date[] dates = new Date[]{ Utils.date("2012-01-01 00:00:00.000"), Utils.date("2013-01-01 00:00:00.000"), Utils.date("2014-01-01 00:00:00.000"), Utils.date("2015-01-01 00:00:00.000"), Utils.date("2016-01-01 00:00:00.000") }; vertices = graph.traversal().V().hasLabel("person") .has("birth", dates[0]) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(dates[0], vertices.get(0).value("birth")); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.gt(dates[0])) .toList(); Assert.assertEquals(4, vertices.size()); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.between(dates[3], dates[4])) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(dates[3], vertices.get(0).value("birth")); }
.has("date", P.between(dates[0], dates[2])) .toList(); Assert.assertEquals(2, edges.size());
.has("date", P.between(dates[1], dates[2])) .toList(); Assert.assertEquals(1, edges.size());
.has("date", P.between(dates[1], dates[2])) .toList(); Assert.assertEquals(1, edges.size());
.has("date", P.between(dates[1], dates[2])) .toList(); Assert.assertEquals(1, edges.size());