Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an assertion fault that occurs when two different virtual tables are used in a single UPDATE statement. Ticket [d2f02d37f52b]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ff61e0fd802c46c2d84c4b0c0bc8a0f3 |
User & Date: | drh 2010-02-24 15:10:14.000 |
Context
2010-02-24
| ||
17:15 | Enhancements to the way errors are reported up when an automatic statement reprepare fails. (check-in: 1a6d4bb130 user: drh tags: trunk) | |
15:10 | Fix an assertion fault that occurs when two different virtual tables are used in a single UPDATE statement. Ticket [d2f02d37f52b]. (check-in: ff61e0fd80 user: drh tags: trunk) | |
2010-02-23
| ||
21:08 | Fix the stmt.test test script so that it works with SQLITE_TEMP_STORE=3. (check-in: 8bf710ce6d user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
3323 3324 3325 3326 3327 3328 3329 | static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ Parse *pParse; int i; SrcList *pTabList; struct SrcList_item *pFrom; assert( p->selFlags & SF_Resolved ); | | | | | | | | | | | | | > | 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 | static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ Parse *pParse; int i; SrcList *pTabList; struct SrcList_item *pFrom; assert( p->selFlags & SF_Resolved ); if( (p->selFlags & SF_HasTypeInfo)==0 ){ p->selFlags |= SF_HasTypeInfo; pParse = pWalker->pParse; pTabList = p->pSrc; for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){ Table *pTab = pFrom->pTab; if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){ /* A sub-query in the FROM clause of a SELECT */ Select *pSel = pFrom->pSelect; assert( pSel ); while( pSel->pPrior ) pSel = pSel->pPrior; selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel); } } } return WRC_Continue; } #endif |
︙ | ︙ |
Changes to test/vtabA.test.
︙ | ︙ | |||
127 128 129 130 131 132 133 134 | analyse_parse {(a HiDden, b HIDDEN, c hidden)} {a b c} } {{} {} {} {}} do_test vtabA-2.4 { analyse_parse {(a whatelse can i hidden test, b HIDDEN hidden)} {a b} } {{} {whatelse can i test} hidden} finish_test | > > > > > > > > > > > > > > > > > > > | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | analyse_parse {(a HiDden, b HIDDEN, c hidden)} {a b c} } {{} {} {} {}} do_test vtabA-2.4 { analyse_parse {(a whatelse can i hidden test, b HIDDEN hidden)} {a b} } {{} {whatelse can i test} hidden} # Ticket [d2f02d37f52bfe23e421f2c60fbb8586ac76ff01]: # assertion failure on an UPDATE involving two virtual tables. # do_test vtabA-3.1 { db eval { DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2); CREATE TABLE t2(x,y); INSERT INTO t2 VALUES(3,4); CREATE VIRTUAL TABLE vt1 USING echo(t1); CREATE VIRTUAL TABLE vt2 USING echo(t2); UPDATE vt2 SET x=(SELECT a FROM vt1 WHERE b=2) WHERE y=4; SELECT * FROM t2; } } {1 4} finish_test |