Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem with the processing of IN(...) constraints handled by virtual table implementations that do not set the "omit" flag when the virtual table column contains at least one NULL value. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
dcb4838757ca49cf149a6e883b3eb0ac |
User & Date: | dan 2020-01-29 15:03:01.723 |
Context
2020-01-31
| ||
14:52 | Fix a minor typo in a comment in the btreeinfo extension. (check-in: b5a66d10f4 user: drh tags: trunk) | |
2020-01-29
| ||
15:03 | Fix a problem with the processing of IN(...) constraints handled by virtual table implementations that do not set the "omit" flag when the virtual table column contains at least one NULL value. (check-in: dcb4838757 user: dan tags: trunk) | |
13:56 | Add a test case for commit [ffd8bb93]. (check-in: bcd5b37b8e user: dan tags: trunk) | |
Changes
Changes to src/wherecode.c.
︙ | ︙ | |||
1428 1429 1430 1431 1432 1433 1434 | pCompare = sqlite3PExpr(pParse, TK_EQ, 0, 0); assert( pCompare!=0 || db->mallocFailed ); if( pCompare ){ pCompare->pLeft = pTerm->pExpr->pLeft; pCompare->pRight = pRight = sqlite3Expr(db, TK_REGISTER, 0); if( pRight ){ pRight->iTable = iReg+j+2; | | > > | 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 | pCompare = sqlite3PExpr(pParse, TK_EQ, 0, 0); assert( pCompare!=0 || db->mallocFailed ); if( pCompare ){ pCompare->pLeft = pTerm->pExpr->pLeft; pCompare->pRight = pRight = sqlite3Expr(db, TK_REGISTER, 0); if( pRight ){ pRight->iTable = iReg+j+2; sqlite3ExprIfFalse( pParse, pCompare, pLevel->addrCont, SQLITE_JUMPIFNULL ); } pCompare->pLeft = 0; sqlite3ExprDelete(db, pCompare); } } } assert( iIn==0 || db->mallocFailed ); |
︙ | ︙ |
Added test/bestindex7.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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | # 2020-01-29 # # 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. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix bestindex7 ifcapable !vtab { finish_test return } register_tcl_module db proc vtab_command {src method args} { switch -- $method { xConnect { return "CREATE TABLE xxx(a)" } xBestIndex { set clist [lindex $args 0] set iCons 0 set ret [list] foreach cons $clist { catch { array unset C } array set C $cons if {$C(usable)} { lappend ret use $iCons } incr iCons } return $ret } xFilter { return [list sql "SELECT rowid, x FROM $src"] } } return {} } do_execsql_test 1.0 { CREATE TABLE t1(x); INSERT INTO t1 VALUES(0), (2); CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1); } do_execsql_test 1.1 { select * from vt1 } {0 2} do_execsql_test 1.2 { select * from vt1 WHERE a=0 } {0} do_execsql_test 1.3 { select * from vt1 WHERE a=1 } {} do_execsql_test 1.4 { select * from vt1 WHERE a=1 OR a=0} {0} do_execsql_test 1.5 { UPDATE t1 SET x=NULL WHERE x=2; } do_execsql_test 1.6 { select * from vt1 } {0 {}} do_execsql_test 1.7 { select * from vt1 WHERE a=0 } {0} do_execsql_test 1.8 { select * from vt1 WHERE a=1 } {} do_execsql_test 1.9 { select * from vt1 WHERE a=1 OR a=0} {0} do_execsql_test 1.10 { select * from vt1 WHERE a IN (2) } {} do_execsql_test 1.10 { select * from vt1 WHERE a IN (0,1,2,3) } {0} do_execsql_test 1.11 { select * from vt1 WHERE a IN (0, NULL) } {0} do_execsql_test 1.12 { select * from vt1 WHERE a IN (NULL) } {} finish_test |