Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Yet another fault in the sqlite3ExprImpliesNotNull() routine, causing errors in the LEFT JOIN strength reduction optimization of check-in [dd568c27b1d76563]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
e88cf3d4df64097ebc19aae464b88d0f |
User & Date: | drh 2018-03-24 15:47:31.300 |
Context
2018-03-24
| ||
18:01 | Add testcase() macros and improve comments in the LEFT JOIN strength reduction optimization. (check-in: 5613457714 user: drh tags: trunk) | |
15:47 | Yet another fault in the sqlite3ExprImpliesNotNull() routine, causing errors in the LEFT JOIN strength reduction optimization of check-in [dd568c27b1d76563]. (check-in: e88cf3d4df user: drh tags: trunk) | |
15:08 | Fix a test script problem causing shell1.test to fail with -DSQLITE_OMIT_VIRTUAL_TABLE builds. (check-in: 2e06906e09 user: dan tags: trunk) | |
Changes
Changes to src/expr.c.
︙ | ︙ | |||
5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 | static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ case TK_ISNULL: case TK_IS: case TK_OR: case TK_CASE: case TK_FUNCTION: case TK_AGG_FUNCTION: return WRC_Prune; case TK_COLUMN: case TK_AGG_COLUMN: if( pWalker->u.iCur==pExpr->iTable ){ pWalker->eCode = 1; | > | 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 | static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; switch( pExpr->op ){ case TK_ISNULL: case TK_IS: case TK_OR: case TK_CASE: case TK_IN: case TK_FUNCTION: case TK_AGG_FUNCTION: return WRC_Prune; case TK_COLUMN: case TK_AGG_COLUMN: if( pWalker->u.iCur==pExpr->iTable ){ pWalker->eCode = 1; |
︙ | ︙ |
Changes to test/join.test.
︙ | ︙ | |||
796 797 798 799 800 801 802 803 804 805 806 807 808 809 | do_execsql_test join-15.100 { CREATE TABLE t1(a INT, b INT); INSERT INTO t1 VALUES(1,2),(3,4); CREATE TABLE t2(x INT, y INT); SELECT *, 'x' FROM t1 LEFT JOIN t2 WHERE CASE WHEN FALSE THEN a=x ELSE 1 END; } {1 2 {} {} x 3 4 {} {} x} do_execsql_test join-15.110 { DROP TABLE t1; DROP TABLE t2; CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); INSERT INTO t1(a,b) VALUES(1,0),(11,1),(12,1),(13,1),(121,12); CREATE INDEX t1b ON t1(b); | > > > > > | 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 | do_execsql_test join-15.100 { CREATE TABLE t1(a INT, b INT); INSERT INTO t1 VALUES(1,2),(3,4); CREATE TABLE t2(x INT, y INT); SELECT *, 'x' FROM t1 LEFT JOIN t2 WHERE CASE WHEN FALSE THEN a=x ELSE 1 END; } {1 2 {} {} x 3 4 {} {} x} do_execsql_test join-15.105 { SELECT *, 'x' FROM t1 LEFT JOIN t2 WHERE a IN (1,3,x,y); } {1 2 {} {} x 3 4 {} {} x} do_execsql_test join-15.110 { DROP TABLE t1; DROP TABLE t2; CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); INSERT INTO t1(a,b) VALUES(1,0),(11,1),(12,1),(13,1),(121,12); CREATE INDEX t1b ON t1(b); |
︙ | ︙ |