1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +03:00

Fix an assertion fault that occurs when two different virtual tables are

used in a single UPDATE statement.
Ticket [d2f02d37f52b].

FossilOrigin-Name: ff61e0fd802c46c2d84c4b0c0bc8a0f34959bb25
This commit is contained in:
drh
2010-02-24 15:10:14 +00:00
parent 78e0fcf914
commit 5a29d9cbc5
4 changed files with 43 additions and 23 deletions

View File

@@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE----- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Hash: SHA1
C Fix\sthe\sstmt.test\stest\sscript\sso\sthat\sit\sworks\swith\sSQLITE_TEMP_STORE=3. C Fix\san\sassertion\sfault\sthat\soccurs\swhen\stwo\sdifferent\svirtual\stables\sare\nused\sin\sa\ssingle\sUPDATE\sstatement.\nTicket\s[d2f02d37f52b].
D 2010-02-23T21:08:41 D 2010-02-24T15:10:14
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -167,7 +167,7 @@ F src/printf.c f5c160b471e4a4dd22b756cb4ffe0c6979fd6d24
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
F src/resolve.c a1648d98e869937b29f4f697461fe4d60f220a7b F src/resolve.c a1648d98e869937b29f4f697461fe4d60f220a7b
F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
F src/select.c 0109b993c360d649857523abb72919e1794f9b45 F src/select.c 4113ef360430ed4e7533690ef46d06c20204adce
F src/shell.c 31cd555125a1fda4a6d8dce019690f043a8e5d75 F src/shell.c 31cd555125a1fda4a6d8dce019690f043a8e5d75
F src/sqlite.h.in a9f51302109f32e3048358122d1e38fd3ead593f F src/sqlite.h.in a9f51302109f32e3048358122d1e38fd3ead593f
F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89
@@ -743,7 +743,7 @@ F test/vtab6.test c7f290d172609d636fbfc58166eadcb55d5c117c
F test/vtab7.test a8c3c3cb3eb60be364991bd714e4927e26c4cd85 F test/vtab7.test a8c3c3cb3eb60be364991bd714e4927e26c4cd85
F test/vtab8.test e19fa4a538fcd1bb66c22825fa8f71618fb13583 F test/vtab8.test e19fa4a538fcd1bb66c22825fa8f71618fb13583
F test/vtab9.test ea58d2b95d61955f87226381716b2d0b1d4e4f9b F test/vtab9.test ea58d2b95d61955f87226381716b2d0b1d4e4f9b
F test/vtabA.test 0dcd4c81ffb56649f47d1b5fb9c5ae807ccf41f7 F test/vtabA.test c86e1990b7e1e2bb34602a06fffa4c69f2b516dc
F test/vtabB.test 04df5dc531b9f44d9ca65b9c1b79f12b5922a796 F test/vtabB.test 04df5dc531b9f44d9ca65b9c1b79f12b5922a796
F test/vtabC.test 1cf7896ab6859bfe3074244b2b0e12de5cbdd766 F test/vtabC.test 1cf7896ab6859bfe3074244b2b0e12de5cbdd766
F test/vtabD.test 74167b1578e5886fe4c886d6bef2fd1406444c42 F test/vtabD.test 74167b1578e5886fe4c886d6bef2fd1406444c42
@@ -794,14 +794,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 9f429434c0404f03a3e5c6741b769afe98a5c6c9 P 8bf710ce6dfab0e6fd4de7d6d3157008cc70d192
R bde76a4d1143f986e520d9d13648dec0 R bebac69f9e91e2bdba37c73f6ba495f8
U drh U drh
Z 0edbafdd674ccf625fff856abe89b43e Z 0be4993a1f8e20282f72f2cbfcc52d54
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux) Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFLhEPdoxKgR168RlERAtn2AJ9MgEQumymw12j/wVK7twO3+yl+LACfcJCz iD8DBQFLhUFaoxKgR168RlERAp+bAJ9aIMVDQ8Dp1bj/Ib3bZe0DoRm3AACgiGAa
zJFAoZng83uA0nnQGrI10GM= 9wkaSzZ50yED/siF1Ki8y5I=
=jzra =FpV3
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View File

@@ -1 +1 @@
8bf710ce6dfab0e6fd4de7d6d3157008cc70d192 ff61e0fd802c46c2d84c4b0c0bc8a0f34959bb25

View File

@@ -3327,7 +3327,7 @@ static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
struct SrcList_item *pFrom; struct SrcList_item *pFrom;
assert( p->selFlags & SF_Resolved ); assert( p->selFlags & SF_Resolved );
assert( (p->selFlags & SF_HasTypeInfo)==0 ); if( (p->selFlags & SF_HasTypeInfo)==0 ){
p->selFlags |= SF_HasTypeInfo; p->selFlags |= SF_HasTypeInfo;
pParse = pWalker->pParse; pParse = pWalker->pParse;
pTabList = p->pSrc; pTabList = p->pSrc;
@@ -3341,6 +3341,7 @@ static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel); selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel);
} }
} }
}
return WRC_Continue; return WRC_Continue;
} }
#endif #endif

View File

@@ -131,4 +131,23 @@ do_test vtabA-2.4 {
analyse_parse {(a whatelse can i hidden test, b HIDDEN hidden)} {a b} analyse_parse {(a whatelse can i hidden test, b HIDDEN hidden)} {a b}
} {{} {whatelse can i test} hidden} } {{} {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 finish_test