Changeset: be73c35addf4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=be73c35addf4 Modified Files: clients/mapiclient/mclient.c monetdb5/modules/atoms/str.c sql/backends/monet5/sql_cast.c sql/backends/monet5/sql_gencode.c sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.sql sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128 sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 Branch: default Log Message:
merged with Jun2016 diffs (283 lines): diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1078,7 +1078,7 @@ TESTrenderer(MapiHdl hdl) strlen(s) < l || /* start or end with white space? */ my_isspace(*s) || - my_isspace(s[l - 1]) || + (l > 0 && my_isspace(s[l - 1])) || /* timezone can have embedded comma */ strcmp(tp, "timezone") == 0 || /* a bunch of geom types */ diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c --- a/monetdb5/modules/atoms/str.c +++ b/monetdb5/modules/atoms/str.c @@ -1586,7 +1586,7 @@ STRConcat(str *res, const str *val1, con str STRLength(int *res, const str *arg1) { - size_t l; + int l; const char *s = *arg1; if (strNil(s)) { @@ -1595,7 +1595,7 @@ STRLength(int *res, const str *arg1) } l = UTF8_strlen(s); assert(l <INT_MAX); - *res = (int) l; + *res = l; return MAL_SUCCEED; } @@ -1620,9 +1620,7 @@ STRTail(str *res, const str *arg1, const *res = GDKstrdup(str_nil); } else { if (off < 0) { - size_t l = UTF8_strlen(s); - int len = (int) l; - assert(l < INT_MAX); + int len = UTF8_strlen(s); if (len == int_nil) { *res = GDKstrdup(str_nil); diff --git a/sql/backends/monet5/sql_cast.c b/sql/backends/monet5/sql_cast.c --- a/sql/backends/monet5/sql_cast.c +++ b/sql/backends/monet5/sql_cast.c @@ -383,7 +383,7 @@ SQLstr_cast_(str *res, mvc *m, int eclas if ((len > 0 && sz > len) || sz < 0) { if (r) GDKfree(r); - if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), p) != 0) { + if (ATOMcmp(tpe, ATOMnilptr(tpe), p) != 0) { throw(SQL, "str_cast", "22001!value too long for type (var)char(%d)", len); } else { r = GDKstrdup(str_nil); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -1397,6 +1397,9 @@ static int break; case cmp_filter: done = 1; + + if (backend_create_subfunc(sql, s->op4.funcval, NULL) < 0) + return -1; op = sql_func_imp(s->op4.funcval->func); mod = sql_func_mod(s->op4.funcval->func); diff --git a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.sql b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.sql --- a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.sql +++ b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.sql @@ -1,6 +1,8 @@ -- test SQL functions: convert(fromType, toType) and cast(fromType as toType) for all SQL data types and data values -- See also https://www.monetdb.org/bugzilla/show_bug.cgi?id=3460 +SET TIME ZONE INTERVAL '+02:00' HOUR TO MINUTE; + -- BOOLEAN (true, false) CREATE TABLE T_boolean (v boolean); INSERT into T_boolean VALUES (true), (false); @@ -1000,7 +1002,7 @@ SELECT v, convert(v, decimal(15,3)) from SELECT v, convert(v, char) from T_dec where v between 0 and 1; SELECT v, convert(v, varchar) from T_dec; -- missing length specification -SELECT v, convert(v, varchar(16)) from T_dec; +SELECT v, convert(v, varchar(20)) from T_dec; SELECT v, convert(v, longvarchar) from T_dec; -- LONGVARCHAR not valid data type SELECT v, convert(v, long varchar) from T_dec; -- LONG VARCHAR not valid data type SELECT v, convert(v, CHARACTER LARGE OBJECT) from T_dec; @@ -1043,7 +1045,7 @@ SELECT v, cast(v as decimal(15,3)) from SELECT v, cast(v as char) from T_dec where v between 0 and 1; SELECT v, cast(v as varchar) from T_dec; -- missing length specification -SELECT v, cast(v as varchar(16)) from T_dec; +SELECT v, cast(v as varchar(20)) from T_dec; SELECT v, cast(v as longvarchar) from T_dec; -- LONGVARCHAR not valid data type SELECT v, cast(v as long varchar) from T_dec; -- LONG VARCHAR not valid data type SELECT v, cast(v as CHARACTER LARGE OBJECT) from T_dec; diff --git a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err --- a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err +++ b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err @@ -1380,7 +1380,7 @@ MAPI = (monetdb) /var/tmp/mtest-13167/. QUERY = SELECT v, convert(v, varchar) from T_dec; -- missing length specification ERROR = !CHARACTER VARYING needs a mandatory length specification in: "select v, convert(v, varchar)" !syntax error, unexpected FROM in: "from" -MAPI = (monetdb) /var/tmp/mtest-10564/.s.monetdb.32160 +MAPI = (monetdb) /var/tmp/mtest-26956/.s.monetdb.37342 QUERY = SELECT v, convert(v, longvarchar) from T_dec; -- LONGVARCHAR not valid data type ERROR = !type (longvarchar) unknown in: "select v, convert(v, longvarchar)" !syntax error, unexpected FROM in: "from" @@ -1441,7 +1441,7 @@ MAPI = (monetdb) /var/tmp/mtest-13167/. QUERY = SELECT v, cast(v as varchar) from T_dec; -- missing length specification ERROR = !CHARACTER VARYING needs a mandatory length specification in: "select v, cast(v as varchar)" !syntax error, unexpected FROM in: "from" -MAPI = (monetdb) /var/tmp/mtest-10564/.s.monetdb.32160 +MAPI = (monetdb) /var/tmp/mtest-26956/.s.monetdb.37342 QUERY = SELECT v, cast(v as longvarchar) from T_dec; -- LONGVARCHAR not valid data type ERROR = !type (longvarchar) unknown in: "select v, cast(v as longvarchar)" !syntax error, unexpected FROM in: "from" diff --git a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128 b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128 --- a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128 +++ b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128 @@ -1302,7 +1302,7 @@ MAPI = (monetdb) /var/tmp/mtest-13167/. QUERY = SELECT v, convert(v, varchar) from T_dec; -- missing length specification ERROR = !CHARACTER VARYING needs a mandatory length specification in: "select v, convert(v, varchar)" !syntax error, unexpected FROM in: "from" -MAPI = (monetdb) /var/tmp/mtest-10564/.s.monetdb.32160 +MAPI = (monetdb) /var/tmp/mtest-26956/.s.monetdb.37342 QUERY = SELECT v, convert(v, longvarchar) from T_dec; -- LONGVARCHAR not valid data type ERROR = !type (longvarchar) unknown in: "select v, convert(v, longvarchar)" !syntax error, unexpected FROM in: "from" @@ -1359,7 +1359,7 @@ MAPI = (monetdb) /var/tmp/mtest-13167/. QUERY = SELECT v, cast(v as varchar) from T_dec; -- missing length specification ERROR = !CHARACTER VARYING needs a mandatory length specification in: "select v, cast(v as varchar)" !syntax error, unexpected FROM in: "from" -MAPI = (monetdb) /var/tmp/mtest-10564/.s.monetdb.32160 +MAPI = (monetdb) /var/tmp/mtest-26956/.s.monetdb.37342 QUERY = SELECT v, cast(v as longvarchar) from T_dec; -- LONGVARCHAR not valid data type ERROR = !type (longvarchar) unknown in: "select v, cast(v as longvarchar)" !syntax error, unexpected FROM in: "from" diff --git a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out --- a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out +++ b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out @@ -2512,7 +2512,7 @@ Ready. [ NULL, NULL ] #DROP TABLE T_bigint; #CREATE TABLE T_float (v FLOAT); -#INSERT into T_float VALUES (1), (0), (-1), (-127), (127), (-32767), (32767), (-2147483647), (2147483647); +#INSERT into T_float VALUES (1.0), (0.0), (-1.0), (-127.0), (127.0), (-32767.0), (32767.0), (-2147483647.0), (2147483647.0); [ 9 ] #INSERT into T_float VALUES (null); [ 1 ] @@ -4912,7 +4912,7 @@ Ready. [ NULL, NULL ] #DROP TABLE T_num; #CREATE TABLE T_dec (v DECIMAL(17,7)); -#INSERT into T_dec VALUES (1), (0), (-1), (-127), (127), (-32767), (32767), (-2147483647), (2147483647), (0.12), (-3.1415629); +#INSERT into T_dec VALUES (1.0), (0.0), (-1.0), (-127.0), (127.0), (-32767.0), (32767.0), (-2147483647.0), (2147483647.0), (0.12), (-3.1415629); [ 11 ] #INSERT into T_dec VALUES (null); [ 1 ] @@ -5180,11 +5180,11 @@ Ready. [ 0.1200000, 0.120 ] [ -3.1415629, -3.142 ] [ NULL, NULL ] -#SELECT v, convert(v, varchar(16)) from T_dec; +#SELECT v, convert(v, varchar(20)) from T_dec; % sys.t_dec, sys.L1 # table_name % v, L1 # name % decimal, varchar # type -% 19, 14 # length +% 19, 19 # length [ 1.0000000, "1.0000000" ] [ 0.0000000, "0.0000000" ] [ -1.0000000, "-1.0000000" ] @@ -5192,8 +5192,8 @@ Ready. [ 127.0000000, "127.0000000" ] [ -32767.0000000, "-32767.0000000" ] [ 32767.0000000, "32767.0000000" ] -[ -2147483647.0000000, NULL ] -[ 2147483647.0000000, NULL ] +[ -2147483647.0000000, "-2147483647.0000000" ] +[ 2147483647.0000000, "2147483647.0000000" ] [ 0.1200000, "0.1200000" ] [ -3.1415629, "-3.1415629" ] [ NULL, NULL ] @@ -5478,11 +5478,11 @@ Ready. [ 0.1200000, 0.120 ] [ -3.1415629, -3.142 ] [ NULL, NULL ] -#SELECT v, cast(v as varchar(16)) from T_dec; +#SELECT v, cast(v as varchar(20)) from T_dec; % sys.t_dec, sys.L1 # table_name % v, L1 # name % decimal, varchar # type -% 19, 14 # length +% 19, 19 # length [ 1.0000000, "1.0000000" ] [ 0.0000000, "0.0000000" ] [ -1.0000000, "-1.0000000" ] @@ -5490,8 +5490,8 @@ Ready. [ 127.0000000, "127.0000000" ] [ -32767.0000000, "-32767.0000000" ] [ 32767.0000000, "32767.0000000" ] -[ -2147483647.0000000, NULL ] -[ 2147483647.0000000, NULL ] +[ -2147483647.0000000, "-2147483647.0000000" ] +[ 2147483647.0000000, "2147483647.0000000" ] [ 0.1200000, "0.1200000" ] [ -3.1415629, "-3.1415629" ] [ NULL, NULL ] diff --git a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 --- a/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 +++ b/sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 @@ -2644,7 +2644,7 @@ Ready. [ NULL, NULL ] #DROP TABLE T_bigint; #CREATE TABLE T_float (v FLOAT); -#INSERT into T_float VALUES (1), (0), (-1), (-127), (127), (-32767), (32767), (-2147483647), (2147483647); +#INSERT into T_float VALUES (1.0), (0.0), (-1.0), (-127.0), (127.0), (-32767.0), (32767.0), (-2147483647.0), (2147483647.0); [ 9 ] #INSERT into T_float VALUES (null); [ 1 ] @@ -5176,7 +5176,7 @@ Ready. [ NULL, NULL ] #DROP TABLE T_num; #CREATE TABLE T_dec (v DECIMAL(17,7)); -#INSERT into T_dec VALUES (1), (0), (-1), (-127), (127), (-32767), (32767), (-2147483647), (2147483647), (0.12), (-3.1415629); +#INSERT into T_dec VALUES (1.0), (0.0), (-1.0), (-127.0), (127.0), (-32767.0), (32767.0), (-2147483647.0), (2147483647.0), (0.12), (-3.1415629); [ 11 ] #INSERT into T_dec VALUES (null); [ 1 ] @@ -5461,11 +5461,11 @@ Ready. [ 0.1200000, 0.120 ] [ -3.1415629, -3.142 ] [ NULL, NULL ] -#SELECT v, convert(v, varchar(16)) from T_dec; +#SELECT v, convert(v, varchar(20)) from T_dec; % sys.t_dec, sys.L1 # table_name % v, L1 # name % decimal, varchar # type -% 19, 14 # length +% 19, 19 # length [ 1.0000000, "1.0000000" ] [ 0.0000000, "0.0000000" ] [ -1.0000000, "-1.0000000" ] @@ -5473,8 +5473,8 @@ Ready. [ 127.0000000, "127.0000000" ] [ -32767.0000000, "-32767.0000000" ] [ 32767.0000000, "32767.0000000" ] -[ -2147483647.0000000, NULL ] -[ 2147483647.0000000, NULL ] +[ -2147483647.0000000, "-2147483647.0000000" ] +[ 2147483647.0000000, "2147483647.0000000" ] [ 0.1200000, "0.1200000" ] [ -3.1415629, "-3.1415629" ] [ NULL, NULL ] @@ -5776,11 +5776,11 @@ Ready. [ 0.1200000, 0.120 ] [ -3.1415629, -3.142 ] [ NULL, NULL ] -#SELECT v, cast(v as varchar(16)) from T_dec; +#SSELECT v, cast(v as varchar(20)) from T_dec; % sys.t_dec, sys.L1 # table_name % v, L1 # name % decimal, varchar # type -% 19, 14 # length +% 19, 19 # length [ 1.0000000, "1.0000000" ] [ 0.0000000, "0.0000000" ] [ -1.0000000, "-1.0000000" ] @@ -5788,8 +5788,8 @@ Ready. [ 127.0000000, "127.0000000" ] [ -32767.0000000, "-32767.0000000" ] [ 32767.0000000, "32767.0000000" ] -[ -2147483647.0000000, NULL ] -[ 2147483647.0000000, NULL ] +[ -2147483647.0000000, "-2147483647.0000000" ] +[ 2147483647.0000000, "2147483647.0000000" ] [ 0.1200000, "0.1200000" ] [ -3.1415629, "-3.1415629" ] [ NULL, NULL ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list