diff --git a/core/src/main/java/com/questdb/ql/parser/QueryCompiler.java b/core/src/main/java/com/questdb/ql/parser/QueryCompiler.java index ffe5e29a19989a34776792ca9a1f7d8a7c580329..6538590166e36df47f0a235f544143355444c9f9 100644 --- a/core/src/main/java/com/questdb/ql/parser/QueryCompiler.java +++ b/core/src/main/java/com/questdb/ql/parser/QueryCompiler.java @@ -1316,27 +1316,26 @@ public class QueryCompiler { private void optimiseSubQueries(QueryModel model, JournalReaderFactory factory) throws JournalException, ParserException { QueryModel nm = model.getNestedModel(); - collectSelectedColumns(nm, factory); - processAndConditions(model, model.getWhereClause()); - literalMatcher.of(model.getAlias() != null ? model.getAlias().token : null); - - ExprNode nmWhere = nm.getWhereClause(); - ExprNode thisWhere = null; - ObjList w = model.getParsedWhere(); - for (int i = 0, n = w.size(); i < n; i++) { - ExprNode node = w.getQuick(i); - if (literalMatcher.matches(node, selectedColumnAliases)) { - nmWhere = concatFilters(nmWhere, node); - } else { - thisWhere = concatFilters(thisWhere, node); + while (nm != null) { + collectSelectedColumns(nm, factory); + processAndConditions(model, model.getWhereClause()); + literalMatcher.of(model.getAlias() != null ? model.getAlias().token : null); + + ExprNode nmWhere = nm.getWhereClause(); + ExprNode thisWhere = null; + ObjList w = model.getParsedWhere(); + for (int i = 0, n = w.size(); i < n; i++) { + ExprNode node = w.getQuick(i); + if (literalMatcher.matches(node, selectedColumnAliases)) { + nmWhere = concatFilters(nmWhere, node); + } else { + thisWhere = concatFilters(thisWhere, node); + } } - } - - nm.setWhereClause(nmWhere); - model.setWhereClause(thisWhere); - if (nm.getNestedModel() != null) { - optimiseSubQueries(nm, factory); + nm.setWhereClause(nmWhere); + model.setWhereClause(thisWhere); + nm = nm.getNestedModel(); } } diff --git a/roadmap.md b/roadmap.md index 8c4f030937c2d09863d41ebbba6ab77743f735a1..b00688e9275d479d9666f715e24ae8469eb12a7d 100644 --- a/roadmap.md +++ b/roadmap.md @@ -19,8 +19,8 @@ __lang__ - [x] query parameters - [x] support for comments (both block /* */ and line --) - [ ] analytical clauses -- [ ] __subquery optimiser (in progress)__ -- [ ] order by optimiser +- [x] subquery optimiser +- [ ] __order by optimiser (in progress)__ __server__