Changeset: b64b64deb697 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b64b64deb697 Added Files: sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.py sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.err sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.out Modified Files: monetdb5/modules/mal/tablet.c sql/backends/monet5/sql.c sql/test/BugTracker-2019/Tests/All sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql Branch: Nov2019 Log Message:
Merge with Apr2019 branch diffs (truncated from 338 to 300 lines): diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c --- a/monetdb5/modules/mal/tablet.c +++ b/monetdb5/modules/mal/tablet.c @@ -670,10 +670,8 @@ tablet_error(READERtask *task, lng row, BUNappend(task->cntxt->error_msg, msg, false) != GDK_SUCCEED || BUNappend(task->cntxt->error_input, fcn, false) != GDK_SUCCEED) task->besteffort = 0; - if (!is_lng_nil(row) && task->rowerror) { - assert(row < task->limit); + if (!is_lng_nil(row) && task->rowerror && row < task->limit) task->rowerror[row]++; - } } if (task->as->error == NULL) { if (msg == 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 @@ -463,8 +463,7 @@ create_table_from_emit(Client cntxt, cha return msg; /* for some reason we don't have an allocator here, so make one */ - sql->sa = sa_create(); - if (!sql->sa) { + if (!(sql->sa = sa_create())) { msg = sql_error(sql, 02, SQLSTATE(HY001) "CREATE TABLE: %s", MAL_MALLOC_FAIL); goto cleanup; } @@ -480,44 +479,44 @@ create_table_from_emit(Client cntxt, cha goto cleanup; } - for(i = 0; i < ncols; i++) { + for (i = 0; i < ncols; i++) { BAT *b = columns[i].b; - sql_subtype *tpe = sql_bind_localtype(ATOMname(b->ttype)); + str atoname = ATOMname(b->ttype); + sql_subtype tpe; sql_column *col = NULL; - if (!tpe) { - msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not find type for column"); - goto cleanup; + if (!strcmp(atoname, "str")) + sql_find_subtype(&tpe, "clob", 0, 0); + else { + sql_subtype *t = sql_bind_localtype(atoname); + if (!t) { + msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not find type for column"); + goto cleanup; + } + tpe = *t; } - col = mvc_create_column(sql, t, columns[i].name, tpe); - if (!col) { + if (!(col = mvc_create_column(sql, t, columns[i].name, &tpe))) { msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not create column %s", columns[i].name); goto cleanup; } } - msg = create_table_or_view(sql, sname, t->base.name, t, 0); - if (msg != MAL_SUCCEED) { + if ((msg = create_table_or_view(sql, sname, t->base.name, t, 0)) != MAL_SUCCEED) goto cleanup; - } - t = mvc_bind_table(sql, s, tname); - if (!t) { + if (!(t = mvc_bind_table(sql, s, tname))) { msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not bind table %s", tname); goto cleanup; } - for(i = 0; i < ncols; i++) { + for (i = 0; i < ncols; i++) { BAT *b = columns[i].b; sql_column *col = NULL; - col = mvc_bind_column(sql,t, columns[i].name); - if (!col) { + if (!(col = mvc_bind_column(sql, t, columns[i].name))) { msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not bind column %s", columns[i].name); goto cleanup; } - msg = mvc_append_column(sql->session->tr, col, b); - if (msg != MAL_SUCCEED) { + if ((msg = mvc_append_column(sql->session->tr, col, b)) != MAL_SUCCEED) goto cleanup; - } } cleanup: @@ -543,8 +542,7 @@ append_to_table_from_emit(Client cntxt, return msg; /* for some reason we don't have an allocator here, so make one */ - sql->sa = sa_create(); - if (!sql->sa) { + if (!(sql->sa = sa_create())) { msg = sql_error(sql, 02, SQLSTATE(HY001) "CREATE TABLE: %s", MAL_MALLOC_FAIL); goto cleanup; } @@ -555,24 +553,20 @@ append_to_table_from_emit(Client cntxt, msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: no such schema '%s'", sname); goto cleanup; } - t = mvc_bind_table(sql, s, tname); - if (!t) { + if (!(t = mvc_bind_table(sql, s, tname))) { msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not bind table %s", tname); goto cleanup; } - for(i = 0; i < ncols; i++) { + for (i = 0; i < ncols; i++) { BAT *b = columns[i].b; sql_column *col = NULL; - col = mvc_bind_column(sql,t, columns[i].name); - if (!col) { + if (!(col = mvc_bind_column(sql,t, columns[i].name))) { msg = sql_error(sql, 02, SQLSTATE(3F000) "CREATE TABLE: could not bind column %s", columns[i].name); goto cleanup; } - msg = mvc_append_column(sql->session->tr, col, b); - if (msg != MAL_SUCCEED) { + if ((msg = mvc_append_column(sql->session->tr, col, b)) != MAL_SUCCEED) goto cleanup; - } } cleanup: diff --git a/sql/test/BugTracker-2019/Tests/All b/sql/test/BugTracker-2019/Tests/All --- a/sql/test/BugTracker-2019/Tests/All +++ b/sql/test/BugTracker-2019/Tests/All @@ -33,3 +33,4 @@ alter_table_drop_column.Bug-6749 HAVE_PYMONETDB?remote-table-non-existent-column.Bug-6750 cte-union.Bug-6755 merge-table-limit.Bug-6756 +HAVE_LIBPY3?python-loader-string.Bug-6759 diff --git a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql --- a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql +++ b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql @@ -4,5 +4,5 @@ CREATE TABLE IF NOT EXISTS "task" ( "sys_created_on" TIMESTAMP ); - explain SELECT sys.timestamp_to_str(case when task0."sys_created_on" >= '1999-10-31 09:00:00' and task0."sys_created_on" < '2000-04-02 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2000-04-02 10:00:00' and task0."sys_created_on" < '2000-10-29 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2000-10-29 09:00:00' and task0."sys_created_on" < '2001-04-01 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2001-04-01 10:00:00' and task0."sys_created_on" < '2001-10-28 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2001-10-28 09:00:00' and task0."sys_created_on" < '2002-04-07 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2002-04-07 10:00:00' and task0."sys_created_on" < '2002-10-27 09:00:00' then task0."sys_created_on" + interval '-25200' second w hen task0."sys_created_on" >= '2002-10-27 09:00:00' and task0."sys_created_on" < '2003-04-06 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2003-04-06 10:00:00' and task0."sys_created_on" < '2003-10-26 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2003-10-26 09:00:00' and task0."sys_created_on" < '2004-04-04 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2004-04-04 10:00:00' and task0."sys_created_on" < '2004-10-31 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2004-10-31 09:00:00' and task0."sys_created_on" < '2005-04-03 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2005-04-03 10:00:00' and task0."sys_created_on" < '2005-10-30 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2005-10-30 0 9:00:00' and task0."sys_created_on" < '2006-04-02 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2006-04-02 10:00:00' and task0."sys_created_on" < '2006-10-29 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2006-10-29 09:00:00' and task0."sys_created_on" < '2007-03-11 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2007-03-11 10:00:00' and task0."sys_created_on" < '2007-11-04 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2007-11-04 09:00:00' and task0."sys_created_on" < '2008-03-09 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2008-03-09 10:00:00' and task0."sys_created_on" < '2008-11-02 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2008-11-02 09:00:00' and task0."sys_created_on" < '2009 -03-08 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2009-03-08 10:00:00' and task0."sys_created_on" < '2009-11-01 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2009-11-01 09:00:00' and task0."sys_created_on" < '2010-03-14 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2010-03-14 10:00:00' and task0."sys_created_on" < '2010-11-07 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2010-11-07 09:00:00' and task0."sys_created_on" < '2011-03-13 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2011-03-13 10:00:00' and task0."sys_created_on" < '2011-11-06 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2011-11-06 09:00:00' and task0."sys_created_on" < '2012-03-11 10:00:00' then task0."sys_created_on " + interval '-28800' second when task0."sys_created_on" >= '2012-03-11 10:00:00' and task0."sys_created_on" < '2012-11-04 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2012-11-04 09:00:00' and task0."sys_created_on" < '2013-03-10 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2013-03-10 10:00:00' and task0."sys_created_on" < '2013-11-03 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2013-11-03 09:00:00' and task0."sys_created_on" < '2014-03-09 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2014-03-09 10:00:00' and task0."sys_created_on" < '2014-11-02 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2014-11-02 09:00:00' and task0."sys_created_on" < '2015-03-08 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sy s_created_on" >= '2015-03-08 10:00:00' and task0."sys_created_on" < '2015-11-01 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2015-11-01 09:00:00' and task0."sys_created_on" < '2016-03-13 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2016-03-13 10:00:00' and task0."sys_created_on" < '2016-11-06 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2016-11-06 09:00:00' and task0."sys_created_on" < '2017-03-12 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2017-03-12 10:00:00' and task0."sys_created_on" < '2017-11-05 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2017-11-05 09:00:00' and task0."sys_created_on" < '2018-03-11 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2018-03-11 10:00:00' and task0."sys_created_on" < '2018-11-04 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2018-11-04 09:00:00' and task0."sys_created_on" < '2019-03-10 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2019-03-10 10:00:00' and task0."sys_created_on" < '2019-11-03 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2019-11-03 09:00:00' and task0."sys_created_on" < '2020-03-08 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2020-03-08 10:00:00' and task0."sys_created_on" < '2020-11-01 09:00:00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2020-11-01 09:00:00' and task0."sys_created_on" < '2021-03-14 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2021-03-14 10:00:00' and task0."sys_created_on" < '2021-11-07 09:00: 00' then task0."sys_created_on" + interval '-25200' second when task0."sys_created_on" >= '2021-11-07 09:00:00' and task0."sys_created_on" < '2022-03-13 10:00:00' then task0."sys_created_on" + interval '-28800' second when task0."sys_created_on" >= '2022-03-13 10:00:00' and task0."sys_created_on" < '2022-11-06 09:00:00' then task0."sys_created_on" + interval '-25200' second else task0."sys_created_on" + interval '-28800' second end,'%Y') AS yearref FROM task task0 WHERE task0."sys_class_name" = 'incident' AND task0."priority" IS NOT NULL ; +DROP TABLE "task"; diff --git a/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.py b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.py new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.py @@ -0,0 +1,38 @@ +import sys + +try: + from MonetDBtesting import process +except ImportError: + import process + + +s = process.server(args = ['--set', 'embedded_py=3'], stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) + +c = process.client(lang = 'sql', stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) +out, err = c.communicate('''\ +CREATE LOADER json_loader() LANGUAGE PYTHON {\n\ + import json\n\ + _emit.emit(json.loads('{"col1": ["apple", "peer"], "col2": ["orange", "banana nananana"]}'))\n\ +};\ +CREATE TABLE tbl FROM LOADER json_loader();\ +SELECT * FROM tbl; +''') +sys.stdout.write(out) +sys.stderr.write(err) + +c = process.client(lang = 'sqldump', stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) +out, err = c.communicate() +sys.stdout.write(out) +sys.stderr.write(err) + +c = process.client(lang = 'sql', stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) +out, err = c.communicate('''\ +DROP TABLE tbl;\ +DROP LOADER json_loader; +''') +sys.stdout.write(out) +sys.stderr.write(err) + +out, err = s.communicate() +sys.stdout.write(out) +sys.stderr.write(err) diff --git a/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.err b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.err @@ -0,0 +1,37 @@ +stderr of test 'python-loader-string.Bug-6759` in directory 'sql/test/BugTracker-2019` itself: + + +# 10:43:16 > +# 10:43:16 > "/usr/bin/python2" "python-loader-string.Bug-6759.py" "python-loader-string.Bug-6759" +# 10:43:16 > + +# builtin opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Apr2019/BUILD/var/monetdb5/dbfarm/demo +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 34149 +# cmdline opt mapi_usock = /var/tmp/mtest-6899/.s.monetdb.34149 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Apr2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2019 +# cmdline opt embedded_py = 2 +#WARNING To speedup sql.get_value a bulk operator implementation is needed +# X_282:bat[:lng] := mal.multiplex("sql":str, "get_value":str, X_247:bat[:str], X_257:bat[:str]); +#WARNING To speedup sql.get_value a bulk operator implementation is needed +# X_283:bat[:lng] := mal.multiplex("sql":str, "get_value":str, X_248:bat[:str], X_258:bat[:str]); +#WARNING To speedup sql.get_value a bulk operator implementation is needed +# X_284:bat[:lng] := mal.multiplex("sql":str, "get_value":str, X_249:bat[:str], X_259:bat[:str]); +#WARNING To speedup sql.get_value a bulk operator implementation is needed +# X_285:bat[:lng] := mal.multiplex("sql":str, "get_value":str, X_250:bat[:str], X_260:bat[:str]); +#WARNING To speedup sql.get_value a bulk operator implementation is needed +# X_286:bat[:lng] := mal.multiplex("sql":str, "get_value":str, X_251:bat[:str], X_261:bat[:str]); + +# 10:43:17 > +# 10:43:17 > "Done." +# 10:43:17 > + diff --git a/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.out b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2019/Tests/python-loader-string.Bug-6759.stable.out @@ -0,0 +1,100 @@ +stdout of test 'python-loader-string.Bug-6759` in directory 'sql/test/BugTracker-2019` itself: + + +# 10:43:16 > +# 10:43:16 > "/usr/bin/python2" "python-loader-string.Bug-6759.py" "python-loader-string.Bug-6759" +# 10:43:16 > + +#CREATE LOADER json_loader() LANGUAGE PYTHON { +# import json +# _emit.emit(json.loads('{"col1": ["apple", "peer"], "col2": ["orange", "banana nananana"]}')) +#};CREATE TABLE tbl FROM LOADER json_loader();SELECT * FROM tbl; +#CREATE LOADER json_loader() LANGUAGE PYTHON { +# import json +# _emit.emit(json.loads('{"col1": ["apple", "peer"], "col2": ["orange", "banana nananana"]}')) +#};CREATE TABLE tbl FROM LOADER json_loader();SELECT * FROM tbl; +#CREATE LOADER json_loader() LANGUAGE PYTHON { +# import json +# _emit.emit(json.loads('{"col1": ["apple", "peer"], "col2": ["orange", "banana nananana"]}')) +#};CREATE TABLE tbl FROM LOADER json_loader();SELECT * FROM tbl; +% sys.tbl, sys.tbl # table_name +% col1, col2 # name +% clob, clob # type +% 5, 15 # length +[ "apple", "orange" ] +[ "peer", "banana nananana" ] +START TRANSACTION; +SET SCHEMA "sys"; +CREATE LOADER "sys"."json_loader"() LANGUAGE PYTHON +{ + import json + _emit.emit(json.loads('{"col1": ["apple", "peer"], "col2": ["orange", "banana nananana"]}')) +}; +CREATE TABLE "sys"."tbl" ( + "col1" CHARACTER LARGE OBJECT, + "col2" CHARACTER LARGE OBJECT +); +COPY 2 RECORDS INTO "sys"."tbl" FROM stdin USING DELIMITERS E'\t',E'\n','"'; +"apple" "orange" +"peer" "banana nananana" +COMMIT; +#DROP TABLE tbl;DROP LOADER json_loader; +#DROP TABLE tbl;DROP LOADER json_loader; +# MonetDB 5 server v11.33.12 (hg id: d4694fed4f7e) +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2019', using 8 threads +# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers +# Found 15.527 GiB available main-memory. +# Copyright (c) 1993 - July 2008 CWI. +# Copyright (c) August 2008 - 2019 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.localdomain:34149/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-6899/.s.monetdb.34149 +# MonetDB/GIS module loaded +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list