The sqlite3_namelist() routine now works for all name types.

FossilOrigin-Name: e41d62175b65428567a05130725ad0547ea3e8095cbad4f71948d2d2d9697a0e
This commit is contained in:
drh
2017-07-06 18:25:27 +00:00
parent 92ed5bd646
commit ded6c1934e
3 changed files with 71 additions and 10 deletions
+6 -9
View File
@@ -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
+1 -1
View File
@@ -1 +1 @@
04ef6783a56d87ef7ddc8c58f899d2dd3f5d9c95ac435246e92a670c1eb861e9
e41d62175b65428567a05130725ad0547ea3e8095cbad4f71948d2d2d9697a0e
+64
View File
@@ -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; i<SQLITE_FUNC_HASH_SZ; i++){
FuncDef *p;
for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.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; iDb<db->nDb; 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; k<p->nCol; 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);
}