Merge lp:~mmcm/akiban-server/sql-nested-map-folder into lp:~akiban-technologies/akiban-server/trunk
Status: | Merged |
---|---|
Approved by: | Thomas Jones-Low |
Approved revision: | 2728 |
Merged at revision: | 2726 |
Proposed branch: | lp:~mmcm/akiban-server/sql-nested-map-folder |
Merge into: | lp:~akiban-technologies/akiban-server/trunk |
Diff against target: |
597 lines (+314/-24) 31 files modified
src/main/java/com/akiban/sql/optimizer/rule/MapFolder.java (+33/-12) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/README.txt (+18/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-inner.expected (+18/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-inner.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-left.expected (+19/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-left.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-right.expected (+20/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-inner-right.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-inner.expected (+20/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-inner.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-left.expected (+21/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-left.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-right.expected (+20/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-left-right.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-inner.expected (+19/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-inner.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-left.expected (+19/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-left.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-right.expected (+21/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/nested-right-right.sql (+1/-0) src/test/resources/com/akiban/sql/optimizer/rule/fold-maps/schema.ddl (+4/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/README.txt (+6/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/map-join-project-nested.expected (+4/-4) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/map-join-project.expected (+3/-3) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-in-not.expected (+14/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-in-not.sql (+3/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-in.expected (+18/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-in.sql (+3/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-not-in.expected (+14/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/nested-not-in.sql (+3/-0) src/test/resources/com/akiban/sql/optimizer/rule/reverse-ins/not-in-inner.expected (+5/-5) |
To merge this branch: | bzr merge lp:~mmcm/akiban-server/sql-nested-map-folder |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Thomas Jones-Low | Approve | ||
Review via email: mp+177664@code.launchpad.net |
Description of the change
Correctly place operators added to implement non-group outer- and semi- joins.
These (NullIfEmpty, OnlyIfEmpty, Limit(1)) need to stay in the inside of the loop they are put in. They should not migrate down to faster loops the way ordinary single-row operators can.
As a consequence of this, outer joins (NullIfEmpty) need more often to materialize the join via Project. For instance, given t1 LEFT t2 LEFT t3, inside the t2 ⟕ t3 loop, If_Empty to supply a NULL t3, then Project(t2,t3) to implement that join, then outside that loop, but still inside the outer loop, If_Empty to supply the NULL of that join, then another Project to combine t1 and t2,t3 fields.
The code changes are relatively straightforward: the basic mechanisms were already in place, including adding Projects. This branch adds some more tests, so reviewers should convince themselves that the generated plans for those tests are correct for their queries. Also, several existing tests that would have duplicated rows from a semi-join are affected in similar ways.
As described.