Changeset: 901a54cbadd9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=901a54cbadd9 Modified Files: sql/backends/monet5/sql_cat.c sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows sql/server/rel_select.c sql/server/sql_parser.y sql/test/BugTracker-2011/Tests/UDF_in_schema.Bug-2817.sql sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql sql/test/BugTracker-2015/Tests/schema_view.Bug-3708.sql sql/test/BugTracker-2017/Tests/function_and_mergetable.Bug-6288.sql sql/test/Dependencies/Tests/Dependencies.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out.int128 sql/test/Skyserver/drop_user.sql sql/test/leaks/Tests/check1.stable.out.int128 Branch: Jul2017 Log Message:
Fixes for bug 6440 (ie properly use semi/anti join for in) Implement drop schema schema_name restrict (see bug 6438) We keep the current default (cascade) in the release branch and switch to the SQL correct default in the default branch. diffs (269 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 @@ -875,6 +875,10 @@ SQLdrop_schema(Client cntxt, MalBlkPtr m msg = sql_message("42000!DROP SCHEMA: access denied for '%s'", sname); } else if (sql_schema_has_user(sql, s)) { msg = sql_message("2BM37!DROP SCHEMA: unable to drop schema '%s' (there are database objects which depend on it", sname); + } else if (!action /* RESTRICT */ && ( + !list_empty(s->tables.set) || !list_empty(s->types.set) || + !list_empty(s->funcs.set) || !list_empty(s->seqs.set))) { + msg = sql_message("2BM37!DROP SCHEMA: unable to drop schema '%s' (there are database objects which depend on it", sname); } else { mvc_drop_schema(sql, s, action); } diff --git a/sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out b/sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out --- a/sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out +++ b/sql/benchmarks/tpch/fileleak/Tests/delete_all.stable.out @@ -42,22 +42,22 @@ Ready. (u'l_suppkey', 262144, 60175) (u'l_tax', 524288, 60175) [(u'l_comment', 0), (u'l_commitdate', 0), (u'l_discount', 0), (u'l_extendedprice', 0), (u'l_linenumber', 0), (u'l_linestatus', 0), (u'l_orderkey', 0), (u'l_partkey', 0), (u'l_quantity', 0), (u'l_receiptdate', 0), (u'l_returnflag', 0), (u'l_shipdate', 0), (u'l_shipinstruct', 0), (u'l_shipmode', 0), (u'l_suppkey', 0), (u'l_tax', 0)] -(u'l_comment', 65536, 0) -(u'l_commitdate', 65536, 0) -(u'l_discount', 65536, 0) -(u'l_extendedprice', 65536, 0) -(u'l_linenumber', 65536, 0) -(u'l_linestatus', 0, 0) -(u'l_orderkey', 65536, 0) -(u'l_partkey', 65536, 0) -(u'l_quantity', 65536, 0) -(u'l_receiptdate', 65536, 0) -(u'l_returnflag', 0, 0) -(u'l_shipdate', 65536, 0) -(u'l_shipinstruct', 0, 0) -(u'l_shipmode', 0, 0) -(u'l_suppkey', 65536, 0) -(u'l_tax', 65536, 0) +(u'l_comment', 262144, 0) +(u'l_commitdate', 262144, 0) +(u'l_discount', 524288, 0) +(u'l_extendedprice', 524288, 0) +(u'l_linenumber', 262144, 0) +(u'l_linestatus', 65536, 0) +(u'l_orderkey', 262144, 0) +(u'l_partkey', 262144, 0) +(u'l_quantity', 524288, 0) +(u'l_receiptdate', 262144, 0) +(u'l_returnflag', 65536, 0) +(u'l_shipdate', 262144, 0) +(u'l_shipinstruct', 65536, 0) +(u'l_shipmode', 65536, 0) +(u'l_suppkey', 262144, 0) +(u'l_tax', 524288, 0) # 13:16:20 > # 13:16:20 > "Done." diff --git a/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out b/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out --- a/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out +++ b/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out @@ -25,22 +25,22 @@ Ready. # 16:01:26 > "/usr/bin/python2" "leaks.SQL.py" "leaks" # 16:01:26 > -(u'l_comment', 65536, 0) -(u'l_commitdate', 65536, 0) -(u'l_discount', 65536, 0) -(u'l_extendedprice', 65536, 0) -(u'l_linenumber', 65536, 0) +(u'l_comment', 262144, 0) +(u'l_commitdate', 262144, 0) +(u'l_discount', 524288, 0) +(u'l_extendedprice', 524288, 0) +(u'l_linenumber', 262144, 0) (u'l_linestatus', 0, 0) -(u'l_orderkey', 65536, 0) -(u'l_partkey', 65536, 0) -(u'l_quantity', 65536, 0) -(u'l_receiptdate', 65536, 0) +(u'l_orderkey', 262144, 0) +(u'l_partkey', 262144, 0) +(u'l_quantity', 524288, 0) +(u'l_receiptdate', 262144, 0) (u'l_returnflag', 0, 0) -(u'l_shipdate', 65536, 0) +(u'l_shipdate', 262144, 0) (u'l_shipinstruct', 0, 0) (u'l_shipmode', 0, 0) -(u'l_suppkey', 65536, 0) -(u'l_tax', 65536, 0) +(u'l_suppkey', 262144, 0) +(u'l_tax', 524288, 0) # 16:01:26 > # 16:01:26 > "Done." diff --git a/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows b/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows --- a/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows +++ b/sql/benchmarks/tpch/fileleak/Tests/leaks.stable.out.Windows @@ -25,22 +25,22 @@ Ready. # 16:01:26 > "/usr/bin/python2" "leaks.SQL.py" "leaks" # 16:01:26 > -(u'l_comment', 65536, 0) -(u'l_commitdate', 65536, 0) -(u'l_discount', 65536, 0) -(u'l_extendedprice', 65536, 0) -(u'l_linenumber', 65536, 0) +(u'l_comment', 262144, 0) +(u'l_commitdate', 262144, 0) +(u'l_discount', 524288, 0) +(u'l_extendedprice', 524288, 0) +(u'l_linenumber', 262144, 0) (u'l_linestatus', 0, 0) -(u'l_orderkey', 65536, 0) -(u'l_partkey', 65536, 0) -(u'l_quantity', 65536, 0) -(u'l_receiptdate', 65536, 0) +(u'l_orderkey', 262144, 0) +(u'l_partkey', 262144, 0) +(u'l_quantity', 524288, 0) +(u'l_receiptdate', 262144, 0) (u'l_returnflag', 0, 0) -(u'l_shipdate', 65536, 0) +(u'l_shipdate', 262144, 0) (u'l_shipinstruct', 0, 0) (u'l_shipmode', 0, 0) -(u'l_suppkey', 65536, 0) -(u'l_tax', 65536, 0) +(u'l_suppkey', 262144, 0) +(u'l_tax', 524288, 0) # 16:01:26 > # 16:01:26 > "Done." diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2670,7 +2670,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, rel = rel_crossproduct(sql->sa, left, right, op_join); rel->exps = jexps; } - if (correlated || l_is_value) { + if (sc->token == SQL_IN || correlated || l_is_value) { rel->op = (sc->token == SQL_IN)?op_semi:op_anti; } else if (sc->token == SQL_NOT_IN) { rel->op = op_anti; diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -835,7 +835,7 @@ schema: | drop SCHEMA if_exists qname drop_action { dlist *l = L(); append_list(l, $4); - append_int(l, $5); + append_int(l, 1 /*$5 use CASCADE in the release */); append_int(l, $3); $$ = _symbol_create_list( SQL_DROP_SCHEMA, l); } ; diff --git a/sql/test/BugTracker-2011/Tests/UDF_in_schema.Bug-2817.sql b/sql/test/BugTracker-2011/Tests/UDF_in_schema.Bug-2817.sql --- a/sql/test/BugTracker-2011/Tests/UDF_in_schema.Bug-2817.sql +++ b/sql/test/BugTracker-2011/Tests/UDF_in_schema.Bug-2817.sql @@ -13,7 +13,7 @@ select * from datacell.basket_X; select * from datacell.basket_X(); drop function datacell.basket_X; drop table datacell.basket_X; -drop schema datacell; +drop schema datacell cascade; create schema schema_2817; create table schema_2817.table_2817( @@ -30,4 +30,4 @@ select * from schema_2817.table_2817; select * from schema_2817.function_2817(); drop function schema_2817.function_2817; drop table schema_2817.table_2817; -drop schema schema_2817; +drop schema schema_2817 cascade; diff --git a/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql --- a/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql +++ b/sql/test/BugTracker-2012/Tests/insert_serial_with_unique_key.Bug-3091.sql @@ -17,7 +17,7 @@ VALUES ; DROP TABLE "meta"."program_specs"; -DROP SCHEMA "meta"; +DROP SCHEMA "meta" CASCADE; create table t30( a varchar(100), diff --git a/sql/test/BugTracker-2015/Tests/schema_view.Bug-3708.sql b/sql/test/BugTracker-2015/Tests/schema_view.Bug-3708.sql --- a/sql/test/BugTracker-2015/Tests/schema_view.Bug-3708.sql +++ b/sql/test/BugTracker-2015/Tests/schema_view.Bug-3708.sql @@ -8,8 +8,8 @@ set schema s2; select * from s1.s4; set schema sys; -drop schema s1; -drop schema s2; +drop schema s1 cascade; +drop schema s2 cascade; create schema s1; create schema s2; @@ -22,5 +22,5 @@ set schema s2; plan select * from s1.s4; set schema sys; -drop schema s1; -drop schema s2; +drop schema s1 cascade; +drop schema s2 cascade; diff --git a/sql/test/BugTracker-2017/Tests/function_and_mergetable.Bug-6288.sql b/sql/test/BugTracker-2017/Tests/function_and_mergetable.Bug-6288.sql --- a/sql/test/BugTracker-2017/Tests/function_and_mergetable.Bug-6288.sql +++ b/sql/test/BugTracker-2017/Tests/function_and_mergetable.Bug-6288.sql @@ -17,4 +17,4 @@ END; SELECT * FROM foo(); SET SCHEMA sys; -DROP SCHEMA banana; +DROP SCHEMA banana CASCADE; diff --git a/sql/test/Dependencies/Tests/Dependencies.stable.out b/sql/test/Dependencies/Tests/Dependencies.stable.out --- a/sql/test/Dependencies/Tests/Dependencies.stable.out +++ b/sql/test/Dependencies/Tests/Dependencies.stable.out @@ -592,9 +592,9 @@ Cleanup % name, name, L103 # name % varchar, varchar, char # type % 11, 16, 8 # length +[ "tables", "geometry_columns", "DEP_VIEW" ] [ "columns", "geometry_columns", "DEP_VIEW" ] [ "types", "geometry_columns", "DEP_VIEW" ] -[ "tables", "geometry_columns", "DEP_VIEW" ] [ "schemas", "geometry_columns", "DEP_VIEW" ] [ "environment", "geometry_columns", "DEP_VIEW" ] #SELECT t.name, i.name, 'DEP_INDEX' from tables as t, idxs as i where i.table_id = t.id and i.name not in (select name from keys) and t.type in (0, 10, 20, 30); diff --git a/sql/test/Dependencies/Tests/Dependencies.stable.out.int128 b/sql/test/Dependencies/Tests/Dependencies.stable.out.int128 --- a/sql/test/Dependencies/Tests/Dependencies.stable.out.int128 +++ b/sql/test/Dependencies/Tests/Dependencies.stable.out.int128 @@ -592,9 +592,9 @@ Cleanup % name, name, L103 # name % varchar, varchar, char # type % 11, 16, 8 # length +[ "tables", "geometry_columns", "DEP_VIEW" ] [ "columns", "geometry_columns", "DEP_VIEW" ] [ "types", "geometry_columns", "DEP_VIEW" ] -[ "tables", "geometry_columns", "DEP_VIEW" ] [ "schemas", "geometry_columns", "DEP_VIEW" ] [ "environment", "geometry_columns", "DEP_VIEW" ] #SELECT t.name, i.name, 'DEP_INDEX' from tables as t, idxs as i where i.table_id = t.id and i.name not in (select name from keys) and t.type in (0, 10, 20, 30); diff --git a/sql/test/Skyserver/drop_user.sql b/sql/test/Skyserver/drop_user.sql --- a/sql/test/Skyserver/drop_user.sql +++ b/sql/test/Skyserver/drop_user.sql @@ -1,7 +1,7 @@ START TRANSACTION; ALTER USER "skyserver" SET SCHEMA "sys"; -DROP SCHEMA skyserver; +DROP SCHEMA skyserver CASCADE; DROP USER skyserver; COMMIT; diff --git a/sql/test/leaks/Tests/check1.stable.out.int128 b/sql/test/leaks/Tests/check1.stable.out.int128 --- a/sql/test/leaks/Tests/check1.stable.out.int128 +++ b/sql/test/leaks/Tests/check1.stable.out.int128 @@ -316,7 +316,7 @@ Ready. % L2, L5 # name % char, bigint # type % 9, 3 # length -[ "transient", 161 ] +[ "transient", 167 ] #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%'; % .L2, .L6 # table_name % L2, L5 # name _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list