Changeset: 81c0d61bcc04 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=81c0d61bcc04
Added Files:
        sql/test/BugTracker-2013/Tests/decimal-cast.Bug-3310.sql
        sql/test/BugTracker-2013/Tests/decimal-cast.Bug-3310.stable.err
        sql/test/BugTracker-2013/Tests/decimal-cast.Bug-3310.stable.out
Modified Files:
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        gdk/gdk.h
        gdk/gdk_bbp.c
        monetdb5/modules/atoms/json_atom.c
        monetdb5/modules/mal/Tests/remote03.stable.out
        sql/backends/monet5/sql.mx
        sql/test/BugTracker-2013/Tests/All
        sql/test/json/Tests/parsing.stable.err
        sql/test/json/Tests/parsing.stable.out
Branch: default
Log Message:

merging


diffs (truncated from 2738 to 300 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/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1398,15 +1398,15 @@ typedef var_t stridx_t; /* TODO: should 
 
 #if SIZEOF_VAR_T == 8
 #define VarHeapValRaw(b,p,w)                                           \
-       ((w)==1 ? (var_t)*((unsigned char *)(b)+(p))+GDK_VAROFFSET :    \
-        ((w)==2 ? (var_t)*((unsigned short *)(b)+(p))+GDK_VAROFFSET :  \
-         ((w)==4 ? (var_t)*((unsigned int *)(b)+(p)) :                 \
-          *((var_t *)(b)+(p)))))
+       ((w) == 1 ? (var_t) ((unsigned char *) (b))[p] + GDK_VAROFFSET : \
+        (w) == 2 ? (var_t) ((unsigned short *) (b))[p] + GDK_VAROFFSET : \
+        (w) == 4 ? (var_t) ((unsigned int *) (b))[p] :                 \
+        ((var_t *) (b))[p])
 #else
 #define VarHeapValRaw(b,p,w)                                           \
-       ((w)==1 ? (var_t)*((unsigned char *)(b)+(p))+GDK_VAROFFSET :    \
-        ((w)==2 ? (var_t)*((unsigned short *)(b)+(p))+GDK_VAROFFSET :  \
-         *((var_t *)(b)+(p))))
+       ((w) == 1 ? (var_t) ((unsigned char *) (b))[p] + GDK_VAROFFSET : \
+        (w) == 2 ? (var_t) ((unsigned short *) (b))[p] + GDK_VAROFFSET : \
+        ((var_t *) (b))[p])
 #endif
 #define VarHeapVal(b,p,w) ((size_t) VarHeapValRaw(b,p,w)  << GDK_VARSHIFT)
 #define BUNhvaroff(bi,p) VarHeapVal((bi).b->H->heap.base, (p), 
(bi).b->H->width)
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1434,14 +1434,14 @@ BBPdump(void)
                          HEAPvmsize(&b->H->heap),
                          HEAPmemsize(b->H->vheap),
                          HEAPvmsize(b->H->vheap),
-                         b->H->hash ? HEAPmemsize(b->H->hash->heap) : 0,
-                         b->H->hash ? HEAPvmsize(b->H->hash->heap) : 0,
+                         b->H->hash && b->H->hash != (Hash *) -1 ? 
HEAPmemsize(b->H->hash->heap) : 0,
+                         b->H->hash && b->H->hash != (Hash *) -1 ? 
HEAPvmsize(b->H->hash->heap) : 0,
                          HEAPmemsize(&b->T->heap),
                          HEAPvmsize(&b->T->heap),
                          HEAPmemsize(b->T->vheap),
                          HEAPvmsize(b->T->vheap),
-                         b->T->hash ? HEAPmemsize(b->T->hash->heap) : 0,
-                         b->T->hash ? HEAPvmsize(b->T->hash->heap) : 0);
+                         b->T->hash && b->T->hash != (Hash *) -1 ? 
HEAPmemsize(b->T->hash->heap) : 0,
+                         b->T->hash && b->T->hash != (Hash *) -1 ? 
HEAPvmsize(b->T->hash->heap) : 0);
                if (BBP_logical(i) && BBP_logical(i)[0] == '.') {
                        cmem += HEAPmemsize(&b->H->heap);
                        cvm += HEAPvmsize(&b->H->heap);
@@ -1460,7 +1460,7 @@ BBPdump(void)
                                vm += HEAPvmsize(b->H->vheap);
                        }
                }
-               if (b->H->hash) {
+               if (b->H->hash && b->H->hash != (Hash *) -1) {
                        if (BBP_logical(i) && BBP_logical(i)[0] == '.') {
                                cmem += HEAPmemsize(b->H->hash->heap);
                                cvm += HEAPvmsize(b->H->hash->heap);
@@ -1485,7 +1485,7 @@ BBPdump(void)
                                vm += HEAPvmsize(b->T->vheap);
                        }
                }
-               if (b->T->hash) {
+               if (b->T->hash && b->T->hash != (Hash *) -1) {
                        if (BBP_logical(i) && BBP_logical(i)[0] == '.') {
                                cmem += HEAPmemsize(b->T->hash->heap);
                                cvm += HEAPvmsize(b->T->hash->heap);
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
@@ -37,55 +37,58 @@ int TYPE_json;
 
 static str JSONparse(char *j);
 
-int JSONfromString(str src, int *len, json *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)
+int
+JSONtoString(str *s, int *len, json src)
 {
-    size_t ll;
-    int l,cnt=0;
+       size_t ll;
+       int l, cnt = 0;
        char *c, *dst;
 
-    if (GDK_STRNIL(src)) {
-        *s = GDKstrdup("null");
-        return 0;
-    }
-       for (c =src; *c; c++)
-               switch(*c){
+       if (GDK_STRNIL(src)) {
+               *s = GDKstrdup("null");
+               return 0;
+       }
+       for (c = src; *c; c++)
+               switch (*c) {
                case '"':
                case '\\':
                case '\n':
                        cnt++;
                }
-    ll = strlen(src);
-    assert(ll <= (size_t) INT_MAX);
-    l = (int) ll + cnt+3;
+       ll = strlen(src);
+       assert(ll <= (size_t) INT_MAX);
+       l = (int) ll + cnt + 3;
 
-    if (l >= *len) {
-        GDKfree(*s);
-        *s = (str) GDKmalloc(l);
-        if (*s == NULL)
-            return 0;
-    }
+       if (l >= *len) {
+               GDKfree(*s);
+               *s = (str) GDKmalloc(l);
+               if (*s == NULL)
+                       return 0;
+       }
        dst = *s;
        *dst++ = '"';
-       for (c =src; *c; c++)
-               switch(*c){
+       for (c = src; *c; c++)
+               switch (*c) {
                case '"':
                case '\\':
                        *dst++ = '\\';
+                       /* fall through */
                default:
                        *dst++ = *c;
                        break;
@@ -96,27 +99,29 @@ int JSONtoString(str *s, int *len, json 
                }
        *dst++ = '"';
        *dst = 0;
-    *len = l-1;
-    return *len;
+       *len = l - 1;
+       return *len;
 }
 
