Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug introduced earlier today by check-in [88833a9c2849c959]. Ticket [29f635e0af71234b] |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
6e7b4527d32cc1be0294614b9d7363d4 |
User & Date: | drh 2019-09-02 22:13:06 |
Context
2019-09-03
| ||
14:27 | When we play games with COLLATE in order to commute an operator in the WHERE clause processing, be sure not to use the commuted operator to qualify a partial index, as insufficient COLLATE information is preserved to verify that the expression will correctly qualify the index. Ticket [767a8cbc6d20bd68] (check-in: 5351e920 user: drh tags: trunk) | |
2019-09-02
| ||
22:13 | Fix a bug introduced earlier today by check-in [88833a9c2849c959]. Ticket [29f635e0af71234b] (check-in: 6e7b4527 user: drh tags: trunk) | |
14:46 | Fix a potential crash in fts5 caused by using an auxiliary function on a "special" query like '*id' or '*reads'. (check-in: 9490683a user: dan tags: trunk) | |
Changes
Changes to src/expr.c.
︙ | ︙ | |||
3128 3129 3130 3131 3132 3133 3134 | assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); if( destIfNull!=destIfFalse ){ regCkNull = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_BitAnd, rLhs, rLhs, regCkNull); } bLhsReal = sqlite3ExprAffinity(pExpr->pLeft)==SQLITE_AFF_REAL; for(ii=0; ii<pList->nExpr; ii++){ | < > > > > | 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 | assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); if( destIfNull!=destIfFalse ){ regCkNull = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_BitAnd, rLhs, rLhs, regCkNull); } bLhsReal = sqlite3ExprAffinity(pExpr->pLeft)==SQLITE_AFF_REAL; for(ii=0; ii<pList->nExpr; ii++){ if( bLhsReal ){ r2 = regToFree = sqlite3GetTempReg(pParse); sqlite3ExprCode(pParse, pList->a[ii].pExpr, r2); sqlite3VdbeAddOp4(v, OP_Affinity, r2, 1, 0, "E", P4_STATIC); }else{ r2 = sqlite3ExprCodeTemp(pParse, pList->a[ii].pExpr, ®ToFree); } if( regCkNull && sqlite3ExprCanBeNull(pList->a[ii].pExpr) ){ sqlite3VdbeAddOp3(v, OP_BitAnd, regCkNull, r2, regCkNull); } if( ii<pList->nExpr-1 || destIfNull!=destIfFalse ){ sqlite3VdbeAddOp4(v, OP_Eq, rLhs, labelOk, r2, (void*)pColl, P4_COLLSEQ); |
︙ | ︙ |
Changes to test/in.test.
︙ | ︙ | |||
759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 | SELECT * FROM t0 WHERE '1' IN (t0.c0); } {} # 2019-09-02 ticket https://www.sqlite.org/src/info/2841e99d104c6436 # For the IN_INDEX_NOOP optimization, apply REAL affinity to the LHS # values prior to comparison if the RHS has REAL affinity. # do_execsql_test in-19.1 { DROP TABLE IF EXISTS t0; CREATE TABLE t0(c0 REAL UNIQUE); INSERT INTO t0(c0) VALUES(2.07093491255203046E18); SELECT 1 FROM t0 WHERE c0 IN ('2070934912552030444'); } {1} do_execsql_test in-19.2 { SELECT c0 IN ('2070934912552030444') FROM t0; } {1} do_execsql_test in-19.3 { SELECT c0 IN ('2070934912552030444',2,3) FROM t0; } {1} finish_test | > > > > > > > > > | 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 | SELECT * FROM t0 WHERE '1' IN (t0.c0); } {} # 2019-09-02 ticket https://www.sqlite.org/src/info/2841e99d104c6436 # For the IN_INDEX_NOOP optimization, apply REAL affinity to the LHS # values prior to comparison if the RHS has REAL affinity. # # Also ticket https://sqlite.org/src/info/29f635e0af71234b # do_execsql_test in-19.1 { DROP TABLE IF EXISTS t0; CREATE TABLE t0(c0 REAL UNIQUE); INSERT INTO t0(c0) VALUES(2.07093491255203046E18); SELECT 1 FROM t0 WHERE c0 IN ('2070934912552030444'); } {1} do_execsql_test in-19.2 { SELECT c0 IN ('2070934912552030444') FROM t0; } {1} do_execsql_test in-19.3 { SELECT c0 IN ('2070934912552030444',2,3) FROM t0; } {1} do_execsql_test in-19.4 { DROP TABLE t0; CREATE TABLE t0(c0 TEXT, c1 REAL, c2, PRIMARY KEY(c2, c0, c1)); CREATE INDEX i0 ON t0(c1 IN (c0)); INSERT INTO t0(c0, c2) VALUES (0, NULL) ON CONFLICT(c2, c1, c0) DO NOTHING; PRAGMA integrity_check; } {ok} finish_test |