Changeset: 0b749d93cd1c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0b749d93cd1c
Modified Files:
clients/mapiclient/dump.c
sql/test/Tests/All
sql/test/Tests/comment-on.sql
Branch: comment-on
Log Message:
Dump comments on views, sequences and schemas
diffs (197 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1417,8 +1417,8 @@ dump_database(Mapi mid, stream *toConsol
"AND f.id NOT IN (SELECT function_id FROM
sys.systemfunctions) "
"ORDER BY s.name, f.name, a.name, g.name, p.grantable";
const char *schemas =
- "SELECT s.name, a.name "
- "FROM sys.schemas s, "
+ "SELECT s.name, a.name, rem.remark "
+ "FROM sys.schemas s LEFT OUTER JOIN sys.comments rem ON s.id =
rem.id, "
"sys.auths a "
"WHERE s.\"authorization\" = a.id AND "
"s.system = FALSE "
@@ -1443,9 +1443,9 @@ dump_database(Mapi mid, stream *toConsol
anymore.
*/
const char *sequences1 =
- "SELECT sch.name,seq.name "
+ "SELECT sch.name,seq.name, rem.remark "
"FROM sys.schemas sch, "
- "sys.sequences seq "
+ "sys.sequences seq LEFT OUTER JOIN sys.comments rem ON
seq.id = rem.id "
"WHERE sch.id = seq.schema_id "
"ORDER BY sch.name,seq.name";
const char *sequences2 =
@@ -1476,40 +1476,50 @@ dump_database(Mapi mid, stream *toConsol
* creation since they can refer to each other */
const char *views_functions_triggers =
"WITH vft AS ("
- "SELECT s.name AS sname, "
- "t.id AS id, "
- "t.query AS query "
- "FROM sys.schemas s, "
+ "SELECT t.id AS id, "
+ "s.name AS sname, "
+ "t.name AS name, "
+ "'VIEW' AS objtype, "
+ "t.query AS query, "
+ "rem.remark AS remark "
+ "FROM sys.schemas s LEFT OUTER JOIN sys.comments rem ON
s.id = rem.id, "
"sys._tables t "
"WHERE t.type = 1 AND "
"t.system = FALSE AND "
"s.id = t.schema_id AND "
"s.name <> 'tmp' "
"UNION "
- "SELECT s.name AS sname, "
- "f.id AS id, "
- "f.func AS query "
+ "SELECT f.id AS id, "
+ "s.name AS sname, "
+ "f.name AS name, "
+ "NULL AS objtype, "
+ "f.func AS query, "
+ "NULL AS remark "
"FROM sys.schemas s, "
"sys.functions f "
"WHERE f.language < 3 AND "
"s.id = f.schema_id "
"AND f.id NOT IN (SELECT function_id FROM
sys.systemfunctions) "
"UNION "
- "SELECT s.name AS sname, "
- "tr.id AS id, "
- "tr.\"statement\" AS query "
+ "SELECT tr.id AS id, "
+ "s.name AS sname, "
+ "tr.name AS name, "
+ "NULL AS objtype, "
+ "tr.\"statement\" AS query, "
+ "NULL AS remark "
"FROM sys.triggers tr, "
"sys.schemas s, "
"sys._tables t "
"WHERE s.id = t.schema_id AND "
"t.id = tr.table_id"
") "
- "SELECT sname, query FROM vft ORDER BY id";
+ "SELECT sname, name, objtype, query, remark FROM vft ORDER BY
id";
char *sname = NULL;
char *curschema = NULL;
MapiHdl hdl;
int create_hash_func = 0;
int rc = 0;
+ comment_buffer *comments = comment_buffer_create();
/* start a transaction for the dump */
if (!describe)
@@ -1587,17 +1597,20 @@ dump_database(Mapi mid, stream *toConsol
while (mapi_fetch_row(hdl) != 0) {
char *sname = mapi_fetch_field(hdl, 0);
char *aname = mapi_fetch_field(hdl, 1);
+ char *remark = mapi_fetch_field(hdl, 2);
mnstr_printf(toConsole, "CREATE SCHEMA \"%s\"", sname);
if (strcmp(aname, "sysadmin") != 0) {
mnstr_printf(toConsole,
" AUTHORIZATION \"%s\"", aname);
}
+ append_comment(comments, "SCHEMA", NULL, sname, NULL,
NULL, remark);
mnstr_printf(toConsole, ";\n");
}
if (mapi_error(mid))
goto bailout;
mapi_close_handle(hdl);
+ write_comment_buffer(toConsole, comments);
if (!describe) {
/* dump users, part 2 */
@@ -1662,13 +1675,16 @@ dump_database(Mapi mid, stream *toConsol
while (mapi_fetch_row(hdl) != 0) {
char *schema = mapi_fetch_field(hdl, 0);
char *name = mapi_fetch_field(hdl, 1);
+ char *remark = mapi_fetch_field(hdl, 2);
if (sname != NULL && strcmp(schema, sname) != 0)
continue;
mnstr_printf(toConsole,
"CREATE SEQUENCE \"%s\".\"%s\" AS INTEGER;\n",
schema, name);
+ append_comment(comments, "SEQUENCE", schema, name, NULL, NULL,
remark);
}
+ write_comment_buffer(toConsole, comments);
if (mapi_error(mid))
goto bailout;
mapi_close_handle(hdl);
@@ -1754,7 +1770,10 @@ dump_database(Mapi mid, stream *toConsol
!mnstr_errnr(toConsole) &&
mapi_fetch_row(hdl) != 0) {
char *schema = mapi_fetch_field(hdl, 0);
- char *func = mapi_fetch_field(hdl, 1);
+ char *name = mapi_fetch_field(hdl, 1);
+ char *objtype = mapi_fetch_field(hdl, 2);
+ char *query = mapi_fetch_field(hdl, 3);
+ char *remark = mapi_fetch_field(hdl, 4);
if (mapi_error(mid))
goto bailout;
@@ -1771,8 +1790,11 @@ dump_database(Mapi mid, stream *toConsol
mnstr_printf(toConsole, "SET SCHEMA \"%s\";\n",
curschema);
}
- mnstr_printf(toConsole, "%s\n", func);
+ mnstr_printf(toConsole, "%s\n", query);
+ assert(/* no remark without objtype */ !remark || objtype);
+ append_comment(comments, objtype, sname, name, NULL, NULL,
remark);
}
+ write_comment_buffer(toConsole, comments);
mapi_close_handle(hdl);
hdl = NULL;
@@ -1969,9 +1991,11 @@ dump_database(Mapi mid, stream *toConsol
mnstr_printf(toConsole, "COMMIT;\n");
if (sname)
free(sname);
+ comment_buffer_destroy(comments);
return rc;
bailout:
+ comment_buffer_destroy(comments);
if (hdl) {
if (mapi_result_error(hdl))
mapi_explain_result(hdl, stderr);
diff --git a/sql/test/Tests/All b/sql/test/Tests/All
--- a/sql/test/Tests/All
+++ b/sql/test/Tests/All
@@ -102,8 +102,6 @@ ifexists
ifexists-views
subqueries
comment-on
-comment-on-index
-comment-on-sequence
comment-on-routine
#HAVE_GEOM?trace
diff --git a/sql/test/Tests/comment-on.sql b/sql/test/Tests/comment-on.sql
--- a/sql/test/Tests/comment-on.sql
+++ b/sql/test/Tests/comment-on.sql
@@ -31,6 +31,9 @@ COMMENT ON SCHEMA foo IS '';
\dn
\dn foo
+/* leave the comment set so we can test msqldump */
+COMMENT ON SCHEMA foo IS 'one final comment';
+
/* finally, awkward names work as well */
CREATE SCHEMA "space separated";
COMMENT ON SCHEMA "space separated" IS 'space separated';
@@ -99,7 +102,7 @@ COMMENT ON SEQUENCE counter IS 'counting
/* comment on schema.sequence also works */
SET SCHEMA sys;
-COMMENT ON SEQUENCE foo.counter IS NULL;
+COMMENT ON SEQUENCE foo.counter IS 'still counting';
SET SCHEMA foo;
\ds
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list