Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix the fts5 xRename() method. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | fts5 |
Files: | files | file ages | folders |
SHA1: |
0f7fd51325875fbf0f1eaca3bbbd170e |
User & Date: | dan 2015-06-10 10:45:34.820 |
Context
2015-06-23
| ||
15:06 | Merge latest trunk changes with this branch. Add tests for columnsize=0. (check-in: ef44c71a22 user: dan tags: fts5) | |
2015-06-10
| ||
10:45 | Fix the fts5 xRename() method. (check-in: 0f7fd51325 user: dan tags: fts5) | |
2015-06-09
| ||
20:58 | Add the "columnsize=" option to fts5, similar to fts4's "matchinfo=fts3". (check-in: aa12f9d9b7 user: dan tags: fts5) | |
Changes
Changes to ext/fts5/fts5.c.
︙ | ︙ | |||
1999 2000 2001 2002 2003 2004 2005 | /* ** Implementation of FTS5 xRename method. Rename an fts5 table. */ static int fts5RenameMethod( sqlite3_vtab *pVtab, /* Virtual table handle */ const char *zName /* New name of table */ ){ | | | | 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 | /* ** Implementation of FTS5 xRename method. Rename an fts5 table. */ static int fts5RenameMethod( sqlite3_vtab *pVtab, /* Virtual table handle */ const char *zName /* New name of table */ ){ Fts5Table *pTab = (Fts5Table*)pVtab; return sqlite3Fts5StorageRename(pTab->pStorage, zName); } /* ** The xSavepoint() method. ** ** Flush the contents of the pending-terms table to disk. */ |
︙ | ︙ |
Changes to ext/fts5/fts5Int.h.
︙ | ︙ | |||
500 501 502 503 504 505 506 507 508 509 510 511 512 513 | #define FTS5_STMT_SCAN_DESC 1 /* SELECT rowid, * FROM ... ORDER BY 1 DESC */ #define FTS5_STMT_LOOKUP 2 /* SELECT rowid, * FROM ... WHERE rowid=? */ typedef struct Fts5Storage Fts5Storage; int sqlite3Fts5StorageOpen(Fts5Config*, Fts5Index*, int, Fts5Storage**, char**); int sqlite3Fts5StorageClose(Fts5Storage *p); int sqlite3Fts5DropAll(Fts5Config*); int sqlite3Fts5CreateTable(Fts5Config*, const char*, const char*, int, char **); int sqlite3Fts5StorageDelete(Fts5Storage *p, i64); int sqlite3Fts5StorageInsert(Fts5Storage *p, sqlite3_value **apVal, int, i64*); | > | 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 | #define FTS5_STMT_SCAN_DESC 1 /* SELECT rowid, * FROM ... ORDER BY 1 DESC */ #define FTS5_STMT_LOOKUP 2 /* SELECT rowid, * FROM ... WHERE rowid=? */ typedef struct Fts5Storage Fts5Storage; int sqlite3Fts5StorageOpen(Fts5Config*, Fts5Index*, int, Fts5Storage**, char**); int sqlite3Fts5StorageClose(Fts5Storage *p); int sqlite3Fts5StorageRename(Fts5Storage*, const char *zName); int sqlite3Fts5DropAll(Fts5Config*); int sqlite3Fts5CreateTable(Fts5Config*, const char*, const char*, int, char **); int sqlite3Fts5StorageDelete(Fts5Storage *p, i64); int sqlite3Fts5StorageInsert(Fts5Storage *p, sqlite3_value **apVal, int, i64*); |
︙ | ︙ |
Changes to ext/fts5/fts5_storage.c.
︙ | ︙ | |||
193 194 195 196 197 198 199 200 201 202 203 204 205 206 | rc = fts5ExecPrintf(pConfig->db, 0, "DROP TABLE IF EXISTS %Q.'%q_content';", pConfig->zDb, pConfig->zName ); } return rc; } /* ** Create the shadow table named zPost, with definition zDefn. Return ** SQLITE_OK if successful, or an SQLite error code otherwise. */ int sqlite3Fts5CreateTable( Fts5Config *pConfig, /* FTS5 configuration */ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | rc = fts5ExecPrintf(pConfig->db, 0, "DROP TABLE IF EXISTS %Q.'%q_content';", pConfig->zDb, pConfig->zName ); } return rc; } static void fts5StorageRenameOne( Fts5Config *pConfig, /* Current FTS5 configuration */ int *pRc, /* IN/OUT: Error code */ const char *zTail, /* Tail of table name e.g. "data", "config" */ const char *zName /* New name of FTS5 table */ ){ if( *pRc==SQLITE_OK ){ *pRc = fts5ExecPrintf(pConfig->db, 0, "ALTER TABLE %Q.'%q_%s' RENAME TO '%q_%s';", pConfig->zDb, pConfig->zName, zTail, zName, zTail ); } } int sqlite3Fts5StorageRename(Fts5Storage *pStorage, const char *zName){ Fts5Config *pConfig = pStorage->pConfig; int rc = sqlite3Fts5StorageSync(pStorage, 1); fts5StorageRenameOne(pConfig, &rc, "data", zName); fts5StorageRenameOne(pConfig, &rc, "config", zName); if( pConfig->bColumnsize ){ fts5StorageRenameOne(pConfig, &rc, "docsize", zName); } if( pConfig->eContent==FTS5_CONTENT_NORMAL ){ fts5StorageRenameOne(pConfig, &rc, "content", zName); } return rc; } /* ** Create the shadow table named zPost, with definition zDefn. Return ** SQLITE_OK if successful, or an SQLite error code otherwise. */ int sqlite3Fts5CreateTable( Fts5Config *pConfig, /* FTS5 configuration */ |
︙ | ︙ |
Added ext/fts5/test/fts5alter.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | # 2015 Jun 10 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # The tests in this file focus on renaming FTS5 tables using the # "ALTER TABLE ... RENAME TO ..." command # source [file join [file dirname [info script]] fts5_common.tcl] set testprefix fts5alter #------------------------------------------------------------------------- # Test renaming regular, contentless and columnsize=0 FTS5 tables. # do_execsql_test 1.1.0 { CREATE VIRTUAL TABLE "a x" USING fts5(a, x); INSERT INTO "a x" VALUES('a a a', 'x x x'); ALTER TABLE "a x" RENAME TO "x y"; } do_execsql_test 1.1.1 { SELECT * FROM "x y"; SELECT rowid FROM "x y" WHERE "x y" MATCH 'a' } {{a a a} {x x x} 1} do_execsql_test 1.2.0 { CREATE VIRTUAL TABLE "one/two" USING fts5(one, columnsize=0); INSERT INTO "one/two"(rowid, one) VALUES(456, 'd d d'); ALTER TABLE "one/two" RENAME TO "three/four"; } do_execsql_test 1.2.1 { SELECT * FROM "three/four"; SELECT rowid FROM "three/four" WHERE "three/four" MATCH 'd' } {{d d d} 456} do_execsql_test 1.3.0 { CREATE VIRTUAL TABLE t1 USING fts5(val, content=''); INSERT INTO t1(rowid, val) VALUES(-1, 'drop table'); INSERT INTO t1(rowid, val) VALUES(-2, 'drop view'); ALTER TABLE t1 RENAME TO t2; } do_execsql_test 1.3.1 { SELECT rowid, * FROM t2; SELECT rowid FROM t2 WHERE t2 MATCH 'table' } {-2 {} -1 {} -1} #------------------------------------------------------------------------- # Test renaming an FTS5 table within a transaction. # do_execsql_test 2.1 { CREATE VIRTUAL TABLE zz USING fts5(a); INSERT INTO zz(rowid, a) VALUES(-56, 'a b c'); BEGIN; INSERT INTO zz(rowid, a) VALUES(-22, 'a b c'); ALTER TABLE zz RENAME TO yy; SELECT rowid FROM yy WHERE yy MATCH 'a + b + c'; COMMIT; } {-56 -22} do_execsql_test 2.2 { BEGIN; ALTER TABLE yy RENAME TO ww; INSERT INTO ww(rowid, a) VALUES(-11, 'a b c'); SELECT rowid FROM ww WHERE ww MATCH 'a + b + c'; } {-56 -22 -11} do_execsql_test 2.3 { ROLLBACK; SELECT rowid FROM yy WHERE yy MATCH 'a + b + c'; } {-56 -22} finish_test |