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)