Changeset: 667c47442b76 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=667c47442b76 Added Files: sql/test/rename/Tests/rename11.stable.err sql/test/rename/Tests/rename11.stable.out Modified Files: sql/storage/bat/bat_storage.c sql/storage/store.c sql/test/rename/Tests/rename11.py Branch: Apr2019 Log Message:
merged diffs (truncated from 370 to 300 lines): 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 @@ -2698,7 +2698,7 @@ update_table(sql_trans *tr, sql_table *f oc->base.name = sa_strdup(tr->sa, cc->base.name); if (!list_hash_add(oc->t->columns.set, oc, NULL)) ok = LOG_ERR; - removeRenamedFlag(cc); + setRenamedFlag(oc); /* propagate the change to the upper transaction */ } if (oc->base.rtime < cc->base.rtime) diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3663,7 +3663,7 @@ rollforward_update_table(sql_trans *tr, tt->base.name = sa_strdup(tr->sa, ft->base.name); if (!list_hash_add(tt->s->tables.set, tt, NULL)) ok = LOG_ERR; - removeRenamedFlag(ft); + setRenamedFlag(tt); /* propagate the change to the upper transaction */ } } } @@ -3748,12 +3748,12 @@ rollforward_update_schema(sql_trans *tr, set_members(&fs->tables); - if (ok == LOG_OK && isRenamed(fs)) { /* apply possible renaming */ + if (apply && ok == LOG_OK && isRenamed(fs)) { /* apply possible renaming */ list_hash_delete(tr->schemas.set, ts, NULL); ts->base.name = sa_strdup(tr->sa, fs->base.name); if (!list_hash_add(tr->schemas.set, ts, NULL)) ok = LOG_ERR; - removeRenamedFlag(fs); + setRenamedFlag(ts); /* propagate the change to the upper transaction */ } return ok; @@ -3945,12 +3945,12 @@ reset_column(sql_trans *tr, sql_column * if (isTable(fc->t)) store_funcs.destroy_col(NULL, fc); - if (tr->status == 1 && isRenamed(fc)) { /* remove possible renaming */ + /* apply possible renaming -> transaction rollbacks or when it starts, inherit from the previous transaction */ + if ((tr->status == 1 && isRenamed(fc)) || isRenamed(pfc)) { list_hash_delete(fc->t->columns.set, fc, NULL); fc->base.name = sa_strdup(tr->sa, pfc->base.name); - if(!list_hash_add(fc->t->columns.set, fc, NULL)) + if (!list_hash_add(fc->t->columns.set, fc, NULL)) return LOG_ERR; - removeRenamedFlag(fc); } fc->null = pfc->null; @@ -4010,12 +4010,13 @@ reset_table(sql_trans *tr, sql_table *ft ft->cleared = 0; ft->access = pft->access; - if (tr->status == 1 && isRenamed(ft)) { /* remove possible renaming */ + + /* apply possible renaming -> transaction rollbacks or when it starts, inherit from the previous transaction */ + if ((tr->status == 1 && isRenamed(ft)) || isRenamed(pft)) { list_hash_delete(ft->s->tables.set, ft, NULL); ft->base.name = sa_strdup(tr->sa, pft->base.name); - if(!list_hash_add(ft->s->tables.set, ft, NULL)) + if (!list_hash_add(ft->s->tables.set, ft, NULL)) ok = LOG_ERR; - removeRenamedFlag(ft); } if (ok == LOG_OK) @@ -4069,12 +4070,12 @@ reset_schema(sql_trans *tr, sql_schema * /* did we access the schema or is the global changed after we started */ if (fs->base.rtime || fs->base.wtime || tr->stime < pfs->base.wtime) { - if (tr->status == 1 && isRenamed(fs)) { /* remove possible renaming */ + /* apply possible renaming -> transaction rollbacks or when it starts, inherit from the previous transaction */ + if ((tr->status == 1 && isRenamed(fs)) || isRenamed(pfs)) { list_hash_delete(tr->schemas.set, fs, NULL); fs->base.name = sa_strdup(tr->sa, pfs->base.name); - if(!list_hash_add(tr->schemas.set, fs, NULL)) + if (!list_hash_add(tr->schemas.set, fs, NULL)) ok = LOG_ERR; - removeRenamedFlag(fs); } if (ok == LOG_OK) @@ -4967,7 +4968,7 @@ sql_trans_rename_schema(sql_trans *tr, s list_hash_delete(tr->schemas.set, s, NULL); /* has to re-hash the entry in the changeset */ s->base.name = sa_strdup(tr->sa, new_name); - if(!list_hash_add(tr->schemas.set, s, NULL)) + if (!list_hash_add(tr->schemas.set, s, NULL)) return NULL; rid = table_funcs.column_find_row(tr, find_sql_column(sysschema, "id"), &s->base.id, NULL); @@ -5266,7 +5267,7 @@ sql_trans_rename_table(sql_trans *tr, sq list_hash_delete(s->tables.set, t, NULL); /* has to re-hash the entry in the changeset */ t->base.name = sa_strdup(tr->sa, new_name); - if(!list_hash_add(s->tables.set, t, NULL)) + if (!list_hash_add(s->tables.set, t, NULL)) return NULL; rid = table_funcs.column_find_row(tr, find_sql_column(systable, "id"), &t->base.id, NULL); @@ -5682,7 +5683,7 @@ sql_trans_rename_column(sql_trans *tr, s list_hash_delete(t->columns.set, c, NULL); /* has to re-hash the entry in the changeset */ c->base.name = sa_strdup(tr->sa, new_name); - if(!list_hash_add(t->columns.set, c, NULL)) + if (!list_hash_add(t->columns.set, c, NULL)) return NULL; rid = table_funcs.column_find_row(tr, find_sql_column(syscolumn, "id"), &c->base.id, NULL); diff --git a/sql/test/rename/Tests/rename11.py b/sql/test/rename/Tests/rename11.py --- a/sql/test/rename/Tests/rename11.py +++ b/sql/test/rename/Tests/rename11.py @@ -1,4 +1,10 @@ +import os import sys +import socket +import tempfile +import shutil + +import pymonetdb try: from MonetDBtesting import process @@ -6,67 +12,89 @@ 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) +def freeport(): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.bind(('', 0)) + port = sock.getsockname()[1] + sock.close() + return port + + +farm_dir = tempfile.mkdtemp() +sport = freeport() +s = process.server(mapiport=sport, dbname='renames', dbfarm=os.path.join(farm_dir, 'renames'), stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE) +client1 = pymonetdb.connect(database='renames', port=sport, autocommit=True) +client2 = pymonetdb.connect(database='renames', port=sport, autocommit=True) +cursor1 = client1.cursor() +cursor2 = client2.cursor() -script1 = ''' -CREATE TABLE tab1 (col1 tinyint);\ -INSERT INTO tab1 VALUES (1);\ -SELECT col1 FROM tab1;\ -ALTER TABLE tab1 RENAME TO tab2;\ -SELECT col1 FROM tab2;\ -CREATE SCHEMA s2;\ -ALTER SCHEMA s2 RENAME TO s3;\ -CREATE TABLE s3.tab3 (col1 tinyint);\ -INSERT INTO s3.tab3 VALUES (1);\ -SELECT col1 FROM s3.tab3;\ -CREATE TABLE tab4 (col1 tinyint, col3 int);\ -ALTER TABLE tab4 RENAME COLUMN col1 TO col2;\ -SELECT col2 FROM tab4;\ -CREATE SCHEMA s4;\ -CREATE TABLE tab5 (col1 int);\ -INSERT INTO tab5 VALUES (1);\ -ALTER TABLE tab5 SET SCHEMA s4;\ -SELECT col1 FROM s4.tab5; -''' +cursor1.execute('CREATE TABLE tab1 (col1 tinyint);') +cursor1.execute('INSERT INTO tab1 VALUES (1);') + +cursor2.execute('SELECT col1 FROM tab1;') + +cursor1.execute('SELECT col1 FROM tab1;') +cursor1.execute('ALTER TABLE tab1 RENAME TO tab2;') +cursor1.execute('SELECT col1 FROM tab2;') +cursor1.execute('CREATE SCHEMA s2;') +cursor1.execute('ALTER SCHEMA s2 RENAME TO s3;') +cursor1.execute('CREATE TABLE s3.tab3 (col1 tinyint);') +cursor1.execute('INSERT INTO s3.tab3 VALUES (1);') + +cursor2.execute('SELECT col1 FROM s3.tab3;') + +cursor1.execute('SELECT col1 FROM s3.tab3;') +cursor1.execute('CREATE TABLE tab4 (col1 tinyint, col3 int);') + +cursor2.execute('SELECT col1 FROM tab4;') -script2 = ''' -SELECT col1 FROM tab2;\ -SELECT col1 FROM s3.tab3;\ -SELECT col2 FROM tab4;\ -SELECT col1 FROM s4.tab5; -''' +cursor1.execute('ALTER TABLE tab4 RENAME COLUMN col1 TO col2;') +cursor1.execute('SELECT col2 FROM tab4;') +cursor1.execute('CREATE SCHEMA s4;') +cursor1.execute('CREATE TABLE tab5 (col1 int);') +cursor1.execute('INSERT INTO tab5 VALUES (1);') +cursor1.execute('ALTER TABLE tab5 SET SCHEMA s4;') + +cursor2.execute('SELECT col1 FROM s4.tab5;') -script3 = ''' -DROP SCHEMA s3 CASCADE;\ -DROP TABLE tab2;\ -ALTER TABLE tab4 DROP COLUMN col2;\ -DROP TABLE tab4;\ -DROP TABLE s4.tab5;\ -DROP SCHEMA s4 CASCADE; -''' +cursor1.execute('SELECT col1 FROM s4.tab5;') + +cursor2.execute('SELECT col1 FROM tab2;') +cursor2.execute('SELECT col1 FROM s3.tab3;') +cursor2.execute('SELECT col2 FROM tab4;') +cursor2.execute('SELECT col1 FROM s4.tab5;') + +cursor1.close() +cursor2.close() +client1.close() +client2.close() -out, err = c1.communicate(script1) -sys.stdout.write(out) -sys.stderr.write(err) +client3 = pymonetdb.connect(database='renames', port=sport, autocommit=True) +cursor3 = client3.cursor() -c3 = process.client('sql', stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE) +cursor3.execute('SELECT col1 FROM tab2;') +cursor3.execute('SELECT col1 FROM s3.tab3;') +cursor3.execute('SELECT col2 FROM tab4;') +cursor3.execute('SELECT col1 FROM s4.tab5;') -out, err = c2.communicate(script2) -sys.stdout.write(out) -sys.stderr.write(err) +cursor3.close() +client3.close() -out, err = c3.communicate(script2) -sys.stdout.write(out) -sys.stderr.write(err) +client4 = pymonetdb.connect(database='renames', port=sport, autocommit=True) +cursor4 = client4.cursor() -c4 = process.client('sql', stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE) +cursor4.execute('DROP SCHEMA s3 CASCADE;') +cursor4.execute('DROP TABLE tab2;') +cursor4.execute('ALTER TABLE tab4 DROP COLUMN col2;') +cursor4.execute('DROP TABLE tab4;') +cursor4.execute('DROP TABLE s4.tab5;') +cursor4.execute('DROP SCHEMA s4 CASCADE;') -out, err = c4.communicate(script3) -sys.stdout.write(out) -sys.stderr.write(err) +cursor4.close() +client4.close() out, err = s.communicate() sys.stdout.write(out) sys.stderr.write(err) + +shutil.rmtree(farm_dir) diff --git a/sql/test/rename/Tests/rename11.stable.err b/sql/test/rename/Tests/rename11.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/rename/Tests/rename11.stable.err @@ -0,0 +1,26 @@ +stderr of test 'rename11` in directory 'sql/test/rename` itself: + + +# 20:50:14 > +# 20:50:14 > "/usr/bin/python2" "rename11.py" "rename11" +# 20:50:14 > + +# 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 = 37992 +# cmdline opt mapi_usock = /var/tmp/mtest-31265/.s.monetdb.37992 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/ferreira/repositories/MonetDB-Apr2019/BUILD/var/MonetDB/mTests_sql_test_rename + +# 20:50:15 > +# 20:50:15 > "Done." +# 20:50:15 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list