[ https://issues.apache.org/jira/browse/ASTERIXDB-2794?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitry Lychagin resolved ASTERIXDB-2794. ---------------------------------------- Resolution: Fixed > SQL++ UDF inside WITH clause throws illegal state > ------------------------------------------------- > > Key: ASTERIXDB-2794 > URL: https://issues.apache.org/jira/browse/ASTERIXDB-2794 > Project: Apache AsterixDB > Issue Type: Bug > Reporter: Wail Y. Alkowaileet > Assignee: Dmitry Lychagin > Priority: Minor > > If a SQL++ UDF used inside WITH clause, it throws Illegal sate > DDL: > {code:java} > DROP DATAVERSE CS122A IF EXISTS; > CREATE DATAVERSE CS122A; > USE CS122A; > CREATE TYPE TweetType AS { > id: string > }; > CREATE DATASET Tweets(TweetType) > PRIMARY KEY id;{code} > UDF declaration: > > {code:java} > USE CS122A; > DROP FUNCTION replaceUnknown(1) IF EXISTS; > CREATE FUNCTION replaceUnknown(x) { > CASE WHEN x IS UNKNOWN THEN "" ELSE x END > }; > {code} > Query1 ({color:#00875a}works as expected{color}): > {code:java} > USE CS122A; > SELECT replaceUnknown(in_reply_to_status_id_str) > FROM Tweets > LIMIT 10 > {code} > Query 2 ({color:#de350b}throws an exception{color}): > {code:java} > USE CS122A; > WITH t as (SELECT id, extended_tweet.full_text as tweet_text, > replaceUnknown(in_reply_to_status_id_str) as replies_to, quoted_status_id_str > as quotes > FROM Tweets > LIMIT 50) > SELECT tweet_id, t[tweet_id].tweet_text, t[tweet_id].id, > t[tweet_id].replies_to, t[tweet_id].quotes > FROM range(0, 49) tweet_id > {code} > Logs: > {code:java} > 18:51:27.067 [QueryTranslator:ef93c7fb-3248-4e2e-a5b1-90ef6254d38a] INFO > org.apache.asterix.app.translator.QueryTranslator - ASX1038: Illegal state. > CS122A.replaceUnknown(1) (in line 3, at column 19)18:51:27.067 > [QueryTranslator:ef93c7fb-3248-4e2e-a5b1-90ef6254d38a] INFO > org.apache.asterix.app.translator.QueryTranslator - ASX1038: Illegal state. > CS122A.replaceUnknown(1) (in line 3, at column > 19)org.apache.asterix.common.exceptions.CompilationException: ASX1038: > Illegal state. CS122A.replaceUnknown(1) (in line 3, at column 19) at > org.apache.asterix.lang.sqlpp.visitor.CheckNonFunctionalExpressionVisitor.visit(CheckNonFunctionalExpressionVisitor.java:63) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.CheckNonFunctionalExpressionVisitor.visit(CheckNonFunctionalExpressionVisitor.java:36) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.common.expression.CallExpr.accept(CallExpr.java:80) > ~[asterix-lang-common-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:311) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:111) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:71) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.clause.Projection.accept(Projection.java:46) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:311) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visitExprList(AbstractSqlppContainsExpressionVisitor.java:317) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:137) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:127) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:121) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:71) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.struct.SetOperationInput.accept(SetOperationInput.java:65) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:142) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:158) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppContainsExpressionVisitor.visit(AbstractSqlppContainsExpressionVisitor.java:71) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.expression.SelectExpression.accept(SelectExpression.java:55) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.rewrites.visitor.InlineWithExpressionVisitor.visit(InlineWithExpressionVisitor.java:66) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.rewrites.visitor.InlineWithExpressionVisitor.visit(InlineWithExpressionVisitor.java:39) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.expression.SelectExpression.accept(SelectExpression.java:55) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:405) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:223) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor.visit(AbstractSqlppExpressionScopingVisitor.java:64) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.common.statement.Query.accept(Query.java:102) > ~[asterix-lang-common-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.rewrites.SqlppQueryRewriter.rewriteTopExpr(SqlppQueryRewriter.java:335) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.rewrites.SqlppQueryRewriter.inlineWithExpressions(SqlppQueryRewriter.java:232) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.lang.sqlpp.rewrites.SqlppQueryRewriter.rewrite(SqlppQueryRewriter.java:198) > ~[asterix-lang-sqlpp-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.api.common.APIFramework.reWriteQuery(APIFramework.java:191) > ~[asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:2826) > ~[asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.lambda$handleQuery$3(QueryTranslator.java:3331) > ~[asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.createAndRunJob(QueryTranslator.java:3463) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.deliverResult(QueryTranslator.java:3367) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.handleQuery(QueryTranslator.java:3346) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:434) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.api.http.server.QueryServiceServlet.executeStatement(QueryServiceServlet.java:417) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.api.http.server.QueryServiceServlet.handleRequest(QueryServiceServlet.java:303) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.asterix.api.http.server.QueryServiceServlet.post(QueryServiceServlet.java:143) > [asterix-app-0.9.6-SNAPSHOT.jar:0.9.6-SNAPSHOT] at > org.apache.hyracks.http.server.AbstractServlet.handle(AbstractServlet.java:93) > [hyracks-http-0.3.6-SNAPSHOT.jar:0.3.6-SNAPSHOT] at > org.apache.hyracks.http.server.HttpRequestHandler.handle(HttpRequestHandler.java:83) > [hyracks-http-0.3.6-SNAPSHOT.jar:0.3.6-SNAPSHOT] at > org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:68) > [hyracks-http-0.3.6-SNAPSHOT.jar:0.3.6-SNAPSHOT] at > org.apache.hyracks.http.server.HttpRequestHandler.call(HttpRequestHandler.java:37) > [hyracks-http-0.3.6-SNAPSHOT.jar:0.3.6-SNAPSHOT] at > java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > [?:?] at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > [?:?] at java.lang.Thread.run(Thread.java:834) [?:?] > {code} > -- This message was sent by Atlassian Jira (v8.3.4#803005)