Changeset: 4e03173b7673 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4e03173b7673 Added Files: sql/test/Tests/comment-on-index.sql sql/test/Tests/comment-on-index.stable.err sql/test/Tests/comment-on-index.stable.out Modified Files: sql/server/rel_schema.c sql/server/sql_parser.h sql/server/sql_parser.y sql/storage/store.c sql/test/Tests/All sql/test/Tests/comment-on-column.sql sql/test/Tests/comment-on-schema.sql sql/test/Tests/comment-on-table.sql sql/test/Tests/comment-on-view.sql Branch: comment-on Log Message:
Support COMMENT ON INDEX bla IS 'bla bla'; diffs (truncated from 435 to 300 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 @@ -2029,6 +2029,32 @@ rel_find_designated_column(mvc *sql, sym } static sqlid +rel_find_designated_index(mvc *sql, symbol *sym) { + dlist *qname; + sql_schema *s; + char *sname; + char *iname; + sql_idx *idx; + + assert(sym->type == type_list); + qname = sym->data.lval; + s = cur_schema(sql); + sname = qname_schema(qname); + if (sname && !(s = mvc_bind_schema(sql, sname))) { + sql_error(sql, 02, "3F000!COMMENT ON:no such schema: %s", sname); + return 0; + } + iname = qname_table(qname); + idx = mvc_bind_idx(sql, s, iname); + if (idx) + return idx->base.id; + + sql_error(sql, 02, "3F000!COMMENT ON:no such index: %s.%s", + s->base.name, iname); + return 0; +} + +static sqlid rel_find_designated_object(mvc *sql, symbol *sym) { switch (sym->token) { @@ -2040,6 +2066,8 @@ rel_find_designated_object(mvc *sql, sym return rel_find_designated_table(sql, sym); case SQL_COLUMN: return rel_find_designated_column(sql, sym); + case SQL_INDEX: + return rel_find_designated_index(sql, sym); default: sql_error(sql, 2, "!COMMENT ON %s is not supported", token2string(sym->token)); return 0; diff --git a/sql/server/sql_parser.h b/sql/server/sql_parser.h --- a/sql/server/sql_parser.h +++ b/sql/server/sql_parser.h @@ -61,6 +61,7 @@ typedef enum tokens { SQL_TABLE, SQL_TABLE_OPERATOR, SQL_VIEW, + SQL_INDEX, SQL_TYPE, SQL_CASE, SQL_CAST, 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 @@ -5483,6 +5483,7 @@ catalog_object: append_string(l, $6); $$ = _symbol_create_list( SQL_COLUMN, l ); } + | INDEX qname { $$ = _symbol_create_list( SQL_INDEX, $2); } ; XML_value_expression: @@ -6075,6 +6076,7 @@ char *token2string(int token) SQL(SCHEMA); SQL(TABLE); SQL(VIEW); + SQL(INDEX); SQL(TYPE); SQL(CASE); SQL(CAST); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3649,6 +3649,7 @@ sys_drop_idx(sql_trans *tr, sql_idx * i, if (rid == oid_nil) return ; table_funcs.table_delete(tr, sysidx, rid); + sql_trans_drop_any_comment(tr, i->base.id); for (n = i->columns->h; n; n = n->next) { sql_kc *ic = n->data; diff --git a/sql/test/Tests/All b/sql/test/Tests/All --- a/sql/test/Tests/All +++ b/sql/test/Tests/All @@ -105,6 +105,7 @@ comment-on-schema comment-on-table comment-on-view comment-on-column +comment-on-index #HAVE_GEOM?trace diff --git a/sql/test/Tests/comment-on-column.sql b/sql/test/Tests/comment-on-column.sql --- a/sql/test/Tests/comment-on-column.sql +++ b/sql/test/Tests/comment-on-column.sql @@ -5,7 +5,7 @@ SET SCHEMA sch; CREATE TABLE origs AS SELECT id FROM sys.comments; CREATE FUNCTION all_kinds_of_object() -RETURNS TABLE (id INTEGER, name VARCHAR(50), type VARCHAR(20)) +RETURNS TABLE (id INTEGER, name VARCHAR(80), type VARCHAR(20)) RETURN TABLE ( SELECT id, name, table_type_name FROM sys.tables, sys.table_types @@ -17,10 +17,14 @@ RETURN TABLE ( SELECT c.id, t.name || '.' || c.name, 'COLUMN' FROM sys.columns AS c, sys.tables AS t WHERE c.table_id = t.id + UNION ALL + SELECT i.id, t.name || '.' || i.name, 'INDEX' + FROM sys.idxs AS i, sys.tables AS t + WHERE i.table_id = t.id ); CREATE FUNCTION new_comments() -RETURNS TABLE (name VARCHAR(30), source VARCHAR(20), remark CLOB) +RETURNS TABLE (name VARCHAR(80), source VARCHAR(20), remark CLOB) RETURN TABLE ( SELECT o.name, o.type, c.remark FROM sys.comments AS c LEFT JOIN all_kinds_of_object() AS o ON c.id = o.id diff --git a/sql/test/Tests/comment-on-index.sql b/sql/test/Tests/comment-on-index.sql new file mode 100644 --- /dev/null +++ b/sql/test/Tests/comment-on-index.sql @@ -0,0 +1,54 @@ +DROP SCHEMA IF EXISTS sch; +CREATE SCHEMA sch; +SET SCHEMA sch; + +CREATE TABLE origs AS SELECT id FROM sys.comments; + +CREATE FUNCTION all_kinds_of_object() +RETURNS TABLE (id INTEGER, name VARCHAR(80), type VARCHAR(20)) +RETURN TABLE ( + SELECT id, name, table_type_name + FROM sys.tables, sys.table_types + WHERE type = table_type_id + UNION ALL + SELECT id, name, 'SCHEMA' + FROM sys.schemas + UNION ALL + SELECT c.id, t.name || '.' || c.name, 'COLUMN' + FROM sys.columns AS c, sys.tables AS t + WHERE c.table_id = t.id + UNION ALL + SELECT i.id, t.name || '.' || i.name, 'INDEX' + FROM sys.idxs AS i, sys.tables AS t + WHERE i.table_id = t.id +); + +CREATE FUNCTION new_comments() +RETURNS TABLE (name VARCHAR(80), source VARCHAR(20), remark CLOB) +RETURN TABLE ( + SELECT o.name, o.type, c.remark + FROM sys.comments AS c LEFT JOIN all_kinds_of_object() AS o ON c.id = o.id + WHERE c.id NOT IN (SELECT id FROM origs) +); + +------------------------------------------------------------------------ + +-- create an index and comment on it +CREATE TABLE tab (i INTEGER); +CREATE INDEX idx ON tab(i); +COMMENT ON INDEX idx IS 'an index'; +SELECT * FROM new_comments(); + +-- explicit schema +COMMENT ON INDEX sch.idx IS 'a qualified index'; +SELECT * FROM new_comments(); + +-- check that deletes cascade +DROP INDEX idx; +SELECT * FROM new_comments(); + +-- full cascade +CREATE INDEX idx ON tab(i); +COMMENT ON INDEX idx IS 'an index'; +DROP TABLE tab; +SELECT * FROM new_comments(); diff --git a/sql/test/Tests/comment-on-index.stable.err b/sql/test/Tests/comment-on-index.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/Tests/comment-on-index.stable.err @@ -0,0 +1,35 @@ +stderr of test 'comment-on-index` in directory 'sql/test` itself: + + +# 13:19:30 > +# 13:19:30 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33602" "--set" "mapi_usock=/var/tmp/mtest-62171/.s.monetdb.33602" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/joeri/monets/default/var/MonetDB/mTests_sql_test" "--set" "embedded_r=yes" +# 13:19:30 > + +# builtin opt gdk_dbpath = /Users/joeri/monets/default/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 33602 +# cmdline opt mapi_usock = /var/tmp/mtest-62171/.s.monetdb.33602 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /Users/joeri/monets/default/var/MonetDB/mTests_sql_test +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 13:19:31 > +# 13:19:31 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-62171" "--port=33602" +# 13:19:31 > + + +# 13:19:32 > +# 13:19:32 > "Done." +# 13:19:32 > + diff --git a/sql/test/Tests/comment-on-index.stable.out b/sql/test/Tests/comment-on-index.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/Tests/comment-on-index.stable.out @@ -0,0 +1,122 @@ +stdout of test 'comment-on-index` in directory 'sql/test` itself: + + +# 13:19:30 > +# 13:19:30 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33602" "--set" "mapi_usock=/var/tmp/mtest-62171/.s.monetdb.33602" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/joeri/monets/default/var/MonetDB/mTests_sql_test" "--set" "embedded_r=yes" +# 13:19:30 > + +# MonetDB 5 server v11.28.0 +# This is an unreleased version +# Serving database 'mTests_sql_test', using 8 threads +# Compiled for x86_64-apple-darwin16.7.0/64bit with 128bit integers +# Found 16.000 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://dhcp-62.eduroam.cwi.nl:33602/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-62171/.s.monetdb.33602 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_temporal.sql +# loading sql script: 18_index.sql +# loading sql script: 20_vacuum.sql +# loading sql script: 21_dependency_functions.sql +# loading sql script: 22_clients.sql +# loading sql script: 23_skyserver.sql +# loading sql script: 25_debug.sql +# loading sql script: 26_sysmon.sql +# loading sql script: 27_rejects.sql +# loading sql script: 39_analytics.sql +# loading sql script: 39_analytics_hge.sql +# loading sql script: 40_geom.sql +# loading sql script: 40_json.sql +# loading sql script: 40_json_hge.sql +# loading sql script: 41_md5sum.sql +# loading sql script: 45_uuid.sql +# loading sql script: 46_profiler.sql +# loading sql script: 51_sys_schema_extension.sql +# loading sql script: 60_wlcr.sql +# loading sql script: 72_fits.sql +# loading sql script: 75_storagemodel.sql +# loading sql script: 80_statistics.sql +# loading sql script: 80_udf.sql +# loading sql script: 80_udf_hge.sql +# loading sql script: 90_generator.sql +# loading sql script: 90_generator_hge.sql +# loading sql script: 97_comments.sql +# loading sql script: 99_system.sql + +# 13:19:31 > +# 13:19:31 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-62171" "--port=33602" +# 13:19:31 > + +#DROP SCHEMA IF EXISTS sch; +#CREATE SCHEMA sch; +#SET SCHEMA sch; +#CREATE TABLE origs AS SELECT id FROM sys.comments; +#CREATE FUNCTION all_kinds_of_object() +#RETURNS TABLE (id INTEGER, name VARCHAR(80), type VARCHAR(20)) +#RETURN TABLE ( _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list