Skip to content

Commit

Permalink
Support DateTime comparison (#92)
Browse files Browse the repository at this point in the history
Add support for comparison operators on DateTime objects.

Fixes #86
  • Loading branch information
edmundoa authored and kroepke committed Aug 18, 2016
1 parent 9df80a1 commit eaac20b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import org.antlr.v4.runtime.Token;
import org.graylog.plugins.pipelineprocessor.EvaluationContext;
import org.joda.time.DateTime;

public class ComparisonExpression extends BinaryExpression implements LogicalExpression {
private final String operator;
Expand All @@ -42,11 +43,15 @@ public boolean evaluateBool(EvaluationContext context) {

final Object leftValue = this.left.evaluateUnsafe(context);
final Object rightValue = this.right.evaluateUnsafe(context);
if (leftValue instanceof DateTime && rightValue instanceof DateTime) {
return compareDateTimes(operator, (DateTime) leftValue, (DateTime) rightValue);
}

if (leftValue instanceof Double || rightValue instanceof Double) {
return compareDouble(operator, (double) leftValue, (double) rightValue);
} else {
return compareLong(operator, (long) leftValue, (long) rightValue);
}

return compareLong(operator, (long) leftValue, (long) rightValue);
}

@SuppressWarnings("Duplicates")
Expand Down Expand Up @@ -81,6 +86,21 @@ private boolean compareDouble(String operator, double left, double right) {
}
}

private boolean compareDateTimes(String operator, DateTime left, DateTime right) {
switch (operator) {
case ">":
return left.isAfter(right);
case ">=":
return !left.isBefore(right);
case "<":
return left.isBefore(right);
case "<=":
return !left.isAfter(right);
default:
return false;
}
}

@Override
public String toString() {
return left.toString() + " " + operator + " " + right.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,15 @@ when
now("CET") == now("UTC") &&
now("CET") == now() &&
flex_parse_date(value: "30th July 2010 18:03:25 ", timezone: "CET") == parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
format_date(flex_parse_date("30th July 2010 18:03:25"), "yyyy-MM-dd") == "2010-07-30"
format_date(flex_parse_date("30th July 2010 18:03:25"), "yyyy-MM-dd") == "2010-07-30" &&
parse_date("2010-07-30T18:03:24+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") < parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
!(parse_date("2010-07-30T18:03:24+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") >= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") > parse_date("2010-07-30T16:03:24Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
!(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") <= parse_date("2010-07-30T16:03:24Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") <= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
!(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") > parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ")) &&
parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") >= parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ") &&
!(parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ") < parse_date("2010-07-30T16:03:25Z", "yyyy-MM-dd'T'HH:mm:ssZZ"))
then
trigger_test();
let date = parse_date("2010-07-30T18:03:25+02:00", "yyyy-MM-dd'T'HH:mm:ssZZ");
Expand Down

0 comments on commit eaac20b

Please sign in to comment.