Avoid returning duplicate rows in experimental pragmas "pragma_list",

"module_list" and "function_list".

FossilOrigin-Name: b79cc8dc88c8ae03daff1290fd650b2b0e6f673ec9d83be6a533a57172930190
This commit is contained in:
dan 2017-08-25 09:17:14 +00:00
parent 9c6e07d2fa
commit 1c305122a2
4 changed files with 73 additions and 12 deletions

View File

@ -1,5 +1,5 @@
C Fix\san\sincorrect\shyperlink\sin\sa\scomment.
D 2017-08-24T20:54:42.754
C Avoid\sreturning\sduplicate\srows\sin\sexperimental\spragmas\s"pragma_list",\n"module_list"\sand\s"function_list".
D 2017-08-25T09:17:14.786
F Makefile.in c644bbe8ebe4aae82ad6783eae6b6beea4c727b99ff97568b847ced5e2ac7afb
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 25b154da7f0b3d4924f27378c1f8d006285b80811f1ccf3ed953dbebf6282136
@ -449,7 +449,7 @@ F src/parse.y 52ef3cecd0934e9da4a45b585883a03243ad615d338ad94f44501a05891dcdfa
F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870
F src/pcache.h 521bb9610d38ef17a3cc9b5ddafd4546c2ea67fa3d0e464823d73c2a28d50e11
F src/pcache1.c 0b793738b5dddaf0a645784835c6b5557b1ecfaee339af9c26810c6ecdb273aa
F src/pragma.c cd6aeda3587be6c5c08f9b2d45eae6068666a03c9d077c8c43cdb85fb0aa70f2
F src/pragma.c a4e5028dfc8af4c5c347cd0e91bd2f0c0f81fcd9b2c6e0acf8da7da51df7f1fe
F src/pragma.h bb83728944b42f6d409c77f5838a8edbdb0fe83046c5496ffc9602b40340a324
F src/prepare.c 9e880c0efb5d7f9101bb34c0a87daf6e1e5284c34024fdb811e67bb02fdd299b
F src/printf.c 40aee47ae9be4bd3dbdc8968bd07fddc027be8edec8daddf24d3391d36698a1c
@ -1098,6 +1098,7 @@ F test/pragma.test f274259d6393b6681eb433beb8dd39a26ec06a4431052a4880b43b84912a3
F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
F test/pragma3.test 14c12bc5352b1e100e0b6b44f371053a81ccf8ed
F test/pragma4.test 6e85b6eab8e61ffc9c7db59d842276674e8e3264
F test/pragma5.test fd517f42ee847e126afbbbd9fd0fb9e5a4a61a962496a350adb8a22583fbdc37
F test/pragmafault.test 275edaf3161771d37de60e5c2b412627ac94cef11739236bec12ed1258b240f8
F test/printf.test b3ff34e73d59124140eaf89f7672e21bc2ca5fcc
F test/printf2.test 9e6db85f81c63f2367c34a9d7db384088bd374ad
@ -1650,7 +1651,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 7ec72314d6b66e4969833194fd032f01963bb861a7bb30d060acdb82dc5d62fe
R 0a9008b1e381e229108d828896139715
U drh
Z 0f9a691a1b4c4aa8a5eacf3d9e1dd571
P 25292b9a4eb5efc7db551da0b3c9cfd7e79da1594ee14729de44090e188c2b2a
R 7b2e7d0666727914b868e680cae90457
U dan
Z 2b958aabca575686d03fef3a95382582

View File

@ -1 +1 @@
25292b9a4eb5efc7db551da0b3c9cfd7e79da1594ee14729de44090e188c2b2a
b79cc8dc88c8ae03daff1290fd650b2b0e6f673ec9d83be6a533a57172930190

View File

@ -1234,13 +1234,11 @@ void sqlite3Pragma(
for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
p = (FuncDef*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
break;
@ -1252,7 +1250,6 @@ void sqlite3Pragma(
for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
Module *pMod = (Module*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
}
}
break;
@ -1262,7 +1259,6 @@ void sqlite3Pragma(
int i;
for(i=0; i<ArraySize(aPragmaName); i++){
sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
}
}
break;

64
test/pragma5.test Normal file
View File

@ -0,0 +1,64 @@
# 2017 August 25
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library.
#
# This file implements tests for the PRAGMA command. Specifically,
# those pragmas enabled at build time by setting:
#
# -DSQLITE_INTROSPECTION_PRAGMAS
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix pragma5
if { [catch {db one "SELECT count(*) FROM pragma_function_list"}] } {
finish_test
return
}
db function external external
do_execsql_test 1.0 {
PRAGMA table_info(pragma_function_list)
} {
0 name {} 0 {} 0
1 builtin {} 0 {} 0
}
do_execsql_test 1.1 {
SELECT * FROM pragma_function_list WHERE name='upper'
} {upper 1}
do_execsql_test 1.2 {
SELECT * FROM pragma_function_list WHERE name LIKE 'exter%';
} {external 0}
ifcapable fts5 {
do_execsql_test 2.0 {
PRAGMA table_info(pragma_module_list)
} {
0 name {} 0 {} 0
}
do_execsql_test 2.1 {
SELECT * FROM pragma_module_list WHERE name='fts5'
} {fts5}
}
do_execsql_test 3.0 {
PRAGMA table_info(pragma_pragma_list)
} {
0 name {} 0 {} 0
}
do_execsql_test 3.1 {
SELECT * FROM pragma_pragma_list WHERE name='pragma_list'
} {pragma_list}
finish_test