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://mone...@vienna.ins.cwi.nl/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 checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list