-str JSONjson2str(str *ret, json *j)
+str
+JSONjson2str(str *ret, json *j)
 {
        char *s = *j;
        if (*s == '"')
                s++;
        s = GDKstrdup(s);
-       if ( s[strlen(s)-1] == '"')
-               s[strlen(s)-1] =0;
+       if (s[strlen(s) - 1] == '"')
+               s[strlen(s) - 1] = 0;
        *ret = s;
        return MAL_SUCCEED;
 }
 
-str JSONstr2json(str *ret, json *j)
+str
+JSONstr2json(str *ret, json *j)
 {
        str msg = JSONparse(*j);
 
-       if ( msg){
+       if (msg) {
                *ret = 0;
                return msg;
        }
@@ -124,38 +129,45 @@ str JSONstr2json(str *ret, json *j)
        return MAL_SUCCEED;
 }
 
-str JSONisvalid(int *ret, json *j)
+str
+JSONisvalid(int *ret, json *j)
 {
        str msg = JSONparse(*j);
 
        *ret = 1;
-       if ( msg){
+       if (msg) {
                *ret = 0;
                GDKfree(msg);
        }
        return MAL_SUCCEED;
 }
 
-str JSONisobject(int *ret, json *j)
+str
+JSONisobject(int *ret, json *j)
 {
        char *s;
-       for( s= *j; *s; s++)
-               if ( *s !=' ' && *s != '\n' && *s != '\t') break;
+       for (s = *j; *s; s++)
+               if (*s != ' ' && *s != '\n' && *s != '\t')
+                       break;
 
-       *ret = *s =='{';
-       return MAL_SUCCEED;
-}
-str JSONisarray(int *ret, json *j)
-{
-       char *s;
-       for( s= *j; *s; s++)
-               if ( *s !=' ' && *s != '\n' && *s != '\t') break;
-
-       *ret = *s =='[';
+       *ret = *s == '{';
        return MAL_SUCCEED;
 }
 
-str JSONprelude(int *ret)
+str
+JSONisarray(int *ret, json *j)
+{
+       char *s;
+       for (s = *j; *s; s++)
+               if (*s != ' ' && *s != '\n' && *s != '\t')
+                       break;
+
+       *ret = *s == '[';
+       return MAL_SUCCEED;
+}
+
+str
+JSONprelude(int *ret)
 {
        (void) ret;
        TYPE_json = ATOMindex("json");
@@ -168,58 +180,71 @@ static str JSONarrayParser(char *j, char
 static str
 JSONstringParser(char *j, char **next)
 {
-       for(j++;*j; j++)
-       switch(*j){
-       case '\\':
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to