]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with running ALTER TABLE ADD COLUMN statements within a transaction...
authordrh <drh@noemail.net>
Thu, 10 Oct 2019 16:10:32 +0000 (16:10 +0000)
committerdrh <drh@noemail.net>
Thu, 10 Oct 2019 16:10:32 +0000 (16:10 +0000)
FossilOrigin-Name: a4974a0f957648afe93a1a2128d32188082e7df69fb65ac7f8f436098dcc69d1

ext/fts5/test/fts5misc.test
manifest
manifest.uuid
src/alter.c
src/vdbeaux.c

index 009f578dcea128ece7a2864cc2fe9f4853b47374..8d3742417afadbf5e66bea3db6fff6f93448ccf7 100644 (file)
@@ -59,5 +59,53 @@ do_catchsql_test 1.3.3 {
     WHERE rank = (SELECT highlight(t1, 4, '<b>', '</b>') FROM t1('*reads'));
 } {1 {no such cursor: 1}}
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 2.0 {
+  CREATE TABLE t0(c0);
+  CREATE VIRTUAL TABLE vt0 USING fts5(c0);
+}
+do_execsql_test 2.1.1 {
+  BEGIN TRANSACTION;
+  INSERT INTO vt0(c0) VALUES ('xyz');
+}
+do_execsql_test 2.1.2 {
+  ALTER TABLE t0 ADD COLUMN c5;
+}
+do_execsql_test 2.1.3 {
+  INSERT INTO vt0(vt0) VALUES('integrity-check');
+}
+do_execsql_test 2.1.4 {
+  INSERT INTO vt0(c0) VALUES ('abc');
+  COMMIT
+}
+do_execsql_test 2.1.5 {
+  INSERT INTO vt0(vt0) VALUES('integrity-check');
+}
+
+reset_db
+do_execsql_test 2.2.1 {
+  CREATE TABLE t0(c0);
+  CREATE VIRTUAL TABLE vt0 USING fts5(c0);
+  BEGIN TRANSACTION;
+  INSERT INTO vt0(c0) VALUES ('xyz');
+}
+
+breakpoint
+do_execsql_test 2.2.2 {
+  ALTER TABLE t0 RENAME TO t1;
+}
+do_execsql_test 2.2.3 {
+  INSERT INTO vt0(vt0) VALUES('integrity-check');
+}
+do_execsql_test 2.2.4 {
+  INSERT INTO vt0(c0) VALUES ('abc');
+  COMMIT;
+}
+do_execsql_test 2.2.5 {
+  INSERT INTO vt0(vt0) VALUES('integrity-check');
+}
+
+
 finish_test
 
index 4e1018edebfab50d2e1efcb1da0139293fce5d66..13ce1f3a2585cbbb1b559b01d7be890a2a842f02 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\sOP_SeekRowid\sopcode\sso\sthat\sit\sworks\scorrectly\swith\sa\sReal\sargument\nwithout\sdamaging\sthe\svalue\sin\sthe\sregister\sthat\sis\sthe\sargument.\nTicket\s[b2d4edaffdc156cc].\s\sTest\scases\sin\sTH3.
-D 2019-10-10T15:57:44.097
+C Fix\sa\sproblem\swith\srunning\sALTER\sTABLE\sADD\sCOLUMN\sstatements\swithin\sa\stransaction\sthat\swrites\sto\sone\sor\smore\svirtual\stables.\sFix\sfor\s[8fe768e9].
+D 2019-10-10T16:10:32.921
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -189,7 +189,7 @@ F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc27826807405
 F ext/fts5/test/fts5matchinfo.test 79129ff6c9a2d86943b287a5a8caa7ee639f6dcf004d8975d15c279374e82e35
 F ext/fts5/test/fts5merge.test e92a8db28b45931e7a9c7b1bbd36101692759d00274df74d83fd29d25d53b3a6
 F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd73196801dea0425c8e2
-F ext/fts5/test/fts5misc.test 5becd134b66f7370042968a2b127b92ea7748e249f16cb6a996f450812e89eec
+F ext/fts5/test/fts5misc.test 9a7263add42d55b8e22fc6ebbee2904390e923f4aa11d05fffaf617032f95db5
 F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581
 F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45
 F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c2765c3ddd2ef58bd
