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

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


The following commit(s) were added to refs/heads/master by this push:
     new 240bcb8  Fix pql double quote checker exception (#7485)
240bcb8 is described below

commit 240bcb80546454d5ab449d3d3b13867f4943706d
Author: Rong Rong <[email protected]>
AuthorDate: Mon Sep 27 17:30:47 2021 -0700

    Fix pql double quote checker exception (#7485)
---
 .../function/InbuiltFunctionEvaluatorTest.java     | 19 ++++++++++
 .../local/function/InbuiltFunctionEvaluator.java   | 44 +++++++++++++++++-----
 2 files changed, 53 insertions(+), 10 deletions(-)

diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/data/function/InbuiltFunctionEvaluatorTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/data/function/InbuiltFunctionEvaluatorTest.java
index 7f7ca0c..6e1da8e 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/data/function/InbuiltFunctionEvaluatorTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/data/function/InbuiltFunctionEvaluatorTest.java
@@ -26,6 +26,7 @@ import org.testng.annotations.Test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 
 public class InbuiltFunctionEvaluatorTest {
@@ -120,6 +121,24 @@ public class InbuiltFunctionEvaluatorTest {
     assertEquals(evaluator.evaluate(row), "test test test ");
   }
 
+  @Test
+  public void testExceptionDuringInbuiltFunctionEvaluator()
+      throws Exception {
+    String expression = "fromDateTime(reverse('2020-01-01T00:00:00Z'), 
\"invalid_identifier\")";
+    InbuiltFunctionEvaluator evaluator = new 
InbuiltFunctionEvaluator(expression);
+    assertEquals(evaluator.getArguments().size(), 1);
+    GenericRow row = new GenericRow();
+    try {
+      evaluator.evaluate(row);
+      fail();
+    } catch (Exception e) {
+      // assert that exception contains the full function call signature
+      
assertTrue(e.toString().contains("fromDateTime(reverse('2020-01-01T00:00:00Z'),invalid_identifier)"));
+      // assert that FunctionInvoker ISE is captured correctly.
+      assertTrue(e.getCause() instanceof IllegalStateException);
+    }
+  }
+
   private static class MyFunc {
     String _baseString = "";
 
diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/function/InbuiltFunctionEvaluator.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/function/InbuiltFunctionEvaluator.java
index 77c3252..b5e5ce6 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/function/InbuiltFunctionEvaluator.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/function/InbuiltFunctionEvaluator.java
@@ -21,6 +21,7 @@ package org.apache.pinot.segment.local.function;
 import com.google.common.base.Preconditions;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.pinot.common.function.FunctionInfo;
 import org.apache.pinot.common.function.FunctionInvoker;
 import org.apache.pinot.common.function.FunctionRegistry;
@@ -112,22 +113,35 @@ public class InbuiltFunctionEvaluator implements 
FunctionEvaluator {
 
     @Override
     public Object execute(GenericRow row) {
-      int numArguments = _argumentNodes.length;
-      for (int i = 0; i < numArguments; i++) {
-        _arguments[i] = _argumentNodes[i].execute(row);
+      try {
+        int numArguments = _argumentNodes.length;
+        for (int i = 0; i < numArguments; i++) {
+          _arguments[i] = _argumentNodes[i].execute(row);
+        }
+        _functionInvoker.convertTypes(_arguments);
+        return _functionInvoker.invoke(_arguments);
+      } catch (Exception e) {
+        throw new RuntimeException("Caught exception while executing function: 
" + this, e);
       }
-      _functionInvoker.convertTypes(_arguments);
-      return _functionInvoker.invoke(_arguments);
     }
 
     @Override
     public Object execute(Object[] values) {
-      int numArguments = _argumentNodes.length;
-      for (int i = 0; i < numArguments; i++) {
-        _arguments[i] = _argumentNodes[i].execute(values);
+      try {
+        int numArguments = _argumentNodes.length;
+        for (int i = 0; i < numArguments; i++) {
+          _arguments[i] = _argumentNodes[i].execute(values);
+        }
+        _functionInvoker.convertTypes(_arguments);
+        return _functionInvoker.invoke(_arguments);
+      } catch (Exception e) {
+        throw new RuntimeException("Caught exception while executing function: 
" + this, e);
       }
-      _functionInvoker.convertTypes(_arguments);
-      return _functionInvoker.invoke(_arguments);
+    }
+
+    @Override
+    public String toString() {
+      return _functionInvoker.getMethod().getName() + '(' + 
StringUtils.join(_argumentNodes, ',') + ')';
     }
   }
 
@@ -147,6 +161,11 @@ public class InbuiltFunctionEvaluator implements 
FunctionEvaluator {
     public Object execute(Object[] values) {
       return _value;
     }
+
+    @Override
+    public String toString() {
+      return String.format("'%s'", _value);
+    }
   }
 
   private static class ColumnExecutionNode implements ExecutableNode {
@@ -167,5 +186,10 @@ public class InbuiltFunctionEvaluator implements 
FunctionEvaluator {
     public Object execute(Object[] values) {
       return values[_id];
     }
+
+    @Override
+    public String toString() {
+      return _column;
+    }
   }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to