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