dynamobi/dynamobi — Issue #789: [FRG-81] UNION and UNNEST Causes SQLline Crash
Author: dynamobi-build
Created: 2011-12-30 03:49:05+00:00
State: open
Labels: FRG, Statement Processing

[reporter="angel", created="Fri, 17 Mar 2006 15:12:32 -0500 (GMT-05:00)"]
There are a couple of queries with UNION and UNNEST that are causing sqlline to

crash.

1. With UNION and UNNEST

0: jdbc:farrago:> select * from unnest(values(multiset[1]) union values(multiset

[2]));

java: UncollectExecStream.cpp:106: virtual fennel::ExecStreamResult

fennel::UncollectExecStream::execute(const fennel::ExecStreamQuantum&):

Assertion `bytesWritten == inputTupleData[0].cbData' failed.

sqllineEngine: line 16: 4916 Aborted java ${SERVER_JAVA_ARGS}

${SQLLINE_JAVA_ARGS} -u jdbc:farrago: -d

net.sf.farrago.jdbc.engine.FarragoJdbcEngineDriver -n guest $*

2. With MULTISET UNION and UNNEST

0: jdbc:farrago:> select * from unnest((multiset[1] multiset union multiset

[1,2]));

java: BTreeBuilder.cpp:325: void fennel::BTreeBuilder::createEmptyRoot():

Assertion `getRootPageId() == NULL_PAGE_ID' failed.

sqllineEngine: line 16: 6978 Aborted java ${SERVER_JAVA_ARGS}

${SQLLINE_JAVA_ARGS} -u jdbc:farrago: -d

net.sf.farrago.jdbc.engine.FarragoJdbcEngineDriver -n guest $*

These testcases are in regressionsql/multiset.sql

(the behavior should be the same when running sqllineEngine directly).

I've also observed if .sql file under regressionsql, and do

"junitSingle regressionsql/multiset.sql" it gives the following

before crashing with the getRootPageId() == NULL_PAGE_ID:

0: jdbc:farrago:> values(multiset[1]) union values(multiset[2]);

Error: java.lang.AssertionError: RuleQueue already contained rel (state=,code=0)

0: jdbc:farrago:> values(multiset[1]) union all values(multiset[1]);

+-------------+

| EXPR$0 |

+-------------+

| 0001000000 |

| 0001000000 |

+-------------+

0: jdbc:farrago:> values(multiset[1]) union distinct values(multiset[1]);

Error: java.lang.AssertionError: RuleQueue already contained rel (state=,code=0)

0: jdbc:farrago:>

0: jdbc:farrago:> -- select * from unnest(values(multiset[1]) union values

(multiset[2]));

0: jdbc:farrago:>

0: jdbc:farrago:> values(multiset[1] multiset union multiset[1,2]);

If I put the .sql file under unitsql, and do

"junitSingle unitsql/multiset.sql" it gives the following

and does not crash:

0: jdbc:farrago:> values(multiset[1]) union values(multiset[2]);

Error: java.lang.AssertionError: RuleQueue already contained rel (state=,code=0)

0: jdbc:farrago:> values(multiset[1]) union all values(multiset[1]);

+-------------+

| EXPR$0 |

+-------------+

| 0001000000 |

| 0001000000 |

+-------------+

0: jdbc:farrago:> values(multiset[1]) union distinct values(multiset[1]);

Error: java.lang.AssertionError: RuleQueue already contained rel (state=,code=0)

0: jdbc:farrago:>

0: jdbc:farrago:> -- select * from unnest(values(multiset[1]) union values

(multiset[2]));

0: jdbc:farrago:>

0: jdbc:farrago:> values(multiset[1] multiset union multiset[1,2]);

0: jdbc:farrago:> values(multiset[1]) union values(multiset[2]);

+-------------+

| EXPR$0 |

+-------------+

| 0001000000 |

| 0002000000 |

+-------------+

0: jdbc:farrago:> values(multiset[1]) union all values(multiset[1]);

+-------------+

| EXPR$0 |

+-------------+

| 0001000000 |

| 0001000000 |

+-------------+

0: jdbc:farrago:> values(multiset[1]) union distinct values(multiset[1]);

+-------------+

| EXPR$0 |

+-------------+

| 0001000000 |

+-------------+

0: jdbc:farrago:>

0: jdbc:farrago:> -- select * from unnest(values(multiset[1]) union values

(multiset[2]));

0: jdbc:farrago:>

0: jdbc:farrago:> values(multiset[1] multiset union multiset[1,2]);

Error: java.lang.AssertionError: Internal error: input not found (state=,code=0)

0: jdbc:farrago:> values(multiset[1] multiset union all multiset[1,2]);

Error: java.lang.AssertionError: Internal error: input not found (state=,code=0)

0: jdbc:farrago:> values(multiset[1] multiset union distinct multiset[1,2]);

Error: java.lang.AssertionError: Internal error: input not found (state=,code=0)