@@ -459,7 +459,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
-F src/alter.c 5c3031e45e80f79d7d54c2d32dd3c44926544d4f6a478858bfe4ee3191570190
+F src/alter.c 5773b28684a001dcab45adcefa3cbf5e846335c0c8fee0da8a3770cb0123bba8
 F src/analyze.c a3f4ea45cdb4e9df78d4ea7beb87ec8a7a46f494173b641cd28512a40a97bff2
 F src/attach.c 3ca19504849c2d9be10fc5899d6811f9d6e848665d1a41ffb53df0cd6e7c13ed
 F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06
@@ -601,7 +601,7 @@ F src/vdbe.c da4030a71acf42be18001b9b7067d6d34ffb76610603ce6fafa52854b9e52936
 F src/vdbe.h 3f2b571e702e77e6bf031f0236e554aedfae643e991f69000320f481408455cf
 F src/vdbeInt.h e95de5129124d77f01439e6635012adfaf23c0017bff47296126143cf18bd0c6
 F src/vdbeapi.c 95001d0f84ee3cda344fed98ca0d7961deb4fc836b83495630d0af1f7cc4789e
-F src/vdbeaux.c 7ccf418141df1c7f87b0d69510523ae522abbe47c769d1b2c15120e88fac3eb9
+F src/vdbeaux.c d17dfbf1e03ef706cad9e2076c7f2354882c191a84e73e00c69c50bb7823e5ce
 F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1
 F src/vdbemem.c d8e10d1773806105e62094c4ede0a4684f46caaf07667a45e6d461e94306b530
 F src/vdbesort.c da75f505aba230060ce6472605a4aa6494f73eeb1071e1cc2643c3d4035e671b
@@ -1846,8 +1846,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P df2060f34fcb2a38c016df92079df5b64017fa31c97b2eef51eab7a9b5b940bf
-Q +3cde82c86b963fa75192907d548febd3882c7d8fc7daf1903fadd5ca46623be1
-R 688d57f533a2b892381419566993e03a
+P b02630fe6ef666abaf07bffcae8696ce2c0047b2efef3f7d95622dd6df555ea6
+Q +31e85fbbc4cfd09a98b4a6dc6624f863816f376c6a4eef1fafc657c8e1abbc36
+R 547834c1947b3c922d3dbf6cf3cd2a11
 U drh
-Z 225b405e5ada8452f3ee794146373472
+Z 35fbe9e5ce43c60d24dcb25b7ecfaef8
index 3c1226d7a7027bb603fc83224289d844a7cc2c67..af303f99f0075bfab94ca1f250cc4f09314f7b99 100644 (file)
@@ -1 +1 @@
-b02630fe6ef666abaf07bffcae8696ce2c0047b2efef3f7d95622dd6df555ea6
\ No newline at end of file
+a4974a0f957648afe93a1a2128d32188082e7df69fb65ac7f8f436098dcc69d1
\ No newline at end of file
index 8c3fefd1bf5362ef18145e1649c7cd62ba6f8ef1..9d02d3835a91728a31c523e3c64eb9fbea878cd5 100644 (file)
@@ -435,6 +435,7 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
     goto exit_begin_add_column;
   }
 
+  sqlite3MayAbort(pParse);
   assert( pTab->addColOffset>0 );
   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
 
index fb2dd9039ad88a3eef5d447d46c73bc6472ced57..039812c55e9fbd2ea84ea00bf960587927830a65 100644 (file)
@@ -640,7 +640,7 @@ int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
     int opcode = pOp->opcode;
     if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename 
      || opcode==OP_VDestroy
-     || (opcode==OP_Function0 && pOp->p4.pFunc->funcFlags&SQLITE_FUNC_INTERNAL)
+     || (opcode==OP_ParseSchema && pOp->p4.z==0)
      || ((opcode==OP_Halt || opcode==OP_HaltIfNull) 
       && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
     ){