Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | 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. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | branch-3.47 |
Files: | files | file ages | folders |
SHA3-256: |
16d46e116086948a704c03b7b6aecbb2 |
User & Date: | drh 2024-11-20 15:02:34 |
Context
2024-11-20
| ||
21:45 | Cherrypick a couple of changes requested by Mozilla onto the 3.47 branch. (check-in: b50d20d7 user: drh tags: branch-3.47) | |
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) | |
11:37 | Do not report an sqlite3_error_offset() for errors that occur inside of views or triggers, since the text of those elements is not part of the original query. (check-in: cb5ddebf user: drh tags: branch-3.47) | |
Changes
Changes to src/wherecode.c.
︙ | ︙ | |||
571 572 573 574 575 576 577 578 579 580 581 582 583 584 | } 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); | > | 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | } 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 |