Changeset: 19c3ce9e2a1b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19c3ce9e2a1b
Added Files:
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.sql
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.stable.err
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.stable.out
        sql/test/rename/Tests/rename09.sql
        sql/test/rename/Tests/rename09.stable.err
        sql/test/rename/Tests/rename09.stable.out
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        monetdb5/modules/mal/wlc.mal
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sqlcatalog.mal
        sql/backends/monet5/wlr.mal
        sql/common/sql_changeset.c
        sql/include/sql_catalog.h
        sql/server/rel_optimizer.c
        sql/server/rel_schema.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/BugTracker-2019/Tests/All
        
sql/test/BugTracker-2019/Tests/alter_table_set_schema.Bug-6701.stable.out
        sql/test/rename/Tests/All
        tools/mserver/mserver5.1.in
Branch: default
Log Message:

Merge with Apr2019 branch.


diffs (truncated from 1255 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -11891,7 +11891,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog",        "grant_roles",  "pattern 
sqlcatalog.grant_roles(sname:str, auth:str, grantor:int, admin:int):void ",    
"SQLgrant_roles;",      "Catalog operation grant_roles" ]
 [ "sqlcatalog",        "rename_column",        "pattern 
sqlcatalog.rename_column(sname:str, tname:str, cname:str, newnme:str):void ",  
"SQLrename_column;",    "Catalog operation rename_column"       ]
 [ "sqlcatalog",        "rename_schema",        "pattern 
sqlcatalog.rename_schema(sname:str, newnme:str):void ",        
"SQLrename_schema;",    "Catalog operation rename_schema"       ]
-[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(sname:str, tname:str, newnme:str):void ",      
"SQLrename_table;",     "Catalog operation rename_table"        ]
+[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(osname:str, nsname:str, otname:str, ntname:str):void ", 
       "SQLrename_table;",     "Catalog operation rename_table"        ]
 [ "sqlcatalog",        "rename_user",  "pattern 
sqlcatalog.rename_user(sname:str, newnme:str, action:int):void ",      
"SQLrename_user;",      "Catalog operation rename_user" ]
 [ "sqlcatalog",        "revoke",       "pattern sqlcatalog.revoke(sname:str, 
tbl:str, grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",     
  "SQLrevoke;",   "Catalog operation revoke"      ]
 [ "sqlcatalog",        "revoke_function",      "pattern 
sqlcatalog.revoke_function(sname:str, fcnid:int, grantee:str, privs:int, 
grant:int, grantor:int):void ",       "SQLrevoke_function;",  "Catalog 
operation revoke_function"     ]
@@ -12128,7 +12128,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlc",       "query",        "pattern wlc.query(q:str):void ",       
"WLCquery;",    "Keep the queries for replay."  ]
 [ "wlc",       "rename_column",        "pattern wlc.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLCgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlc",       "rename_schema",        "pattern wlc.rename_schema(sname:str, 
newnme:str):void ",       "WLCgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlc",       "rename_table", "pattern wlc.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLCgeneric;",  "Catalog operation rename_table"        
]
+[ "wlc",       "rename_table", "pattern wlc.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLCgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlc",       "rename_user",  "pattern wlc.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLCgeneric;",  "Catalog operation rename_user" ]
 [ "wlc",       "revoke",       "pattern wlc.revoke(sname:str, tbl:str, 
grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke"      ]
 [ "wlc",       "revoke_function",      "pattern wlc.revoke_function(sname:str, 
fcnid:int, grantee:str, privs:int, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke_function"     ]
@@ -12188,7 +12188,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlr",       "grant_roles",  "pattern wlr.grant_roles(sname:str, auth:str, 
grantor:int, admin:int):void ",   "WLRgeneric;",  "Catalog operation 
grant_roles" ]
 [ "wlr",       "rename_column",        "pattern wlr.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLRgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlr",       "rename_schema",        "pattern wlr.rename_schema(sname:str, 
newnme:str):void ",       "WLRgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlr",       "rename_table", "pattern wlr.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLRgeneric;",  "Catalog operation rename_table"        
]
+[ "wlr",       "rename_table", "pattern wlr.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLRgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlr",       "rename_user",  "pattern wlr.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLRgeneric;",  "Catalog operation rename_user" ]
 [ "wlr",       "replicate",    "pattern wlr.replicate():void ",        
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
 [ "wlr",       "replicate",    "pattern wlr.replicate(dbname:str):void ",      
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -16318,7 +16318,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog",        "grant_roles",  "pattern 
sqlcatalog.grant_roles(sname:str, auth:str, grantor:int, admin:int):void ",    
"SQLgrant_roles;",      "Catalog operation grant_roles" ]
 [ "sqlcatalog",        "rename_column",        "pattern 
sqlcatalog.rename_column(sname:str, tname:str, cname:str, newnme:str):void ",  
"SQLrename_column;",    "Catalog operation rename_column"       ]
 [ "sqlcatalog",        "rename_schema",        "pattern 
sqlcatalog.rename_schema(sname:str, newnme:str):void ",        
"SQLrename_schema;",    "Catalog operation rename_schema"       ]
-[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(sname:str, tname:str, newnme:str):void ",      
"SQLrename_table;",     "Catalog operation rename_table"        ]
+[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(osname:str, nsname:str, otname:str, ntname:str):void ", 
       "SQLrename_table;",     "Catalog operation rename_table"        ]
 [ "sqlcatalog",        "rename_user",  "pattern 
sqlcatalog.rename_user(sname:str, newnme:str, action:int):void ",      
"SQLrename_user;",      "Catalog operation rename_user" ]
 [ "sqlcatalog",        "revoke",       "pattern sqlcatalog.revoke(sname:str, 
tbl:str, grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",     
  "SQLrevoke;",   "Catalog operation revoke"      ]
 [ "sqlcatalog",        "revoke_function",      "pattern 
sqlcatalog.revoke_function(sname:str, fcnid:int, grantee:str, privs:int, 
grant:int, grantor:int):void ",       "SQLrevoke_function;",  "Catalog 
operation revoke_function"     ]
@@ -16556,7 +16556,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlc",       "query",        "pattern wlc.query(q:str):void ",       
"WLCquery;",    "Keep the queries for replay."  ]
 [ "wlc",       "rename_column",        "pattern wlc.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLCgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlc",       "rename_schema",        "pattern wlc.rename_schema(sname:str, 
newnme:str):void ",       "WLCgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlc",       "rename_table", "pattern wlc.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLCgeneric;",  "Catalog operation rename_table"        
]
+[ "wlc",       "rename_table", "pattern wlc.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLCgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlc",       "rename_user",  "pattern wlc.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLCgeneric;",  "Catalog operation rename_user" ]
 [ "wlc",       "revoke",       "pattern wlc.revoke(sname:str, tbl:str, 
grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke"      ]
 [ "wlc",       "revoke_function",      "pattern wlc.revoke_function(sname:str, 
fcnid:int, grantee:str, privs:int, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke_function"     ]
@@ -16616,7 +16616,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlr",       "grant_roles",  "pattern wlr.grant_roles(sname:str, auth:str, 
grantor:int, admin:int):void ",   "WLRgeneric;",  "Catalog operation 
grant_roles" ]
 [ "wlr",       "rename_column",        "pattern wlr.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLRgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlr",       "rename_schema",        "pattern wlr.rename_schema(sname:str, 
newnme:str):void ",       "WLRgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlr",       "rename_table", "pattern wlr.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLRgeneric;",  "Catalog operation rename_table"        
]
+[ "wlr",       "rename_table", "pattern wlr.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLRgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlr",       "rename_user",  "pattern wlr.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLRgeneric;",  "Catalog operation rename_user" ]
 [ "wlr",       "replicate",    "pattern wlr.replicate():void ",        
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
 [ "wlr",       "replicate",    "pattern wlr.replicate(dbname:str):void ",      
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
diff --git a/monetdb5/modules/mal/wlc.mal b/monetdb5/modules/mal/wlc.mal
--- a/monetdb5/modules/mal/wlc.mal
+++ b/monetdb5/modules/mal/wlc.mal
@@ -234,7 +234,7 @@ pattern rename_schema(sname:str, newnme:
 address WLCgeneric
 comment "Catalog operation rename_schema";
 
-pattern rename_table(sname:str, tname:str, newnme:str)
+pattern rename_table(osname:str, nsname:str, otname:str, ntname:str)
 address WLCgeneric
 comment "Catalog operation rename_table";
 
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -5641,8 +5641,11 @@ output_rel_bin(backend *be, sql_rel *rel
        mvc *sql = be->mvc;
        list *refs = sa_list(sql->sa);
        int sqltype = sql->type;
-       stmt *s = subrel_bin(be, rel, refs);
-
+       stmt *s;
+
+       if (refs == NULL)
+               return NULL;
+       s = subrel_bin(be, rel, refs);
        if (sqltype == Q_SCHEMA)
                sql->type = sqltype;  /* reset */
 
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1608,30 +1608,65 @@ SQLrename_table(Client cntxt, MalBlkPtr 
 {
        mvc *sql = NULL;
        str msg = MAL_SUCCEED;
-       str schema_name = *getArgReference_str(stk, pci, 1);
-       str old_name = *getArgReference_str(stk, pci, 2);
-       str new_name = *getArgReference_str(stk, pci, 3);
-       sql_schema *s;
+       str oschema_name = *getArgReference_str(stk, pci, 1);
+       str nschema_name = *getArgReference_str(stk, pci, 2);
+       str otable_name = *getArgReference_str(stk, pci, 3);
+       str ntable_name = *getArgReference_str(stk, pci, 4);
+       sql_schema *o, *s;
        sql_table *t;
 
        initcontext();
-       if (!(s = mvc_bind_schema(sql, schema_name)))
-               throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER TABLE: no 
such schema '%s'", schema_name);
-       if (!mvc_schema_privs(sql, s))
-               throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: 
access denied for %s to schema '%s'", stack_get_string(sql, "current_user"), 
schema_name);
-       if (!(t = mvc_bind_table(sql, s, old_name)))
-               throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER TABLE: no 
such table '%s' in schema '%s'", old_name, schema_name);
-       if (t->system)
-               throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: 
cannot rename a system table");
-       if (mvc_check_dependency(sql, t->base.id, TABLE_DEPENDENCY, NULL))
-               throw (SQL,"sql.rename_table", SQLSTATE(2BM37) "ALTER TABLE: 
unable to rename table '%s' (there are database objects which depend on it)", 
old_name);
-       if (!new_name || strcmp(new_name, str_nil) == 0 || *new_name == '\0')
-               throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER TABLE: 
invalid new table name");
-       if (mvc_bind_table(sql, s, new_name))
-               throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER TABLE: 
there is a table named '%s' in schema '%s'", new_name, schema_name);
+
+       if(strcmp(oschema_name, nschema_name) == 0) { //renaming the table 
itself
+               if (!(s = mvc_bind_schema(sql, oschema_name)))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: no such schema '%s'", oschema_name);
+               if (!mvc_schema_privs(sql, s))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: access denied for %s to schema '%s'", stack_get_string(sql, 
"current_user"), oschema_name);
+               if (!(t = mvc_bind_table(sql, s, otable_name)))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: no such table '%s' in schema '%s'", otable_name, oschema_name);
+               if (t->system)
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: cannot rename a system table");
+               if (mvc_check_dependency(sql, t->base.id, TABLE_DEPENDENCY, 
NULL))
+                       throw (SQL,"sql.rename_table", SQLSTATE(2BM37) "ALTER 
TABLE: unable to rename table '%s' (there are database objects which depend on 
it)", otable_name);
+               if (!ntable_name || strcmp(ntable_name, str_nil) == 0 || 
*ntable_name == '\0')
+                       throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER 
TABLE: invalid new table name");
+               if (mvc_bind_table(sql, s, ntable_name))
+                       throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER 
TABLE: there is a table named '%s' in schema '%s'", ntable_name, oschema_name);
+
+               if (!sql_trans_rename_table(sql->session->tr, s, t->base.id, 
ntable_name))
+                       throw(SQL, "sql.rename_table",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       } else { //changing the schema of the table
+               assert(strcmp(otable_name, ntable_name) == 0);
 
-       if (!sql_trans_rename_table(sql->session->tr, s, t->base.id, new_name))
-               throw(SQL, "sql.rename_table",SQLSTATE(HY001) MAL_MALLOC_FAIL);
+               if (!(o = mvc_bind_schema(sql, oschema_name)))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: no such schema '%s'", oschema_name);
+               if (!mvc_schema_privs(sql, o))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: access denied for %s to schema '%s'", stack_get_string(sql, 
"current_user"), oschema_name);
+               if (!(t = mvc_bind_table(sql, o, otable_name)))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: no such table '%s' in schema '%s'", otable_name, oschema_name);
+               if (t->system)
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: cannot set schema of a system table");
+               if (isTempSchema(o) || isTempTable(t))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: not possible to change a temporary table schema");
+               if (isView(t))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: not possible to change schema of a view");
+               if (mvc_check_dependency(sql, t->base.id, TABLE_DEPENDENCY, 
NULL))
+                       throw(SQL, "sql.rename_table", SQLSTATE(2BM37) "ALTER 
TABLE: unable to set schema of table '%s' (there are database objects which 
depend on it)", otable_name);
+               if (t->members.set || t->triggers.set)
+                       throw(SQL, "sql.rename_table", SQLSTATE(2BM37) "ALTER 
TABLE: unable to set schema of table '%s' (there are database objects which 
depend on it)", otable_name);
+               if (!(s = mvc_bind_schema(sql, nschema_name)))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: no such schema '%s'", nschema_name);
+               if (!mvc_schema_privs(sql, s))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER 
TABLE: access denied for '%s' to schema '%s'", stack_get_string(sql, 
"current_user"), nschema_name);
+               if (isTempSchema(s))
+                       throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER 
TABLE: not possible to change table's schema to temporary");
+               if (mvc_bind_table(sql, s, otable_name))
+                       throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER 
TABLE: table '%s' on schema '%s' already exists", otable_name, nschema_name);
+
+               if (!sql_trans_set_table_schema(sql->session->tr, t->base.id, 
o, s))
+                       throw(SQL, "sql.rename_table",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+
        return msg;
 }
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -102,7 +102,7 @@ SQLsession(Client cntxt, MalBlkPtr mb, M
                logmsg = GDKgetenv("recovery");
                if( logmsg== NULL && ++cnt  == 5)
                        throw(SQL,"SQLinit", "#WARNING server not ready, 
recovery in progress\n");
-    }while (logmsg == NULL);
+       } while (logmsg == NULL);
        return msg;
 }
 
@@ -125,7 +125,7 @@ SQLsession2(Client cntxt, MalBlkPtr mb, 
                logmsg = GDKgetenv("recovery");
                if( logmsg== NULL && ++cnt  == 5)
                        throw(SQL,"SQLinit","#WARNING server not ready, 
recovery in progress\n");
-    }while (logmsg == NULL);
+       } while (logmsg == NULL);
        return msg;
 }
 
diff --git a/sql/backends/monet5/sqlcatalog.mal 
b/sql/backends/monet5/sqlcatalog.mal
--- a/sql/backends/monet5/sqlcatalog.mal
+++ b/sql/backends/monet5/sqlcatalog.mal
@@ -167,7 +167,7 @@ pattern rename_schema(sname:str, newnme:
 address SQLrename_schema
 comment "Catalog operation rename_schema";
 
-pattern rename_table(sname:str, tname:str, newnme:str)
+pattern rename_table(osname:str, nsname:str, otname:str, ntname:str)
 address SQLrename_table
 comment "Catalog operation rename_table";
 
diff --git a/sql/backends/monet5/wlr.mal b/sql/backends/monet5/wlr.mal
--- a/sql/backends/monet5/wlr.mal
+++ b/sql/backends/monet5/wlr.mal
@@ -239,7 +239,7 @@ pattern rename_schema(sname:str, newnme:
 address WLRgeneric
 comment "Catalog operation rename_schema";
 
-pattern rename_table(sname:str, tname:str, newnme:str)
+pattern rename_table(osname:str, nsname:str, otname:str, ntname:str)
 address WLRgeneric
 comment "Catalog operation rename_table";
 
diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c
--- a/sql/common/sql_changeset.c
+++ b/sql/common/sql_changeset.c
@@ -81,6 +81,14 @@ cs_del(changeset * cs, node *elm, int fl
        }
 }
 
+void
+cs_move(changeset *from, changeset *to, void *data)
+{
+       if (!to->set)
+               to->set = list_new(to->sa, to->destroy);
+       list_move_data(from->set, to->set, data);
+}
+
 int
 cs_size(changeset * cs)
 {
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -85,6 +85,7 @@
 #define SCALE_EQ       7       /* user defined functions need equal scales */
 #define SCALE_DIGITS_FIX 8     /* the geom module requires the types and 
functions to have the same scale and digits */
 
+/* Warning TR flags are a bitmask */
 #define TR_NEW 1
 #define TR_RENAMED 2
 
@@ -228,6 +229,7 @@ extern void cs_add(changeset * cs, void 
 extern void *cs_add_with_validate(changeset * cs, void *elm, int flag, 
fvalidate cmp);
 extern void cs_add_before(changeset * cs, node *n, void *elm);
 extern void cs_del(changeset * cs, node *elm, int flag);
+extern void cs_move(changeset *from, changeset *to, void *data);
 extern void *cs_transverse_with_validate(changeset * cs, void *elm, fvalidate 
cmp);
 extern int cs_size(changeset * cs);
 extern node *cs_find_name(changeset * cs, const char *name);
@@ -249,6 +251,7 @@ typedef struct sql_trans {
        int schema_updates;     /* set on schema changes */
        int status;             /* status of the last query */
        list *dropped;          /* protection against recursive cascade action*/
+       list *moved_tables;
 
        changeset schemas;
 
@@ -603,6 +606,13 @@ typedef struct sql_table {
        } part;
 } sql_table;
 
+typedef struct sql_moved_table {
+       sql_schema *from;
+       sql_schema *to;
+       sql_table *t;
+       node *p; //need to iterate the list backwards
+} sql_moved_table;
+
 typedef struct res_col {
        char *tn;
        char *name;
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -4587,6 +4587,8 @@ rel_push_semijoin_down(int *changes, mvc
                list *exps = rel->exps, *nexps = sa_list(sql->sa);
                node *n;
 
+               if (nexps == NULL)
+                       return NULL;
                for(n = exps->h; n; n = n->next) {
                        sql_exp *sje = n->data;
 
@@ -7058,7 +7060,9 @@ rel_simplify_like_select(int *changes, m
        if (is_select(rel->op) && rel->exps) {
                node *n;
                list *exps = sa_list(sql->sa);
-                       
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to