dynamobi/dynamobi — Issue #784: [FRG-86] EXISTS fails in optimizer
Author: dynamobi-build
Created: 2011-12-30 03:48:46+00:00
State: open
Labels: FRG, Planner Framework

[reporter="jhyde", created="Wed, 22 Mar 2006 12:29:39 -0500 (GMT-05:00)"]
EXISTS fails in optimizer.

0: jdbc:farrago:> select age from sales.emps where exists (select age from

sales.emps);

Error: net.sf.saffron.runtime.SaffronError: Internal error: while visiting

tree (state=,code=0)

java.sql.SQLException: net.sf.saffron.runtime.SaffronError: Internal error:

while visiting tree

at openjava.mop.Toolbox.newInternal(Toolbox.java:1132)

at net.sf.saffron.opt.OptUtil.go(OptUtil.java:180)

at net.sf.saffron.opt.RelSubset.buildCheapestPlan(RelSubset.java:192)

at

net.sf.saffron.opt.VolcanoPlanner.findBestExp(VolcanoPlanner.java:310)

at net.sf.saffron.oj.stmt.OJStatement.prepareSql(OJStatement.java:409)

at

net.sf.farrago.query.FarragoPreparingStmt.implement(FarragoPreparingStmt.java:283)

at

net.sf.farrago.db.FarragoDatabase$1.initializeEntry(FarragoDatabase.java:546)

at

net.sf.farrago.util.FarragoObjectCache.pin(FarragoObjectCache.java:144)

at

net.sf.farrago.db.FarragoDatabase.prepareStmtImpl(FarragoDatabase.java:554)

at

net.sf.farrago.db.FarragoDatabase.prepareStmt(FarragoDatabase.java:486)

at

net.sf.farrago.db.FarragoDbSession.prepare(FarragoDbSession.java:550)

at

net.sf.farrago.db.FarragoDbStmtContext.prepare(FarragoDbStmtContext.java:125)

at

net.sf.farrago.jdbc.engine.FarragoJdbcEngineStatement.execute(FarragoJdbcEngineStatement.java:106)

at sqlline.SqlLine$Commands.sql(SqlLine.java:3501)

at sqlline.SqlLine.dispatch(SqlLine.java:911)

at sqlline.SqlLine.begin(SqlLine.java:762)

at sqlline.SqlLine.mainWithInputRedirection(SqlLine.java:436)

at sqlline.SqlLine.main(SqlLine.java:419)

------- Comment #5 From Julian Hyde 2005-11-08 14:06 [reply] -------

The fix would be in the SQL to Rel translation process. We now have the right relational expression -- CorrelatorRel -- to translate to.

We would also have to make sure that the validation is being done correctly, and update the spec for how EXISTS interacts with streaming queries (is it OK to write 'select * from aTable where exists (select * from aStream)'?)