Changeset: 75c12c463c50 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75c12c463c50 Added Files: sql/test/BugTracker-2020/Tests/alter-table-add-column.Bug-6816.py sql/test/BugTracker-2020/Tests/alter-table-add-column.Bug-6816.stable.err sql/test/BugTracker-2020/Tests/alter-table-add-column.Bug-6816.stable.out sql/test/BugTracker-2020/Tests/analyze-stream-table.Bug-6817.sql sql/test/BugTracker-2020/Tests/analyze-stream-table.Bug-6817.stable.err sql/test/BugTracker-2020/Tests/analyze-stream-table.Bug-6817.stable.out sql/test/BugTracker-2020/Tests/select-where-in-rtrim-crash.Bug-6818.sql sql/test/BugTracker-2020/Tests/select-where-in-rtrim-crash.Bug-6818.stable.err sql/test/BugTracker-2020/Tests/select-where-in-rtrim-crash.Bug-6818.stable.out Removed Files: sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.py sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.err sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.out Modified Files: common/utils/mstring.h gdk/gdk.h gdk/gdk_bbp.c monetdb5/mal/mal_instruction.c sql/backends/monet5/sql_statistics.c sql/server/rel_select.c sql/storage/bat/bat_logger.c sql/test/BugTracker-2009/Tests/lost_update.SF-2790020.py sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.err sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.out sql/test/BugTracker-2020/Tests/All sql/test/analytics/Tests/analytics00.sql sql/test/analytics/Tests/analytics00.stable.out Branch: default Log Message:
Merged with linear-hashing diffs (truncated from 764 to 300 lines): diff --git a/common/utils/mstring.h b/common/utils/mstring.h --- a/common/utils/mstring.h +++ b/common/utils/mstring.h @@ -23,7 +23,6 @@ strcpy_len(char *restrict dst, const cha return i; } dst[n - 1] = 0; - return n-1; } return strlen(src); } diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1534,10 +1534,14 @@ typedef struct { BAT *cache; /* if loaded: BAT* handle */ char *logical; /* logical name (may point at bak) */ char bak[16]; /* logical name backup (tmp_%o) */ + BAT *desc; /* the BAT descriptor */ + char *options; /* A string list of options */ +#if SIZEOF_VOID_P == 4 + char physical[20]; /* dir + basename for storage */ +#else + char physical[24]; /* dir + basename for storage */ +#endif bat next; /* next BBP slot in linked list */ - BAT *desc; /* the BAT descriptor */ - char physical[20]; /* dir + basename for storage */ - str options; /* A string list of options */ int refs; /* in-memory references on which the loaded status of a BAT relies */ int lrefs; /* logical references on which the existence of a BAT relies */ volatile unsigned status; /* status mask used for spin locking */ @@ -1545,19 +1549,20 @@ typedef struct { } BBPrec; gdk_export bat BBPlimit; +#if SIZEOF_VOID_P == 4 #define N_BBPINIT 1000 -#if SIZEOF_VOID_P == 4 #define BBPINITLOG 11 #else +#define N_BBPINIT 10000 #define BBPINITLOG 14 #endif #define BBPINIT (1 << BBPINITLOG) /* absolute maximum number of BATs is N_BBPINIT * BBPINIT * this also gives the longest possible "physical" name and "bak" name - * of a BAT: the "bak" name is "tmp_%o", so at most 12 + \0 bytes on + * of a BAT: the "bak" name is "tmp_%o", so at most 14 + \0 bytes on * 64 bit architecture and 11 + \0 on 32 bit architecture; the * physical name is a bit more complicated, but the longest possible - * name is 17 + \0 bytes (16 + \0 on 32 bits) */ + * name is 22 + \0 bytes (16 + \0 on 32 bits) */ gdk_export BBPrec *BBP[N_BBPINIT]; /* fast defines without checks; internal use only */ diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1046,7 +1046,7 @@ BBPreadEntries(FILE *fp, unsigned bbpver uint64_t batid; uint16_t status; char headname[129]; - char filename[20]; + char filename[sizeof(BBP_physical(0))]; unsigned int properties; int nread, n; char *s, *options = NULL; @@ -1054,8 +1054,6 @@ BBPreadEntries(FILE *fp, unsigned bbpver uint64_t count, capacity, base = 0; int Thashash; - static_assert(sizeof(BBP_physical(0)) == sizeof(filename), - "filename should be same size as BBPrec.physical"); if ((s = strchr(buf, '\r')) != NULL) { /* convert \r\n into just \n */ if (s[1] != '\n') { diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -793,7 +793,12 @@ newVariable(MalBlkPtr mb, const char *na if( name == 0 || len == 0){ (void) snprintf(getVarName(mb,n), IDLENGTH,"%c%c%d", REFMARKER, TMPMARKER,mb->vid++); } else { - (void) strcpy_len( getVarName(mb,n), name, len + 1); + /* avoid calling strcpy_len since we're not interested in the + * source length, and that may be very large */ + char *nme = getVarName(mb,n); + for (size_t i = 0; i < len; i++) + nme[i] = name[i]; + nme[len] = 0; } mb->vtop++; diff --git a/sql/backends/monet5/sql_statistics.c b/sql/backends/monet5/sql_statistics.c --- a/sql/backends/monet5/sql_statistics.c +++ b/sql/backends/monet5/sql_statistics.c @@ -84,13 +84,13 @@ sql_analyze(Client cntxt, MalBlkPtr mb, sys = mvc_bind_schema(m, "sys"); if (sys == NULL) - throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error"); + throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No schema sys"); sysstats = mvc_bind_table(m, sys, "statistics"); if (sysstats == NULL) - throw(SQL, "sql.analyze", SQLSTATE(3F000) "No table sys.statistics"); + throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No table sys.statistics"); statsid = mvc_bind_column(m, sysstats, "column_id"); if (statsid == NULL) - throw(SQL, "sql.analyze", SQLSTATE(3F000) "No table sys.statistics"); + throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No table sys.statistics"); switch (argc) { case 6: @@ -121,12 +121,12 @@ sql_analyze(Client cntxt, MalBlkPtr mb, if (tbl && strcmp(bt->name, tbl)) continue; - if (t->persistence != SQL_PERSIST) { + tfnd = 1; + if (tbl && !isTable(t)) { GDKfree(maxval); GDKfree(minval); - throw(SQL, "analyze", SQLSTATE(42S02) "Table '%s' is not persistent", bt->name); + throw(SQL, "analyze", SQLSTATE(42S02) "%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), bt->name); } - tfnd = 1; if (isTable(t) && t->columns.set) for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) { sql_base *bc = ncol->data; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -4821,7 +4821,7 @@ rel_rankop(sql_query *query, sql_rel **r } if (frame_clause || supports_frames) - ie = obe ? exp_ref(sql->sa, (sql_exp*) obe->t->data) : in; + ie = exp_copy(sql, obe ? (sql_exp*) obe->t->data : in); /* Frame */ if (frame_clause) { diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c --- a/sql/storage/bat/bat_logger.c +++ b/sql/storage/bat/bat_logger.c @@ -1087,7 +1087,7 @@ snapshot_bats(stream *plan, const char * uint64_t batid; uint64_t tail_free; uint64_t theap_free; - char filename[20]; + char filename[sizeof(BBP_physical(0))]; // The lines in BBP.dir come in various lengths. // we try to parse the longest variant then check // the return value of sscanf to see which fields diff --git a/sql/test/BugTracker-2009/Tests/lost_update.SF-2790020.py b/sql/test/BugTracker-2009/Tests/lost_update.SF-2790020.py --- a/sql/test/BugTracker-2009/Tests/lost_update.SF-2790020.py +++ b/sql/test/BugTracker-2009/Tests/lost_update.SF-2790020.py @@ -1,6 +1,6 @@ import sys import os -import time + try: from MonetDBtesting import process except ImportError: @@ -46,6 +46,7 @@ insert into lost_update_t1 (select * fro insert into lost_update_t1 (select * from lost_update_t1); insert into lost_update_t1 (select * from lost_update_t1); update lost_update_t1 set a = 2; +call sys.flush_log(); ''' script3 = '''\ select a from lost_update_t2; @@ -62,7 +63,6 @@ def main(): s = server() client(script2) - time.sleep(20) # wait until log is flushed originally 60 sec server_stop(s) s = server() diff --git a/sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.err b/sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.err --- a/sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.err +++ b/sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.err @@ -29,10 +29,6 @@ stderr of test 'statistics_nils_not_eq_z # 13:40:16 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-25363" "--port=30826" # 13:40:16 > -MAPI = (monetdb) /var/tmp/mtest-4063/.s.monetdb.31696 -QUERY = ANALYZE tmp; -ERROR = !Table '_tables' is not persistent -CODE = 42S02 # 13:40:17 > # 13:40:17 > "Done." diff --git a/sql/test/BugTracker-2020/Tests/All b/sql/test/BugTracker-2020/Tests/All --- a/sql/test/BugTracker-2020/Tests/All +++ b/sql/test/BugTracker-2020/Tests/All @@ -1,3 +1,5 @@ median_avg-nulls.Bug-6807 ifthenelse-crash.Bug-6815 -alter-table-add-column-Bug-6816 +alter-table-add-column.Bug-6816 +analyze-stream-table.Bug-6817 +select-where-in-rtrim-crash.Bug-6818 diff --git a/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.py b/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.py deleted file mode 100644 --- a/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys - -try: - from MonetDBtesting import process -except ImportError: - import process - -s = process.server(args = [], stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) -c1 = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) -c2 = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr = process.PIPE) - -out, err = c1.communicate('''\ -CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));\ -INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');\ -ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;\ -UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";\ -ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -''') -sys.stdout.write(out) -sys.stderr.write(err) - -out, err = c2.communicate('''\ -INSERT INTO "testVarcharToClob" VALUES ('value3');\ -DROP TABLE "testVarcharToClob"; -''') -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-2020/Tests/alter-table-add-column-Bug-6816.stable.err b/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.err deleted file mode 100644 --- a/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.err +++ /dev/null @@ -1,24 +0,0 @@ -stderr of test 'alter-table-add-column-Bug-6816` in directory 'sql/test/BugTracker-2020` itself: - - -# 14:03:52 > -# 14:03:52 > "/usr/bin/python3" "alter-table-add-column-Bug-6816.py" "alter-table-add-column-Bug-6816" -# 14:03:52 > - -# builtin opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/monetdb5/dbfarm/demo -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_ipv6 = 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 = 36405 -# cmdline opt mapi_usock = /var/tmp/mtest-147833/.s.monetdb.36405 -# cmdline opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_BugTracker-2020 - -# 14:03:53 > -# 14:03:53 > "Done." -# 14:03:53 > - diff --git a/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.out b/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.out deleted file mode 100644 --- a/sql/test/BugTracker-2020/Tests/alter-table-add-column-Bug-6816.stable.out +++ /dev/null @@ -1,74 +0,0 @@ -stdout of test 'alter-table-add-column-Bug-6816` in directory 'sql/test/BugTracker-2020` itself: - - -# 14:03:52 > -# 14:03:52 > "/usr/bin/python3" "alter-table-add-column-Bug-6816.py" "alter-table-add-column-Bug-6816" -# 14:03:52 > - -#CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -#CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -[ 2 ] -#CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -#CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -[ 2 ] -#CREATE TABLE "testVarcharToClob" ("varcharColumn" varchar(255));INSERT INTO "testVarcharToClob" VALUES ('value1'), ('value2');ALTER TABLE "testVarcharToClob" add "clobColumn" TEXT NULL;UPDATE "testVarcharToClob" SET "clobColumn" = "varcharColumn";ALTER TABLE "testVarcharToClob" drop "varcharColumn"; -#INSERT INTO "testVarcharToClob" VALUES ('value3');DROP TABLE "testVarcharToClob"; -[ 1 ] -#INSERT INTO "testVarcharToClob" VALUES ('value3');DROP TABLE "testVarcharToClob"; -# MonetDB 5 server v11.35.10 (hg id: f9ad2ccd83b7) -# This is an unreleased version -# Serving database 'mTests_sql_test_BugTracker-2020', using 8 threads -# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers -# Found 15.498 GiB available main-memory of which we use 12.631 GiB -# Copyright (c) 1993 - July 2008 CWI. -# Copyright (c) August 2008 - 2020 MonetDB B.V., all rights reserved -# Visit https://www.monetdb.org/ for further information _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list