Changeset: e4150b0b3de7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e4150b0b3de7
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/UDF/Tests/udf-fuse.stable.out
        sql/backends/monet5/UDF/Tests/udf-reverse.stable.out
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_scenario.c
        sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out
        sql/test/BugTracker-2009/Tests/ambiguous_order_by.SF-2827916.stable.err
        sql/test/BugTracker-2009/Tests/ambiguous_view.stable.err
        sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err
        
sql/test/BugTracker-2009/Tests/copy_into_error_off_by_one.SF-2833696.stable.err
        
sql/test/BugTracker-2009/Tests/create_on_ro_db_crash.SF-2830238.stable.err
        
sql/test/BugTracker-2009/Tests/create_table_dup_name.SF-2879005.stable.err
        sql/test/BugTracker-2009/Tests/drop-sequence-crash.SF-2854195.stable.err
        sql/test/BugTracker-2009/Tests/except_error_wrong.SF-2808409.stable.err
        sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.stable.err
        sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.stable.out
        sql/test/BugTracker-2009/Tests/incomplete.SF.2536893.stable.err
        
sql/test/BugTracker-2009/Tests/insert_into_values_bug.SF-2807609.stable.err
        sql/test/BugTracker-2009/Tests/limit_in_subquery.SF-2620437.stable.err
        
sql/test/BugTracker-2009/Tests/not_invalidtable_crash.SF-2927174.stable.err
        sql/test/BugTracker-2009/Tests/overflow.SF-2853458.stable.err
        sql/test/BugTracker-2009/Tests/primekeyconstraint.SF-2783425.stable.err
        sql/test/BugTracker-2009/Tests/rollback_bug.stable.err
        sql/test/BugTracker-2009/Tests/rollback_mistake.SF-2814622.stable.err
        
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
        
sql/test/BugTracker-2009/Tests/segv_for_unknown_identifier_in_subquery.SF-2874045.stable.err
        
sql/test/BugTracker-2009/Tests/select_X_where_bla_EQ_whatever.SF-282597.stable.err
        sql/test/BugTracker-2009/Tests/select_from_history.SF-2556566.stable.err
        
sql/test/BugTracker-2009/Tests/subquery_returns_table_crash.SF-2513620.stable.err
        
sql/test/BugTracker-2009/Tests/temp_table_fail_leaves_data.SF-2793286.stable.err
        
sql/test/BugTracker-2009/Tests/temporary_table_leftover.SF-2734713.stable.err
        
sql/test/BugTracker-2009/Tests/unique_constraint_on_char.SF-2873564.stable.err
        sql/test/BugTracker-2009/Tests/wrong_error_message.SF-2637051.stable.err
        
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
        
sql/test/BugTracker-2010/Tests/TypeException_with_missing_function.Bug-2674.stable.err
        
sql/test/BugTracker-2010/Tests/call_function_without_warning.Bug-2752.stable.err
        
sql/test/BugTracker-2010/Tests/copy-into-too-long-string.Bug-2358.stable.err
        
sql/test/BugTracker-2010/Tests/crash_default_unlocked.Bug-2744.stable.err
        sql/test/BugTracker-2010/Tests/crash_on_in_2.Bug-2604.stable.err
        sql/test/BugTracker-2010/Tests/crashonschema.Bug-2547.stable.err
        sql/test/BugTracker-2010/Tests/duplicate-key.Bug-2667.stable.err
        sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err
        
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
        
sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
        sql/test/BugTracker-2010/Tests/prepare_stmt.Bug-2533.Bug-2534.stable.err
        
sql/test/BugTracker-2010/Tests/second_function_existing_signature.Bug-2611.stable.err
        sql/test/BugTracker-2010/Tests/select_from_seq.Bug-2730.stable.err
        sql/test/BugTracker-2010/Tests/select_star.Bug-2563.stable.err
        
sql/test/BugTracker-2010/Tests/sequence-restart-with-null.Bug-2648.stable.err
        sql/test/BugTracker-2010/Tests/subselect.Bug-2537.stable.err
        sql/test/BugTracker-2010/Tests/sum_on_date_crash.Bug-2643.stable.err
        sql/test/BugTracker-2010/Tests/times-crash.Bug-2586.stable.err
        
sql/test/BugTracker-2010/Tests/wrong_error_message_dropping_view.Bug-2713.stable.err
        sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
        
sql/test/BugTracker-2012/Tests/join_over_multitable_using_index.Bug-3181.sql
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
        
sql/test/BugTracker-2012/Tests/table_function_with_column_subselects.Bug-3172.stable.err
        sql/test/BugTracker-2013/Tests/All
        sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out
        sql/test/BugTracker/Tests/bind_with_cast.SF-1720934.stable.err
        
sql/test/BugTracker/Tests/set_sql_debug_64__breaking_the_DB.SF-1906287.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:

merge with default


diffs (truncated from 4205 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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to