Changeset: 928f546e7c6f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=928f546e7c6f
Modified Files:
        sql/backends/monet5/sql_cat.c
        sql/server/rel_exp.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/sql_privileges.c
Branch: scoping2
Log Message:

The resolved schema name will be always passed to the backend


diffs (truncated from 413 to 300 lines):

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
@@ -140,12 +140,12 @@ validate_alter_table_add_table(mvc *sql,
                                                           sql_table **mt, 
sql_table **pt, int update)
 {
        char *msg = MAL_SUCCEED;
-       sql_schema *ms = cur_schema(sql), *ps = cur_schema(sql);
+       sql_schema *ms = NULL, *ps = NULL;
        sql_table *rmt = NULL, *rpt = NULL;
 
-       if (msname && !(ms = mvc_bind_schema(sql, msname)))
+       if (!(ms = mvc_bind_schema(sql, msname)))
                throw(SQL,call,SQLSTATE(3F000) "ALTER TABLE: no such schema 
'%s'", msname);
-       if (psname && !(ps = mvc_bind_schema(sql, psname)))
+       if (!(ps = mvc_bind_schema(sql, psname)))
                throw(SQL,call,SQLSTATE(3F000) "ALTER TABLE: no such schema 
'%s'", psname);
        if (!mvc_schema_privs(sql, ms))
                throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: access denied for 
%s to schema '%s'", get_string_global_var(sql, "current_user"), ms->base.name);
@@ -402,13 +402,13 @@ finish:
 static char *
 alter_table_del_table(mvc *sql, char *msname, char *mtname, char *psname, char 
*ptname, int drop_action)
 {
-       sql_schema *ms = cur_schema(sql), *ps = cur_schema(sql);
+       sql_schema *ms = NULL, *ps = NULL;
        sql_table *mt = NULL, *pt = NULL;
        node *n = NULL;
 
-       if (msname && !(ms = mvc_bind_schema(sql, msname)))
+       if (!(ms = mvc_bind_schema(sql, msname)))
                throw(SQL,"sql.alter_table_del_table",SQLSTATE(3F000) "ALTER 
TABLE: no such schema '%s'", msname);
-       if (psname && !(ps = mvc_bind_schema(sql, psname)))
+       if (!(ps = mvc_bind_schema(sql, psname)))
                throw(SQL,"sql.alter_table_del_table",SQLSTATE(3F000) "ALTER 
TABLE: no such schema '%s'", psname);
        if (!mvc_schema_privs(sql, ms))
                throw(SQL,"sql.alter_table_del_table",SQLSTATE(42000) "ALTER 
TABLE: access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), ms->base.name);
@@ -431,10 +431,10 @@ alter_table_del_table(mvc *sql, char *ms
 static char *
 alter_table_set_access(mvc *sql, char *sname, char *tname, int access)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_table *t = NULL;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.alter_table_set_access",SQLSTATE(3F000) "ALTER 
TABLE: no such schema '%s'", sname);
        if (s && !mvc_schema_privs(sql, s))
                throw(SQL,"sql.alter_table_set_access",SQLSTATE(42000) "ALTER 
TABLE: access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -457,10 +457,10 @@ static char *
 create_trigger(mvc *sql, char *sname, char *tname, char *triggername, int 
time, int orientation, int event, char *old_name, char *new_name, char 
*condition, char *query)
 {
        sql_trigger *tri = NULL;
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_table *t;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.create_trigger",SQLSTATE(3F000) "CREATE TRIGGER: 
no such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.create_trigger",SQLSTATE(42000) "CREATE TRIGGER: 
access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -506,9 +506,9 @@ static char *
 drop_trigger(mvc *sql, char *sname, char *tname, int if_exists)
 {
        sql_trigger *tri = NULL;
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname))) {
+       if (!(s = mvc_bind_schema(sql, sname))) {
                if (if_exists)
                        return MAL_SUCCEED;
                throw(SQL,"sql.drop_trigger",SQLSTATE(3F000) "DROP TRIGGER: no 
such schema '%s'", sname);
@@ -529,11 +529,10 @@ drop_trigger(mvc *sql, char *sname, char
 static char *
 drop_table(mvc *sql, char *sname, char *tname, int drop_action, int if_exists)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_table *t = NULL;
-       node *n;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname))) {
+       if (!(s = mvc_bind_schema(sql, sname))) {
                if (if_exists)
                        return MAL_SUCCEED;
                throw(SQL,"sql.drop_table",SQLSTATE(3F000) "DROP TABLE: no such 
schema '%s'", sname);
@@ -550,7 +549,7 @@ drop_table(mvc *sql, char *sname, char *
        if (!mvc_schema_privs(sql, s) && !(isTempSchema(s) && t->persistence == 
SQL_LOCAL_TEMP))
                throw(SQL,"sql.drop_table", SQLSTATE(42000) "DROP TABLE: access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
s->base.name);
        if (!drop_action && t->keys.set) {
-               for (n = t->keys.set->h; n; n = n->next) {
+               for (node *n = t->keys.set->h; n; n = n->next) {
                        sql_key *k = n->data;
 
                        if (k->type == ukey || k->type == pkey) {
@@ -580,9 +579,9 @@ static char *
 drop_view(mvc *sql, char *sname, char *tname, int drop_action, int if_exists)
 {
        sql_table *t = NULL;
-       sql_schema *ss = cur_schema(sql);
+       sql_schema *ss = NULL;
 
-       if (sname && !(ss = mvc_bind_schema(sql, sname))) {
+       if (!(ss = mvc_bind_schema(sql, sname))) {
                if (if_exists)
                        return MAL_SUCCEED;
                throw(SQL,"sql.drop_view", SQLSTATE(3F000) "DROP VIEW: no such 
schema '%s'", sname);
@@ -607,9 +606,9 @@ static str
 drop_key(mvc *sql, char *sname, char *kname, int drop_action)
 {
        sql_key *key;
-       sql_schema *ss = cur_schema(sql);
+       sql_schema *ss = NULL;
 
-       if (sname && !(ss = mvc_bind_schema(sql, sname)))
+       if (!(ss = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.drop_key", SQLSTATE(3F000) "ALTER TABLE: no such 
schema '%s'", sname);
        if (!mvc_schema_privs(sql, ss))
                throw(SQL,"sql.drop_key", SQLSTATE(42000) "ALTER TABLE: access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
ss->base.name);
@@ -625,10 +624,10 @@ drop_key(mvc *sql, char *sname, char *kn
 static str
 drop_index(Client cntxt, mvc *sql, char *sname, char *iname)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_idx *i = NULL;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.drop_index", SQLSTATE(3F000) "DROP INDEX: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.drop_index", SQLSTATE(42000) "DROP INDEX: access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
s->base.name);
@@ -660,10 +659,10 @@ drop_index(Client cntxt, mvc *sql, char 
 static str
 create_seq(mvc *sql, char *sname, char *seqname, sql_sequence *seq)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
 
        (void)seqname;
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.create_seq", SQLSTATE(3F000) "CREATE SEQUENCE: 
no such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.create_seq", SQLSTATE(42000) "CREATE SEQUENCE: 
insufficient privileges for '%s' in schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -685,11 +684,11 @@ create_seq(mvc *sql, char *sname, char *
 static str
 alter_seq(mvc *sql, char *sname, char *seqname, sql_sequence *seq, const lng 
*val)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_sequence *nseq = NULL;
 
        (void)seqname;
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.alter_seq", SQLSTATE(3F000) "ALTER SEQUENCE: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.alter_seq", SQLSTATE(42000) "ALTER SEQUENCE: 
insufficient privileges for '%s' in schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -716,10 +715,10 @@ alter_seq(mvc *sql, char *sname, char *s
 static str
 drop_seq(mvc *sql, char *sname, char *name)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_sequence *seq = NULL;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.drop_seq", SQLSTATE(3F000) "DROP SEQUENCE: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.drop_seq", SQLSTATE(42000) "DROP SEQUENCE: 
insufficient privileges for '%s' in schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -735,12 +734,12 @@ drop_seq(mvc *sql, char *sname, char *na
 static str
 drop_func(mvc *sql, char *sname, char *name, sqlid fid, sql_ftype type, int 
action)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        char *F = NULL, *fn = NULL;
 
        FUNC_TYPE_STR(type, F, fn)
 
-       if (sname && !(s = mvc_bind_schema(sql, sname))) {
+       if (!(s = mvc_bind_schema(sql, sname))) {
                if (fid == -2) /* if exists option */
                        return MAL_SUCCEED;
                throw(SQL,"sql.drop_func", SQLSTATE(3F000) "DROP %s: no such 
schema '%s'", F, sname);
@@ -784,7 +783,7 @@ static char *
 create_func(mvc *sql, char *sname, char *fname, sql_func *f)
 {
        sql_func *nf;
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        int clientid = sql->clientid;
        char *F = NULL, *fn = NULL;
 
@@ -792,7 +791,7 @@ create_func(mvc *sql, char *sname, char 
 
        (void) fname;
        (void) fn;
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.create_func", SQLSTATE(3F000) "CREATE %s: no 
such schema '%s'", F, sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.create_func", SQLSTATE(42000) "CREATE %s: access 
denied for %s to schema '%s'", F, get_string_global_var(sql, "current_user"), 
s->base.name);
@@ -859,11 +858,11 @@ create_func(mvc *sql, char *sname, char 
 static str
 alter_table(Client cntxt, mvc *sql, char *sname, sql_table *t)
 {
-       sql_schema *s = cur_schema(sql);
+       sql_schema *s = NULL;
        sql_table *nt = NULL;
        node *n;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.alter_table", SQLSTATE(3F000) "ALTER TABLE: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s) && !(isTempSchema(s) && t->persistence == 
SQL_LOCAL_TEMP))
                throw(SQL,"sql.alter_table", SQLSTATE(42000) "ALTER TABLE: 
insufficient privileges for user '%s' in schema '%s'", 
get_string_global_var(sql, "current_user"), s->base.name);
@@ -1206,12 +1205,11 @@ SQLcreate_type(Client cntxt, MalBlkPtr m
        str sname = *getArgReference_str(stk, pci, 1);
        char *name = *getArgReference_str(stk, pci, 2);
        char *impl = *getArgReference_str(stk, pci, 3);
-       sql_schema *s;
+       sql_schema *s = NULL;
 
        initcontext();
 
-       s = cur_schema(sql);
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.create_type",SQLSTATE(3F000) "CREATE TYPE: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.create_type", SQLSTATE(42000) "CREATE TYPE: 
access denied for %s to schema '%s'", get_string_global_var(sql, 
"current_user"), s->base.name);
@@ -1229,13 +1227,12 @@ SQLdrop_type(Client cntxt, MalBlkPtr mb,
        str sname = *getArgReference_str(stk, pci, 1);
        char *name = *getArgReference_str(stk, pci, 2);
        int drop_action = *getArgReference_int(stk, pci, 3);
-       sql_schema *s;
+       sql_schema *s = NULL;
        sql_type *t;
 
        initcontext();
 
-       s = cur_schema(sql);
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (!(s = mvc_bind_schema(sql, sname)))
                throw(SQL,"sql.drop_type",SQLSTATE(3F000) "DROP TYPE: no such 
schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL,"sql.drop_type", SQLSTATE(42000) "DROP TYPE:  access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
s->base.name);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -565,12 +565,10 @@ exp_value(mvc *sql, sql_exp *e)
                return e->l;
        } else if (e->r) { /* param (ie not set) */
                sql_var_name *vname = (sql_var_name*) e->r;
-               sql_schema *s = cur_schema(sql);
                sql_var *var;
 
-               if (vname->sname && !(s = mvc_bind_schema(sql, vname->sname)))
-                       return NULL;
-               if (e->flag == 0 && (var = find_global_var(sql, s, 
vname->name))) /* global variable */
+               assert(e->flag != 0 || vname->sname); /* global variables must 
have a schema */
+               if (e->flag == 0 && (var = find_global_var(sql, 
mvc_bind_schema(sql, vname->sname), vname->name))) /* global variable */
                        return &(var->var);
                return NULL;
        }
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
@@ -1107,9 +1107,6 @@ rel_create_view(sql_query *query, dlist 
                        } else {
                                return sql_error(sql, 02, SQLSTATE(42S01) "%s: 
name '%s' already in use", base, name);
                        }
-               } else {
-                       sql->errstr[0] = '\0'; /* reset table not found error */
-                       sql->session->status = 0;
                }
        }
        if (ast) {
@@ -1647,23 +1644,20 @@ rel_func_priv(sql_allocator *sa, char *s
 }
 
 static sql_rel *
-rel_grant_or_revoke_global(mvc *sql, sql_schema *cur, dlist *privs, dlist 
*grantees, int grant, int grantor, ddl_statement action)
+rel_grant_or_revoke_global(mvc *sql, dlist *privs, dlist *grantees, int grant, 
int grantor, ddl_statement action)
 {
        sql_rel *res = NULL;
-       char *sname = cur->base.name;
-       dnode *gn;
+       char *sname = cur_schema(sql)->base.name;
 
        if (!privs)
                return NULL;
-       sname = cur->base.name;
-       for (gn = grantees->h; gn; gn = gn->next) {
-               dnode *opn;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to