Changeset: b41a8dfa5aed for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b41a8dfa5aed Added Files: sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.err sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out Modified Files: clients/R/Tests/dbi.R sql/backends/monet5/Tests/rapi13.sql sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_upgrades.c sql/common/sql_types.c sql/server/rel_schema.c sql/server/rel_updates.c sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.sql sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.err sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.out sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.sql sql/test/BugTracker-2012/Tests/now_results_in_illegal_argument.Bug-2978.sql sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.sql sql/test/BugTracker-2015/Tests/div_zero.Bug-3742.sql sql/test/BugTracker-2015/Tests/div_zero.Bug-3742.stable.out sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.sql sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.stable.out sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.sql sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.sql sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.sql sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.sql sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.stable.err sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.stable.out sql/test/SQLancer/Tests/sqlancer02.sql sql/test/SQLancer/Tests/sqlancer02.stable.err sql/test/SQLancer/Tests/sqlancer02.stable.out sql/test/bugs/Tests/interval_convert_bugs-sf-1274077-1274085.sql sql/test/bugs/Tests/interval_convert_bugs-sf-1274077-1274085.stable.err sql/test/bugs/Tests/interval_convert_bugs-sf-1274077-1274085.stable.out sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/lateral/Tests/lateral.sql sql/test/miscellaneous/Tests/simple_selects.sql sql/test/miscellaneous/Tests/simple_selects.stable.err sql/test/miscellaneous/Tests/simple_selects.stable.out sql/test/pg_regress/Tests/date.stable.err sql/test/pg_regress/Tests/date.stable.out sql/test/pg_regress/Tests/interval.stable.err.int128 sql/test/pg_regress/Tests/interval.stable.out sql/test/pg_regress/Tests/interval.stable.out.int128 sql/test/pg_regress/Tests/reltime.sql sql/test/pg_regress/Tests/time.stable.err sql/test/pg_regress/Tests/time.stable.out sql/test/pg_regress/Tests/timestamp.sql sql/test/pg_regress/Tests/timestamp.stable.err sql/test/pg_regress/Tests/timestamp.stable.out sql/test/pg_regress/Tests/timestamptz.sql sql/test/pg_regress/Tests/timestamptz.stable.err sql/test/pg_regress/Tests/timestamptz.stable.out sql/test/pg_regress/Tests/timetz.stable.err sql/test/pg_regress/Tests/timetz.stable.out sql/test/snodgrass/Tests/cast_select.sql sql/test/snodgrass/Tests/cast_select.stable.err sql/test/snodgrass/Tests/cast_select.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 Branch: default Log Message:
merged diffs (truncated from 3319 to 300 lines): diff --git a/clients/R/Tests/dbi.R b/clients/R/Tests/dbi.R --- a/clients/R/Tests/dbi.R +++ b/clients/R/Tests/dbi.R @@ -193,7 +193,7 @@ stopifnot(identical("Роман Mühleisen", dbGetQuery(conn,"SELECT a FROM monetdbtest")$a[[1]])) dbRollback(conn) # this returns a column with esoteric type MONTH_INTERVAL -stopifnot(identical(1L, as.integer(dbGetQuery(con, "select cast(1 as interval month) - cast(0 as interval month)")[[1]][[1]]))) +stopifnot(identical(1L, as.integer(dbGetQuery(con, "select interval '1' month + interval '0' month")[[1]][[1]]))) # reserved words in data frame column names stopifnot(dbIsValid(conn)) diff --git a/sql/backends/monet5/Tests/rapi13.sql b/sql/backends/monet5/Tests/rapi13.sql --- a/sql/backends/monet5/Tests/rapi13.sql +++ b/sql/backends/monet5/Tests/rapi13.sql @@ -17,12 +17,12 @@ 2015-06-03 15:11:17.000000|2|"4006A4"|52 2015-06-03 15:11:17.000000|2|"45AC45"|52.12491|6.03063|3.6e+04 # three return columns works -CREATE FUNCTION working_test(stt string, tss bigint, lat double, lon double, alt double) returns table (i int, j int, k int) language R { +CREATE FUNCTION working_test(stt string, tss interval second, lat double, lon double, alt double) returns table (i int, j int, k int) language R { return(data.frame(1:10, 1:10, 1:10)) }; # but four does not? something to do with the amount of return columns? -CREATE FUNCTION broken_test(stt string, tss bigint, lat double, lon double, alt double) returns table (i int, j int, k int, l int) language R { +CREATE FUNCTION broken_test(stt string, tss interval second, lat double, lon double, alt double) returns table (i int, j int, k int, l int) language R { return(data.frame(1:10, 1:10, 1:10, 1:10)) }; diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -4567,17 +4567,8 @@ sql_delete_set_Fkeys(backend *be, sql_ke if (action == ACT_SET_DEFAULT) { if (fc->c->def) { - stmt *sq; - char *msg, *typestr = subtype2string2(&fc->c->type); - if(!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - msg = sa_message(sql->sa, "select cast(%s as %s);", fc->c->def, typestr); - _DELETE(typestr); - sq = rel_parse_value(be, msg, sql->emode); - if (!sq) - return NULL; - upd = sq; - } else { + upd = rel_parse_value(be, sa_message(sql->sa, "select %s;", fc->c->def), sql->emode); + } else { upd = stmt_atom(be, atom_general(sql->sa, &fc->c->type, NULL)); } } else { @@ -4630,16 +4621,7 @@ sql_update_cascade_Fkeys(backend *be, sq upd = updates[c->c->colnr]; } else if (action == ACT_SET_DEFAULT) { if (fc->c->def) { - stmt *sq; - char *msg, *typestr = subtype2string2(&fc->c->type); - if(!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - msg = sa_message(sql->sa, "select cast(%s as %s);", fc->c->def, typestr); - _DELETE(typestr); - sq = rel_parse_value(be, msg, sql->emode); - if (!sq) - return NULL; - upd = sq; + upd = rel_parse_value(be, sa_message(sql->sa, "select %s;", fc->c->def), sql->emode); } else { upd = stmt_atom(be, atom_general(sql->sa, &fc->c->type, NULL)); } diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -316,7 +316,6 @@ create_table_or_view(mvc *sql, char* sna sql_column *c = n->data; if (c->def) { - char *buf, *typestr; sql_rel *r = NULL; list *id_l; @@ -325,21 +324,7 @@ create_table_or_view(mvc *sql, char* sna sql->sa = osa; throw(SQL, "sql.catalog",SQLSTATE(HY013) MAL_MALLOC_FAIL); } - buf = sa_alloc(sql->sa, strlen(c->def) + 8); - if (!buf) { - sa_destroy(sql->sa); - sql->sa = osa; - throw(SQL, "sql.catalog",SQLSTATE(HY013) MAL_MALLOC_FAIL); - } - typestr = subtype2string2(&c->type); - if (!typestr) { - sa_destroy(sql->sa); - sql->sa = osa; - throw(SQL, "sql.catalog",SQLSTATE(HY013) MAL_MALLOC_FAIL); - } - snprintf(buf, BUFSIZ, "select cast(%s as %s);", c->def, typestr); - _DELETE(typestr); - r = rel_parse(sql, s, buf, m_deps); + r = rel_parse(sql, s, sa_message(sql->sa, "select %s;", c->def), m_deps); if (!r || !is_project(r->op) || !r->exps || list_length(r->exps) != 1 || rel_check_type(sql, &c->type, r, r->exps->h->data, type_equal) == NULL) { if (r) diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2980,18 +2980,35 @@ sql_update_default(Client c, mvc *sql, c "DROP FUNCTION \"sys\".\"getcontent\"(url);\n" "DROP AGGREGATE \"json\".\"output\"(json);\n"); - /* Move sys.degrees and sys.radians to sql_types.c definitions */ + /* Move sys.degrees and sys.radians to sql_types.c definitions (I did this at the bat_logger) Remove the obsolete entries at privileges table */ + pos += snprintf(buf + pos, bufsize - pos, + "delete from privileges where obj_id in (select obj_id from privileges left join functions on privileges.obj_id = functions.id where functions.id is null and privileges.obj_id not in ((SELECT tables.id from tables), 0));\n"); + /* Remove sql_add and sql_sub between interval and numeric types */ pos += snprintf(buf + pos, bufsize - pos, - "delete from args where args.id in (select args.id from args left join functions on args.func_id = functions.id where args.name in ('r', 'd') and functions.id is null);\n" - "delete from privileges where obj_id in (select obj_id from privileges left join functions on privileges.obj_id = functions.id where functions.id is null and privileges.obj_id not in ((SELECT tables.id from tables), 0));\n"); + "delete from functions where name in ('sql_sub','sql_add') and func in ('+','-') and id in (select func_id from args where name = 'res_0' and type in ('sec_interval','month_interval'));\n"); + /* Remove arguments with no function correspondent */ + pos += snprintf(buf + pos, bufsize - pos, + "delete from args where id in (select args.id from args left join functions on args.func_id = functions.id where functions.id is null);\n"); - sql_subtype *types[2] = {sql_bind_localtype("flt"), sql_bind_localtype("dbl")}; list *functions = sa_list(sql->sa); + /* Adding fixed versions of degrees and radians functions */ + sql_subtype *flt_types[2] = {sql_bind_localtype("flt"), sql_bind_localtype("dbl")}; for (int i = 0; i < 2; i++) { - sql_subtype *next = types[i]; + sql_subtype *next = flt_types[i]; list_append(functions, sql_create_func(sql->sa, "degrees", "mmath", "degrees", FALSE, FALSE, SCALE_FIX, 0, next->type, 1, next->type)); list_append(functions, sql_create_func(sql->sa, "radians", "mmath", "radians", FALSE, FALSE, SCALE_FIX, 0, next->type, 1, next->type)); } + + /* Adding 'sql_sub' and 'sql_add' between interval types only */ + sql_subtype sec, month; + sql_find_subtype(&sec, "sec_interval", 13, SCALE_FIX); + sql_find_subtype(&month, "month_interval", 32, 0); + sql_subtype *interval_types[2] = {&sec, &month}; + for (int i = 0; i < 2; i++) { + sql_subtype *next = interval_types[i]; + list_append(functions, sql_create_func(sql->sa, "sql_sub", "calc", "-", FALSE, FALSE, SCALE_FIX, 0, next->type, 2, next->type, next->type)); + list_append(functions, sql_create_func(sql->sa, "sql_add", "calc", "+", FALSE, FALSE, SCALE_FIX, 0, next->type, 2, next->type, next->type)); + } insert_functions(sql->session->tr, mvc_bind_table(sql, sys, "functions"), functions, mvc_bind_table(sql, sys, "args")); pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", prev_schema); diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -102,11 +102,11 @@ static int convert_matrix[EC_MAX][EC_MAX /* EC_CHAR */ { 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, /* EC_STRING */ { 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, /* EC_BLOB */ { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, -/* EC_POS */ { 0, 0, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, -/* EC_NUM */ { 0, 0, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, -/* EC_MONTH*/ { 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, -/* EC_SEC*/ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, -/* EC_DEC */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, +/* EC_POS */ { 0, 0, 2, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, +/* EC_NUM */ { 0, 0, 2, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, +/* EC_MONTH*/ { 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +/* EC_SEC*/ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, +/* EC_DEC */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, /* EC_FLT */ { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, /* EC_TIME */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0 }, /* EC_TIME_TZ */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, @@ -1667,18 +1667,21 @@ sqltypeinit( sql_allocator *sa) /* scale fixing for all numbers */ sql_create_func(sa, "scale_up", "calc", "*", FALSE, FALSE, SCALE_NONE, 0, *t, 2, *t, lt->type); sql_create_func(sa, "scale_down", "sql", "dec_round", FALSE, FALSE, SCALE_NONE, 0, *t, 2, *t, lt->type); - /* numeric function on INTERVALS */ - if (*t != MONINT && *t != SECINT){ - sql_create_func(sa, "sql_sub", "calc", "-", FALSE, FALSE, SCALE_FIX, 0, MONINT, 2, MONINT, *t); - sql_create_func(sa, "sql_add", "calc", "+", FALSE, FALSE, SCALE_FIX, 0, MONINT, 2, MONINT, *t); + /* numeric functions on INTERVALS */ + if (*t != MONINT && *t != SECINT) { sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, MONINT, 2, MONINT, *t); sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, MONINT, 2, MONINT, *t); - sql_create_func(sa, "sql_sub", "calc", "-", FALSE, FALSE, SCALE_FIX, 0, SECINT, 2, SECINT, *t); - sql_create_func(sa, "sql_add", "calc", "+", FALSE, FALSE, SCALE_FIX, 0, SECINT, 2, SECINT, *t); sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, SECINT, 2, SECINT, *t); sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, SECINT, 2, SECINT, *t); } } + + /* numeric functions on INTERVALS */ + for (t = dates; *t != TME; t++) { + sql_create_func(sa, "sql_sub", "calc", "-", FALSE, FALSE, SCALE_FIX, 0, *t, 2, *t, *t); + sql_create_func(sa, "sql_add", "calc", "+", FALSE, FALSE, SCALE_FIX, 0, *t, 2, *t, *t); + } + for (t = decimals, t++; t != floats; t++) { sql_type **u; for (u = numerical; u != floats; u++) { diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -1572,13 +1572,7 @@ sql_alter_table(sql_query *query, dlist for (node *n = nt->columns.nelm; n; n = n->next) { sql_column *c = n->data; if (c->def) { - char *d, *typestr = subtype2string2(&c->type); - if (!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - d = sql_message("select cast(%s as %s);", c->def, typestr); - _DELETE(typestr); - e = rel_parse_val(sql, d, sql->emode, NULL); - _DELETE(d); + e = rel_parse_val(sql, sa_message(sql->sa, "select %s;", c->def), sql->emode, NULL); } else { e = exp_atom(sql->sa, atom_general(sql->sa, &c->type, NULL)); } diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -29,12 +29,7 @@ insert_value(sql_query *query, sql_colum return exp_atom(sql->sa, atom_general(sql->sa, &c->type, NULL)); } else if (s->token == SQL_DEFAULT) { if (c->def) { - sql_exp *e; - char *typestr = subtype2string2(&c->type); - if(!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - e = rel_parse_val(sql, sa_message(sql->sa, "select cast(%s as %s);", c->def, typestr), sql->emode, NULL); - _DELETE(typestr); + sql_exp *e = rel_parse_val(sql, sa_message(sql->sa, "select %s;", c->def), sql->emode, NULL); if (!e || (e = rel_check_type(sql, &c->type, r ? *r : NULL, e, type_equal)) == NULL) return sql_error(sql, 02, SQLSTATE(HY005) "%s: default expression could not be evaluated", action); return e; @@ -347,12 +342,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ sql_exp *e = NULL; if (c->def) { - char *q, *typestr = subtype2string2(&c->type); - if(!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - q = sa_message(sql->sa, "select cast(%s as %s);", c->def, typestr); - _DELETE(typestr); - e = rel_parse_val(sql, q, sql->emode, NULL); + e = rel_parse_val(sql, sa_message(sql->sa, "select %s;", c->def), sql->emode, NULL); if (!e || (e = rel_check_type(sql, &c->type, r, e, type_equal)) == NULL) return sql_error(sql, 02, SQLSTATE(HY005) "%s: default expression could not be evaluated", action); } else { @@ -943,18 +933,14 @@ update_generate_assignments(sql_query *q if (single && a->token == SQL_DEFAULT) { char *colname = assignment->h->next->data.sval; - sql_column *col = mvc_bind_column(sql, t, colname); + sql_column *c = mvc_bind_column(sql, t, colname); - if (!col) + if (!c) return sql_error(sql, 02, SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, colname); - if (col->def) { - char *typestr = subtype2string2(&col->type); - if (!typestr) - return sql_error(sql, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); - v = rel_parse_val(sql, sa_message(sql->sa, "select cast(%s as %s);", col->def, typestr), sql->emode, NULL); - _DELETE(typestr); + if (c->def) { + v = rel_parse_val(sql, sa_message(sql->sa, "select %s;", c->def), sql->emode, NULL); } else { - return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' has no valid default value", action, col->base.name); + return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' has no valid default value", action, c->base.name); } } else if (single) { v = rel_value_exp(query, &r, a, sql_sel | sql_update_set, ek); diff --git a/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.sql b/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.sql --- a/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.sql +++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.sql @@ -1,7 +1,7 @@ set debug = 1; set debug = true; -set current_timezone = 60; +set current_timezone = interval '60' second; select current_timezone; set debug = false; -set current_timezone = 0; +set current_timezone = interval '0' second; select current_timezone; diff --git a/sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.err b/sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.err --- a/sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.err +++ b/sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_interval.SF.1280682.stable.err @@ -5,6 +5,14 @@ stderr of test 'cast_interval.SF.1280682 # 16:12:10 > Mtimeout -timeout 180 Mserver "--config=/ufs/sjoerd/Monet-virgin/etc/MonetDB.conf" --debug=10 --set "monet_mod_path=/ufs/sjoerd/src/MonetDB/devel/sql-virgin/Linux/lib/MonetDB:/ufs/sjoerd/Monet-virgin/lib/MonetDB" --set "gdk_dbfarm=/ufs/sjoerd/Monet-virgin/var/MonetDB/dbfarm" --set "sql_logdir=/ufs/sjoerd/Monet-virgin/var/MonetDB/log" --set mapi_port=30623 --set sql_port=49284 --set xquery_port=58556 --set monet_prompt= --trace "--dbname=mTests_src_test_BugDay_2005-12-19_2.9.3" --dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over.. # 16:12:10 > +MAPI = (monetdb) /var/tmp/mtest-438601/.s.monetdb.35318 +QUERY = select cast( 1 as interval year ); +ERROR = !types tinyint(1,0) and month_interval(1,0) are not equal +CODE = 42000 +MAPI = (monetdb) /var/tmp/mtest-438601/.s.monetdb.35318 +QUERY = select cast( 1 as interval day ); +ERROR = !types tinyint(1,0) and sec_interval(4,0) are not equal +CODE = 42000 # 16:12:10 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list