You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Till (JIRA)" <ji...@apache.org> on 2018/10/11 23:05:00 UTC

[jira] [Reopened] (ASTERIXDB-2462) Complex aggregate query puts SQL++ compiler into a recursive loop

     [ https://issues.apache.org/jira/browse/ASTERIXDB-2462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Till reopened ASTERIXDB-2462:
-----------------------------

> Complex aggregate query puts SQL++ compiler into a recursive loop
> -----------------------------------------------------------------
>
>                 Key: ASTERIXDB-2462
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-2462
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: COMP - Compiler, SQL - Translator SQL++
>    Affects Versions: 0.9.4
>            Reporter: Michael J. Carey
>            Assignee: Dmitry Lychagin
>            Priority: Critical
>
> The following query puts *DB into a compile-time loop that causes a stack overflow.
> {noformat}
> create type bat as closed {
>    id: bigint,
>    name: string,
>    nationality: string,
>    sex: string,
>    date_of_birth:string,
>    height:double?,
>    weight: double?,
>    sport: string,
>    gold: bigint,
>    silver:bigint,
>    bronze:bigint,
>    info: string? };
>  
> create dataset athletes(bat) primary key id;
>  
> /* shouldn't actually need any data for this....
> LOAD DATASET athletes USING localfs
>     (("path"="localhost://athletes.csv"),("format"="delimited-text"),
>     ("delimiter"=","),("header"="true"));
> */
>  
> with raw_data as (
>   select tobigint(a.id) as aid, sport as series,
> get_year(calendar_duration_from_datetime(current_datetime(),current_date() -
> parse_date(date_of_birth, "Y-M-D") )) as `value`
>   from athletes a
>   where sport in ["tennis", "wrestling","badminton", "golf", "basketball",
> "gymnastics"] ),
>  
> details as (
>   select t2.raw_data.`value`, t2.raw_data.series, array_count(t1) total,
> array_position(aidsByValue, t2.raw_data.aid) + 1 as row_number
>   from (select value g from raw_data group by series group as g) as t1 unnest t1
> as t2
>   let aidsByValue = (select value t1.raw_data.aid from t1 order by
> t1.raw_data.`value`)
> ),
>  
> quartiles as (
>   select t4.details.series, t4.details.`value`,
>     array_avg((
>       select value
>         case when t3.details.row_number >= (floor(t3.details.total/2.0)/2.0)
>              and  t3.details.row_number <= (floor(t3.details.total/2.0)/2.0) + 1
>         then t3.details.`value`/1.0 else null end
>       from t3 )) as q1,
>  
>     array_avg((
>       select value
>         case when t3.details.row_number >= (t3.details.total/2.0)
>              and  t3.details.row_number <= (t3.details.total/2.0) + 1
>         then t3.details.`value`/1.0 else null end
>       from t3 )) as median,
>  
>     array_avg((
>       select value
>         case when t3.details.row_number >= ceil(t3.details.total/2.0) +
> (floor(t3.details.total/2.0)/2.0)
>              and  t3.details.row_number <= ceil(t3.details.total/2.0) +
> (floor(t3.details.total/2.0)/2.0) + 1
>         then t3.details.`value`/1.0 else null end
>       from t3 )) as q3
>  
>   from (select value g from details group by series group as g) as t3 unnest t3
> as t4
> )
>  
> select series, min(`value`) AS minimum, avg(q1) AS q1, avg(median) AS median,
> avg(q3) AS q3, max(`value`) AS maximum
> from quartiles
> group by series
> order by median;
>  
> {noformat}
> The prefix of the stack trace is....
> {noformat}
> 09:51:03.773 [HttpExecutor(port:19001)-4] WARN  org.apache.hyracks.http.server.AbstractServlet - Unhandled throwable
> java.lang.StackOverflowError: null
>         at org.apache.asterix.lang.common.struct.VarIdentifier.equals(VarIdentifier.java:66) ~[asterix-lang-common-0.9.4.jar:0.9.4]
>         at java.util.Objects.equals(Objects.java:59) ~[?:1.8.0_66]
>         at org.apache.asterix.lang.common.expression.VariableExpr.equals(VariableExpr.java:83) ~[asterix-lang-common-0.9.4.jar:0.9.4]
>         at java.util.HashMap.getNode(HashMap.java:578) ~[?:1.8.0_66]
>         at java.util.HashMap.get(HashMap.java:556) ~[?:1.8.0_66]
>         at org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteExpressionVisitor.preVisit(SqlppSubstituteExpressionVisitor.java:53) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:373) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:308) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.common.expression.CallExpr.accept(CallExpr.java:62) ~[asterix-lang-common-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:373) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:308) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:66) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.common.expression.CallExpr.accept(CallExpr.java:62) ~[asterix-lang-common-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:359) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
>         at org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor.visit(AbstractSqlppSimpleExpressionVisitor.java:373) ~[asterix-lang-sqlpp-0.9.4.jar:0.9.4]
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)