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