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