From ded6c1934e7a2ee2f98b579c3679fba429c3f92e Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 6 Jul 2017 18:25:27 +0000 Subject: [PATCH] The sqlite3_namelist() routine now works for all name types. FossilOrigin-Name: e41d62175b65428567a05130725ad0547ea3e8095cbad4f71948d2d2d9697a0e --- manifest | 15 +++++------- manifest.uuid | 2 +- src/tokenize.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index af8ac4f555..4db3f0ea2f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Initial\simplementation\sof\sa\shighly\sexperimental\sinterface\sfor\slisting\sall\nkeywords\sand\ssymbolic\snames\sfor\san\sSQLite\sdatabase\sconnection. -D 2017-07-06T17:36:30.817 +C The\ssqlite3_namelist()\sroutine\snow\sworks\sfor\sall\sname\stypes. +D 2017-07-06T18:25:27.748 F Makefile.in 081e48dfe7f995d57ce1a88ddf4d2917b4349158648a6cd45b42beae30de3a12 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 4ebb1d257cac7fb1bcb4ba59278416d410ff1c4bf59447a9c37a415f3516056a @@ -508,7 +508,7 @@ F src/test_windirent.c 17f91f5f2aa1bb7328abb49414c363b5d2a9d3ff F src/test_windirent.h 5d67483a55442e31e1bde0f4a230e6e932ad5906 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c -F src/tokenize.c 939ad705dcd99a934921e7467e255f46b8d8005594212fc257cde4041d1d52a8 +F src/tokenize.c 81b384fcc8ee8818313da9ce7732823b03e2f126a910fcb6bb82052600de72af F src/treeview.c 6cf8d7fe9e63fae57dad1bb57f6615e14eac0c527e43d868e805042cae8ed1f7 F src/trigger.c d1cae560bfacc8bfb3a072d73658245c1714c0389097da69b4cb23877a082d7e F src/update.c c443935c652af9365e033f756550b5032d02e1b06eb2cb890ed7511ae0c051dc @@ -1628,10 +1628,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P c5ed5ebdf660501fde7cc8aefaaaeae2a68e5899a64ac93f26684842a235281d -R bb0af586f209e5b11ed2ecdf0681df64 -T *branch * experimental-namelist -T *sym-experimental-namelist * -T -sym-trunk * +P 04ef6783a56d87ef7ddc8c58f899d2dd3f5d9c95ac435246e92a670c1eb861e9 +R 5865202d3fcbf67976018c9d406f172d U drh -Z 3279b6448dfe0804da535abc64fe9bce +Z a63f9d43390938d12f22aba3f6bca9f3 diff --git a/manifest.uuid b/manifest.uuid index bed8d2a511..13720f6274 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -04ef6783a56d87ef7ddc8c58f899d2dd3f5d9c95ac435246e92a670c1eb861e9 \ No newline at end of file +e41d62175b65428567a05130725ad0547ea3e8095cbad4f71948d2d2d9697a0e \ No newline at end of file diff --git a/src/tokenize.c b/src/tokenize.c index 9521e9ea84..42e83eb5a5 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -653,6 +653,7 @@ static void addName(struct NameAccum *p, const char *zName, int nName){ char *sqlite3_namelist(sqlite3 *db, const char *zPrefix, int typeMask){ struct NameAccum x; int i; + HashElem *j; x.zPrefix = zPrefix; x.nPrefix = sqlite3Strlen30(zPrefix); sqlite3StrAccumInit(&x.x, 0, 0, 0, 100000000); @@ -661,5 +662,68 @@ char *sqlite3_namelist(sqlite3 *db, const char *zPrefix, int typeMask){ addName(&x, zKWText + aKWOffset[i], aKWLen[i]); } } + if( typeMask & SQLITE_NAMETYPE_FUNCTION ){ + for(i=0; iu.pHash){ + addName(&x, p->zName, -1); + } + } + for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){ + FuncDef *p = (FuncDef*)sqliteHashData(j); + addName(&x, p->zName, -1); + } + } + if( typeMask & SQLITE_NAMETYPE_COLLATION ){ + for(j=sqliteHashFirst(&db->aCollSeq); j; j=sqliteHashNext(j)){ + CollSeq *p = (CollSeq*)sqliteHashData(j); + addName(&x, p->zName, -1); + } + } + if( typeMask & SQLITE_NAMETYPE_MODULE ){ + for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){ + Module *p = (Module*)sqliteHashData(j); + addName(&x, p->zName, -1); + } + } + if( typeMask & (SQLITE_NAMETYPE_SCHEMA| + SQLITE_NAMETYPE_TABLE| + SQLITE_NAMETYPE_INDEX| + SQLITE_NAMETYPE_TRIGGER| + SQLITE_NAMETYPE_COLUMN) ){ + int iDb; + for(iDb=0; iDbnDb; iDb++){ + Db *pDb = &db->aDb[iDb]; + if( typeMask & SQLITE_NAMETYPE_SCHEMA ){ + addName(&x, pDb->zDbSName, -1); + } + if( typeMask & (SQLITE_NAMETYPE_TABLE|SQLITE_NAMETYPE_COLUMN) ){ + for(j=sqliteHashFirst(&pDb->pSchema->tblHash); j; j=sqliteHashNext(j)){ + Table *p = (Table*)sqliteHashData(j); + if( typeMask & SQLITE_NAMETYPE_TABLE ){ + addName(&x, p->zName, -1); + } + if( typeMask & SQLITE_NAMETYPE_COLUMN ){ + int k; + for(k=0; knCol; k++){ + addName(&x, p->aCol[k].zName, -1); + } + } + } + } + if( typeMask & SQLITE_NAMETYPE_INDEX ){ + for(j=sqliteHashFirst(&pDb->pSchema->idxHash); j; j=sqliteHashNext(j)){ + Index *p = (Index*)sqliteHashData(j); + addName(&x, p->zName, -1); + } + } + if( typeMask & SQLITE_NAMETYPE_TRIGGER ){ + for(j=sqliteHashFirst(&pDb->pSchema->trigHash); j; j=sqliteHashNext(j)){ + Trigger *p = (Trigger*)sqliteHashData(j); + addName(&x, p->zName, -1); + } + } + } + } return sqlite3StrAccumFinish(&x.x); } -- 2.47.3