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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list