Changeset: 5db83f0ffeec for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5db83f0ffeec
Modified Files:
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/sql_privileges.c
        sql/server/sql_semantic.c
        sql/test/miscellaneous/Tests/simple_selects.sql
        sql/test/miscellaneous/Tests/simple_selects.stable.err
Branch: linear-hashing
Log Message:

Merged with Nov2019


diffs (truncated from 619 to 300 lines):

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
@@ -192,7 +192,6 @@ mvc_create_table_as_subquery( mvc *sql, 
 
        sql_table *t = mvc_create_table(sql, s, tname, tt, 0, 
SQL_DECLARED_TABLE, commit_action, -1, 0);
        if (as_subquery( sql, t, sq, column_spec, "CREATE TABLE") != 0)
-
                return NULL;
        return t;
 }
@@ -352,9 +351,12 @@ column_constraint_type(mvc *sql, const c
                }
 */
 
-               if (rsname) 
-                       rs = mvc_bind_schema(sql, rsname);
-               else 
+               if (rsname) {
+                       if (!(rs = mvc_bind_schema(sql, rsname))) {
+                               (void) sql_error(sql, 02, SQLSTATE(3F000) 
"CONSTRAINT FOREIGN KEY: no such schema '%s'", rsname);
+                               return res;
+                       }
+               } else 
                        rs = cur_schema(sql);
                rt = _bind_table(t, ss, rs, rtname);
                if (!rt) {
@@ -526,9 +528,13 @@ table_foreign_key(mvc *sql, char *name, 
        sql_schema *fs;
        sql_table *ft;
 
-       if (rsname)
-               fs = mvc_bind_schema(sql, rsname);
-       else
+
+       if (rsname) {
+               if (!(fs = mvc_bind_schema(sql, rsname))) {
+                       (void) sql_error(sql, 02, SQLSTATE(3F000) "CONSTRAINT 
FOREIGN KEY: no such schema '%s'", rsname);
+                       return SQL_ERR;
+               }
+       } else 
                fs = ss;
        ft = mvc_bind_table(sql, fs, rtname);
        /* self referenced table */
@@ -1140,7 +1146,7 @@ rel_create_view(sql_query *query, sql_sc
        mvc *sql = query->sql;
        char *name = qname_table(qname);
        char *sname = qname_schema(qname);
-       sql_schema *s = NULL;
+       sql_schema *s = cur_schema(sql);
        sql_table *t = NULL;
        int instantiate = (sql->emode == m_instantiate || !persistent);
        int deps = (sql->emode == m_deps);
@@ -1151,12 +1157,9 @@ rel_create_view(sql_query *query, sql_sc
        (void) check;           /* Stefan: unused!? */
        if (sname && !(s = mvc_bind_schema(sql, sname))) 
                return sql_error(sql, 02, SQLSTATE(3F000) "CREATE VIEW: no such 
schema '%s'", sname);
-       if (s == NULL)
-               s = cur_schema(sql);
 
-       if (create && (!mvc_schema_privs(sql, s) && !(isTempSchema(s) && 
persistent == SQL_LOCAL_TEMP))) {
+       if (create && (!mvc_schema_privs(sql, s) && !(isTempSchema(s) && 
persistent == SQL_LOCAL_TEMP)))
                return sql_error(sql, 02, SQLSTATE(42000) "%s VIEW: access 
denied for %s to schema '%s'", base, stack_get_string(sql, "current_user"), 
s->base.name);
-       }
 
        if (create && (t = mvc_bind_table(sql, s, name)) != NULL) {
                if (replace) {
@@ -1277,12 +1280,10 @@ rel_drop_type(mvc *sql, dlist *qname, in
 {
        char *name = qname_table(qname);
        char *sname = qname_schema(qname);
-       sql_schema *s = NULL;
+       sql_schema *s = cur_schema(sql);
 
        if (sname && !(s = mvc_bind_schema(sql, sname))) 
                return sql_error(sql, 02, SQLSTATE(3F000) "DROP TYPE: no such 
schema '%s'", sname);
-       if (s == NULL)
-               s = cur_schema(sql);
 
        if (schema_bind_type(sql, s, name) == NULL) {
                return sql_error(sql, 02, SQLSTATE(42S01) "DROP TYPE: type '%s' 
does not exist", name);
@@ -1297,12 +1298,10 @@ rel_create_type(mvc *sql, dlist *qname, 
 {
        char *name = qname_table(qname);
        char *sname = qname_schema(qname);
-       sql_schema *s = NULL;
+       sql_schema *s = cur_schema(sql);
 
        if (sname && !(s = mvc_bind_schema(sql, sname))) 
                return sql_error(sql, 02, SQLSTATE(3F000) "CREATE TYPE: no such 
schema '%s'", sname);
-       if (s == NULL)
-               s = cur_schema(sql);
 
        if (schema_bind_type(sql, s, name) != NULL) {
                return sql_error(sql, 02, SQLSTATE(42S01) "CREATE TYPE: name 
'%s' already in use", name);
@@ -1441,16 +1440,14 @@ sql_alter_table(sql_query *query, dlist 
        mvc *sql = query->sql;
        char *sname = qname_schema(qname);
        char *tname = qname_table(qname);
-       sql_schema *s = NULL;
+       sql_schema *s = cur_schema(sql);
        sql_table *t = NULL;
 
-       if (sname && !(s=mvc_bind_schema(sql, sname))) {
-               if(if_exists)
+       if (sname && !(s = mvc_bind_schema(sql, sname))) {
+               if (if_exists)
                        return rel_psm_block(sql->sa, new_exp_list(sql->sa));
                return sql_error(sql, 02, SQLSTATE(3F000) "ALTER TABLE: no such 
schema '%s'", sname);
        }
-       if (!s)
-               s = cur_schema(sql);
 
        if ((t = mvc_bind_table(sql, s, tname)) == NULL) {
                if (mvc_bind_table(sql, mvc_bind_schema(sql, "tmp"), tname) != 
NULL) 
@@ -1842,9 +1839,10 @@ rel_grant_func(mvc *sql, sql_schema *cur
        sql_schema *s = NULL;
        sql_func *func = NULL;
 
-       if (sname)
-               s = mvc_bind_schema(sql, sname);
-       else
+       if (sname) {
+               if (!(s = mvc_bind_schema(sql, sname)))
+                       return sql_error(sql, 02, SQLSTATE(3F000) "GRANT: no 
such schema '%s'", sname);
+       } else 
                s = cur;
        func = resolve_func(sql, s, fname, typelist, type, "GRANT", 0);
        if (!func) 
@@ -1894,9 +1892,9 @@ rel_grant_privs(mvc *sql, sql_schema *cu
                char *tname = qname_table(qname);
                sql_schema *s = cur;
 
-               if (sname)
-                       s = mvc_bind_schema(sql, sname);
-               if (s && mvc_bind_table(sql, s, tname) != NULL)
+               if (sname && !(s = mvc_bind_schema(sql, sname)))
+                       return sql_error(sql, 02, SQLSTATE(3F000) "GRANT: no 
such schema '%s'", sname);
+               if (s && mvc_bind_table(sql, s, tname))
                        token = SQL_TABLE;
        }
 
@@ -2024,12 +2022,12 @@ rel_revoke_func(mvc *sql, sql_schema *cu
        char *sname = qname_schema(qname);
        char *fname = qname_func(qname);
        sql_func *func = NULL;
-
        sql_schema *s = NULL;
 
-       if (sname)
-               s = mvc_bind_schema(sql, sname);
-       else
+       if (sname) {
+               if (sname && !(s = mvc_bind_schema(sql, sname)))
+                       return sql_error(sql, 02, SQLSTATE(3F000) "REVOKE: no 
such schema '%s'", sname);
+       } else
                s = cur;
        func = resolve_func(sql, s, fname, typelist, type, "REVOKE", 0);
        if (!func) 
@@ -2078,9 +2076,9 @@ rel_revoke_privs(mvc *sql, sql_schema *c
                char *tname = qname_table(qname);
                sql_schema *s = cur;
 
-               if (sname)
-                       s = mvc_bind_schema(sql, sname);
-               if (s && mvc_bind_table(sql, s, tname) != NULL)
+               if (sname && !(s = mvc_bind_schema(sql, sname))) 
+                       return sql_error(sql, 02, SQLSTATE(3F000) "GRANT: no 
such schema '%s'", sname);
+               if (s && mvc_bind_table(sql, s, tname))
                        token = SQL_TABLE;
        }
 
@@ -2108,7 +2106,7 @@ rel_revoke_privs(mvc *sql, sql_schema *c
 static sql_rel *
 rel_create_index(mvc *sql, char *iname, idx_type itype, dlist *qname, dlist 
*column_list)
 {
-       sql_schema *s = NULL;
+       sql_schema *s = cur_schema(sql);
        sql_table *t, *nt;
        sql_rel *r, *res;
        sql_exp **updates, *e;
@@ -2119,8 +2117,6 @@ rel_create_index(mvc *sql, char *iname, 
 
        if (sname && !(s = mvc_bind_schema(sql, sname))) 
                return sql_error(sql, 02, SQLSTATE(3F000) "CREATE INDEX: no 
such schema '%s'", sname);
-       if (!s) 
-               s = cur_schema(sql);
        i = mvc_bind_idx(sql, s, iname);
        if (i) 
                return sql_error(sql, 02, SQLSTATE(42S11) "CREATE INDEX: name 
'%s' already in use", iname);
@@ -2211,8 +2207,7 @@ current_or_designated_schema(mvc *sql, c
        if (!name)
                return cur_schema(sql);
 
-       s = mvc_bind_schema(sql, name);
-       if (!s) {
+       if (!(s = mvc_bind_schema(sql, name))) {
                sql_error(sql, 02, SQLSTATE(3F000) "COMMENT ON:no such schema: 
%s", name);
                return NULL;
        }
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -609,7 +609,10 @@ rel_named_table_function(sql_query *quer
        char *fname = qname_fname(l->data.lval); 
        char *sname = qname_schema(l->data.lval);
        node *en;
-       sql_schema *s = sql->session->schema;
+       sql_schema *s = cur_schema(sql);
+
+       if (sname && !(s = mvc_bind_schema(sql, sname)))
+               return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
 
        tl = sa_list(sql->sa);
        exps = new_exp_list(sql->sa);
@@ -654,8 +657,6 @@ rel_named_table_function(sql_query *quer
                }
        }
 
-       if (sname)
-               s = mvc_bind_schema(sql, sname);
        e = find_table_function(sql, s, fname, exps, tl);
        if (!e)
                return sql_error(sql, 02, SQLSTATE(42000) "SELECT: no such 
operator '%s'", fname);
@@ -869,7 +870,7 @@ table_ref(sql_query *query, sql_rel *rel
                dlist *name = tableref->data.lval->h->data.lval;
                sql_rel *temp_table = NULL;
                char *sname = qname_schema(name);
-               sql_schema *s = NULL;
+               sql_schema *s = cur_schema(sql);
                int allowed = 1;
 
                tname = qname_table(name);
@@ -877,7 +878,7 @@ table_ref(sql_query *query, sql_rel *rel
                if (dlist_length(name) > 2)
                        return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: only 
a schema and table name expected");
 
-               if (sname && !(s=mvc_bind_schema(sql,sname)))
+               if (sname && !(s = mvc_bind_schema(sql, sname)))
                        return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no 
such schema '%s'", sname);
                if (!t && !sname) {
                        t = stack_find_table(sql, tname);
@@ -885,8 +886,6 @@ table_ref(sql_query *query, sql_rel *rel
                                temp_table = stack_find_rel_view(sql, tname);
                }
                if (!t && !temp_table) {
-                       if (!s)
-                               s = cur_schema(sql);
                        t = mvc_bind_table(sql, s, tname);
                        if (!t && !sname) {
                                s = tmp_schema(sql);
@@ -1507,7 +1506,7 @@ rel_filter(mvc *sql, sql_rel *rel, list 
        node *n;
        sql_exp *L = l->h->data, *R = r->h->data, *e = NULL;
        sql_subfunc *f = NULL;
-       sql_schema *s = sql->session->schema;
+       sql_schema *s = cur_schema(sql);
        list *tl, *exps;
 
        exps = sa_list(sql->sa);
@@ -1524,8 +1523,8 @@ rel_filter(mvc *sql, sql_rel *rel, list 
                list_append(exps, e);
                list_append(tl, exp_subtype(e));
        }
-       if (sname)
-               s = mvc_bind_schema(sql, sname);
+       if (sname && !(s = mvc_bind_schema(sql, sname)))
+               return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
        /* find filter function */
        f = sql_bind_func_(sql->sa, s, filter_op, tl, F_FILT);
 
@@ -2124,11 +2123,11 @@ rel_logical_value_exp(sql_query *query, 
                char *fname = qname_fname(filter_op);
                char *sname = qname_schema(filter_op);
                list *exps, *tl;
-               sql_schema *s = sql->session->schema;
+               sql_schema *s = cur_schema(sql);
                sql_subtype *obj_type = NULL;
 
-               if (sname)
-                       s = mvc_bind_schema(sql, sname);
+               if (sname && !(s = mvc_bind_schema(sql, sname)))
+                       return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no 
such schema '%s'", sname);
 
                exps = sa_list(sql->sa);
                tl = sa_list(sql->sa);
@@ -2705,10 +2704,10 @@ rel_op(mvc *sql, symbol *se, exp_kind ek
        dnode *l = se->data.lval->h;
        char *fname = qname_fname(l->data.lval);
        char *sname = qname_schema(l->data.lval);
-       sql_schema *s = sql->session->schema;
-
-       if (sname)
-               s = mvc_bind_schema(sql, sname);
+       sql_schema *s = cur_schema(sql);
+
+       if (sname && !(s = mvc_bind_schema(sql, sname)))
+               return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
        return rel_op_(sql, s, fname, ek);
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to