Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch planner-fix Excluding Merge-Ins
This is equivalent to a diff from f8105085 to c952af89
2016-07-01
| ||
20:12 | Fix the transitive constraint logic error that can result in a null pointer dereference. Fix for ticket [e8d439c77685eca6]. (check-in: 228a7879 user: drh tags: trunk) | |
19:48 | Add test cases to the transitive constraint fix. (Closed-Leaf check-in: c952af89 user: drh tags: planner-fix) | |
12:39 | Add the sqlite3rbu_state() API. Used to determine the current state (creating OAL, ready to move OAL, incremental-checkpoint, finished or error) of an RBU operation. (Closed-Leaf check-in: 92e7df0f user: dan tags: rbu-state-api) | |
2016-06-29
| ||
05:00 | Add a prototype intarray($PTR,$N) table valued function. (check-in: 233b3338 user: drh tags: prototype-int-array) | |
2016-06-28
| ||
22:27 | Proposed fix for a problem in the query planner. (check-in: a33d2356 user: drh tags: planner-fix) | |
2016-06-26
| ||
04:06 | Prevent the WhereLoop.rSetup cost estimate from going negative on complex queries. (check-in: f8105085 user: drh tags: trunk) | |
2016-06-25
| ||
11:43 | Fix the handling of OP_Eq opcodes that compare a register against itself and that require an affinity change. (check-in: 507014e4 user: drh tags: trunk) | |
Changes to src/whereexpr.c.
︙ | ︙ | |||
781 782 783 784 785 786 787 | && (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2)) ){ return 0; } pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight); if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1; pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); | < < | | | | 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 | && (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2)) ){ return 0; } pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight); if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1; pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); zColl1 = pColl ? pColl->zName : 0; pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight); zColl2 = pColl ? pColl->zName : 0; return sqlite3_stricmp(zColl1, zColl2)==0; } /* ** Recursively walk the expressions of a SELECT statement and generate ** a bitmask indicating which tables are used in that expression ** tree. */ |
︙ | ︙ |
Added test/collateB.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | # 2016-07-01 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # Test cases for a crash bug. # set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test collateB-1.1 { CREATE TABLE t1(a INTEGER PRIMARY KEY); CREATE TABLE t2(b INTEGER PRIMARY KEY, x1 INT COLLATE NOCASE); CREATE TABLE t3(x2 INT); SELECT * FROM t3, t2, t1 WHERE x2=b AND x1=a AND a=1; } {} do_execsql_test collateB-1.2 { INSERT INTO t1(a) VALUES(1),(2),(3); INSERT INTO t2(b,x1) VALUES(11,1),(22,2),(33,3); INSERT INTO t3(x2) VALUES(11),(22),(33); SELECT *,'|' FROM t3, t2, t1 WHERE x2=b AND x1=a AND a=1; } {11 11 1 1 |} do_execsql_test collateB-1.3 { SELECT *,'|' FROM t3, t1, t2 WHERE x2=b AND x1=a AND a=1; } {11 1 11 1 |} do_execsql_test collateB-1.4 { SELECT *,'|' FROM t2, t3, t1 WHERE x2=b AND x1=a AND a=1; } {11 1 11 1 |} do_execsql_test collateB-1.5 { SELECT *,'|' FROM t2, t1, t3 WHERE x2=b AND x1=a AND a=1; } {11 1 1 11 |} do_execsql_test collateB-1.6 { SELECT *,'|' FROM t1, t2, t3 WHERE x2=b AND x1=a AND a=1; } {1 11 1 11 |} do_execsql_test collateB-1.7 { SELECT *,'|' FROM t1, t2, t3 WHERE x2=b AND x1=a AND a=1; } {1 11 1 11 |} do_execsql_test collateB-1.12 { SELECT *,'|' FROM t3, t2, t1 WHERE b=x2 AND a=x1 AND 1=a; } {11 11 1 1 |} do_execsql_test collateB-1.13 { SELECT *,'|' FROM t3, t1, t2 WHERE b=x2 AND a=x1 AND 1=a; } {11 1 11 1 |} do_execsql_test collateB-1.14 { SELECT *,'|' FROM t2, t3, t1 WHERE b=x2 AND a=x1 AND 1=a; } {11 1 11 1 |} do_execsql_test collateB-1.15 { SELECT *,'|' FROM t2, t1, t3 WHERE b=x2 AND a=x1 AND 1=a; } {11 1 1 11 |} do_execsql_test collateB-1.16 { SELECT *,'|' FROM t1, t2, t3 WHERE b=x2 AND a=x1 AND 1=a; } {1 11 1 11 |} do_execsql_test collateB-1.17 { SELECT *,'|' FROM t1, t2, t3 WHERE b=x2 AND a=x1 AND 1=a; } {1 11 1 11 |} finish_test |