Changeset: 3ad89a78c61a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3ad89a78c61a Modified Files: sql/server/rel_psm.c sql/server/rel_schema.c sql/server/sql_privileges.c Branch: scoping Log Message:
Added missing bindings to temp tables if it was the case diffs (199 lines): diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -474,19 +474,26 @@ rel_psm_return( sql_query *query, sql_su if (!sname && (t = stack_find_table(sql, tname))) { rel = rel_table(sql, ddl_create_table, s->base.name, t, SQL_DECLARED_TABLE); - } else if ((t = mvc_bind_table(sql, s, tname))) { - rel = rel_basetable(sql, t, t->base.name); - for (node *n = rel->exps->h ; n ; n = n->next) { - sql_exp *e = (sql_exp *) n->data; - const char *oname = e->r; + } else { + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (t) { + rel = rel_basetable(sql, t, t->base.name); + for (node *n = rel->exps->h ; n ; n = n->next) { + sql_exp *e = (sql_exp *) n->data; + const char *oname = e->r; - if (!strcmp(oname, TID)) { - list_remove_node(rel->exps, n); - break; + if (!strcmp(oname, TID)) { + list_remove_node(rel->exps, n); + break; + } } - } - } else - return sql_error(sql, 02, SQLSTATE(42S02) "RETURN: no such table '%s'", tname); + } else + return sql_error(sql, 02, SQLSTATE(42S02) "RETURN: no such table '%s'", tname); + } } else { /* other cases */ res = rel_value_exp2(query, &rel, return_sym, sql_sel, ek); if (!res) @@ -1309,7 +1316,12 @@ create_trigger(sql_query *query, dlist * t = stack_find_table(sql, tname); if (t) return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: declared tables cannot have triggers", base); - if (!(t = mvc_bind_table(sql, ss, tname))) + t = mvc_bind_table(sql, ss, tname); + if (!t && !sname) { + ss = tmp_schema(sql); + t = mvc_bind_table(sql, ss, tname); + } + if (!t) return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: unknown table '%s'", base, tname); } if (create && isView(t)) @@ -1539,6 +1551,10 @@ create_table_from_loader(sql_query *quer t = stack_find_table(sql, tname); if (!t) t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } if (t) return sql_error(sql, 02, SQLSTATE(42S01) "CREATE TABLE FROM LOADER: name '%s' already in use", tname); diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -526,6 +526,13 @@ table_foreign_key(mvc *sql, char *name, return SQL_ERR; } ft = mvc_bind_table(sql, fs, rtname); + if (!ft && !rsname) { + sql_schema *save = fs; + fs = tmp_schema(sql); + ft = mvc_bind_table(sql, fs, name); + if (!ft) + fs = save; + } /* self referenced table */ if (!ft && t->s == fs && strcmp(t->base.name, rtname) == 0) ft = t; @@ -866,6 +873,10 @@ table_element(sql_query *query, symbol * ot = stack_find_table(sql, name); if (!ot) ot = mvc_bind_table(sql, os, name); + if (!ot && !sname) { + os = tmp_schema(sql); + ot = mvc_bind_table(sql, os, name); + } if (!ot) { sql_error(sql, 02, SQLSTATE(3F000) "%s: no such table '%s'", action, name); return SQL_ERR; @@ -1156,6 +1167,13 @@ rel_create_view(sql_query *query, sql_sc t = stack_find_table(sql, name); if (!t) t = mvc_bind_table(sql, s, name); + if (!t && !sname) { + sql_schema *save = s; + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, name); + if (!t) + s = save; + } if (t) { if (replace) { if (!isView(t)) { @@ -1480,7 +1498,16 @@ sql_alter_table(sql_query *query, dlist return sql_error(sql, 02, SQLSTATE(3F000) "ALTER TABLE: no such schema '%s'", sname); if (!nsname) pt = stack_find_table(sql, ntname); - if (!pt && !(pt = mvc_bind_table(sql, spt, ntname))) + if (!pt) + pt = mvc_bind_table(sql, spt, ntname); + if (!pt && !nsname) { + sql_schema *save = spt; + spt = tmp_schema(sql); + pt = mvc_bind_table(sql, spt, ntname); + if (!spt) + spt = save; + } + if (!pt) return sql_error(sql, 02, SQLSTATE(42S02) "ALTER TABLE: no such table '%s' in schema '%s'", ntname, spt->base.name); if (isView(pt)) @@ -1912,7 +1939,12 @@ rel_grant_privs(mvc *sql, sql_schema *cu t = stack_find_table(sql, tname); if (t) return sql_error(sql, 02, SQLSTATE(42000) "GRANT: cannot grant privileges on a declared table"); - if ((t = mvc_bind_table(sql, s, tname))) + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (t) token = SQL_TABLE; } @@ -2098,7 +2130,12 @@ rel_revoke_privs(mvc *sql, sql_schema *c t = stack_find_table(sql, tname); if (t) return sql_error(sql, 02, SQLSTATE(42000) "REVOKE: cannot grant privileges on a declared table"); - if ((t = mvc_bind_table(sql, s, tname))) + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (t) token = SQL_TABLE; } @@ -2144,7 +2181,12 @@ rel_create_index(mvc *sql, char *iname, t = stack_find_table(sql, tname); if (t) return sql_error(sql, 02, SQLSTATE(42000) "CREATE INDEX: cannot create an index on a declared table"); - if (!(t = mvc_bind_table(sql, s, tname))) { + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (!t) { return sql_error(sql, 02, SQLSTATE(42S02) "CREATE INDEX: no such table '%s'", tname); } else if (isView(t) || isMergeTable(t) || isRemote(t)) { return sql_error(sql, 02, SQLSTATE(42S02) "CREATE INDEX: cannot create index on %s '%s'", isView(t)?"view": diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c --- a/sql/server/sql_privileges.c +++ b/sql/server/sql_privileges.c @@ -143,7 +143,12 @@ sql_grant_table_privs( mvc *sql, char *g t = stack_find_table(sql, tname); if (t) throw(SQL,"sql.grant_table", SQLSTATE(42000) "GRANT: cannot grant privileges to a declared table"); - if (!(t = mvc_bind_table(sql, s, tname))) + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (!t) throw(SQL,"sql.grant_table",SQLSTATE(42S02) "GRANT: no such table '%s'", tname); allowed = schema_privs(grantor, t->s); @@ -288,7 +293,12 @@ sql_revoke_table_privs( mvc *sql, char * t = stack_find_table(sql, tname); if (t) throw(SQL,"sql.grant_table", SQLSTATE(42000) "REVOKE: cannot revoke privileges to a declared table"); - if (!(t = mvc_bind_table(sql, s, tname))) + t = mvc_bind_table(sql, s, tname); + if (!t && !sname) { + s = tmp_schema(sql); + t = mvc_bind_table(sql, s, tname); + } + if (!t) throw(SQL,"sql.revoke_table", SQLSTATE(42S02) "REVOKE: no such table '%s'", tname); allowed = schema_privs(grantor, t->s); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list