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

Reply via email to