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)