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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list