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

Reply via email to