From bda6e80c7befe7b52b76217c060fa009a79acf57 Mon Sep 17 00:00:00 2001 From: lc0197 Date: Fri, 12 Jun 2020 15:28:36 +0200 Subject: [PATCH] [#49] further cleanup --- src/main/java/org/s1ck/gdl/GDLLoader.java | 6 + .../java/org/s1ck/gdl/GDLLoaderTemporal.java | 54 +-- .../model/comparables/ElementSelector.java | 1 - .../gdl/model/comparables/time/Duration.java | 51 --- .../model/comparables/time/MaxTimePoint.java | 144 -------- .../model/comparables/time/MinTimePoint.java | 145 -------- .../model/comparables/time/PlusTimePoint.java | 333 ------------------ .../gdl/model/comparables/time/TimeAtom.java | 44 --- .../model/comparables/time/TimeConstant.java | 41 --- .../model/comparables/time/TimeLiteral.java | 10 - .../gdl/model/comparables/time/TimePoint.java | 81 ----- .../model/comparables/time/TimeSelector.java | 40 --- .../gdl/model/comparables/time/TimeTerm.java | 1 - .../gdl/model/predicates/booleans/And.java | 5 - .../gdl/model/predicates/booleans/Not.java | 5 - .../gdl/model/predicates/booleans/Or.java | 5 - .../gdl/model/predicates/booleans/Xor.java | 5 - .../predicates/expressions/Comparison.java | 8 - .../org/s1ck/gdl/GDLLoaderTemporalTest.java | 28 +- .../gdl/comparables/time/MaxTimeTest.java | 173 --------- .../gdl/comparables/time/MinTimeTest.java | 167 --------- .../gdl/comparables/time/TimeLiteralTest.java | 25 -- .../comparables/time/TimeSelectorTest.java | 22 -- 23 files changed, 58 insertions(+), 1336 deletions(-) delete mode 100644 src/main/java/org/s1ck/gdl/model/comparables/time/PlusTimePoint.java diff --git a/src/main/java/org/s1ck/gdl/GDLLoader.java b/src/main/java/org/s1ck/gdl/GDLLoader.java index f414f5a..207a0b3 100644 --- a/src/main/java/org/s1ck/gdl/GDLLoader.java +++ b/src/main/java/org/s1ck/gdl/GDLLoader.java @@ -436,6 +436,12 @@ public void enterStmpF(GDLParser.StmpFContext ctx) { currentPredicates.add(temporalLoader.buildStampFunction(ctx)); } + /** + * Builds a asOf {@code Predicate}. + * E.g.a.asOf(now) = a.tx_from<=now AND a.tx_from>=now + * + * @param ctx asOf context + */ @Override public void enterAsOf(GDLParser.AsOfContext ctx) { currentPredicates.add(temporalLoader.createAsOf(ctx)); diff --git a/src/main/java/org/s1ck/gdl/GDLLoaderTemporal.java b/src/main/java/org/s1ck/gdl/GDLLoaderTemporal.java index fda97bd..b3b003f 100644 --- a/src/main/java/org/s1ck/gdl/GDLLoaderTemporal.java +++ b/src/main/java/org/s1ck/gdl/GDLLoaderTemporal.java @@ -13,6 +13,9 @@ import static org.s1ck.gdl.utils.Comparator.*; +/** + * Responsible for processing the temporal aspects of a query within {@link GDLLoader} + */ public class GDLLoaderTemporal { /** @@ -129,7 +132,7 @@ private TimePoint buildComplexTimePoint(GDLParser.ComplexTimePointContext ctx) { */ Predicate buildIntervalFunction(GDLParser.IntvFContext ctx) { int predicateSizeBefore = predicateStack.size(); - TimePoint[] intv = buildIntervall(ctx.interval()); + TimePoint[] intv = buildInterval(ctx.interval()); TimePoint from = intv[0]; TimePoint to = intv[1]; Predicate predicate = createIntervalPredicates(from, to, ctx.intervalFunc()); @@ -142,13 +145,13 @@ Predicate buildIntervalFunction(GDLParser.IntvFContext ctx) { } /** - * Creates a new predicate about an interval. There are different types of intervall predicates/ + * Creates a new predicate about an interval. There are different types of interval predicates/ * functions: precedes, fromTo,... * - * @param from represents the start time (from value) of the intervall - * @param to represents the end time (to value) of the intervall + * @param from represents the start time (from value) of the interval + * @param to represents the end time (to value) of the interval * @param intervalFunc contains the context information needed to create the correct predicate - * @return new predicate (according to {@code intervalFunc}) about the intervall represented by + * @return new predicate (according to {@code intervalFunc}) about the interval represented by * {@code from} and {@code to}. */ private Predicate createIntervalPredicates(TimePoint from, TimePoint to, GDLParser.IntervalFuncContext intervalFunc) { @@ -191,7 +194,7 @@ private Predicate createIntervalPredicates(TimePoint from, TimePoint to, GDLPars * @return overlaps predicate */ private Predicate createOverlapsPredicates(TimePoint from, TimePoint to, GDLParser.OverlapsIntervallOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_from = arg[0]; TimePoint arg_to = arg[1]; TimePoint mx = new MaxTimePoint(from, arg_from); @@ -244,7 +247,7 @@ private Predicate createBetweenPredicates(TimePoint from, TimePoint to, GDLParse * @return precedes predicate */ private Predicate createPrecedesPredicates(TimePoint to, GDLParser.PrecedesOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_from = arg[0]; return new Comparison(to, LTE, arg_from); } @@ -257,7 +260,7 @@ private Predicate createPrecedesPredicates(TimePoint to, GDLParser.PrecedesOpera * @return immediatelyPrecedes predicate */ private Predicate createImmediatelyPrecedesPredicates(TimePoint to, GDLParser.ImmediatelyPrecedesOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_from = arg[0]; return new Comparison(to, EQ, arg_from); } @@ -272,7 +275,7 @@ private Predicate createImmediatelyPrecedesPredicates(TimePoint to, GDLParser.Im * @return succeeds predicate */ private Predicate createSucceedsPredicates(TimePoint point, GDLParser.SucceedsOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_to = arg[1]; return new Comparison(point, GTE, arg_to); } @@ -288,7 +291,7 @@ private Predicate createSucceedsPredicates(TimePoint point, GDLParser.SucceedsOp */ private Predicate createImmediatelySucceedsPredicates(TimePoint from, GDLParser.ImmediatelySucceedsOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_to = arg[1]; return new Comparison(from, EQ, arg_to); } @@ -303,7 +306,7 @@ private Predicate createImmediatelySucceedsPredicates(TimePoint from, */ private Predicate createContainsPredicates(TimePoint from, TimePoint to, GDLParser.ContainsOperatorContext ctx) { if (ctx.interval() != null) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_from = arg[0]; TimePoint arg_to = arg[1]; return new And( @@ -329,7 +332,7 @@ private Predicate createContainsPredicates(TimePoint from, TimePoint to, GDLPars * @return equals predicate */ private Predicate createEqualsPredicates(TimePoint from, TimePoint to, GDLParser.EqualsOperatorContext ctx) { - TimePoint[] arg = buildIntervall(ctx.interval()); + TimePoint[] arg = buildInterval(ctx.interval()); TimePoint arg_from = arg[0]; TimePoint arg_to = arg[1]; return new And( @@ -356,7 +359,7 @@ private Predicate createLongerThanPredicates(TimePoint from, TimePoint to, GDLPa durationPredicate = new And(durationPredicate, new Comparison(rhs, GT, constant)); } else if (ctx.interval() != null) { - TimePoint[] interval = buildIntervall(ctx.interval()); + TimePoint[] interval = buildInterval(ctx.interval()); Duration lhs = new Duration(interval[0], interval[1]); durationPredicate = new And(durationPredicate, new Comparison(interval[0], LTE, interval[1])); @@ -366,7 +369,6 @@ private Predicate createLongerThanPredicates(TimePoint from, TimePoint to, GDLPa return durationPredicate; } - /** * Creates a predicate a.shorterThan(b) = (length(a) < length(b)) * Implicitly adds constraints that ensure that durations are always positive @@ -385,7 +387,7 @@ private Predicate createShorterThanPredicates(TimePoint from, TimePoint to, GDLP durationPredicate = new And(durationPredicate, new Comparison(rhs, LT, constant)); } else if (ctx.interval() != null) { - TimePoint[] interval = buildIntervall(ctx.interval()); + TimePoint[] interval = buildInterval(ctx.interval()); Duration lhs = new Duration(interval[0], interval[1]); durationPredicate = new And(durationPredicate, new Comparison(interval[0], LTE, interval[1])); @@ -414,7 +416,7 @@ private Predicate createLengthAtLeastPredicates(TimePoint from, TimePoint to, durationPredicate = new And(durationPredicate, new Comparison(rhs, GTE, constant)); } else if (ctx.interval() != null) { - TimePoint[] interval = buildIntervall(ctx.interval()); + TimePoint[] interval = buildInterval(ctx.interval()); Duration lhs = new Duration(interval[0], interval[1]); durationPredicate = new And(durationPredicate, new Comparison(interval[0], LTE, interval[1])); @@ -443,7 +445,7 @@ private Predicate createLengthAtMostPredicates(TimePoint from, TimePoint to, durationPredicate = new And(durationPredicate, new Comparison(rhs, LTE, constant)); } else if (ctx.interval() != null) { - TimePoint[] interval = buildIntervall(ctx.interval()); + TimePoint[] interval = buildInterval(ctx.interval()); Duration lhs = new Duration(interval[0], interval[1]); durationPredicate = new And(durationPredicate, new Comparison(interval[0], LTE, interval[1])); @@ -483,14 +485,17 @@ private TimeConstant buildTimeConstant(GDLParser.TimeConstantContext ctx) { * @param ctx context from which to derive {@code from} and {@code to} * @return {@code {from, to}} representing an interval */ - private TimePoint[] buildIntervall(GDLParser.IntervalContext ctx) { + private TimePoint[] buildInterval(GDLParser.IntervalContext ctx) { if (ctx.intervalSelector() != null) { GDLParser.IntervalSelectorContext selector = ctx.intervalSelector(); // throws exception, if variable invalid return buildIntervalFromSelector(selector); } else if (ctx.intervalFromStamps() != null) { GDLParser.IntervalFromStampsContext fs = ctx.intervalFromStamps(); - return buildIntervalFromStamps(fs); + TimePoint[] intv = buildIntervalFromStamps(fs); + // custom interval: make sure that from <= to + predicateStack.add(new Comparison(intv[0], LTE, intv[1])); + return intv; } else if (ctx.complexInterval() != null) { GDLParser.ComplexIntervalArgumentContext arg1 = ctx.complexInterval() .complexIntervalArgument(0); @@ -504,7 +509,7 @@ private TimePoint[] buildIntervall(GDLParser.IntervalContext ctx) { /** * Creates an interval as an array {@code {from, to}} from a selector context. - * I.e., a intervall like {@code a.val} would result in {@code {a.val_from, a.val_to}}. + * I.e., a interval like {@code a.val} would result in {@code {a.val_from, a.val_to}}. * What is more, {@code val} results in {@code GLOBAL_SELECTOR.val_from, GLOBAL_SELECTOR.val_to} * * @param ctx context from which to derive the interval @@ -521,7 +526,7 @@ private TimePoint[] buildIntervalFromSelector(GDLParser.IntervalSelectorContext /** * Creates an interval as an array {@code {from, to}} from a interval constant context. - * I.e., a intervall like {@code Interval(1970-01-01, 2020-01-01)} would result in + * I.e., a interval like {@code Interval(1970-01-01, 2020-01-01)} would result in * {@code {1970-01-01, 2020-01-01}}. * * @param ctx context from which to derive the interval @@ -566,7 +571,7 @@ private TimePoint[] buildIntervalFromComplex(GDLParser.ComplexIntervalArgumentCo new MaxTimePoint(i1[0], i2[0]), LTE, new MinTimePoint(i1[1], i2[1]) ); predicateStack.addFirst(constraint); - // now build complex intervall from i1, i2 + // now build complex interval from i1, i2 if (join) { TimePoint start = new MinTimePoint(i1[0], i2[0]); TimePoint end = new MaxTimePoint(i1[1], i2[1]); @@ -637,6 +642,11 @@ private Predicate createAfterPredicates(TimePoint from, GDLParser.AfterPointOper return new Comparison(from, Comparator.GT, x); } + /** + * Create asOf predicate: a.tx_from<=point AND a.tx_to>= point + * @param ctx asOf context + * @return asOf predicate + */ Predicate createAsOf(GDLParser.AsOfContext ctx) { TimePoint tp = buildTimePoint(ctx.timePoint()); String identifier = loader.resolveIdentifier(ctx.Identifier().getText()); diff --git a/src/main/java/org/s1ck/gdl/model/comparables/ElementSelector.java b/src/main/java/org/s1ck/gdl/model/comparables/ElementSelector.java index 4500620..e964495 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/ElementSelector.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/ElementSelector.java @@ -81,7 +81,6 @@ public boolean equals(Object o) { ElementSelector that = (ElementSelector) o; return variable != null ? variable.equals(that.variable) : that.variable == null; - } @Override diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/Duration.java b/src/main/java/org/s1ck/gdl/model/comparables/time/Duration.java index 8640440..0742cfc 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/Duration.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/Duration.java @@ -1,7 +1,6 @@ package org.s1ck.gdl.model.comparables.time; import org.s1ck.gdl.model.comparables.ComparableExpression; -import org.s1ck.gdl.model.predicates.Predicate; import java.util.List; import java.util.Optional; @@ -88,56 +87,6 @@ public Optional evaluate() { } } - /*@Override - public long getLowerBound() { - long toLowerBound = to.getLowerBound(); - long fromUpperBound = from.getUpperBound(); - if(toLowerBound == Long.MIN_VALUE || fromUpperBound==Long.MAX_VALUE){ - return 0; - } - return toLowerBound - fromUpperBound; - } - - @Override - public long getUpperBound() { - long toUpperBound = to.getUpperBound(); - long fromLowerBound = from.getLowerBound(); - if(toUpperBound==Long.MAX_VALUE || fromLowerBound == Long.MIN_VALUE){ - return Long.MAX_VALUE; - } - return toUpperBound - fromLowerBound; - }*/ - - @Override - protected Predicate unfoldEQ(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldNEQ(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldGT(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldGTE(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldLT(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldLTE(TimePoint arg) { - return null; - } - @Override public String toString(){ return "Duration("+from.toString()+", "+to.toString()+")"; diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/MaxTimePoint.java b/src/main/java/org/s1ck/gdl/model/comparables/time/MaxTimePoint.java index 54a710a..5c30236 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/MaxTimePoint.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/MaxTimePoint.java @@ -1,13 +1,7 @@ package org.s1ck.gdl.model.comparables.time; import org.s1ck.gdl.model.comparables.ComparableExpression; -import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.model.predicates.booleans.And; -import org.s1ck.gdl.model.predicates.booleans.Or; -import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -25,9 +19,6 @@ public MaxTimePoint(TimePoint...args){ operator = "MAX"; } - - - @Override public Optional evaluate(){ long mx = Long.MIN_VALUE; @@ -43,35 +34,6 @@ public Optional evaluate(){ return Optional.of(mx); } - /*@Override - public long getLowerBound(){ - // lower bound of a max term is the maximal lower bound of all its arguments - long res = Long.MIN_VALUE; - for (TimePoint p: args){ - long val = p.getLowerBound(); - if(val>res){ - res = val; - } - } - return res; - }*/ - - /*@Override - public long getUpperBound(){ - // upper bound of a max term is the maximal upper bound of all its arguments - long res = Long.MIN_VALUE; - for (TimePoint p: args){ - long val = p.getUpperBound(); - if(val==Long.MAX_VALUE){ - return Long.MAX_VALUE; - } - if(val > res){ - res = val; - } - } - return res; - }*/ - @Override public String getVariable() { return null; @@ -87,112 +49,6 @@ public boolean containsSelectorType(TimeSelector.TimeField type){ return false; } - @Override - protected Predicate unfoldEQ(TimePoint arg){ - //MAX(p1...pn) == x <=> exists pi: (pi>=p1 AND pi>=p2...AND pi>=pn) AND (pi==x) - - // // the predicates (pi>=p1 AND pi>=p2...AND pi>=pn) AND (pi==x) - Predicate[] piPredicates = new Predicate[args.size()]; - for(int i= 0; i=p1), (pi>=p2),..., (pi>=pn) - ArrayList comparisons = new ArrayList<>(); - for(int j=0; j=p1 AND pi>=p2...AND pi>=pn) - And conj = new And(new Comparison(args.get(i), Comparator.EQ, arg), - comparisons.get(0)); - for(int k=1; k=p1 AND pi>=p2...AND pi>=pn) AND (pi==x)) - Or result = new Or(piPredicates[0], piPredicates[1]); - for(int l=2; l for all pi: (pip1 OR pi>p2...OR pi>pn) OR (pi!=x) - Predicate[] piPredicates = new Predicate[args.size()]; - for(int i= 0; i comparisons = new ArrayList<>(); - for(int j=0; jp1 OR pi>p2...OR pi>pn) - Or disj = new Or(new Comparison(args.get(i), Comparator.NEQ, arg), - comparisons.get(0)); - for(int k=1; k x <=> p1>x OR p2>x...OR pn>x - Or disjGt = new Or(new Comparison(args.get(0), Comparator.GT, arg), - new Comparison(args.get(1), Comparator.GT, arg)); - for (int i=2; i= x <=> p1>=x OR p2>=x...OR pn>=x - Or disjGte = new Or(new Comparison(args.get(0), Comparator.GTE, arg), - new Comparison(args.get(1), Comparator.GTE, arg)); - for(int i=2; i p1 p1<=x AND p2<=x...AND pn<=x - And disjGt = new And(new Comparison(args.get(0), Comparator.LTE, arg), - new Comparison(args.get(1), Comparator.LTE, arg)); - for (int i=2; i variables) { TimePoint[] newArgs = new TimePoint[args.size()]; diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/MinTimePoint.java b/src/main/java/org/s1ck/gdl/model/comparables/time/MinTimePoint.java index 472cd1b..5433535 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/MinTimePoint.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/MinTimePoint.java @@ -1,13 +1,7 @@ package org.s1ck.gdl.model.comparables.time; import org.s1ck.gdl.model.comparables.ComparableExpression; -import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.model.predicates.booleans.And; -import org.s1ck.gdl.model.predicates.booleans.Or; -import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -40,35 +34,6 @@ public Optional evaluate(){ return Optional.of(mn); } - /*@Override - public long getLowerBound(){ - // lower bound of a min term is the minimum lower bound of all its arguments - long res = Long.MAX_VALUE; - for (TimePoint p: args){ - long val = p.getLowerBound(); - if(val==Long.MIN_VALUE){ - return Long.MIN_VALUE; - } - if(val< res){ - res = val; - } - } - return res; - } - - @Override - public long getUpperBound(){ - // upper bound of a min term is the minimum upper bound of all its arguments - long res = Long.MAX_VALUE; - for (TimePoint p: args){ - long val = p.getUpperBound(); - if(val!=Long.MAX_VALUE && val < res){ - res = val; - } - } - return res; - }*/ - @Override public String getVariable() { return null; @@ -84,116 +49,6 @@ public boolean containsSelectorType(TimeSelector.TimeField type){ return false; } - @Override - protected Predicate unfoldEQ(TimePoint arg){ - //MIN(p1...pn) == x <=> exists pi: (pi<=p1 AND pi<=p2...AND pi<=pn) AND (pi==x) - - // the predicates (pi<=p1 AND pi<=p2...AND pi<=pn) AND (pi==x) - Predicate[] piPredicates = new Predicate[args.size()]; - for(int i= 0; i comparisons = new ArrayList<>(); - for(int j=0; j for all pi: (pi>p1 OR pi>p2...OR pi>pn) OR (pi!=x) - - // the predicates (pi>p1 OR pi>p2...OR pi>pn) OR (pi!=x) - Predicate[] piPredicates = new Predicate[args.size()]; - for(int i= 0; ip1), (pi>p2),..., (pi>pn) - ArrayList comparisons = new ArrayList<>(); - for(int j=0; jp1 OR pi>p2...OR pi>pn) - Or disj = new Or(new Comparison(args.get(i), Comparator.NEQ, arg), - comparisons.get(0)); - for(int k=1; kp1 OR pi>p2...OR pi>pn) OR (pi!=x)) - And result = new And(piPredicates[0], piPredicates[1]); - for(int l=2; l x <=> p1>x AND p2>x...AND pn>x - And conjGt = new And(new Comparison(args.get(0), Comparator.GT, arg), - new Comparison(args.get(1), Comparator.GT, arg)); - for (int i=2; i= x <=> p1>=x AND p2>=x...AND pn>=x - And conjGte = new And(new Comparison(args.get(0), Comparator.GTE, arg), - new Comparison(args.get(1), Comparator.GTE, arg)); - for(int i=2; i p1 p1<=x OR p2<=x ... OR pn<=x - Or disjLte = new Or(new Comparison(args.get(0), Comparator.LTE, arg), - new Comparison(args.get(1), Comparator.LTE, arg)); - for(int i=2; i getVariables() { - return timePoint.getVariables(); - } - - @Override - public String getVariable() { - return timePoint.getVariable(); - } - - @Override - public long evaluate(){ - long tp = timePoint.evaluate(); - if(tp==UNDEFINED){ - return UNDEFINED; - } - return tp + constant.getMillis(); - } - - @Override - public long getLowerBound(){ - long tp_lb = timePoint.getLowerBound(); - if(tp_lb == UNDEFINED){ - return constant.getMillis(); - } - return tp_lb + constant.getMillis(); - } - - @Override - public long getUpperBound(){ - long tp_ub = timePoint.getUpperBound(); - if(tp_ub == Long.MAX_VALUE){ - return Long.MAX_VALUE; - } - return tp_ub + constant.getMillis(); - } - - @Override - public boolean containsSelectorType(TimeSelector.TimeField type){ - return timePoint.containsSelectorType(type); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - PlusTimePoint that = (PlusTimePoint) o; - - return timePoint.equals(that.timePoint) && constant.equals(that.constant); - - } - - @Override - public String toString(){ - return "Plus("+timePoint+", "+constant+")"; - } - - - @Override - public Predicate unfoldGlobal(Comparator comp, ComparableExpression rhs, List variables) { - if(!(timePoint instanceof TimeSelector) || !timePoint.getVariable().equals(GLOBAL_SELECTOR)){ - return new Comparison(this, comp, rhs); - } - if(comp.equals(EQ)){ - return unfoldGlobalEQ(rhs, variables); - } - else if(comp.equals(Comparator.NEQ)){ - return unfoldGlobalNEQ(rhs, variables); - } - else if(comp.equals(Comparator.LT)){ - return unfoldGlobalLT(rhs, variables); - } - else if(comp.equals(Comparator.LTE)){ - return unfoldGlobalLTE(rhs, variables); - } - else if(comp.equals(Comparator.GT)){ - return unfoldGlobalGT(rhs, variables); - } - else if(comp.equals(Comparator.GTE)){ - return unfoldGlobalGTE(rhs, variables); - } - return null; - } - - */ -/** - * Translates a comparison {@code (this == rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint}. - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalEQ(ComparableExpression rhs, List variables){ - // exists var: var.from==rhs - Predicate exists = existsVariable(EQ, rhs, variables); - - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - - if(timeProp.equals(TimeSelector.TimeField.TX_FROM) || timeProp.equals(TimeSelector.TimeField.VAL_FROM)){ - //globalfrom==rhs <=> (exists var: var.from==rhs) AND (forall var: var.from<=rhs) - return new And(exists,forAllVariables(LTE, rhs, variables)); - } - - else{ - //globalto == rhs <=> (exists var: var.to ==rhs) AND (forall var: var.to>=rhs) - return new And(exists,forAllVariables(GTE, rhs, variables)); - } - } - - */ -/** - * Translates a comparison {@code (this != rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalNEQ(ComparableExpression rhs, List variables){ - return forAllVariables(NEQ, rhs, variables); - } - - */ -/** - * Translates a comparison {@code (this < rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalLT(ComparableExpression rhs, List variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - if(timeProp.equals(TimeSelector.TimeField.TX_FROM) || timeProp.equals(TimeSelector.TimeField.VAL_FROM)){ - // globalfrom < rhs <=> forall var: var.from < rhs - return forAllVariables(LT, rhs, variables); - } - else{ - //globalto < rhs <=> exists var: var.to < rhs - return existsVariable(LT, rhs, variables); - } - } - - */ -/** - * Translates a comparison {@code (this <= rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalLTE(ComparableExpression rhs, List variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - if(timeProp.equals(TimeSelector.TimeField.TX_FROM) || timeProp.equals(TimeSelector.TimeField.VAL_FROM)){ - // globalfrom <= rhs <=> forall var: var.from <= rhs - return forAllVariables(LTE, rhs, variables); - } - else{ - //globalto <= rhs <=> exists var: var.to <= rhs - return existsVariable(LTE, rhs, variables); - } - } - - */ -/** - * Translates a comparison {@code (this > rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalGT(ComparableExpression rhs, List variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - if(timeProp.equals(TimeSelector.TimeField.TX_FROM) || timeProp.equals(TimeSelector.TimeField.VAL_FROM)){ - // globalfrom > rhs <=> exists var: var.from > rhs - return existsVariable(GT, rhs, variables); - } - else{ - //globalto > rhs <=> forall var: var.to > rhs - return forAllVariables(GT, rhs, variables); - } - } - - */ -/** - * Translates a comparison {@code (this >= rhs)} into an equivalent predicate that does not contain - * global time selectors/intervals anymore. - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param rhs the right hand side of the comparison to translate - * @param variables all query variables - * @return translated comparison - *//* - - private Predicate unfoldGlobalGTE(ComparableExpression rhs, List variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - if(timeProp.equals(TimeSelector.TimeField.TX_FROM) || timeProp.equals(TimeSelector.TimeField.VAL_FROM)){ - // globalfrom >= rhs <=> exists var: var.from >= rhs - return existsVariable(GTE, rhs, variables); - } - else{ - //globalto >= rhs <=> forall var: var.to >= rhs - return forAllVariables(GTE, rhs, variables); - } - } - - */ -/** - * Returns a predicate equivalent to {@code exists v in variables s.t. (v comp rhs) holds} - * Basically the same method as in {@link TimeSelector}, but adapted for {@link PlusTimePoint} - * @param comp the comparator - * @param rhs the rhs in the comparison - * @param variables the query variables to "iterate" over (the domain) - * @return predicate equivalent to {@code exists v in variables s.t. (v comp rhs) holds} - *//* - - private Predicate existsVariable(Comparator comp, ComparableExpression rhs, List variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - Comparison c0 = new Comparison( - new PlusTimePoint(new TimeSelector(variables.get(0),timeProp), constant), comp, rhs); - if(variables.size()==1){ - return c0; - } - Or exists = new Or(c0, new Comparison( - new PlusTimePoint(new TimeSelector(variables.get(1),timeProp), constant), comp, rhs)); - for(int i=2; i variables){ - TimeSelector.TimeField timeProp = ((TimeSelector)timePoint).getTimeProp(); - Comparison c0 = new Comparison( - new PlusTimePoint(new TimeSelector(variables.get(0),timeProp), constant), comp, rhs); - if(variables.size()==1){ - return c0; - } - - And forall = new And(c0, new Comparison( - new PlusTimePoint(new TimeSelector(variables.get(1),timeProp), constant), comp, rhs)); - for(int i=2; i variables) { - return new PlusTimePoint((TimePoint)timePoint.replaceGlobalByLocal(variables), constant); - } -} -*/ diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeAtom.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeAtom.java index 9900952..9b92785 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeAtom.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeAtom.java @@ -2,7 +2,6 @@ import org.s1ck.gdl.model.comparables.ComparableExpression; import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.model.predicates.expressions.Comparison; import org.s1ck.gdl.utils.Comparator; import java.util.List; @@ -22,47 +21,4 @@ public abstract class TimeAtom extends TimePoint { * @return equivalent containing only local selectors/intervals */ public abstract Predicate unfoldGlobal(Comparator comp, ComparableExpression rhs, List variables); - - - @Override - public Predicate unfoldComparison(Comparator comparator, TimePoint arg){ - // nothing to unfold here - return new Comparison(this, comparator, arg); - } - - @Override - protected Predicate unfoldEQ(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.EQ, arg); - } - - @Override - protected Predicate unfoldNEQ(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.NEQ, arg); - } - - @Override - protected Predicate unfoldGT(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.GT, arg); - } - - @Override - protected Predicate unfoldGTE(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.GTE, arg); - } - - @Override - protected Predicate unfoldLT(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.LT, arg); - } - - @Override - protected Predicate unfoldLTE(TimePoint arg){ - // nothing to unfold here - return new Comparison(this, Comparator.LTE, arg); - } } diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeConstant.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeConstant.java index a3e0c29..c9f4b19 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeConstant.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeConstant.java @@ -1,7 +1,6 @@ package org.s1ck.gdl.model.comparables.time; import org.s1ck.gdl.model.comparables.ComparableExpression; -import org.s1ck.gdl.model.predicates.Predicate; import java.util.HashSet; import java.util.List; @@ -71,46 +70,6 @@ public Optional evaluate() { return Optional.of(getMillis()); } - /*@Override - public long getLowerBound() { - return getMillis(); - } - - @Override - public long getUpperBound() { - return getMillis(); - }*/ - - @Override - protected Predicate unfoldEQ(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldNEQ(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldGT(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldGTE(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldLT(TimePoint arg) { - return null; - } - - @Override - protected Predicate unfoldLTE(TimePoint arg) { - return null; - } - @Override public Set getVariables() { return new HashSet<>(); diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeLiteral.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeLiteral.java index a6e9e1c..7c673b1 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeLiteral.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeLiteral.java @@ -132,16 +132,6 @@ public Optional evaluate(){ return Optional.of(getMilliseconds()); } - /*@Override - public long getLowerBound(){ - return getMilliseconds(); - } - - @Override - public long getUpperBound(){ - return getMilliseconds(); - }*/ - @Override public boolean containsSelectorType(TimeSelector.TimeField type){ return false; diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimePoint.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimePoint.java index 7675761..af70b67 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimePoint.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimePoint.java @@ -1,8 +1,6 @@ package org.s1ck.gdl.model.comparables.time; import org.s1ck.gdl.model.comparables.ComparableExpression; -import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.utils.Comparator; import java.util.Optional; @@ -11,12 +9,6 @@ */ public abstract class TimePoint implements ComparableExpression { - /** - * Used in evaluation methods to indicate that the value (in millis) of a TimePoint can - * not be determined (yet). - */ - public static final long UNDEFINED = -1L; - /** * calculates the value of the timestamp (UNIX epoch long), if possible. * E.g., a timestamp like v.VAL_FROM can not be assigned a unique long value @@ -24,77 +16,4 @@ public abstract class TimePoint implements ComparableExpression { */ public abstract Optional evaluate(); - - /** - * Translates a term "this comparator arg" into a Predicate over comparisons. - * E.g. "Max(p1,p2) > x" would translate to "(p1 > x) AND (p2 > x)" - * Used to replace complex TimePoints like MAX, MIN by Comparisons of simple TimePoints - * @param comparator the comparator of the term to be translated - * @param arg the second argument of the term to be translated (first argument is this) - * @return the translated term - */ - public Predicate unfoldComparison(Comparator comparator, TimePoint arg){ - if(comparator == Comparator.EQ){ - return unfoldEQ(arg); - } - else if(comparator == Comparator.NEQ){ - return unfoldNEQ(arg); - } - else if(comparator == Comparator.GT){ - return unfoldGT(arg); - } - else if(comparator == Comparator.GTE){ - return unfoldGTE(arg); - } - else if(comparator == Comparator.LT){ - return unfoldLT(arg); - } - else if(comparator == Comparator.LTE){ - return unfoldLTE(arg); - } - return null; - } - - /** - * Unfolds a comparison "this == arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldEQ(TimePoint arg); - - /** - * Unfolds a comparison "this <> arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldNEQ(TimePoint arg); - - /** - * Unfolds a comparison "this > arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldGT(TimePoint arg); - - /** - * Unfolds a comparison "this >= arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldGTE(TimePoint arg); - - /** - * Unfolds a comparison "this < arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldLT(TimePoint arg); - - /** - * Unfolds a comparison "this <= arg": - * @param arg the second argument in the comparison to unfold - * @return unfolded comparison - */ - protected abstract Predicate unfoldLTE(TimePoint arg); - } diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeSelector.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeSelector.java index 32d7d9a..b32ad2d 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeSelector.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeSelector.java @@ -107,16 +107,6 @@ public Optional evaluate(){ return Optional.empty(); } - /*@Override - public long getLowerBound(){ - return Long.MIN_VALUE; - } - - @Override - public long getUpperBound(){ - return Long.MAX_VALUE; - }*/ - @Override public boolean containsSelectorType(TimeSelector.TimeField type){ return timeProp.equals(type); @@ -295,36 +285,6 @@ private Predicate forAllVariables(Comparator comp, ComparableExpression rhs, Lis return forall; } - /*@Override - protected Predicate unfoldEQ(TimePoint arg){ - return new Comparison(this, EQ, arg); - } - - @Override - protected Predicate unfoldNEQ(TimePoint arg){ - return new Comparison(this, Comparator.NEQ, arg); - } - - @Override - protected Predicate unfoldGT(TimePoint arg){ - return new Comparison(this, Comparator.GT, arg); - } - - @Override - protected Predicate unfoldGTE(TimePoint arg){ - return new Comparison(this, Comparator.GTE, arg); - } - - @Override - protected Predicate unfoldLT(TimePoint arg){ - return new Comparison(this, Comparator.LT, arg); - } - - @Override - protected Predicate unfoldLTE(TimePoint arg){ - return new Comparison(this, Comparator.LTE, arg); - }*/ - @Override public boolean isGlobal(){ return variable.equals(GLOBAL_SELECTOR); diff --git a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeTerm.java b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeTerm.java index fa14612..e7dd2ca 100644 --- a/src/main/java/org/s1ck/gdl/model/comparables/time/TimeTerm.java +++ b/src/main/java/org/s1ck/gdl/model/comparables/time/TimeTerm.java @@ -59,7 +59,6 @@ public Set getVariables(){ return vars; } - /** * String representation of the operator (e.g. "MIN", "MAX",...) * @return operator string diff --git a/src/main/java/org/s1ck/gdl/model/predicates/booleans/And.java b/src/main/java/org/s1ck/gdl/model/predicates/booleans/And.java index c41d409..11d3571 100644 --- a/src/main/java/org/s1ck/gdl/model/predicates/booleans/And.java +++ b/src/main/java/org/s1ck/gdl/model/predicates/booleans/And.java @@ -57,11 +57,6 @@ public Predicate switchSides(){ return new And(lhs.switchSides(), rhs.switchSides()); } - /*@Override - public Predicate unfoldTemporalComparisonsLeft(){ - return new And(lhs.unfoldTemporalComparisonsLeft(), rhs.unfoldTemporalComparisonsLeft()); - }*/ - @Override public boolean containsSelectorType(TimeSelector.TimeField type){ return lhs.containsSelectorType(type) || rhs.containsSelectorType(type); diff --git a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Not.java b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Not.java index 7ecb54f..be61d8d 100644 --- a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Not.java +++ b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Not.java @@ -44,11 +44,6 @@ public Set getVariables() { return expression.getVariables(); } - /*@Override - public Predicate unfoldTemporalComparisonsLeft(){ - return new Not(expression.unfoldTemporalComparisonsLeft()); - } -*/ @Override public Predicate switchSides(){ return new Not(expression.switchSides()); diff --git a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Or.java b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Or.java index a75e4da..02ef8af 100644 --- a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Or.java +++ b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Or.java @@ -52,11 +52,6 @@ public Set getVariables() { return variables; } - /*@Override - public Predicate unfoldTemporalComparisonsLeft(){ - return new Or(lhs.unfoldTemporalComparisonsLeft(), rhs.unfoldTemporalComparisonsLeft()); - }*/ - @Override public Predicate switchSides(){ return new Or(lhs.switchSides(), rhs.switchSides()); diff --git a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Xor.java b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Xor.java index 4ca32f9..5e2627a 100644 --- a/src/main/java/org/s1ck/gdl/model/predicates/booleans/Xor.java +++ b/src/main/java/org/s1ck/gdl/model/predicates/booleans/Xor.java @@ -40,11 +40,6 @@ public Predicate[] getArguments() { return new Predicate[] { lhs, rhs }; } - /*@Override - public Predicate unfoldTemporalComparisonsLeft(){ - return new Xor(lhs.unfoldTemporalComparisonsLeft(), rhs.unfoldTemporalComparisonsLeft()); - }*/ - @Override public Predicate switchSides(){ return new Xor(lhs.switchSides(), rhs.switchSides()); diff --git a/src/main/java/org/s1ck/gdl/model/predicates/expressions/Comparison.java b/src/main/java/org/s1ck/gdl/model/predicates/expressions/Comparison.java index 685cfec..3c447c9 100644 --- a/src/main/java/org/s1ck/gdl/model/predicates/expressions/Comparison.java +++ b/src/main/java/org/s1ck/gdl/model/predicates/expressions/Comparison.java @@ -101,14 +101,6 @@ public Predicate replaceGlobalByLocal(List variables) { rhs.replaceGlobalByLocal(variables)); } - /*@Override - public Predicate unfoldTemporalComparisonsLeft(){ - if (!isTemporal()){ - return this; - } - return ((TimePoint)lhs).unfoldComparison(comparator, (TimePoint)rhs); - }*/ - @Override public Comparison switchSides(){ if(!isTemporal()){ diff --git a/src/test/java/org/s1ck/gdl/GDLLoaderTemporalTest.java b/src/test/java/org/s1ck/gdl/GDLLoaderTemporalTest.java index 2feec32..a52daeb 100644 --- a/src/test/java/org/s1ck/gdl/GDLLoaderTemporalTest.java +++ b/src/test/java/org/s1ck/gdl/GDLLoaderTemporalTest.java @@ -20,15 +20,19 @@ public class GDLLoaderTemporalTest { public void periodLiteralTest(){ GDLLoader loader = getLoaderFromGDLString("MATCH (a)-->(b) " + "WHERE a.tx.overlaps(Interval(1970-01-01,1970-01-02))"); + TimeLiteral tl1 = new TimeLiteral("1970-01-01"); + TimeLiteral tl2 = new TimeLiteral("1970-01-02"); assertPredicateEquals(loader.getPredicates().get(), + new And( new Comparison( new MaxTimePoint(new TimeSelector("a", TX_FROM), - new TimeLiteral("1970-01-01")), + tl1), LT, new MinTimePoint(new TimeSelector("a", TX_TO), - new TimeLiteral("1970-01-02")) - )); + tl2) + ), + new Comparison(tl1, LTE, tl2))); } @Test @@ -211,9 +215,11 @@ public void intervalMergeAndJoinTest(){ TimeLiteral tl2 = new TimeLiteral("2020-05-01"); Predicate expected = new And( + new And( new Comparison(new MaxTimePoint(aTxFrom, bTxFrom), GTE, tl2), new Comparison(new MaxTimePoint(aTxFrom, bTxFrom), LTE, - new MinTimePoint(aTxTo, bTxTo)) + new MinTimePoint(aTxTo, bTxTo))), + new Comparison(tl1, LTE, tl2) ); assertPredicateEquals(expected, loader.getPredicates().get()); @@ -223,9 +229,11 @@ public void intervalMergeAndJoinTest(){ loader = getLoaderFromGDLString("MATCH (a)-[e]->(b) " + "WHERE a.tx.join(b.tx).succeeds(Interval(1970-01-01, 2020-05-01))"); expected = new And( + new And( new Comparison(new MinTimePoint(aTxFrom, bTxFrom), GTE, tl2), new Comparison(new MaxTimePoint(aTxFrom, bTxFrom), LTE, - new MinTimePoint(aTxTo, bTxTo)) + new MinTimePoint(aTxTo, bTxTo))), + new Comparison(tl1, LTE, tl2) ); assertPredicateEquals(expected, loader.getPredicates().get()); @@ -469,8 +477,10 @@ private void lengthComparisonTest(String operator, Comparator comparator){ Duration intervalDuration = new Duration(aValFrom, bValTo); Comparison intervalDurationPred = new Comparison(aValFrom, LTE, bValTo); expected = new And( - intervalDurationPred, - new Comparison(intervalDuration, comparator, fourDays)); + new And( + intervalDurationPred, + new Comparison(intervalDuration, comparator, fourDays)), + new Comparison(aValFrom, LTE, bValTo)); assertPredicateEquals(loader.getPredicates().get(), expected); loader = getLoaderFromGDLString("MATCH (a)-[e]->(b) " + @@ -512,8 +522,10 @@ private void lengthComparisonTest(String operator, Comparator comparator){ Duration constantInterval = new Duration(l1, l2); Comparison constantPred = new Comparison(l1, LTE, l2); expected = new And( + new And( new And(globalValPred, constantPred), - new Comparison(globalValDuration, comparator, constantInterval)); + new Comparison(globalValDuration, comparator, constantInterval)), + new Comparison(l1, LTE, l2)); assertPredicateEquals(loader.getPredicates().get(), expected); } diff --git a/src/test/java/org/s1ck/gdl/comparables/time/MaxTimeTest.java b/src/test/java/org/s1ck/gdl/comparables/time/MaxTimeTest.java index 8b3d935..61ca1f6 100644 --- a/src/test/java/org/s1ck/gdl/comparables/time/MaxTimeTest.java +++ b/src/test/java/org/s1ck/gdl/comparables/time/MaxTimeTest.java @@ -1,11 +1,6 @@ package org.s1ck.gdl.comparables.time; import org.junit.Test; import org.s1ck.gdl.model.comparables.time.*; -import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.model.predicates.booleans.And; -import org.s1ck.gdl.model.predicates.booleans.Or; -import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; import java.util.ArrayList; import java.util.Arrays; @@ -35,15 +30,11 @@ public void mixedMaxTimeTest(){ TimeSelector l4 = new TimeSelector("v", TimeSelector.TimeField.VAL_TO); MaxTimePoint mx = new MaxTimePoint(l1,l2,l3,l4); assertFalse(mx.evaluate().isPresent()); -/* assertEquals(mx.getLowerBound(), (long)l2.evaluate().get()); - assertEquals(mx.getUpperBound(), Long.MAX_VALUE);*/ // only selectors TimeSelector l5 = new TimeSelector("x",TimeSelector.TimeField.VAL_FROM); mx = new MaxTimePoint(l4,l5); assertFalse(mx.evaluate().isPresent()); -/* assertEquals(mx.getLowerBound(), Long.MIN_VALUE); - assertEquals(mx.getUpperBound(), Long.MAX_VALUE);*/ } @Test @@ -58,8 +49,6 @@ public void complexMaxTest(){ MaxTimePoint mx3 = new MaxTimePoint(mx1, mx2); assertFalse(mx3.evaluate().isPresent()); -/* assertEquals(mx3.getLowerBound(), mx1.getLowerBound()); - assertEquals(mx3.getUpperBound(), Long.MAX_VALUE);*/ } @@ -118,168 +107,6 @@ public void maxMinTest4(){ assertFalse(mx.evaluate().isPresent()); } - @Test - public void unfoldEQTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new And( - new And( - new Comparison(p1, Comparator.EQ, arg), - new Comparison(p1, Comparator.GTE, p2) - ), - new Comparison(p1, Comparator.GTE, p3) - ), - new And( - new And( - new Comparison(p2, Comparator.EQ, arg), - new Comparison(p2, Comparator.GTE, p1) - ), - new Comparison(p2, Comparator.GTE, p3) - ) - ), - new And( - new And( - new Comparison(p3, Comparator.EQ, arg), - new Comparison(p3, Comparator.GTE, p1) - ), - new Comparison(p3, Comparator.GTE, p2) - ) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.EQ, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldNEQTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Or( - new Or( - new Comparison(p1, Comparator.NEQ, arg), - new Comparison(p1, Comparator.LT, p2) - ), - new Comparison(p1, Comparator.LT, p3) - ), - new Or( - new Or( - new Comparison(p2, Comparator.NEQ, arg), - new Comparison(p2, Comparator.LT, p1) - ), - new Comparison(p2, Comparator.LT, p3) - ) - ), - new Or( - new Or( - new Comparison(p3, Comparator.NEQ, arg), - new Comparison(p3, Comparator.LT, p1) - ), - new Comparison(p3, Comparator.LT,p2) - ) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.NEQ, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldGTTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new Comparison(p1, Comparator.GT, arg), - new Comparison(p2, Comparator.GT, arg) - ), - new Comparison(p3, Comparator.GT, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.GT, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldGTETest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new Comparison(p1, Comparator.GTE, arg), - new Comparison(p2, Comparator.GTE, arg) - ), - new Comparison(p3, Comparator.GTE, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.GTE, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldLTTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Comparison(p1, Comparator.LT, arg), - new Comparison(p2, Comparator.LT, arg) - ), - new Comparison(p3, Comparator.LT, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.LT, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldLTETest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MaxTimePoint mn = new MaxTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Comparison(p1, Comparator.LTE, arg), - new Comparison(p2, Comparator.LTE, arg) - ), - new Comparison(p3, Comparator.LTE, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.LTE, arg); - assertEquals(expected, unfolded); - } - @Test public void containsTxToTest(){ TimeSelector s1 = new TimeSelector("a", "val_to"); diff --git a/src/test/java/org/s1ck/gdl/comparables/time/MinTimeTest.java b/src/test/java/org/s1ck/gdl/comparables/time/MinTimeTest.java index 77f10ea..4c5bd4e 100644 --- a/src/test/java/org/s1ck/gdl/comparables/time/MinTimeTest.java +++ b/src/test/java/org/s1ck/gdl/comparables/time/MinTimeTest.java @@ -5,11 +5,6 @@ import org.s1ck.gdl.model.comparables.time.MinTimePoint; import org.s1ck.gdl.model.comparables.time.TimeLiteral; import org.s1ck.gdl.model.comparables.time.TimeSelector; -import org.s1ck.gdl.model.predicates.Predicate; -import org.s1ck.gdl.model.predicates.booleans.And; -import org.s1ck.gdl.model.predicates.booleans.Or; -import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; import java.util.ArrayList; import java.util.Arrays; @@ -117,168 +112,6 @@ public void minMaxTest4(){ assertFalse(mn.evaluate().isPresent()); } - @Test - public void unfoldEQTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new And( - new And( - new Comparison(p1, Comparator.EQ, arg), - new Comparison(p1, Comparator.LTE, p2) - ), - new Comparison(p1, Comparator.LTE, p3) - ), - new And( - new And( - new Comparison(p2, Comparator.EQ, arg), - new Comparison(p2, Comparator.LTE, p1) - ), - new Comparison(p2, Comparator.LTE, p3) - ) - ), - new And( - new And( - new Comparison(p3, Comparator.EQ, arg), - new Comparison(p3, Comparator.LTE, p1) - ), - new Comparison(p3, Comparator.LTE, p2) - ) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.EQ, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldNEQTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Or( - new Or( - new Comparison(p1, Comparator.NEQ, arg), - new Comparison(p1, Comparator.GT, p2) - ), - new Comparison(p1, Comparator.GT, p3) - ), - new Or( - new Or( - new Comparison(p2, Comparator.NEQ, arg), - new Comparison(p2, Comparator.GT, p1) - ), - new Comparison(p2, Comparator.GT, p3) - ) - ), - new Or( - new Or( - new Comparison(p3, Comparator.NEQ, arg), - new Comparison(p3, Comparator.GT, p1) - ), - new Comparison(p3, Comparator.GT,p2) - ) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.NEQ, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldGTTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Comparison(p1, Comparator.GT, arg), - new Comparison(p2, Comparator.GT, arg) - ), - new Comparison(p3, Comparator.GT, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.GT, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldGTETest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new And( - new And( - new Comparison(p1, Comparator.GTE, arg), - new Comparison(p2, Comparator.GTE, arg) - ), - new Comparison(p3, Comparator.GTE, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.GTE, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldLTTest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new Comparison(p1, Comparator.LT, arg), - new Comparison(p2, Comparator.LT, arg) - ), - new Comparison(p3, Comparator.LT, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.LT, arg); - assertEquals(expected, unfolded); - } - - @Test - public void unfoldLTETest(){ - TimeLiteral p1 = new TimeLiteral("2020-04-10T12:30:00"); - TimeSelector p2 = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeLiteral p3 = new TimeLiteral("1970-01-01T01:01:01"); - MinTimePoint mn = new MinTimePoint(p1, p2, p3); - TimeLiteral arg = new TimeLiteral("2020-04-10T12:28:45"); - - Predicate expected = - new Or( - new Or( - new Comparison(p1, Comparator.LTE, arg), - new Comparison(p2, Comparator.LTE, arg) - ), - new Comparison(p3, Comparator.LTE, arg) - ); - - Predicate unfolded = mn.unfoldComparison(Comparator.LTE, arg); - assertEquals(expected, unfolded); - } - @Test public void containsTxToTest(){ TimeSelector s1 = new TimeSelector("a", "val_to"); diff --git a/src/test/java/org/s1ck/gdl/comparables/time/TimeLiteralTest.java b/src/test/java/org/s1ck/gdl/comparables/time/TimeLiteralTest.java index 7290da9..19219ec 100644 --- a/src/test/java/org/s1ck/gdl/comparables/time/TimeLiteralTest.java +++ b/src/test/java/org/s1ck/gdl/comparables/time/TimeLiteralTest.java @@ -2,17 +2,13 @@ import org.junit.Test; import org.s1ck.gdl.model.comparables.time.TimeLiteral; import org.s1ck.gdl.model.comparables.time.TimeSelector; -import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import static org.junit.Assert.*; -import static org.s1ck.gdl.utils.Comparator.NEQ; public class TimeLiteralTest { @@ -64,27 +60,6 @@ public void stringInitTest(){ assertTrue(millis - tl3.getMilliseconds() < 5000); } - @Test - public void unfoldPredicateTest(){ - TimeLiteral literal = new TimeLiteral("1970-02-01T15:23:05"); - TimeSelector s = new TimeSelector("x", TimeSelector.TimeField.VAL_TO); - //expected values - Comparison cEq = new Comparison(literal, Comparator.EQ, s); - Comparison cNeq = new Comparison(literal, NEQ, s); - Comparison cGt = new Comparison(literal, Comparator.GT, s); - Comparison cGte = new Comparison(literal, Comparator.GTE, s); - Comparison cLt = new Comparison(literal, Comparator.LT, s); - Comparison cLte = new Comparison(literal, Comparator.LTE, s); - - assertEquals(literal.unfoldComparison(Comparator.EQ, s), cEq); - assertEquals(literal.unfoldComparison(NEQ, s), cNeq); - assertEquals(literal.unfoldComparison(Comparator.GT, s), cGt); - assertEquals(literal.unfoldComparison(Comparator.GTE, s), cGte); - assertEquals(literal.unfoldComparison(Comparator.LT, s), cLt); - assertEquals(literal.unfoldComparison(Comparator.LTE, s), cLte); - - } - @Test public void containsTxToTest(){ TimeLiteral literal = new TimeLiteral("1970-02-01T15:23:05"); diff --git a/src/test/java/org/s1ck/gdl/comparables/time/TimeSelectorTest.java b/src/test/java/org/s1ck/gdl/comparables/time/TimeSelectorTest.java index 6aab6a3..02e93d3 100644 --- a/src/test/java/org/s1ck/gdl/comparables/time/TimeSelectorTest.java +++ b/src/test/java/org/s1ck/gdl/comparables/time/TimeSelectorTest.java @@ -8,7 +8,6 @@ import org.s1ck.gdl.model.predicates.booleans.And; import org.s1ck.gdl.model.predicates.booleans.Or; import org.s1ck.gdl.model.predicates.expressions.Comparison; -import org.s1ck.gdl.utils.Comparator; import java.util.ArrayList; import java.util.Arrays; @@ -29,27 +28,6 @@ public void selectorTest(){ assertEquals(selector.getTimeProp(), TimeSelector.TimeField.TX_FROM); } - @Test - public void unfoldPredicateTest(){ - TimeSelector selector = new TimeSelector("var", TimeSelector.TimeField.VAL_TO); - TimeSelector s2 = new TimeSelector("x", TimeSelector.TimeField.VAL_TO); - //expected values - Comparison cEq = new Comparison(selector, EQ, s2); - Comparison cNeq = new Comparison(selector, Comparator.NEQ, s2); - Comparison cGt = new Comparison(selector, Comparator.GT, s2); - Comparison cGte = new Comparison(selector, Comparator.GTE, s2); - Comparison cLt = new Comparison(selector, Comparator.LT, s2); - Comparison cLte = new Comparison(selector, Comparator.LTE, s2); - - assertEquals(selector.unfoldComparison(EQ, s2), cEq); - assertEquals(selector.unfoldComparison(Comparator.NEQ, s2), cNeq); - assertEquals(selector.unfoldComparison(Comparator.GT, s2), cGt); - assertEquals(selector.unfoldComparison(Comparator.GTE, s2), cGte); - assertEquals(selector.unfoldComparison(Comparator.LT, s2), cLt); - assertEquals(selector.unfoldComparison(Comparator.LTE, s2), cLte); - - } - @Test public void unfoldGlobalTest(){ TimeSelector globalFrom = new TimeSelector(TimeSelector.TimeField.VAL_FROM);