You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by si...@apache.org on 2020/07/02 04:02:47 UTC
[incubator-pinot] branch master updated: SQL Compilation Fixes
(#5643)
This is an automated email from the ASF dual-hosted git repository.
siddteotia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 9678035 SQL Compilation Fixes (#5643)
9678035 is described below
commit 9678035115e3c9fb2e41a4f45176bedfb2f1af5c
Author: Sidd <si...@gmail.com>
AuthorDate: Wed Jul 1 21:02:32 2020 -0700
SQL Compilation Fixes (#5643)
* SQL compilation fixes
* Fix tests
Co-authored-by: Siddharth Teotia <st...@steotia-mn1.linkedin.biz>
---
.../apache/pinot/parsers/utils/ParserUtils.java | 14 +++
.../parsers/PinotQuery2BrokerRequestConverter.java | 11 +-
.../apache/pinot/sql/parsers/CalciteSqlParser.java | 4 +-
.../pinot/sql/parsers/CalciteSqlCompilerTest.java | 116 ++++++++++++++++-----
4 files changed, 112 insertions(+), 33 deletions(-)
diff --git a/pinot-common/src/main/java/org/apache/pinot/parsers/utils/ParserUtils.java b/pinot-common/src/main/java/org/apache/pinot/parsers/utils/ParserUtils.java
index a2201ac..9614d33 100644
--- a/pinot-common/src/main/java/org/apache/pinot/parsers/utils/ParserUtils.java
+++ b/pinot-common/src/main/java/org/apache/pinot/parsers/utils/ParserUtils.java
@@ -54,6 +54,8 @@ public class ParserUtils {
FILTER_OPERATOR_MAP.put(FilterKind.IN, FilterOperator.IN);
FILTER_OPERATOR_MAP.put(FilterKind.NOT_IN, FilterOperator.NOT_IN);
FILTER_OPERATOR_MAP.put(FilterKind.REGEXP_LIKE, FilterOperator.REGEXP_LIKE);
+ FILTER_OPERATOR_MAP.put(FilterKind.IS_NULL, FilterOperator.IS_NULL);
+ FILTER_OPERATOR_MAP.put(FilterKind.IS_NOT_NULL, FilterOperator.IS_NOT_NULL);
FILTER_OPERATOR_MAP.put(FilterKind.TEXT_MATCH, FilterOperator.TEXT_MATCH);
}
@@ -70,6 +72,18 @@ public class ParserUtils {
}
/**
+ * Utility method that returns the {@link FilterKind} for a given expression.
+ * Assumes that the passed in expression is a filter expression.
+ *
+ * @param expression Expression for which to get the filter type
+ * @return Filter Kind for the given Expression.
+ */
+ public static FilterKind getFilterKind(Expression expression) {
+ String operator = expression.getFunctionCall().getOperator();
+ return FilterKind.valueOf(operator);
+ }
+
+ /**
* Utility method to map {@link FilterKind} to {@link FilterOperator}.
*
* @param filterKind Filter kind for which to get the Filter Operator
diff --git a/pinot-common/src/main/java/org/apache/pinot/pql/parsers/PinotQuery2BrokerRequestConverter.java b/pinot-common/src/main/java/org/apache/pinot/pql/parsers/PinotQuery2BrokerRequestConverter.java
index a6b522d..31db8d7 100644
--- a/pinot-common/src/main/java/org/apache/pinot/pql/parsers/PinotQuery2BrokerRequestConverter.java
+++ b/pinot-common/src/main/java/org/apache/pinot/pql/parsers/PinotQuery2BrokerRequestConverter.java
@@ -247,11 +247,10 @@ public class PinotQuery2BrokerRequestConverter {
case IDENTIFIER:
break;
case FUNCTION:
- Function functionCall = filterExpression.getFunctionCall();
- String operator = functionCall.getOperator();
- FilterKind filterKind = FilterKind.valueOf(operator);
+ FilterKind filterKind = ParserUtils.getFilterKind(filterExpression);
FilterOperator filterOperator = ParserUtils.filterKindToOperator(filterKind);
filterQuery.setOperator(filterOperator);
+ Function functionCall = filterExpression.getFunctionCall();
List<Expression> operands = functionCall.getOperands();
switch (filterOperator) {
case AND:
@@ -272,7 +271,11 @@ public class PinotQuery2BrokerRequestConverter {
filterQuery.setColumn(ParserUtils.standardizeExpression(operands.get(0), false));
filterQuery.setValue(ParserUtils.getFilterValues(filterKind, operands));
break;
-
+ case IS_NULL:
+ case IS_NOT_NULL:
+ //first operand is the always the column
+ filterQuery.setColumn(ParserUtils.standardizeExpression(operands.get(0), false));
+ break;
default:
throw new UnsupportedOperationException("Filter UDF not supported");
}
diff --git a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
index 7bd6ecc..de14a51 100644
--- a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
+++ b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
@@ -662,7 +662,9 @@ public class CalciteSqlParser {
private static String extractFunctionName(SqlBasicCall funcSqlNode) {
String funcName = funcSqlNode.getOperator().getKind().name();
if (funcSqlNode.getOperator().getKind() == SqlKind.OTHER_FUNCTION) {
- funcName = funcSqlNode.getOperator().getName();
+ // in-built functions like REGEXP_LIKE, TEXT_MATCH, timeConvert etc that are not natively
+ // supported by Calcite grammar
+ funcName = funcSqlNode.getOperator().getName().toUpperCase();
}
if (funcName.equalsIgnoreCase(SqlKind.COUNT.toString()) && (funcSqlNode.getFunctionQuantifier() != null)
&& funcSqlNode.getFunctionQuantifier().toValue().equalsIgnoreCase(AggregationFunctionType.DISTINCT.getName())) {
diff --git a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
index a444220..826741c 100644
--- a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
+++ b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
@@ -173,7 +173,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(func.getOperands().get(2).getLiteral().getLongValue(), 80L);
pinotQuery = CalciteSqlParser.compileToPinotQuery("select * from vegetables where regexp_like(E, '^U.*')");
func = pinotQuery.getFilterExpression().getFunctionCall();
- Assert.assertEquals(func.getOperator(), "regexp_like");
+ Assert.assertEquals(func.getOperator(), "REGEXP_LIKE");
Assert.assertEquals(func.getOperands().get(0).getIdentifier().getName(), "E");
Assert.assertEquals(func.getOperands().get(1).getLiteral().getStringValue(), "^U.*");
pinotQuery = CalciteSqlParser.compileToPinotQuery("select * from vegetables where f LIKE '%potato%'");
@@ -252,16 +252,16 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(func.getOperands().get(0).getFunctionCall().getOperator(), "MINUS");
Assert
.assertEquals(func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(),
- "foo1");
+ "FOO1");
Assert
.assertEquals(func.getOperands().get(0).getFunctionCall().getOperands().get(1).getFunctionCall().getOperator(),
- "foo2");
+ "FOO2");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
- .getFunctionCall().getOperator(), "bar1");
+ .getFunctionCall().getOperator(), "BAR1");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(1).getFunctionCall().getOperands().get(0)
- .getFunctionCall().getOperator(), "bar2");
+ .getFunctionCall().getOperator(), "BAR2");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
.getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(), "MINUS");
@@ -292,16 +292,16 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(func.getOperands().get(0).getFunctionCall().getOperator(), "MINUS");
Assert
.assertEquals(func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(),
- "foo1");
+ "FOO1");
Assert
.assertEquals(func.getOperands().get(0).getFunctionCall().getOperands().get(1).getFunctionCall().getOperator(),
- "foo2");
+ "FOO2");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
- .getFunctionCall().getOperator(), "bar1");
+ .getFunctionCall().getOperator(), "BAR1");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(1).getFunctionCall().getOperands().get(0)
- .getFunctionCall().getOperator(), "bar2");
+ .getFunctionCall().getOperator(), "BAR2");
Assert.assertEquals(
func.getOperands().get(0).getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
.getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(), "MINUS");
@@ -652,7 +652,7 @@ public class CalciteSqlCompilerTest {
.getLiteral().getStringValue(), "bar");
groupbyList = pinotQuery.getGroupByList();
Assert.assertEquals(groupbyList.size(), 2);
- Assert.assertEquals(groupbyList.get(0).getFunctionCall().getOperator(), "sub");
+ Assert.assertEquals(groupbyList.get(0).getFunctionCall().getOperator(), "SUB");
Assert.assertEquals(groupbyList.get(0).getFunctionCall().getOperands().size(), 2);
Assert.assertEquals(groupbyList.get(0).getFunctionCall().getOperands().get(0).getIdentifier().getName(), "foo");
Assert.assertEquals(groupbyList.get(0).getFunctionCall().getOperands().get(1).getIdentifier().getName(), "bar");
@@ -711,7 +711,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "EQUALS");
Assert.assertEquals(
pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(),
- "timeConvert");
+ "TIMECONVERT");
Assert.assertEquals(
pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
.getIdentifier().getName(), "DaysSinceEpoch");
@@ -730,7 +730,7 @@ public class CalciteSqlCompilerTest {
public void testSelectionTransformFunction() {
PinotQuery pinotQuery = CalciteSqlParser
.compileToPinotQuery(" select mapKey(mapField,k1) from baseballStats where mapKey(mapField,k1) = 'v1'");
- Assert.assertEquals(pinotQuery.getSelectList().get(0).getFunctionCall().getOperator(), "mapKey");
+ Assert.assertEquals(pinotQuery.getSelectList().get(0).getFunctionCall().getOperator(), "MAPKEY");
Assert.assertEquals(
pinotQuery.getSelectList().get(0).getFunctionCall().getOperands().get(0).getIdentifier().getName(), "mapField");
Assert.assertEquals(
@@ -739,7 +739,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "EQUALS");
Assert.assertEquals(
pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getFunctionCall().getOperator(),
- "mapKey");
+ "MAPKEY");
Assert.assertEquals(
pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getFunctionCall().getOperands().get(0)
.getIdentifier().getName(), "mapField");
@@ -943,7 +943,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(distinctFunction.getOperands().size(), 1);
Function add = distinctFunction.getOperands().get(0).getFunctionCall();
- Assert.assertEquals(add.getOperator(), "add");
+ Assert.assertEquals(add.getOperator(), "ADD");
Assert.assertEquals(add.getOperands().size(), 2);
c1 = add.getOperands().get(0).getIdentifier();
c2 = add.getOperands().get(1).getIdentifier();
@@ -972,13 +972,13 @@ public class CalciteSqlCompilerTest {
// check for DISTINCT's first operand ADD(....)
add = distinctFunction.getOperands().get(0).getFunctionCall();
- Assert.assertEquals(add.getOperator(), "add");
+ Assert.assertEquals(add.getOperator(), "ADD");
Assert.assertEquals(add.getOperands().size(), 2);
Function div = add.getOperands().get(0).getFunctionCall();
Function mul = add.getOperands().get(1).getFunctionCall();
// check for ADD's first operand DIV(...)
- Assert.assertEquals(div.getOperator(), "div");
+ Assert.assertEquals(div.getOperator(), "DIV");
Assert.assertEquals(div.getOperands().size(), 2);
c1 = div.getOperands().get(0).getIdentifier();
c2 = div.getOperands().get(1).getIdentifier();
@@ -986,7 +986,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(c2.getName(), "col2");
// check for ADD's second operand MUL(...)
- Assert.assertEquals(mul.getOperator(), "mul");
+ Assert.assertEquals(mul.getOperator(), "MUL");
Assert.assertEquals(mul.getOperands().size(), 2);
c1 = mul.getOperands().get(0).getIdentifier();
c2 = mul.getOperands().get(1).getIdentifier();
@@ -995,7 +995,7 @@ public class CalciteSqlCompilerTest {
// check for DISTINCT's second operand SUB(...)
Function sub = distinctFunction.getOperands().get(1).getFunctionCall();
- Assert.assertEquals(sub.getOperator(), "sub");
+ Assert.assertEquals(sub.getOperator(), "SUB");
Assert.assertEquals(sub.getOperands().size(), 2);
c1 = sub.getOperands().get(0).getIdentifier();
c2 = sub.getOperands().get(1).getIdentifier();
@@ -1026,13 +1026,13 @@ public class CalciteSqlCompilerTest {
// check for DISTINCT's first operand ADD(....)
add = distinctFunction.getOperands().get(0).getFunctionCall();
- Assert.assertEquals(add.getOperator(), "add");
+ Assert.assertEquals(add.getOperator(), "ADD");
Assert.assertEquals(add.getOperands().size(), 2);
div = add.getOperands().get(0).getFunctionCall();
mul = add.getOperands().get(1).getFunctionCall();
// check for ADD's first operand DIV(...)
- Assert.assertEquals(div.getOperator(), "div");
+ Assert.assertEquals(div.getOperator(), "DIV");
Assert.assertEquals(div.getOperands().size(), 2);
c1 = div.getOperands().get(0).getIdentifier();
c2 = div.getOperands().get(1).getIdentifier();
@@ -1040,7 +1040,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(c2.getName(), "col2");
// check for ADD's second operand MUL(...)
- Assert.assertEquals(mul.getOperator(), "mul");
+ Assert.assertEquals(mul.getOperator(), "MUL");
Assert.assertEquals(mul.getOperands().size(), 2);
c1 = mul.getOperands().get(0).getIdentifier();
c2 = mul.getOperands().get(1).getIdentifier();
@@ -1049,7 +1049,7 @@ public class CalciteSqlCompilerTest {
// check for DISTINCT's second operand SUB(...)
sub = distinctFunction.getOperands().get(1).getFunctionCall();
- Assert.assertEquals(sub.getOperator(), "sub");
+ Assert.assertEquals(sub.getOperator(), "SUB");
Assert.assertEquals(sub.getOperands().size(), 2);
c1 = sub.getOperands().get(0).getIdentifier();
c2 = sub.getOperands().get(1).getIdentifier();
@@ -1527,7 +1527,7 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(
pinotQuery.getSelectList().get(0).getFunctionCall().getOperands().get(0).getIdentifier().getName(), "bar");
- Assert.assertEquals(pinotQuery.getSelectList().get(1).getFunctionCall().getOperator(), "distinctCount");
+ Assert.assertEquals(pinotQuery.getSelectList().get(1).getFunctionCall().getOperator(), "DISTINCTCOUNT");
Assert.assertEquals(
pinotQuery.getSelectList().get(1).getFunctionCall().getOperands().get(0).getIdentifier().getName(), "bar");
@@ -1557,17 +1557,17 @@ public class CalciteSqlCompilerTest {
public void testNoArgFunction() {
String query = "SELECT noArgFunc() FROM foo ";
PinotQuery pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
- Assert.assertEquals(pinotQuery.getSelectList().get(0).getFunctionCall().getOperator(), "noArgFunc");
+ Assert.assertEquals(pinotQuery.getSelectList().get(0).getFunctionCall().getOperator(), "NOARGFUNC");
query = "SELECT a FROM foo where time_col > noArgFunc()";
pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
Function greaterThan = pinotQuery.getFilterExpression().getFunctionCall();
Function minus = greaterThan.getOperands().get(0).getFunctionCall();
- Assert.assertEquals(minus.getOperands().get(1).getFunctionCall().getOperator(), "noArgFunc");
+ Assert.assertEquals(minus.getOperands().get(1).getFunctionCall().getOperator(), "NOARGFUNC");
query = "SELECT sum(a), noArgFunc() FROM foo group by noArgFunc()";
pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
- Assert.assertEquals(pinotQuery.getGroupByList().get(0).getFunctionCall().getOperator(), "noArgFunc");
+ Assert.assertEquals(pinotQuery.getGroupByList().get(0).getFunctionCall().getOperator(), "NOARGFUNC");
}
@Test
@@ -1632,13 +1632,13 @@ public class CalciteSqlCompilerTest {
Assert.assertTrue(expression.getFunctionCall() != null);
expression = CalciteSqlParser.invokeCompileTimeFunctionExpression(expression);
Assert.assertTrue(expression.getFunctionCall() != null);
- Assert.assertEquals(expression.getFunctionCall().getOperator(), "toDateTime");
+ Assert.assertEquals(expression.getFunctionCall().getOperator(), "TODATETIME");
Assert.assertEquals(expression.getFunctionCall().getOperands().get(0).getIdentifier().getName(), "playerName");
expression = CalciteSqlParser.compileToExpression("reverse(playerName)");
Assert.assertTrue(expression.getFunctionCall() != null);
expression = CalciteSqlParser.invokeCompileTimeFunctionExpression(expression);
Assert.assertTrue(expression.getFunctionCall() != null);
- Assert.assertEquals(expression.getFunctionCall().getOperator(), "reverse");
+ Assert.assertEquals(expression.getFunctionCall().getOperator(), "REVERSE");
Assert.assertEquals(expression.getFunctionCall().getOperands().get(0).getIdentifier().getName(), "playerName");
expression = CalciteSqlParser.compileToExpression("reverse('playerName')");
Assert.assertTrue(expression.getFunctionCall() != null);
@@ -1664,4 +1664,64 @@ public class CalciteSqlCompilerTest {
Assert.assertFalse(CalciteSqlParser.isLiteralOnlyExpression(CalciteSqlParser.compileToExpression("a+B")));
Assert.assertFalse(CalciteSqlParser.isLiteralOnlyExpression(CalciteSqlParser.compileToExpression("c+1")));
}
+
+ @Test
+ public void testCaseInsensitiveFilter() {
+ String query = "SELECT count(*) FROM foo where text_match(col, 'expr')";
+ PinotQuery pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ PinotQuery2BrokerRequestConverter converter = new PinotQuery2BrokerRequestConverter();
+ BrokerRequest brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "TEXT_MATCH");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.TEXT_MATCH);
+
+ query = "SELECT count(*) FROM foo where TEXT_MATCH(col, 'expr')";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "TEXT_MATCH");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.TEXT_MATCH);
+
+ query = "SELECT count(*) FROM foo where regexp_like(col, 'expr')";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "REGEXP_LIKE");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.REGEXP_LIKE);
+
+ query = "SELECT count(*) FROM foo where REGEXP_LIKE(col, 'expr')";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "REGEXP_LIKE");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.REGEXP_LIKE);
+
+ query = "SELECT count(*) FROM foo where col is not null";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "IS_NOT_NULL");
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getIdentifier().getName(), "col");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.IS_NOT_NULL);
+ Assert.assertEquals(brokerRequest.getFilterQuery().getColumn(), "col");
+
+ query = "SELECT count(*) FROM foo where col IS NOT NULL";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "IS_NOT_NULL");
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getIdentifier().getName(), "col");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.IS_NOT_NULL);
+ Assert.assertEquals(brokerRequest.getFilterQuery().getColumn(), "col");
+
+ query = "SELECT count(*) FROM foo where col is null";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "IS_NULL");
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getIdentifier().getName(), "col");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.IS_NULL);
+ Assert.assertEquals(brokerRequest.getFilterQuery().getColumn(), "col");
+
+ query = "SELECT count(*) FROM foo where col IS NULL";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ brokerRequest = converter.convert(pinotQuery);
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperator(), "IS_NULL");
+ Assert.assertEquals(pinotQuery.getFilterExpression().getFunctionCall().getOperands().get(0).getIdentifier().getName(), "col");
+ Assert.assertEquals(brokerRequest.getFilterQuery().getOperator(), FilterOperator.IS_NULL);
+ Assert.assertEquals(brokerRequest.getFilterQuery().getColumn(), "col");
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org