Changeset: 00c95853afcd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=00c95853afcd
Modified Files:
sql/server/rel_schema.c
sql/test/Tests/create_in_schema.stable.err
sql/test/Tests/create_in_schema.stable.out
Branch: Jun2020
Log Message:
disallow persistent table creation in the 'tmp' schema
diffs (98 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
@@ -1051,6 +1051,8 @@ rel_create_table(sql_query *query, sql_s
return sql_error(sql, 02, SQLSTATE(42S01) "%s TABLE: name '%s'
already in use", cd, name);
} else if (temp != SQL_DECLARED_TABLE && (!mvc_schema_privs(sql, s) &&
!(isTempSchema(s) && temp == SQL_LOCAL_TEMP))){
return sql_error(sql, 02, SQLSTATE(42000) "CREATE TABLE:
insufficient privileges for user '%s' in schema '%s'", stack_get_string(sql,
"current_user"), s->base.name);
+ } else if (temp == SQL_PERSIST && isTempSchema(s)){
+ return sql_error(sql, 02, SQLSTATE(42000) "CREATE TABLE: cannot
create persistent table '%s' in the schema '%s'", name, s->base.name);
} else if (table_elements_or_subquery->token == SQL_CREATE_TABLE) {
/* table element list */
dnode *n;
diff --git a/sql/test/Tests/create_in_schema.stable.err
b/sql/test/Tests/create_in_schema.stable.err
--- a/sql/test/Tests/create_in_schema.stable.err
+++ b/sql/test/Tests/create_in_schema.stable.err
@@ -14,7 +14,27 @@ MAPI = (monetdb) /var/tmp/mtest-27483/.
QUERY = select * from bla3; -- should fail
ERROR = !SELECT: no such table 'bla3'
CODE = 42S02
-MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = create table tmp.bla5(id int);
+ERROR = !CREATE TABLE: cannot create persistent table 'bla5' in the schema
'tmp'
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = select * from bla5; -- works, because tmp is in search path
+ERROR = !SELECT: no such table 'bla5'
+CODE = 42S02
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = create view tmp.v_bla5 as select * from bla5;
+ERROR = !SELECT: no such table 'bla5'
+CODE = 42S02
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = select * from v_bla5;
+ERROR = !SELECT: no such table 'v_bla5'
+CODE = 42S02
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = drop view v_bla5; -- should fail
+ERROR = !DROP VIEW: unknown view 'v_bla5'
+CODE = 42S02
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
QUERY = drop view tmp.v_bla5;
ERROR = !DROP VIEW: unknown view 'v_bla5'
CODE = 42S02
@@ -22,7 +42,11 @@ MAPI = (monetdb) /var/tmp/mtest-30274/.
QUERY = drop view v_bla4; -- should fail
ERROR = !DROP VIEW: unknown view 'v_bla4'
CODE = 42S02
-MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
+QUERY = drop table bla5;
+ERROR = !DROP TABLE: no such table 'bla5'
+CODE = 42S02
+MAPI = (monetdb) /var/tmp/mtest-1368052/.s.monetdb.31813
QUERY = drop table sys.bla4; -- should fail
ERROR = !DROP TABLE: no such table 'bla4'
CODE = 42S02
diff --git a/sql/test/Tests/create_in_schema.stable.out
b/sql/test/Tests/create_in_schema.stable.out
--- a/sql/test/Tests/create_in_schema.stable.out
+++ b/sql/test/Tests/create_in_schema.stable.out
@@ -60,10 +60,6 @@ stdout of test 'create_in_schema` in dir
% id # name
% int # type
% 1 # length
-% tmp.bla5 # table_name
-% id # name
-% int # type
-% 1 # length
#create view v_bla1 as select * from bla1;
#select * from v_bla1;
% sys.v_bla1 # table_name
@@ -88,14 +84,17 @@ stdout of test 'create_in_schema` in dir
% id # name
% int # type
% 1 # length
-#create view tmp.v_bla5 as select * from bla5;
-#select * from v_bla5;
-% tmp.v_bla5 # table_name
-% id # name
-% int # type
-% 1 # length
+#drop view bla.v_bla4;
+#drop view v_bla3;
+#drop view v_bla2;
+#drop view v_bla1;
+#drop table bla4;
+#drop table bla.bla3;
+#drop table bla1;
+#drop table bla2;
+#drop schema "bla";
-# 11:50:10 >
-# 11:50:10 > Done.
-# 11:50:10 >
+# 12:56:13 >
+# 12:56:13 > "Done."
+# 12:56:13 >
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list