From: drh Date: Mon, 14 Sep 2009 23:47:24 +0000 (+0000) Subject: Make sure sufficient space is allocated for at least one VDBE cursor when X-Git-Tag: fts3-refactor~182 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3492dd71dd57d91d89b9571d80e22e563aff055d;p=thirdparty%2Fsqlite.git Make sure sufficient space is allocated for at least one VDBE cursor when autoincrement is used. Ticket [a696379c1f088]. FossilOrigin-Name: 2b2a1ef74e24857b8d18f6370894588fc2aa5ebb --- diff --git a/manifest b/manifest index 5db9c79a42..f49a5aa56e 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Set\sthe\sexecute\spermission\sbit\son\s"configure". -D 2009-09-11T18:28:53 +C Make\ssure\ssufficient\sspace\sis\sallocated\sfor\sat\sleast\sone\sVDBE\scursor\swhen\nautoincrement\sis\sused.\s\sTicket\s[a696379c1f088]. +D 2009-09-14T23:47:25 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in e360e1214027efbf62cf18ac80ec646d4081c272 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -112,7 +112,7 @@ F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7 F src/btree.c 9c425425784c5d569bc0309c22251698ba906451 F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe F src/btreeInt.h 1c86297e69380f6577e7ae67452597dd8d5c2705 -F src/build.c f7da9f9a1df77d787965d0ff07d3de53c4ccade5 +F src/build.c 713f27807db7cda05a3e38fb12ad2297413901c8 F src/callback.c f49c305dc94b78da948953c392963929c0e70f9b F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0 F src/date.c 6d936393716d21e6dc0d4222b3443137a60ebe93 @@ -240,7 +240,7 @@ F test/attachmalloc.test cf8cf17d183de357b1147a9baacbdfc85b940b61 F test/auth.test 0f1237e10ab94108a0a4b3d463ddae3bddf31ed5 F test/auth2.test ee3ba272e2b975e913afc9b041ee75706e190005 F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5 -F test/autoinc.test a5affdde12ed6c0430ac0bef02474cc21349ba9b +F test/autoinc.test 381bba4bd610747564743f15a706a4b373c29817 F test/autovacuum.test 25f891bc343a8bf5d9229e2e9ddab9f31a9ab5ec F test/autovacuum_ioerr2.test 598b0663074d3673a9c1bc9a16e80971313bafe6 F test/avtrans.test 1e901d8102706b63534dbd2bdd4d8f16c4082650 @@ -753,14 +753,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 5e0e941f3adf09c5f315e27cefdc968c59aa574e -R 09f2797eec6c38dcf42883a44801dfe6 +P f8c02b2b720e26a9ca7e35cb8015888fae538351 +R 350133137c3f0af4b0c84284f6d8572f U drh -Z 4d73a53e048e4c6a3fc7a989adce0f3d +Z b500a4abe8614a669e79470cf20f906b -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFKqpbpoxKgR168RlERAkqNAKCBPXXsOO7lGhd7TD8BQXyH7onFBQCfYHg7 -a2Oii3CV2NMkh6XCG1VK06w= -=+NPL +iD8DBQFKrtYRoxKgR168RlERAgrrAKCErouAmMYoH9zkzTR/jOkT6XOJDACfZKv+ +s9+4YOgaHtWs5h7ziUH6YfM= +=Z6jj -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index de14f304c0..06125b6148 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f8c02b2b720e26a9ca7e35cb8015888fae538351 \ No newline at end of file +2b2a1ef74e24857b8d18f6370894588fc2aa5ebb \ No newline at end of file diff --git a/src/build.c b/src/build.c index f4f62ea823..c23d92fb9b 100644 --- a/src/build.c +++ b/src/build.c @@ -196,6 +196,9 @@ void sqlite3FinishCoding(Parse *pParse){ sqlite3VdbeTrace(v, trace); #endif assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ + /* A minimum of one cursor is required if autoincrement is used + * See ticket [a696379c1f08866] */ + if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1; sqlite3VdbeMakeReady(v, pParse->nVar, pParse->nMem, pParse->nTab, pParse->nMaxArg, pParse->explain, pParse->isMultiWrite && pParse->mayAbort); diff --git a/test/autoinc.test b/test/autoinc.test index 4c8cf531eb..0207179b1a 100644 --- a/test/autoinc.test +++ b/test/autoinc.test @@ -638,4 +638,29 @@ do_test autoinc-3928.7 { } } {t3928 21 t3928c 6} +# Ticket [a696379c1f0886615541a48b35bd8181a80e88f8] +do_test autoinc-a69637.1 { + db eval { + CREATE TABLE ta69637_1(x INTEGER PRIMARY KEY AUTOINCREMENT, y); + CREATE TABLE ta69637_2(z); + CREATE TRIGGER ra69637_1 AFTER INSERT ON ta69637_2 BEGIN + INSERT INTO ta69637_1(y) VALUES(new.z+1); + END; + INSERT INTO ta69637_2 VALUES(123); + SELECT * FROM ta69637_1; + } +} {1 124} +do_test autoinc-a69637.2 { + db eval { + CREATE VIEW va69637_2 AS SELECT * FROM ta69637_2; + CREATE TRIGGER ra69637_2 INSTEAD OF INSERT ON va69637_2 BEGIN + INSERT INTO ta69637_1(y) VALUES(new.z+10000); + END; + INSERT INTO va69637_2 VALUES(123); + SELECT * FROM ta69637_1; + } +} {1 124 2 10123} + + + finish_test