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]