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