Skip to content

Commit

Permalink
[s1ck#49] implemented succeeds
Browse files Browse the repository at this point in the history
  • Loading branch information
lc0197 committed Apr 29, 2020
1 parent a0cf42c commit 1b3e6f9
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/main/antlr4/org/s1ck/gdl/GDL.g4
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ intervalFunc
| fromToOperator
| betweenOperator
| precedesOperator
| succeedsOperator
;
overlapsIntervallOperator
: 'overlaps(' interval ')'
Expand All @@ -202,11 +203,16 @@ precedesOperator
: 'precedes(' interval ')'
;

succeedsOperator
: 'succeeds(' interval ')'
;

stampFunc
: beforePointOperator
| afterPointOperator
| asOfOperator
| precedesOperator
| succeedsOperator
;

beforePointOperator
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/org/s1ck/gdl/GDLLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,9 @@ else if(intervalFunc.betweenOperator()!=null){
else if(intervalFunc.precedesOperator()!=null){
return createPrecedesPredicates(to, intervalFunc.precedesOperator());
}
else if(intervalFunc.succeedsOperator()!=null){
return createSucceedsPredicates(from, intervalFunc.succeedsOperator());
}
return null;
}

Expand Down Expand Up @@ -513,6 +516,20 @@ private Predicate createPrecedesPredicates(TimePoint point, GDLParser.PrecedesOp
return new Comparison(point, Comparator.LTE, arg_from);
}

/**
* Creates a predicate a.succeeds(b) = a >= b.
* Function is used for interval and timestamp function {@code precedes}, as they both
* only compare two time stamps
* @param point the time stamp of the caller to compare
* @param ctx the context containing the value to be compared
* @return succeeds predicate
*/
private Predicate createSucceedsPredicates(TimePoint point, GDLParser.SucceedsOperatorContext ctx){
TimePoint[] arg = buildIntervall(ctx.interval());
TimePoint arg_to = arg[1];
return new Comparison(point, Comparator.GTE, arg_to);
}

/**
* Creates an array {@code {from, to}} representing an intervall.
* @param ctx context from which to derive {@code from} and {@code to}
Expand Down Expand Up @@ -580,6 +597,9 @@ else if(stampFunc.afterPointOperator()!=null){
else if(stampFunc.precedesOperator()!=null){
return createPrecedesPredicates(tp, stampFunc.precedesOperator());
}
else if(stampFunc.succeedsOperator()!=null){
return createSucceedsPredicates(tp, stampFunc.succeedsOperator());
}
return null;
}

Expand Down
35 changes: 35 additions & 0 deletions src/test/java/org/s1ck/gdl/GDLLoaderTemporalTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,41 @@ public void precedesTest(){
new TimeSelector("b", TimeSelector.TimeField.VAL_FROM)
).switchSides();
assertEquals(result.toString(), expected.toString());

// timestamp as caller
loader = getLoaderFromGDLString("MATCH (a)-->(b) " +
"WHERE a.tx_from.precedes(b.val)");
result = loader.getPredicates().get();
expected = new Comparison(
new TimeSelector("a", TimeSelector.TimeField.TX_FROM),
Comparator.LTE,
new TimeSelector("b", TimeSelector.TimeField.VAL_FROM)
).switchSides();
assertEquals(result.toString(), expected.toString());
}

@Test
public void succeedsTest(){
GDLLoader loader = getLoaderFromGDLString("MATCH (a)-->(b) " +
"WHERE a.val.succeeds(b.tx)");
Predicate result = loader.getPredicates().get();
Predicate expected = new Comparison(
new TimeSelector("a", TimeSelector.TimeField.VAL_FROM),
Comparator.GTE,
new TimeSelector("b", TimeSelector.TimeField.TX_TO)
).switchSides();
assertEquals(result.toString(), expected.toString());

// timestamp as caller
loader = getLoaderFromGDLString("MATCH (a)-->(b) " +
"WHERE a.val_to.succeeds(b.tx)");
result = loader.getPredicates().get();
expected = new Comparison(
new TimeSelector("a", TimeSelector.TimeField.VAL_TO),
Comparator.GTE,
new TimeSelector("b", TimeSelector.TimeField.TX_TO)
).switchSides();
assertEquals(result.toString(), expected.toString());
}

@Test
Expand Down

0 comments on commit 1b3e6f9

Please sign in to comment.