Changeset: f607bda50805 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f607bda50805
Modified Files:
        monetdb5/modules/atoms/json.c
        sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out
Branch: default
Log Message:

Json isvalid functions must return null on null as well


diffs (248 lines):

diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -295,7 +295,6 @@ JSONdump(Client cntxt, MalBlkPtr mb, Mal
        return MAL_SUCCEED;
 }
 
-
 str
 JSONjson2str(str *ret, json *j)
 {
@@ -327,32 +326,43 @@ JSONstr2json(json *ret, str *j)
 str
 JSONisvalid(bit *ret, json *j)
 {
-       JSON *jt = JSONparse(*j);
-
-       if (jt == NULL)
-               throw(MAL, "json.isvalid", SQLSTATE(HY013) MAL_MALLOC_FAIL);
-       *ret = jt->error == MAL_SUCCEED;
-       JSONfree(jt);
+       if (strNil(*j)) {
+               *ret = bit_nil;
+       } else {
+               JSON *jt = JSONparse(*j);
+               if (jt == NULL)
+                       throw(MAL, "json.isvalid", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               *ret = jt->error == MAL_SUCCEED;
+               JSONfree(jt);
+       }
        return MAL_SUCCEED;
 }
 
 str
 JSONisobject(bit *ret, json *js)
 {
-       char *j = *js;
+       if (strNil(*js)) {
+               *ret = bit_nil;
+       } else {
+               char *j = *js;
 
-       skipblancs(j);
-       *ret = *j == '{';
+               skipblancs(j);
+               *ret = *j == '{';
+       }
        return MAL_SUCCEED;
 }
 
 str
 JSONisarray(bit *ret, json *js)
 {
-       char *j = *js;
+       if (strNil(*js)) {
+               *ret = bit_nil;
+       } else {
+               char *j = *js;
 
-       skipblancs(j);
-       *ret = *j == '[';
+               skipblancs(j);
+               *ret = *j == '[';
+       }
        return MAL_SUCCEED;
 }
 
diff --git a/sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out 
b/sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out
--- a/sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out
+++ b/sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out
@@ -29,151 +29,151 @@ stdout of test 'jsonvalidity.Bug-3753` i
 # 23:37:49 >  
 
 #SELECT json.isvalid('[0,1]');
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isvalid('[0,,1]');
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(null);    -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
-[ false        ]
+[ NULL ]
 #SELECT json.isValid('');      -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('null');  -- false 
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('"');     -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('""');    -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('"""');   -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'"\\""');                -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('""""');  -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'"\\"\\""');     -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid('[]');    -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('[null]');        -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('[""]');  -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('["""]');         -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'["\\""]');      -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('[""""]');        -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'["\\"\\""]');   -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('{}');    -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('{"test":null}');         -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('{"test":""}');   -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('{"test":"""}');  -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'{"test":"\\""}');       -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ true ]
 #SELECT json.isValid('{"test":""""}');         -- false
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
 [ false        ]
 #SELECT json.isValid(E'{"test":"\\"\\""}'); -- true
-% .%1 # table_name
+% . # table_name
 % %1 # name
 % boolean # type
 % 5 # length
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to