You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2017/04/12 19:15:01 UTC

[06/12] lucene-solr:master: SOLR-10303: Supporting epoch for LocalDateTime

SOLR-10303:  Supporting epoch for LocalDateTime


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/cf14b4be
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cf14b4be
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cf14b4be

Branch: refs/heads/master
Commit: cf14b4be034975417bbdc1185b5aef392c00ae91
Parents: c3d205c
Author: Gethin James <ge...@alfresco.com>
Authored: Sat Mar 18 10:42:19 2017 +0100
Committer: Joel Bernstein <jb...@apache.org>
Committed: Wed Apr 12 15:00:06 2017 -0400

----------------------------------------------------------------------
 .../solr/client/solrj/io/eval/DatePartEvaluator.java   |  8 +++++---
 .../solrj/io/stream/eval/DatePartEvaluatorTest.java    | 13 +++++++++++++
 2 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf14b4be/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DatePartEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DatePartEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DatePartEvaluator.java
index e18de3e..dc0e986 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DatePartEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DatePartEvaluator.java
@@ -40,7 +40,7 @@ public class DatePartEvaluator extends NumberEvaluator {
 
   public enum FUNCTION {year, month, day, dayofyear, dayofquarter, hour, minute, quarter, week, second, epoch}
 
-  private FUNCTION function;
+  private final FUNCTION function;
 
   public DatePartEvaluator(StreamExpression expression, StreamFactory factory) throws IOException {
     super(expression, factory);
@@ -110,7 +110,7 @@ public class DatePartEvaluator extends NumberEvaluator {
    * @param date
    * @return the evaluated value
    */
-  private Number evaluate(LocalDateTime date) {
+  private Number evaluate(LocalDateTime date) throws IOException {
     switch (function) {
       case year:
         return date.getYear();
@@ -132,8 +132,10 @@ public class DatePartEvaluator extends NumberEvaluator {
         return date.get(IsoFields.QUARTER_OF_YEAR);
       case week:
         return date.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
+      case epoch:
+        return date.atZone(ZoneOffset.UTC).toInstant().toEpochMilli();
     }
-    return null;
+    throw new IOException(String.format(Locale.ROOT, "Unsupported function %s called on LocalDateTime %s", function, date.toString()));
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cf14b4be/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/DatePartEvaluatorTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/DatePartEvaluatorTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/DatePartEvaluatorTest.java
index 6240bf8..703b015 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/DatePartEvaluatorTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/DatePartEvaluatorTest.java
@@ -20,6 +20,7 @@ package org.apache.solr.client.solrj.io.stream.eval;
 import java.io.IOException;
 import java.time.Instant;
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -121,6 +122,15 @@ public class DatePartEvaluatorTest {
       assertEquals("Invalid parameter 1995-12-31 - The String must be formatted in the ISO_INSTANT date format.", e.getMessage());
     }
 
+    try {
+      values.clear();
+      values.put("a", "");
+      Object result = evaluator.evaluate(new Tuple(values));
+      assertTrue(false);
+    } catch (Exception e) {
+      assertEquals("Invalid parameter  - The parameter must be a string formatted ISO_INSTANT or of type Instant,Date or LocalDateTime.", e.getMessage());
+    }
+
     values.clear();
     values.put("a", null);
     assertNull(evaluator.evaluate(new Tuple(values)));
@@ -199,12 +209,15 @@ public class DatePartEvaluatorTest {
 
   @Test
   public void testFunctionsLocalDateTime() throws Exception {
+
     LocalDateTime localDateTime = LocalDateTime.of(2017,12,5, 23, 59);
+    Date aDate = Date.from(localDateTime.atZone(ZoneOffset.UTC).toInstant());
     testFunction("year(a)", localDateTime, 2017);
     testFunction("month(a)", localDateTime, 12);
     testFunction("day(a)", localDateTime, 5);
     testFunction("hour(a)", localDateTime, 23);
     testFunction("minute(a)", localDateTime, 59);
+    testFunction("epoch(a)", localDateTime, aDate.getTime());
   }
 
   public void testFunction(String expression, Object value, Number expected) throws Exception {