Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Bug fix in the SubrtnSig logic from [c9a3498113074bbc], if a subquery is copied and then changes are made to the copy, be sure to give the copy a unique Select.selId value so that the original will not be substituted in place of the modified copy. Forum post 0b9ded2f8428ac00. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
19d1bede5654bcfa9f7a151b9b2616a3 |
User & Date: | drh 2024-11-20 14:59:32 |
Context
2024-11-20
| ||
16:21 | New configuration option --dynlink-tools causes some command-line tools like sqldiff and sqlite3_analyzer to link against the libsqlite3.so system library rather than being built-in. Caution: sqlite3_analyzer requires the SQLITE_ENABLE_DBSTAT_VTAB compile-time option on its SQLite library in order to work, so do not use --dynlink-tools to build sqlite3_analyzer without it. (check-in: 314c606d user: drh tags: trunk) | |
15:02 | If a subquery is copied and then changes are made to the copy, be sure to give the copy a unique Select.selId value so that the original will not be substituted in place of the modified copy. (check-in: 16d46e11 user: drh tags: branch-3.47) | |
14:59 | Bug fix in the SubrtnSig logic from [c9a3498113074bbc], if a subquery is copied and then changes are made to the copy, be sure to give the copy a unique Select.selId value so that the original will not be substituted in place of the modified copy. Forum post 0b9ded2f8428ac00. (check-in: 19d1bede user: drh tags: trunk) | |
14:19 | Provide the sqlite3ShowWhereTerm() interface callable interactively from a debugger, when compiling with SQLITE_DEBUG. (check-in: c77a4a42 user: drh tags: trunk) | |
Changes
Changes to src/wherecode.c.
︙ | ︙ | |||
611 612 613 614 615 616 617 618 619 620 621 622 623 624 | } sqlite3ExprListDelete(db, pOrigRhs); if( pOrigLhs ){ sqlite3ExprListDelete(db, pOrigLhs); pNew->pLeft->x.pList = pLhs; } pSelect->pEList = pRhs; if( pLhs && pLhs->nExpr==1 ){ /* Take care here not to generate a TK_VECTOR containing only a ** single value. Since the parser never creates such a vector, some ** of the subroutines do not handle this case. */ Expr *p = pLhs->a[0].pExpr; pLhs->a[0].pExpr = 0; sqlite3ExprDelete(db, pNew->pLeft); | > | 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 | } sqlite3ExprListDelete(db, pOrigRhs); if( pOrigLhs ){ sqlite3ExprListDelete(db, pOrigLhs); pNew->pLeft->x.pList = pLhs; } pSelect->pEList = pRhs; pSelect->selId = ++pParse->nSelect; /* Req'd for SubrtnSig validity */ if( pLhs && pLhs->nExpr==1 ){ /* Take care here not to generate a TK_VECTOR containing only a ** single value. Since the parser never creates such a vector, some ** of the subroutines do not handle this case. */ Expr *p = pLhs->a[0].pExpr; pLhs->a[0].pExpr = 0; sqlite3ExprDelete(db, pNew->pLeft); |
︙ | ︙ |
Changes to test/in7.test.
︙ | ︙ | |||
188 189 190 191 192 193 194 | SELECT * FROM v1 WHERE u IN w1 UNION ALL SELECT * FROM v2 WHERE u IN w2 } { 1 2 3 4 5 6 } | > | > > > > > > > > > > > > > > > > > > > > > > > > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | SELECT * FROM v1 WHERE u IN w1 UNION ALL SELECT * FROM v2 WHERE u IN w2 } { 1 2 3 4 5 6 } # 2024-11-20 https://sqlite.org/forum/forumpost/0b9ded2f8428ac00 # # Bug in SubrtnSig logic. If a SELECT statement is copied and the copy # is subsequently modified, we need to change the Select.selId on the # copy so that when the copy is used to generate code, the SubrtnSig # logic won't try to substitute the original SELECT in place of the # copy which is now different. # do_execsql_test 3.5 { DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; CREATE TABLE t1 (a int UNIQUE); CREATE TABLE t2 (b int UNIQUE); INSERT INTO t1 VALUES (1); INSERT INTO t2 VALUES (1), (2); SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 1); } {1 1} do_execsql_test 3.6 { SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 1)); } {1 1} do_execsql_test 3.7 { SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) = (1, 2); } {1 2} do_execsql_test 3.8 { SELECT t1.a, t2.b FROM t1, t2 WHERE (t1.a, t2.b) IN ((1, 2)); } {1 2} finish_test |