Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
0.9.4
-
None
Description
The following query puts *DB into a compile-time loop that causes a stack overflow.
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;
The prefix of the stack trace is....
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]