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
1=== modified file 'src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java'
2--- src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java 2013-03-22 20:05:57 +0000
3+++ src/main/java/com/akiban/sql/optimizer/rule/OverloadAndTInstanceResolver.java 2013-06-05 23:00:36 +0000
4@@ -59,6 +59,7 @@
5 import com.akiban.sql.optimizer.plan.ColumnExpression;
6 import com.akiban.sql.optimizer.plan.ColumnSource;
7 import com.akiban.sql.optimizer.plan.ComparisonCondition;
8+import com.akiban.sql.optimizer.plan.ConditionList;
9 import com.akiban.sql.optimizer.plan.ConstantExpression;
10 import com.akiban.sql.optimizer.plan.Distinct;
11 import com.akiban.sql.optimizer.plan.DMLStatement;
12@@ -515,14 +516,17 @@
13 }
14
15 ExpressionNode handleIfElseExpression(IfElseExpression expression) {
16+ ConditionList conditions = expression.getTestConditions();
17 ExpressionNode thenExpr = expression.getThenExpression();
18 ExpressionNode elseExpr = expression.getElseExpression();
19
20 // constant-fold if the condition is constant
21- PValueSource conditionVal = pval(expression.getTestCondition());
22- if (conditionVal != null) {
23- boolean conditionMet = conditionVal.getBoolean(false);
24- return conditionMet ? thenExpr : elseExpr;
25+ if (conditions.size() == 1) {
26+ PValueSource conditionVal = pval(conditions.get(0));
27+ if (conditionVal != null) {
28+ boolean conditionMet = conditionVal.getBoolean(false);
29+ return conditionMet ? thenExpr : elseExpr;
30+ }
31 }
32
33 TInstance commonInstance = commonInstance(registry.getCastsResolver(), tinst(thenExpr), tinst(elseExpr));
34
35=== modified file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt'
36--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt 2012-10-04 20:02:24 +0000
37+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/README.txt 2013-06-05 23:00:36 +0000
38@@ -4,6 +4,8 @@
39
40 case-2: CASE only partially worked out.
41
42+case-3: CASE complex condition
43+
44 counts: COUNT(NOT NULL column) turns into COUNT(*) but not NULL.
45
46 current-date-time: Current date / time is not a constant.
47
48=== added file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected'
49--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected 1970-01-01 00:00:00 +0000
50+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.expected 2013-06-05 23:00:36 +0000
51@@ -0,0 +1,5 @@
52+SelectQuery@1eeafb34
53+ ResultSet@551222c7[_SQL_COL_1]
54+ Project@19a96273[IF([customers.cid >= 1, customers.cid <= 10], customers.name, n/a)]
55+ Select@3f7e792e[]
56+ TableSource@7224152f(customers)
57\ No newline at end of file
58
59=== added file 'src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql'
60--- src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql 1970-01-01 00:00:00 +0000
61+++ src/test/resources/com/akiban/sql/optimizer/rule/fold-constants/case-3.sql 2013-06-05 23:00:36 +0000
62@@ -0,0 +1,1 @@
63+SELECT CASE WHEN cid BETWEEN 1 AND 10 THEN name ELSE 'n/a' END FROM customers
64\ No newline at end of file

Subscribers

People subscribed via source and target branches