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

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

Michael J. Carey created ASTERIXDB-2462:
-------------------------------------------

             Summary: 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


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)