Changeset: 418493e1e490 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=418493e1e490
Modified Files:
clients/mapiclient/dump.c
clients/mapiclient/mclient.c
monetdb5/modules/atoms/json_atom.c
monetdb5/modules/mal/Tests/remote03.stable.out
sql/test/json/Tests/parsing.stable.err
sql/test/json/Tests/parsing.stable.out
sql/test/leaks/Tests/temp2.stable.out
Branch: default
Log Message:
Treat json type more like string.
Don't use multi-line values over the MAPI wire. This also involves
using quotes around values.
Approved some tests as well.
diffs (186 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1105,7 +1105,8 @@ dump_table_data(Mapi mid, char *schema,
string[i] = 0;
if (strcmp(mapi_get_type(hdl, i), "char") == 0 ||
strcmp(mapi_get_type(hdl, i), "varchar") == 0 ||
- strcmp(mapi_get_type(hdl, i), "clob") == 0) {
+ strcmp(mapi_get_type(hdl, i), "clob") == 0 ||
+ strcmp(mapi_get_type(hdl, i), "json") == 0) {
string[i] = 1;
}
}
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -906,6 +906,7 @@ TESTrenderer(MapiHdl hdl)
strcmp(tp, "char") == 0 ||
strcmp(tp, "clob") == 0 ||
strcmp(tp, "str") == 0 ||
+ strcmp(tp, "json") == 0 ||
/* NULL byte in string? */
strlen(s) < l ||
/* start or end with white space? */
@@ -1121,7 +1122,8 @@ SQLrenderer(MapiHdl hdl, char singleinst
(strcmp(s, "varchar") != 0 &&
strcmp(s, "clob") != 0 &&
strcmp(s, "char") != 0 &&
- strcmp(s, "str") != 0))) {
+ strcmp(s, "str") != 0 &&
+ strcmp(s, "json") != 0))) {
/* no table width known, use maximum, rely on
* squeezing later on to fix it to whatever is
* available; note that for a column type of
diff --git a/monetdb5/modules/atoms/json_atom.c
b/monetdb5/modules/atoms/json_atom.c
--- a/monetdb5/modules/atoms/json_atom.c
+++ b/monetdb5/modules/atoms/json_atom.c
@@ -39,17 +39,17 @@ static str JSONparse(char *j);
int JSONfromString(str src, int *len, json *j)
{
- size_t ll;
-
- if (*j !=0)
- GDKfree(*j);
-
- ll = strlen(src);
- assert(ll <= (size_t) INT_MAX);
- *len = (int) ll;
- *j = GDKstrdup(src);
-
- return *len;
+ ssize_t slen = (ssize_t) strlen(src);
+ if ((ssize_t) *len < slen)
+ *j = GDKrealloc(*j, slen + 1);
+ *len = (int) slen;
+ if (GDKstrFromStr((unsigned char *) *j, (const unsigned char *) src,
slen) < 0) {
+ GDKfree(*j);
+ *j = GDKstrdup(str_nil);
+ *len = 2;
+ return 0;
+ }
+ return *len;
}
int JSONtoString(str *s, int *len, json src)
diff --git a/monetdb5/modules/mal/Tests/remote03.stable.out
b/monetdb5/modules/mal/Tests/remote03.stable.out
--- a/monetdb5/modules/mal/Tests/remote03.stable.out
+++ b/monetdb5/modules/mal/Tests/remote03.stable.out
@@ -66,7 +66,7 @@ exit MALException:str ;
remote.disconnect(conn);
end main;
[ "Received first error from the remote site" ]
-!SyntaxException:remote.exec:(mapi:monetdb://[email protected]/mTests_monetdb5_modules_mal)
rmt0__8_void := io.print.bla();
+
SyntaxException:parseError: ^'(' expected
[ "rmt1_bn_bat_oid_str" ]
@@ -96,17 +96,18 @@ SyntaxException:parseError:
[ 18@0, "sqlblob" ]
[ 19@0, "color" ]
[ 20@0, "url" ]
-[ 21@0, "date" ]
-[ 22@0, "daytime" ]
-[ 23@0, "timestamp" ]
-[ 24@0, "timezone" ]
-[ 25@0, "zrule" ]
-[ 26@0, "inet" ]
-[ 27@0, "identifier" ]
-[ 28@0, "xml" ]
-[ 29@0, "pcre" ]
-[ 30@0, "mbr" ]
-[ 31@0, "wkb" ]
+[ 21@0, "json" ]
+[ 22@0, "date" ]
+[ 23@0, "daytime" ]
+[ 24@0, "timestamp" ]
+[ 25@0, "timezone" ]
+[ 26@0, "zrule" ]
+[ 27@0, "inet" ]
+[ 28@0, "identifier" ]
+[ 29@0, "xml" ]
+[ 30@0, "pcre" ]
+[ 31@0, "mbr" ]
+[ 32@0, "wkb" ]
[ "rmt2__8_void" ]
[ nil ]
diff --git a/sql/test/json/Tests/parsing.stable.err
b/sql/test/json/Tests/parsing.stable.err
--- a/sql/test/json/Tests/parsing.stable.err
+++ b/sql/test/json/Tests/parsing.stable.err
@@ -28,31 +28,31 @@ stderr of test 'parsing` in directory 's
# 19:12:46 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-1134" "--port=32043"
# 19:12:46 >
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{');
ERROR = !'}' expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('}');
ERROR = !'{' or '[' expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{:1}');
ERROR = !Name expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{"k"}');
ERROR = !Value expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{[}]');
ERROR = !Name expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{} }');
ERROR = !'{' or '[' expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{} }[1]');
ERROR = !'{' or '[' expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{"f1"::1}');
ERROR = !Value expected
-MAPI = (monetdb) /var/tmp/mtest-1134/.s.monetdb.32043
+MAPI = (monetdb) /var/tmp/mtest-10491/.s.monetdb.30930
QUERY = insert into jsonparse values('{"f1":1,"f2":2 ');
ERROR = !',' expected
diff --git a/sql/test/json/Tests/parsing.stable.out
b/sql/test/json/Tests/parsing.stable.out
--- a/sql/test/json/Tests/parsing.stable.out
+++ b/sql/test/json/Tests/parsing.stable.out
@@ -70,13 +70,13 @@ Ready.
% j # name
% json # type
% 21 # length
-[ {} ]
+[ "{}" ]
[ "{} " ]
-[ [] ]
-[ {"null": null} ]
+[ "[]" ]
+[ "{\"null\": null}" ]
[ "{\"f1\":1,\"f2\":2} " ]
-[ [1,2,null,true,false] ]
-[ [1,"hello",2] ]
+[ "[1,2,null,true,false]" ]
+[ "[1,\"hello\",2]" ]
#drop table jsonparse;
# 19:12:47 >
diff --git a/sql/test/leaks/Tests/temp2.stable.out
b/sql/test/leaks/Tests/temp2.stable.out
--- a/sql/test/leaks/Tests/temp2.stable.out
+++ b/sql/test/leaks/Tests/temp2.stable.out
@@ -36,7 +36,7 @@ Ready.
% L1, L2 # name
% char, wrd # type
% 9, 3 # length
-[ "transient", 177 ]
+[ "transient", 176 ]
#select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
% .L1, .L2 # table_name
% L1, L2 # name
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list