You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by gi...@apache.org on 2021/11/08 18:25:39 UTC

[druid] branch master updated: RowAdapter: Add a default implementation for timestampFunction. (#11885)

This is an automated email from the ASF dual-hosted git repository.

gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new a5bd0b8  RowAdapter: Add a default implementation for timestampFunction. (#11885)
a5bd0b8 is described below

commit a5bd0b8cc023b771ef95f1e46c19961f50e05900
Author: Gian Merlino <gi...@gmail.com>
AuthorDate: Mon Nov 8 10:25:13 2021 -0800

    RowAdapter: Add a default implementation for timestampFunction. (#11885)
    
    Enables simpler implementations for adapters that want to treat the
    timestamp as "just another column".
---
 .../org/apache/druid/query/InlineDataSource.java   | 32 ++++------------------
 .../java/org/apache/druid/segment/RowAdapter.java  | 19 ++++++++++++-
 .../query/scan/ScanQueryResultOrderingTest.java    | 25 ++++-------------
 3 files changed, 30 insertions(+), 46 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/query/InlineDataSource.java b/processing/src/main/java/org/apache/druid/query/InlineDataSource.java
index 4206732..163bb98 100644
--- a/processing/src/main/java/org/apache/druid/query/InlineDataSource.java
+++ b/processing/src/main/java/org/apache/druid/query/InlineDataSource.java
@@ -27,7 +27,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.segment.RowAdapter;
-import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
 
@@ -37,8 +36,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-import java.util.function.Function;
-import java.util.function.ToLongFunction;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -196,30 +193,13 @@ public class InlineDataSource implements DataSource
 
   public RowAdapter<Object[]> rowAdapter()
   {
-    return new RowAdapter<Object[]>()
-    {
-      @Override
-      public ToLongFunction<Object[]> timestampFunction()
-      {
-        final int columnNumber = signature.indexOf(ColumnHolder.TIME_COLUMN_NAME);
-
-        if (columnNumber >= 0) {
-          return row -> (long) row[columnNumber];
-        } else {
-          return row -> 0L;
-        }
-      }
+    return columnName -> {
+      final int columnNumber = signature.indexOf(columnName);
 
-      @Override
-      public Function<Object[], Object> columnFunction(String columnName)
-      {
-        final int columnNumber = signature.indexOf(columnName);
-
-        if (columnNumber >= 0) {
-          return row -> row[columnNumber];
-        } else {
-          return row -> null;
-        }
+      if (columnNumber >= 0) {
+        return row -> row[columnNumber];
+      } else {
+        return row -> null;
       }
     };
   }
diff --git a/processing/src/main/java/org/apache/druid/segment/RowAdapter.java b/processing/src/main/java/org/apache/druid/segment/RowAdapter.java
index 603d349..e1317e7 100644
--- a/processing/src/main/java/org/apache/druid/segment/RowAdapter.java
+++ b/processing/src/main/java/org/apache/druid/segment/RowAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.druid.segment;
 
+import org.apache.druid.segment.column.ColumnHolder;
+
 import java.util.function.Function;
 import java.util.function.ToLongFunction;
 
@@ -30,8 +32,23 @@ public interface RowAdapter<RowType>
 {
   /**
    * Returns a function that retrieves timestamps from rows.
+   *
+   * The default implementation delegates to {@link #columnFunction} and expects it to already contain long-typed
+   * values or nulls. Nulls, if present, will be converted to zeroes.
    */
-  ToLongFunction<RowType> timestampFunction();
+  default ToLongFunction<RowType> timestampFunction()
+  {
+    final Function<RowType, Object> timeColumnFunction = columnFunction(ColumnHolder.TIME_COLUMN_NAME);
+    return row -> {
+      final Object obj = timeColumnFunction.apply(row);
+
+      if (obj == null) {
+        return 0L;
+      } else {
+        return (long) obj;
+      }
+    };
+  }
 
   /**
    * Returns a function that retrieves the value for column "columnName" from rows.
diff --git a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
index 002d809..4433fc0 100644
--- a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
+++ b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryResultOrderingTest.java
@@ -56,8 +56,6 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
-import java.util.function.Function;
-import java.util.function.ToLongFunction;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -72,24 +70,13 @@ public class ScanQueryResultOrderingTest
   private static final String DATASOURCE = "datasource";
   private static final String ID_COLUMN = "id";
 
-  private static final RowAdapter<Object[]> ROW_ADAPTER = new RowAdapter<Object[]>()
-  {
-    @Override
-    public ToLongFunction<Object[]> timestampFunction()
-    {
+  private static final RowAdapter<Object[]> ROW_ADAPTER = columnName -> {
+    if (ID_COLUMN.equals(columnName)) {
+      return row -> row[1];
+    } else if (ColumnHolder.TIME_COLUMN_NAME.equals(columnName)) {
       return row -> ((DateTime) row[0]).getMillis();
-    }
-
-    @Override
-    public Function<Object[], Object> columnFunction(String columnName)
-    {
-      if (ID_COLUMN.equals(columnName)) {
-        return row -> row[1];
-      } else if (ColumnHolder.TIME_COLUMN_NAME.equals(columnName)) {
-        return timestampFunction()::applyAsLong;
-      } else {
-        return row -> null;
-      }
+    } else {
+      return row -> null;
     }
   };
 

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org