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

Reply via email to