Merge lp:~mmcm/akiban-server/sql-overload-complex-case into lp:~akiban-technologies/akiban-server/trunk

Proposed by Mike McMahon
Status: Merged
Approved by: Nathan Williams
Approved revision: 2669
Merged at revision: 2667
Proposed branch: lp:~mmcm/akiban-server/sql-overload-complex-case
Merge into: lp:~akiban-technologies/akiban-server/trunk
Prerequisite: lp:~mmcm/akiban-server/sql-binder-closest-table-name
Diff against target: 64 lines (+16/-4)
4 files modified
src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java (+8/-4)
src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt (+2/-0)
src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected (+5/-0)
src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql (+1/-0)
To merge this branch: bzr merge lp:~mmcm/akiban-server/sql-overload-complex-case
Reviewer Review Type Date Requested Status
Thomas Jones-Low Needs Fixing
Nathan Williams Approve
Review via email: mp+167667@code.launchpad.net

Description of the change

A CASE condition with BETWEEN (or AND) would get an error in the overload resolver.

It was calling the method meant to be used after conditions are compacted (near the end).

To post a comment you must log in.
Revision history for this message
Nathan Williams (nwilliams) wrote :

Looks good.

review: Approve
Revision history for this message
Thomas Jones-Low (tjoneslo) wrote :

There were 2 failures during build/test:

* job server-build failed at build number 4049: http://sneezy.softstart.com:8080/job/server-build/4049/

* view must-pass failed: server-build is yellow

review: Needs Fixing
Revision history for this message
Thomas Jones-Low (tjoneslo) wrote :

I'm not sure if this is an unrelated failure, or something we should be concern about because the test order changed.

com.akiban.sql.optimizer.rule.RulesTest.testRules [operator/select-1]

com.persistit.exception.RollbackException
 at com.persistit.Exchange$MvvVisitor.sawVersion(Exchange.java:231)
 at com.persistit.MVV.visitAllVersions(MVV.java:745)
 at com.persistit.Exchange.storeInternal(Exchange.java:1599)
 at com.persistit.Exchange.store(Exchange.java:1366)
 at com.persistit.Exchange.store(Exchange.java:2744)
 at com.akiban.server.service.text.FullTextIndexServiceImpl.addPopulate(FullTextIndexServiceImpl.java:639)
 at com.akiban.server.service.text.FullTextIndexServiceImpl.schedulePopulate(FullTextIndexServiceImpl.java:326)
 at com.akiban.sql.aisddl.IndexDDL.buildFullTextIndex(IndexDDL.java:371)
 at com.akiban.sql.aisddl.IndexDDL.buildIndex(IndexDDL.java:179)
 at com.akiban.sql.aisddl.IndexDDL.createIndex(IndexDDL.java:159)
 at com.akiban.server.rowdata.SchemaFactory.ais(SchemaFactory.java:128)
 at com.akiban.server.rowdata.SchemaFactory.ais(SchemaFactory.java:100)
 at com.akiban.server.rowdata.SchemaFactory.ais(SchemaFactory.java:85)
 at com.akiban.sql.optimizer.OptimizerTestBase.parseSchema(OptimizerTestBase.java:91)
 at com.akiban.sql.optimizer.OptimizerTestBase.loadSchema(OptimizerTestBase.java:100)
 at com.akiban.sql.optimizer.rule.RulesTest.loadDDL(RulesTest.java:137)
 at sun.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:601)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
 at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)

Revision history for this message
Nathan Williams (nwilliams) wrote :

Known issue, see bug1172013.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java'
--- src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java 2013-03-22 20:05:57 +0000
+++ src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java 2013-06-05 23:00:36 +0000
@@ -59,6 +59,7 @@
59import com.akiban.sql.optimizer.plan.ColumnExpression;59import com.akiban.sql.optimizer.plan.ColumnExpression;
60import com.akiban.sql.optimizer.plan.ColumnSource;60import com.akiban.sql.optimizer.plan.ColumnSource;
61import com.akiban.sql.optimizer.plan.ComparisonCondition;61import com.akiban.sql.optimizer.plan.ComparisonCondition;
62import com.akiban.sql.optimizer.plan.ConditionList;
62import com.akiban.sql.optimizer.plan.ConstantExpression;63import com.akiban.sql.optimizer.plan.ConstantExpression;
63import com.akiban.sql.optimizer.plan.Distinct;64import com.akiban.sql.optimizer.plan.Distinct;
64import com.akiban.sql.optimizer.plan.DMLStatement;65import com.akiban.sql.optimizer.plan.DMLStatement;
@@ -515,14 +516,17 @@
515 }516 }
516517
517 ExpressionNode handleIfElseExpression(IfElseExpression expression) {518 ExpressionNode handleIfElseExpression(IfElseExpression expression) {
519 ConditionList conditions = expression.getTestConditions();
518 ExpressionNode thenExpr = expression.getThenExpression();520 ExpressionNode thenExpr = expression.getThenExpression();
519 ExpressionNode elseExpr = expression.getElseExpression();521 ExpressionNode elseExpr = expression.getElseExpression();
520522
521 // constant-fold if the condition is constant523 // constant-fold if the condition is constant
522 PValueSource conditionVal = pval(expression.getTestCondition());524 if (conditions.size() == 1) {
523 if (conditionVal != null) {525 PValueSource conditionVal = pval(conditions.get(0));
524 boolean conditionMet = conditionVal.getBoolean(false);526 if (conditionVal != null) {
525 return conditionMet ? thenExpr : elseExpr;527 boolean conditionMet = conditionVal.getBoolean(false);
528 return conditionMet ? thenExpr : elseExpr;
529 }
526 }530 }
527531
528 TInstance commonInstance = commonInstance(registry.getCastsResolver(), tinst(thenExpr), tinst(elseExpr));532 TInstance commonInstance = commonInstance(registry.getCastsResolver(), tinst(thenExpr), tinst(elseExpr));
529533
=== modified file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt'
--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt 2012-10-04 20:02:24 +0000
+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt 2013-06-05 23:00:36 +0000
@@ -4,6 +4,8 @@
44
5case-2: CASE only partially worked out.5case-2: CASE only partially worked out.
66
7case-3: CASE complex condition
8
7counts: COUNT(NOT NULL column) turns into COUNT(*) but not NULL.9counts: COUNT(NOT NULL column) turns into COUNT(*) but not NULL.
810
9current-date-time: Current date / time is not a constant.11current-date-time: Current date / time is not a constant.
1012
=== added file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected'
--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected 1970-01-01 00:00:00 +0000
+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected 2013-06-05 23:00:36 +0000
@@ -0,0 +1,5 @@
1SelectQuery@1eeafb34
2 ResultSet@551222c7[_SQL_COL_1]
3 Project@19a96273[IF([customers.cid >= 1, customers.cid <= 10], customers.name, n/a)]
4 Select@3f7e792e[]
5 TableSource@7224152f(customers)
0\ No newline at end of file6\ No newline at end of file
17
=== added file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql'
--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql 1970-01-01 00:00:00 +0000
+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql 2013-06-05 23:00:36 +0000
@@ -0,0 +1,1 @@
1SELECT CASE WHEN cid BETWEEN 1 AND 10 THEN name ELSE 'n/a' END FROM customers
0\ No newline at end of file2\ No newline at end of file

Subscribers

People subscribed via source and target branches