Allow the iif() function to work with two arguments. The third argument is
then assumed to be NULL. Also allow if() as an alternative spelling for iif(). FossilOrigin-Name: 1e405c39a8405e2081ce061559d1aacc70055fc74ab86d886b973076a3fb124b
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
C Update\sfts5\sso\sthat\sthe\sxInstToken()\sextension\sAPI\sworks\swith\sprefix\squeries.
|
||||
D 2024-11-26T20:46:18.270
|
||||
C Allow\sthe\siif()\sfunction\sto\swork\swith\stwo\sarguments.\s\sThe\sthird\sargument\sis\nthen\sassumed\sto\sbe\sNULL.\s\sAlso\sallow\sif()\sas\san\salternative\sspelling\sfor\siif().
|
||||
D 2024-11-26T23:40:54.327
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
|
||||
@@ -729,7 +729,7 @@ F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
|
||||
F src/expr.c a9d9f5fdfbdd3b2c94d7af1b11f181464b8a641736cf32cb92fa3c5e7ecb30df
|
||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
|
||||
F src/func.c fa138d44348e189817542f6efa6232420b3e0081c835ced65883adc7fd777d65
|
||||
F src/func.c 49489dcce46d2d491cedb451e974264150c473e5f5bba448498a9aa4c1993537
|
||||
F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
|
||||
F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
|
||||
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
|
||||
@@ -1102,7 +1102,7 @@ F test/e_createtable.test 31b9bcb6ac8876bc7ec342d86d9c231a84c62b442093a6651dfd0f
|
||||
F test/e_delete.test ab39084f26ae1f033c940b70ebdbbd523dc4962e
|
||||
F test/e_droptrigger.test 235c610f8bf8ec44513e222b9085c7e49fad65ad0c1975ac2577109dd06fd8fa
|
||||
F test/e_dropview.test 74e405df7fa0f762e0c9445b166fe03955856532e2bb234c372f7c51228d75e7
|
||||
F test/e_expr.test b950818a48269506d75a41c819003bd77a0893bc4a4f2fdee191bc74109c1a87
|
||||
F test/e_expr.test 4faef475076f676e2a009270dbd3a7658db30d12dc3d21e4b85cab5f50be18c5
|
||||
F test/e_fkey.test feeba6238aeff9d809fb6236b351da8df4ae9bda89e088e54526b31a0cbfeec5
|
||||
F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5ee07
|
||||
F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e
|
||||
@@ -1380,7 +1380,7 @@ F test/json/json-q1.txt 65f9d1cdcc4cffa9823fb73ed936aae5658700cd001fde448f68bfb9
|
||||
F test/json/json-speed-check.sh 912ee03e700a65c827ee0c7b4752c21ec5ef69cf7679d2f482ca817042bead52 x
|
||||
F test/json/jsonb-q1.txt 1e180fe6491efab307e318b22879e3a736ac9a96539bbde7911a13ee5b33abc7
|
||||
F test/json101.test 30db5b055b103ccabc53a29cfe6cda3345d07e171aeb25403dafa04f19e98b19
|
||||
F test/json102.test 4b3a0f94535f033239b67c13dbee8b47d2b5ee467e0f2fdab5eadf370bbe5fd3
|
||||
F test/json102.test 9b2e5ada10845ff84853b3feaae2ce51ce7145ae458f74c6a6cecc6ef6ee3ae1
|
||||
F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe
|
||||
F test/json104.test 1b844a70cddcfa2e4cd81a5db0657b2e61e7f00868310f24f56a9ba0114348c1
|
||||
F test/json105.test 043838b56e68f3252a0dcf5be1689016f6f3f05056f8dcfcdc9d074f4d932988
|
||||
@@ -1697,7 +1697,7 @@ F test/subquery.test 903abf41049f8404256f7be24b3151328304a5b25162e17ab0079460237
|
||||
F test/subquery2.test 90cf944b9de8204569cf656028391e4af1ccc8c0cc02d4ef38ee3be8de1ffb12
|
||||
F test/subselect.test 0966aa8e720224dbd6a5e769a3ec2a723e332303
|
||||
F test/substr.test a673e3763e247e9b5e497a6cacbaf3da2bd8ec8921c0677145c109f2e633f36b
|
||||
F test/subtype1.test 7a9c55ed84d4ce551203d18046f925e293d75f69da81bff71aaf2696e4a2a748
|
||||
F test/subtype1.test 96fd2a59bfc845c955b5f339d23b37ef4d50de5f8a04acd1450a68605fa2e3e7
|
||||
F test/superlock.test 85256830339a6871ce36a2ef591c3f67716a701b5497788fb2068b90159c2442
|
||||
F test/swarmvtab.test 250231404fcac88f61a6c147bb0e3a118ed879278cd3ccb0ae2d3a729e1e8e26
|
||||
F test/swarmvtab2.test c948cb2fdfc5b01d85e8f6d6504854202dc1a0782ab2a0ed61538f27cbd0aa5c
|
||||
@@ -2201,9 +2201,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
|
||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 00dffd10f0c77fed53bdbf1536f6ef9b6076775f1b9a10794b87e3ace33ca1d9 f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9
|
||||
R 602e6f17d656c7098c104c9738f971e9
|
||||
T +closed f1e44f703acb415e2ff7d7f87fa05fc874ef1c432095bb3ccb45c6ad2fd085a9
|
||||
U dan
|
||||
Z 2fe59ff619562212dac3a249eb517d01
|
||||
P 41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01
|
||||
R 824c1bcdb1f9c6fee7135023d460cb90
|
||||
T +closed f1cb1a815a09d71eb52d5c7f2f4e5c7689535232dee365e46ac41cce7fd86c01
|
||||
U drh
|
||||
Z f391a3d677bdf348a89a60afcfdaaa8e
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
41b79bde4a4b6510b41cc9175ff2527fbd3ca9209812361783754f24cf67ef9e
|
||||
1e405c39a8405e2081ce061559d1aacc70055fc74ab86d886b973076a3fb124b
|
||||
|
||||
@@ -2814,7 +2814,10 @@ void sqlite3RegisterBuiltinFunctions(void){
|
||||
#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */
|
||||
FUNCTION(sign, 1, 0, 0, signFunc ),
|
||||
INLINE_FUNC(coalesce, -1, INLINEFUNC_coalesce, 0 ),
|
||||
INLINE_FUNC(iif, 2, INLINEFUNC_iif, 0 ),
|
||||
INLINE_FUNC(iif, 3, INLINEFUNC_iif, 0 ),
|
||||
INLINE_FUNC(if, 2, INLINEFUNC_iif, 0 ),
|
||||
INLINE_FUNC(if, 3, INLINEFUNC_iif, 0 ),
|
||||
};
|
||||
#ifndef SQLITE_OMIT_ALTERTABLE
|
||||
sqlite3AlterFunctions();
|
||||
|
||||
+12
-3
@@ -1232,12 +1232,18 @@ db nullvalue {}
|
||||
# EVIDENCE-OF: R-13943-13592 A NULL result is considered untrue when
|
||||
# evaluating WHEN terms.
|
||||
#
|
||||
do_execsql_test e_expr-21.4.1 {
|
||||
do_execsql_test e_expr-21.4.1a {
|
||||
SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, iif(NULL,8,99);
|
||||
} {B 99}
|
||||
do_execsql_test e_expr-21.4.2 {
|
||||
do_execsql_test e_expr-21.4.1b {
|
||||
SELECT CASE WHEN NULL THEN 'A' WHEN 1 THEN 'B' END, if(NULL,8,99);
|
||||
} {B 99}
|
||||
do_execsql_test e_expr-21.4.2a {
|
||||
SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, iif(0,8,99);
|
||||
} {C 99}
|
||||
do_execsql_test e_expr-21.4.2b {
|
||||
SELECT CASE WHEN 0 THEN 'A' WHEN NULL THEN 'B' ELSE 'C' END, if(0,8,99);
|
||||
} {C 99}
|
||||
|
||||
# EVIDENCE-OF: R-38620-19499 In a CASE with a base expression, the base
|
||||
# expression is evaluated just once and the result is compared against
|
||||
@@ -1969,9 +1975,12 @@ do_execsql_test e_expr-37.5 {
|
||||
# EVIDENCE-OF: R-55532-10108 Values 1, 1.0, 0.1, -0.1 and '1english' are
|
||||
# considered to be true.
|
||||
#
|
||||
do_execsql_test e_expr-37.6 {
|
||||
do_execsql_test e_expr-37.6a {
|
||||
SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, iif(1,'true','false');
|
||||
} {true true}
|
||||
do_execsql_test e_expr-37.6b {
|
||||
SELECT CASE WHEN 1 THEN 'true' ELSE 'false' END, if(1,'true');
|
||||
} {true true}
|
||||
do_execsql_test e_expr-37.7 {
|
||||
SELECT CASE WHEN 1.0 THEN 'true' ELSE 'false' END, iif(1.0,'true','false');
|
||||
} {true true}
|
||||
|
||||
@@ -745,6 +745,30 @@ do_execsql_test json102-1610 {
|
||||
5 {{"b":9}} json {{"b":9}} text {{"b":9}} json \
|
||||
6 {} null {} null {} null
|
||||
]
|
||||
do_execsql_test json102-1620 {
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1(x) VALUES('[null,123,4.5,"six",[7,8],{"b":9}]');
|
||||
WITH c(y) AS (VALUES(0),(1),(2),(3),(4),(5),(6))
|
||||
SELECT
|
||||
y,
|
||||
x->y AS '->',
|
||||
CASE WHEN subtype(if(json_valid(x),x->y)) THEN 'json'
|
||||
ELSE typeof(x->y) END AS 'type',
|
||||
x->>y AS '->>',
|
||||
CASE WHEN subtype(x->>y) THEN 'json' ELSE typeof(x->>y) END AS 'type',
|
||||
json_extract(x,format('$[%d]',y)) AS 'json_extract',
|
||||
CASE WHEN subtype(json_extract(x,format('$[%d]',y)))
|
||||
THEN 'json' ELSE typeof(json_extract(x,format('$[%d]',y))) END AS 'type'
|
||||
FROM c, t1 ORDER BY y;
|
||||
} [list \
|
||||
0 null json {} null {} null \
|
||||
1 123 json 123 integer 123 integer \
|
||||
2 4.5 json 4.5 real 4.5 real \
|
||||
3 {"six"} json six text six text \
|
||||
4 {[7,8]} json {[7,8]} text {[7,8]} json \
|
||||
5 {{"b":9}} json {{"b":9}} text {{"b":9}} json \
|
||||
6 {} null {} null {} null
|
||||
]
|
||||
|
||||
reset_db
|
||||
do_execsql_test json102-1700 {
|
||||
|
||||
@@ -73,5 +73,15 @@ do_execsql_test subtype1-320 {
|
||||
WHERE json_quote(y)='"1"';
|
||||
} {1 {"1"}}
|
||||
|
||||
# 2024-11-26
|
||||
# subtype survives if()
|
||||
#
|
||||
do_execsql_test subtype1-400 {
|
||||
WITH t400(id,j) AS (VALUES
|
||||
(1,'{a:{x:1,y:2},b:{x:3,y:4}}'),
|
||||
(2,'not json')
|
||||
)
|
||||
SELECT id, subtype(if(json_valid(j,6),j->'a')) FROM t400;
|
||||
} {1 74 2 0}
|
||||
|
||||
finish_test
|
||||
|
||||
Reference in New Issue
Block a user