Changeset: 702c90676593 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=702c90676593
Modified Files:
        sql/backends/monet5/sql_cat.c
Branch: Apr2019
Log Message:

Fixed MAL backend call to create/drop SQL types.


diffs (55 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
@@ -1148,9 +1148,16 @@ SQLcreate_type(Client cntxt, MalBlkPtr m
        sql_schema *s;
 
        initcontext();
-       s = mvc_bind_schema(sql, sname);
-       if (!mvc_schema_privs(sql, sql->session->schema))
-               throw(SQL,"sql.create_type", SQLSTATE(0D000) "CREATE TYPE: not 
enough privileges to create type '%s'", sname);
+
+       if (sname && !(s = mvc_bind_schema(sql, sname)))
+               throw(SQL,"sql.create_type",SQLSTATE(3F000) "CREATE TYPE: no 
such schema '%s'", sname);
+       if (!s)
+               s = cur_schema(sql);
+
+       if (!mvc_schema_privs(sql, s))
+               throw(SQL,"sql.create_type", SQLSTATE(42000) "CREATE TYPE: 
access denied for %s to schema '%s'", stack_get_string(sql, "current_user"), 
s->base.name);
+       if (schema_bind_type(sql, s, name))
+               throw(SQL,"sql.create_type", SQLSTATE(42S02) "CREATE TYPE: type 
'%s' already exists", name);
        if (!mvc_create_type(sql, s, name, 0, 0, 0, impl))
                throw(SQL,"sql.create_type", SQLSTATE(0D000) "CREATE TYPE: 
unknown external type '%s'", impl);
        return msg;
@@ -1167,17 +1174,21 @@ SQLdrop_type(Client cntxt, MalBlkPtr mb,
        sql_type *t;
 
        initcontext();
-       s = mvc_bind_schema(sql, sname);
-       t = schema_bind_type( sql, s, name);
-       if (!t)
-               throw(SQL,"sql.drop_type", SQLSTATE(0D000) "DROP TYPE: type 
'%s' does not exist", sname);
-       else if (!mvc_schema_privs(sql, sql->session->schema))
-               throw(SQL,"sql.drop_type", SQLSTATE(0D000) "DROP TYPE: not 
enough privileges to drop type '%s'", sname);
+
+       if (sname && !(s = mvc_bind_schema(sql, sname)))
+               throw(SQL,"sql.drop_type",SQLSTATE(3F000) "DROP TYPE: no such 
schema '%s'", sname);
+       if (!s)
+               s = cur_schema(sql);
+
+       if (!mvc_schema_privs(sql, s))
+               throw(SQL,"sql.drop_type", SQLSTATE(42000) "DROP TYPE:  access 
denied for %s to schema '%s'", stack_get_string(sql, "current_user"), 
s->base.name);
+       else if (!(t = schema_bind_type(sql, s, name)))
+               throw(SQL,"sql.drop_type", SQLSTATE(3F000) "DROP TYPE: type 
'%s' does not exist", name);
        else if (!drop_action && mvc_check_dependency(sql, t->base.id, 
TYPE_DEPENDENCY, NULL))
-               throw(SQL,"sql.drop_type", SQLSTATE(42000) "DROP TYPE: unable 
to drop type %s (there are database objects which depend on it)\n", sname);
-       else if (!mvc_drop_type(sql, sql->session->schema, t, drop_action))
-               throw(SQL,"sql.drop_type", SQLSTATE(0D000) "DROP TYPE: failed 
to drop type '%s'", sname);
-       return MAL_SUCCEED;
+               throw(SQL,"sql.drop_type", SQLSTATE(42000) "DROP TYPE: unable 
to drop type %s (there are database objects which depend on it)\n", name);
+       else if (!mvc_drop_type(sql, s, t, drop_action))
+               throw(SQL,"sql.drop_type", SQLSTATE(0D000) "DROP TYPE: failed 
to drop type '%s'", name);
+       return msg;
 }
 
 str
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to