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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list