From: dan Date: Tue, 24 Aug 2010 16:59:47 +0000 (+0000) Subject: Fixes to allow fts3 tables to be renamed mid-transaction. X-Git-Tag: experimental~125 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a235d0ca63860732d46a10676562cbac9d363d04;p=thirdparty%2Fsqlite.git Fixes to allow fts3 tables to be renamed mid-transaction. FossilOrigin-Name: d1c875320a045c3938c765ceb543dfba1a0ecf0b --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 16c95edae4..bbb1b945a6 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -2581,11 +2581,14 @@ static int fts3RenameMethod( const char *zName /* New name of table */ ){ Fts3Table *p = (Fts3Table *)pVtab; - sqlite3 *db; /* Database connection */ + sqlite3 *db = p->db; /* Database connection */ int rc; /* Return Code */ - - db = p->db; - rc = SQLITE_OK; + + rc = sqlite3Fts3PendingTermsFlush(p); + if( rc!=SQLITE_OK ){ + return rc; + } + fts3DbExec(&rc, db, "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';", p->zDb, p->zName, zName diff --git a/manifest b/manifest index 7843b282fb..dd93b3265c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stests\sto\se_expr.test. -D 2010-08-24T13:11:53 +C Fixes\sto\sallow\sfts3\stables\sto\sbe\srenamed\smid-transaction. +D 2010-08-24T16:59:48 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 543f91f24cd7fee774ecc0a61c19704c0c3e78fd F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -60,7 +60,7 @@ F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c e818310c473d7703f7818887a3537ec42ae0d528 +F ext/fts3/fts3.c f6436b3bcd67f8638f2acd80583d26d3fcd81de5 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h 70528ba8c33991699f96ecc64112122833cdbdb5 F ext/fts3/fts3_expr.c 42d5697731cd30fbeabd081bb3e6d3df5531f606 @@ -218,7 +218,7 @@ F src/update.c 1521162d20c2994af1fdc8833e1a88dae09052c8 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 F src/util.c 32aebf04c10e51ad3977a928b7416bed671b620b F src/vacuum.c 241a8386727c1497eba4955933356dfba6ff8c9f -F src/vdbe.c 66c262a923915e596379b1d597178e04c5d719e4 +F src/vdbe.c d735223ecacaa7f657f2e8fe3274cfc3fb4e3a04 F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h ffd68c4d4229227a5089bec53a1c635146177abc F src/vdbeapi.c d0f4407e465f261780ad725c1caece7d66a6aa35 @@ -410,7 +410,7 @@ F test/fts3ak.test bd14deafe9d1586e8e9bf032411026ac4f8c925d F test/fts3al.test 07d64326e79bbdbab20ee87fc3328fbf01641c9f F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8 F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18 -F test/fts3ao.test 0aa29dd4fc1c8d46b1f7cfe5926f7ac97551bea9 +F test/fts3ao.test 8fee868a0e131b98ce3e8907dc69936278e8b29a F test/fts3atoken.test 25c2070e1e8755d414bf9c8200427b277a9f99fa F test/fts3b.test e93bbb653e52afde110ad53bbd793f14fe7a8984 F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958 @@ -846,7 +846,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 7f2f71cc9e3c39093f09231f448576cff6afb5fe -R aba17ed62d7523dad2435b92dcbb7f3b +P 5c1c694ee1b3b71e20089412f6cba1847dc7f958 +R 25f3b83483bf6c0fefff05a4b75ff439 U dan -Z 181c658325527cf2c74e166fe7d3a968 +Z 19f58c47941c660f7043731f7e66713a diff --git a/manifest.uuid b/manifest.uuid index f651eef49e..31e50c7525 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5c1c694ee1b3b71e20089412f6cba1847dc7f958 \ No newline at end of file +d1c875320a045c3938c765ceb543dfba1a0ecf0b \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 1e7fc16752..e584820956 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -5648,6 +5648,7 @@ case OP_VRename: { assert( pName->flags & MEM_Str ); rc = pVtab->pModule->xRename(pVtab, pName->z); importVtabErrMsg(p, pVtab); + p->expired = 0; break; } diff --git a/test/fts3ao.test b/test/fts3ao.test index c3d356e8fd..ba047e953c 100644 --- a/test/fts3ao.test +++ b/test/fts3ao.test @@ -166,4 +166,38 @@ do_test fts3ao-3.3 { execsql { SELECT a, b, c FROM t1 WHERE c MATCH 'two'; } } {{one three four} {one four} {one two}} +#--------------------------------------------------------------------- +# Test that it is possible to rename an fts3 table within a +# transaction. +# +do_test fts3ao-4.1 { + execsql { + CREATE VIRTUAL TABLE t4 USING fts3; + INSERT INTO t4 VALUES('the quick brown fox'); + } +} {} +do_test fts3ao-4.2 { + execsql { + BEGIN; + INSERT INTO t4 VALUES('jumped over the'); + } +} {} +do_test fts3ao-4.3 { execsql { ALTER TABLE t4 RENAME TO t5; } } {} +do_test fts3ao-4.4 { execsql { INSERT INTO t5 VALUES('lazy dog'); } } {} +do_test fts3ao-4.5 { execsql COMMIT } {} +do_test fts3ao-4.6 { + execsql { SELECT * FROM t5 } +} {{the quick brown fox} {jumped over the} {lazy dog}} +do_test fts3ao-4.7 { + execsql { + BEGIN; + INSERT INTO t5 VALUES('Down came a jumbuck to drink at that billabong'); + ALTER TABLE t5 RENAME TO t6; + INSERT INTO t6 VALUES('Down came the troopers, one, two, three'); + ROLLBACK; + SELECT * FROM t5; + } +} {{the quick brown fox} {jumped over the} {lazy dog}} + finish_test +