Changeset: 9eb169473892 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9eb169473892 Added Files: sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.sql sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.err sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.out Modified Files: sql/backends/monet5/sql.c sql/backends/monet5/sql_statement.c sql/storage/bat/bat_storage.c sql/storage/store.c sql/test/BugTracker-2015/Tests/All Branch: default Log Message:
merged with Oct2014 diffs (241 lines): 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 @@ -443,7 +443,9 @@ create_table_or_view(mvc *sql, char *sna for (n = t->columns.set->h; n; n = n->next) { sql_column *c = n->data; - mvc_copy_column(sql, nt, c); + if (mvc_copy_column(sql, nt, c) == NULL) + throw(SQL, "sql.catalog", "CREATE TABLE: %s_%s_%s conflicts", s->base.name, t->base.name, c->base.name); + } if (t->idxs.set) { for (n = t->idxs.set->h; n; n = n->next) { diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -1744,8 +1744,6 @@ stack_push_children(sql_stack *stk, stmt if (s->op2) { if (s->op3) stack_push_stmt(stk, s->op3, 1); - if (s->op3) - stack_push_stmt(stk, s->op3, 1); stack_push_stmt(stk, s->op2, 1); } if (s->op1) diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -984,6 +984,12 @@ create_col(sql_trans *tr, sql_column *c) sql_column *fc = NULL; size_t cnt = 0; + /* Temp solutions for name conflicts */ + log_bid bid = logger_find_bat(bat_logger, bat->name); + + if (bid) + return LOG_ERR; + /* alter ? */ if (c->t->columns.set && (fc = c->t->columns.set->h->data) != NULL) cnt = count_col(tr, fc, 1); @@ -1404,6 +1410,24 @@ empty_col(sql_column *c) bat->ibase = BATcount(BBPquickdesc(bat->bid, 0)); if (bat->bid == bat->ibid) bat->bid = copyBat(bat->ibid, type, 0); + + /* make new bat persistent */ + { + BAT *b = temp_descriptor(bat->bid); + + assert(b->batRole == PERSISTENT); + if (b->batRole != PERSISTENT) { + bat->bid = copyBat(b->batCacheid, type, 0); + temp_destroy(b->batCacheid); + bat_destroy(b); + b = temp_descriptor(bat->bid); + } + bat_set_access(b, BAT_READ); + BATmode(b, PERSISTENT); + logger_add_bat(bat_logger, b, bat->name); + bat_destroy(b); + + } } static void @@ -1418,6 +1442,22 @@ empty_idx(sql_idx *i) bat->ibase = BATcount(BBPquickdesc(bat->bid, 0)); if (bat->bid == bat->ibid) bat->bid = copyBat(bat->ibid, type, 0); + + /* make new bat persistent */ + { + BAT *b = temp_descriptor(bat->bid); + + if (b->batRole != PERSISTENT) { + bat->bid = copyBat(b->batCacheid, type, 0); + temp_destroy(b->batCacheid); + bat_destroy(b); + b = temp_descriptor(bat->bid); + } + bat_set_access(b, BAT_READ); + BATmode(b, PERSISTENT); + logger_add_bat(bat_logger, b, bat->name); + bat_destroy(b); + } } static BUN @@ -1907,14 +1947,15 @@ tr_log_delta( sql_trans *tr, sql_delta * (void)tr; assert(tr->parent == gtrans); + ins = temp_descriptor(cbat->ibid); + if (cleared) log_bat_clear(bat_logger, cbat->name); - ins = temp_descriptor(cbat->ibid); /* any inserts */ if (BUNlast(ins) > BUNfirst(ins)) { assert(store_nr_active>0); - if (BUNlast(ins) > ins->batInserted && (store_nr_active != 1 || cbat->ibase || BATcount(ins) <= SNAPSHOT_MINSIZE)) + if (BUNlast(ins) > ins->batInserted && (store_nr_active != 1 || cbat->ibase || BATcount(ins) <= SNAPSHOT_MINSIZE)) ok = log_bat(bat_logger, ins, cbat->name); if (store_nr_active == 1 && !cbat->ibase && BATcount(ins) > SNAPSHOT_MINSIZE) { diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1963,7 +1963,8 @@ sql_trans_copy_column( sql_trans *tr, sq if (isDeclaredTable(c->t)) if (isTable(t)) - store_funcs.create_col(tr, col); + if (store_funcs.create_col(tr, col) == LOG_ERR) + return NULL; if (!isDeclaredTable(t)) table_funcs.table_insert(tr, syscolumn, &col->base.id, col->base.name, col->type.type->sqlname, &col->type.digits, &col->type.scale, &t->base.id, (col->def) ? col->def : ATOMnilptr(TYPE_str), &col->null, &col->colnr, (col->storage_type) ? col->storage_type : ATOMnilptr(TYPE_str)); col->base.wtime = t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime; @@ -4164,7 +4165,8 @@ sql_trans_create_column(sql_trans *tr, s col = create_sql_column(tr->sa, t, name, tpe ); if (isTable(col->t)) - store_funcs.create_col(tr, col); + if (store_funcs.create_col(tr, col) == LOG_ERR) + return NULL; if (!isDeclaredTable(t)) table_funcs.table_insert(tr, syscolumn, &col->base.id, col->base.name, col->type.type->sqlname, &col->type.digits, &col->type.scale, &t->base.id, (col->def) ? col->def : ATOMnilptr(TYPE_str), &col->null, &col->colnr, (col->storage_type) ? col->storage_type : ATOMnilptr(TYPE_str)); diff --git a/sql/test/BugTracker-2015/Tests/All b/sql/test/BugTracker-2015/Tests/All --- a/sql/test/BugTracker-2015/Tests/All +++ b/sql/test/BugTracker-2015/Tests/All @@ -1,2 +1,3 @@ inet-ordering.Bug-3646 sharp-alias.Bug-3467 +name_conflict.Bug-3650 diff --git a/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.sql b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.sql @@ -0,0 +1,5 @@ +create table foo (id integer, bar_id integer); +create table foo_bar (id integer); +insert into foo (id, bar_id) values (1,2), (3,4); +select * from foo; +drop table foo; diff --git a/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.err b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.err @@ -0,0 +1,40 @@ +stderr of test 'name_conflict.Bug-3650` in directory 'sql/test/BugTracker-2015` itself: + + +# 18:58:38 > +# 18:58:38 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=35483" "--set" "mapi_usock=/var/tmp/mtest-24602/.s.monetdb.35483" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 18:58:38 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# 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 = 35483 +# cmdline opt mapi_usock = /var/tmp/mtest-24602/.s.monetdb.35483 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015 +# cmdline opt mal_listing = 0 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 18:58:39 > +# 18:58:39 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-24602" "--port=35483" +# 18:58:39 > + +MAPI = (monetdb) /var/tmp/mtest-24602/.s.monetdb.35483 +QUERY = create table foo_bar (id integer); +ERROR = !CREATE TABLE: sys_foo_bar_id conflicts + +# 18:58:39 > +# 18:58:39 > "Done." +# 18:58:39 > + diff --git a/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.out b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/name_conflict.Bug-3650.stable.out @@ -0,0 +1,43 @@ +stdout of test 'name_conflict.Bug-3650` in directory 'sql/test/BugTracker-2015` itself: + + +# 18:58:38 > +# 18:58:38 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=35483" "--set" "mapi_usock=/var/tmp/mtest-24602/.s.monetdb.35483" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 18:58:38 > + +# MonetDB 5 server v11.19.8 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2015', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 7.333 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:35483/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-24602/.s.monetdb.35483 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. + +# 18:58:39 > +# 18:58:39 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-24602" "--port=35483" +# 18:58:39 > + +#create table foo (id integer, bar_id integer); +#insert into foo (id, bar_id) values (1,2), (3,4); +[ 2 ] +#select * from foo; +% sys.foo, sys.foo # table_name +% id, bar_id # name +% int, int # type +% 1, 1 # length +[ 1, 2 ] +[ 3, 4 ] +#drop table foo; + +# 18:58:39 > +# 18:58:39 > "Done." +# 18:58:39 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list