Fix the PRAGMA case_sensitive_like command so that the LIKE function continues

to be innocuous after the PRAGMA.
[forum:/forumpost/925dc9f67804c540|Forum post 925dc9f67804c540].

FossilOrigin-Name: 84c268c34cba7207a90dad2a8e972ce90c85304e91f4933c76963822ad1ae48b
This commit is contained in:
drh 2023-08-15 11:58:22 +00:00
parent f0c1ea9e86
commit 00eee07911
4 changed files with 38 additions and 13 deletions

View File

@ -1,5 +1,5 @@
C Fix\san\soff-by-one\serror\scausing\sa\sbuffer\soverread\sin\stest2.c.
D 2023-08-15T10:57:08.675
C Fix\sthe\sPRAGMA\scase_sensitive_like\scommand\sso\sthat\sthe\sLIKE\sfunction\scontinues\nto\sbe\sinnocuous\safter\sthe\sPRAGMA.\n[forum:/forumpost/925dc9f67804c540|Forum\spost\s925dc9f67804c540].
D 2023-08-15T11:58:22.349
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -636,7 +636,7 @@ F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
F src/expr.c 1affe0cc049683ef0ef3545d9b6901508556b0ef7e2892a344c3df6d7288d79d
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c a7fcbf7e66d14dbb73cf49f31489ebf66d0e6006c62b95246924a3bae9f37b36
F src/func.c cc1da67fd643a43cfe691784158ec656d8ec6d13bb17e67018b01b38b3e4f5ab
F src/func.c dd1ecd1be6aaa67c9fa723f841e05e1536314c6aaa0509e25289b310f64dbb9c
F src/global.c 29f56a330ed9d1b5cd9b79ac0ca36f97ac3afc730ff8bfa987b0db9e559d684d
F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
@ -1284,7 +1284,7 @@ F test/kvtest.c 6e0228409ea7ca0497dad503fbd109badb5e59545d131014b6aaac68b56f484a
F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63
F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
F test/lemon-test01.y 58b764610fd934e189ffbb0bbfa33d171b9cb06019b55bdc04d090d6767e11d7
F test/like.test 5fe0bc37f307aef0a453ce2de4632bdfc0759448f0421c39f6d53caefe905fac
F test/like.test 242ee7f5d08a031144c0daf63bbd7e7710c847ccf387a83347e0b61b3aa69526
F test/like2.test d3be15fefee3e02fc88942a9b98f26c5339bbdef7783c90023c092c4955fe3d3
F test/like3.test a76e5938fadbe6d32807284c796bafd869974a961057bc5fc5a28e06de98745c
F test/limit.test 350f5d03c29e7dff9a2cde016f84f8d368d40bcd02fa2b2a52fa10c4bf3cbfaf
@ -2091,8 +2091,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 85fd4f0ef41a883448f16d55b7f8bd5c7b1d9c89a3d7d9bcae9c2744ed843099
R 1b9d4cea79e74e7141aa61fb11c90d9e
U dan
Z 954bb096ffde5f026b4a133ace1967c1
P e1edf95ecc8f6840fd62abe83121fddeab7413c316b2e20b60fd3b2c8fdd4dca
R fdf43050aa2ff71098fa1da54047ef69
U drh
Z c477dc1d859af6b1c36a11efde7a7bc8
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
e1edf95ecc8f6840fd62abe83121fddeab7413c316b2e20b60fd3b2c8fdd4dca
84c268c34cba7207a90dad2a8e972ce90c85304e91f4933c76963822ad1ae48b

View File

@ -2154,8 +2154,10 @@ void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
** sensitive.
*/
void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
FuncDef *pDef;
struct compareInfo *pInfo;
int flags;
int nArg;
if( caseSensitive ){
pInfo = (struct compareInfo*)&likeInfoAlt;
flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE;
@ -2163,10 +2165,13 @@ void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
pInfo = (struct compareInfo*)&likeInfoNorm;
flags = SQLITE_FUNC_LIKE;
}
sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags;
sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags;
for(nArg=2; nArg<=3; nArg++){
sqlite3CreateFunc(db, "like", nArg, SQLITE_UTF8, pInfo, likeFunc,
0, 0, 0, 0, 0);
pDef = sqlite3FindFunction(db, "like", nArg, SQLITE_UTF8, 0);
pDef->funcFlags |= flags;
pDef->funcFlags &= ~SQLITE_FUNC_UNSAFE;
}
}
/*

View File

@ -1140,4 +1140,24 @@ do_execsql_test 17.1 {
} {1}
# 2023-08-15 https://sqlite.org/forum/forumpost/925dc9f67804c540
#
reset_db
sqlite3_db_config db DEFENSIVE 1
db eval {PRAGMA trusted_schema=OFF}
do_execsql_test 18.0 {
CREATE TABLE t1(x INT, y TEXT);
INSERT INTO t1 VALUES(1,'abc'),(2,'ABC'),(3,'Abc');
CREATE VIEW t2 AS SELECT * FROM t1 WHERE y LIKE 'a%';
SELECT * FROM t2;
} {1 abc 2 ABC 3 Abc}
do_execsql_test 18.1 {
PRAGMA case_sensitive_like=OFF;
SELECT * FROM t2;
} {1 abc 2 ABC 3 Abc}
do_execsql_test 18.2 {
PRAGMA case_sensitive_like=ON;
SELECT * FROM t2;
} {1 abc}
finish_test