Details
-
New Feature
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
Following is the stack trace for the query:
"select repeated_count(A) from dfs.`/tmp/input.json`; "
java.lang.NullPointerException
at org.eigenbase.sql.util.ReflectiveSqlOperatorTable.lookupOperatorOverloads(ReflectiveSqlOperatorTable.java:88) ~[optiq-core-0.6.jar:na]
at org.apache.drill.exec.planner.sql.DrillOperatorTable.lookupOperatorOverloads(DrillOperatorTable.java:76) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at org.eigenbase.sql.validate.AggFinder.visit(AggFinder.java:92) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.AggFinder.visit(AggFinder.java:32) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.SqlCall.accept(SqlCall.java:133) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.util.SqlBasicVisitor.visit(SqlBasicVisitor.java:44) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.SqlNodeList.accept(SqlNodeList.java:149) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.AggFinder.findAgg(AggFinder.java:62) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.getAgg(SqlValidatorImpl.java:2316) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.isAggregate(SqlValidatorImpl.java:2303) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:1997) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:1921) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:708) ~[optiq-core-0.6.jar:na]
at org.eigenbase.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:426) ~[optiq-core-0.6.jar:na]
at net.hydromatic.optiq.prepare.PlannerImpl.validate(PlannerImpl.java:170) ~[optiq-core-0.6.jar:na]
at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.validateNode(DefaultSqlHandler.java:101) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:86) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:85) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:323) [drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:175) [drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
In DrillOperatorTable while looking up a given operator we hit NPE because the SqlIdentifier passed in is NULL. While registering Drill functions as Optiq's SqlFunction we need to use the constructor for user defined functions. Currently we use the same constructor as used for built-in functions where the SqlIdentifier is not set.