Changeset: ecbeb4a7285d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ecbeb4a7285d
Added Files:
sql/scripts/97_comments.sql
sql/test/Tests/comment-auth-a.sql
sql/test/Tests/comment-auth-superuser.sql
sql/test/Tests/comment-auth.SQL.py
sql/test/Tests/comment-auth.stable.err
sql/test/Tests/comment-auth.stable.out
sql/test/Tests/comment-dump.SQL.py
sql/test/Tests/comment-dump.sql
sql/test/Tests/comment-dump.stable.err
sql/test/Tests/comment-dump.stable.out
sql/test/Tests/comment-on.sql
sql/test/Tests/comment-on.stable.err
sql/test/Tests/comment-on.stable.out
Modified Files:
ChangeLog.Jul2017
buildtools/ChangeLog.Jul2017
clients/ChangeLog.Jul2017
clients/mapiclient/Makefile.ag
clients/mapiclient/dump.c
clients/mapiclient/mclient.c
clients/mapiclient/msqldump.c
clients/mapiclient/msqldump.h
clients/mapilib/ChangeLog.Jul2017
common/stream/ChangeLog.Jul2017
gdk/ChangeLog.Jul2017
geom/ChangeLog.Jul2017
monetdb5/ChangeLog.Jul2017
sql/ChangeLog.Jul2017
sql/backends/monet5/sql_upgrades.c
sql/scripts/99_system.sql
sql/scripts/Makefile.ag
sql/server/rel_schema.c
sql/server/rel_semantic.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.sql
sql/test/BugTracker-2016/Tests/dce.Bug-6114.sql
sql/test/BugTracker-2016/Tests/semijoin.Bug-6116.sql
sql/test/BugTracker-2016/Tests/semijoin.Bug-6116.stable.out
sql/test/BugTracker-2016/Tests/split_project.Bug-6117.sql
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out.int128
sql/test/Dependencies/Tests/dependency_loop.stable.out
sql/test/Dependencies/Tests/dependency_loop.stable.out.int128
sql/test/DropCascade/Tests/drop_columns_cascade.sql
sql/test/DropCascade/Tests/drop_pkey_cascade.sql
sql/test/Tests/All
sql/test/Tests/keys.stable.out
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
testing/ChangeLog.Jul2017
tools/merovingian/ChangeLog.Jul2017
Branch: default
Log Message:
Merge branch comment-on back into the default branch
diffs (truncated from 6696 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -48,6 +48,131 @@ quoted_print(stream *f, const char *s, c
mnstr_write(f, singleq ? "'" : "\"", 1, 1);
}
+/*Used to buffer comment values while we're in the process of
+ * dumping something else. For example, while we're dumping the
+ * columns of a table, we buffer any column comments we find so we
+ * can emit them after the closing ')' of the CREATE TABLE statement.
+ */
+typedef struct comment_buffer {
+ buffer *buf;
+ stream *append;
+} comment_buffer;
+static comment_buffer *comment_buffer_create(void);
+stream *comment_appender(comment_buffer *comments);
+static int append_comment(
+ comment_buffer *comments,
+ const char *obj_type,
+ const char *schema_name,
+ const char *outer_name,
+ const char *inner_name,
+ void *parameter_types,
+ const char *remark
+);
+static int write_comment_buffer(stream *out, comment_buffer *comments);
+static void comment_buffer_destroy(comment_buffer *comments);
+
+comment_buffer*
+comment_buffer_create(void)
+{
+ buffer *buf;
+ stream *s;
+ comment_buffer *comments;
+
+ buf = buffer_create(4000);
+ if (!buf)
+ return NULL;
+
+ s = buffer_wastream(buf, "comments_buffer");
+ if (s == NULL) {
+ buffer_destroy(buf);
+ return NULL;
+ }
+
+ comments = malloc(sizeof(*comments));
+ if (comments == NULL) {
+ mnstr_destroy(s);
+ buffer_destroy(buf);
+ return NULL;
+ }
+
+ comments->buf = buf;
+ comments->append = s;
+
+ return comments;
+}
+
+stream *
+comment_appender(comment_buffer *comments)
+{
+ return comments->append;
+}
+
+int
+append_comment(
+ comment_buffer *comments,
+ const char *obj_type,
+ const char *schema_name,
+ const char *outer_name,
+ const char *inner_name,
+ void *parameter_types,
+ const char *remark
+) {
+ char *sep = "";
+
+ if (!remark)
+ return 0;
+
+ mnstr_printf(comments->append, "COMMENT ON %s ", obj_type);
+ if (schema_name) {
+ mnstr_printf(comments->append, "%s", sep);
+ quoted_print(comments->append, schema_name, 0);
+ sep = ".";
+ }
+ if (outer_name) {
+ mnstr_printf(comments->append, "%s", sep);
+ quoted_print(comments->append, outer_name, 0);
+ sep = ".";
+ }
+ if (inner_name) {
+ mnstr_printf(comments->append, "%s", sep);
+ quoted_print(comments->append, inner_name, 0);
+ sep = ".";
+ }
+ (void) parameter_types;
+
+ mnstr_printf(comments->append, " IS ");
+ quoted_print(comments->append, remark, 1);
+ mnstr_printf(comments->append, ";\n");
+
+ return 0;
+}
+
+int
+write_comment_buffer(stream *out, comment_buffer *comments)
+{
+ assert((comments->buf == NULL) == (comments->append == NULL));
+ if (comments->buf == NULL)
+ return 0;
+
+ if (out) {
+ char *text = buffer_get_buf(comments->buf);
+ if (text) {
+ mnstr_printf(out, "%s", text);
+ free(text);
+ }
+ }
+
+ return 0;
+}
+
+void
+comment_buffer_destroy(comment_buffer *comments)
+{
+ mnstr_destroy(comments->append);
+ buffer_destroy(comments->buf);
+ free(comments);
+}
+
static char *actions[] = {
0,
"CASCADE",
@@ -346,6 +471,7 @@ toUpper(const char *s)
static int dump_column_definition(
Mapi mid,
stream *toConsole,
+ comment_buffer *comments,
const char *schema,
const char *tname,
const char *tid,
@@ -463,7 +589,7 @@ dump_type(Mapi mid, stream *toConsole, c
space = mnstr_printf(toConsole, "DECIMAL");
} else if (strcmp(c_type, "table") == 0) {
mnstr_printf(toConsole, "TABLE ");
- dump_column_definition(mid, toConsole, NULL, NULL,
c_type_digits, 1, hashge);
+ dump_column_definition(mid, toConsole, NULL, NULL, NULL,
c_type_digits, 1, hashge);
} else if (strcmp(c_type, "geometry") == 0 &&
strcmp(c_type_digits, "0") != 0) {
const char *geom = NULL;
@@ -499,7 +625,7 @@ dump_type(Mapi mid, stream *toConsole, c
}
static int
-dump_column_definition(Mapi mid, stream *toConsole, const char *schema, const
char *tname, const char *tid, int foreign, int hashge)
+dump_column_definition(Mapi mid, stream *toConsole, comment_buffer *comments,
const char *schema, const char *tname, const char *tid, int foreign, int hashge)
{
MapiHdl hdl = NULL;
char *query;
@@ -527,8 +653,9 @@ dump_column_definition(Mapi mid, stream
"c.type_scale, " /* 3 */
"c.\"null\", " /* 4 */
"c.\"default\", " /* 5 */
- "c.number " /* 6 */
- "FROM sys._columns c "
+ "c.number, " /* 6 */
+ "rem.remark " /* 7 */
+ "FROM sys._columns c LEFT OUTER JOIN sys.comments rem
ON c.id = rem.id "
"WHERE c.table_id = %s "
"ORDER BY number", tid);
else
@@ -539,8 +666,9 @@ dump_column_definition(Mapi mid, stream
"c.type_scale, " /* 3 */
"c.\"null\", " /* 4 */
"c.\"default\", " /* 5 */
- "c.number " /* 6 */
- "FROM sys._columns c, "
+ "c.number, " /* 6 */
+ "rem.remark " /* 7 */
+ "FROM sys._columns c LEFT OUTER JOIN sys.comments rem
ON c.id = rem.id, "
"sys._tables t, "
"sys.schemas s "
"WHERE c.table_id = t.id AND "
@@ -560,6 +688,7 @@ dump_column_definition(Mapi mid, stream
const char *c_type_scale = mapi_fetch_field(hdl, 3);
const char *c_null = mapi_fetch_field(hdl, 4);
const char *c_default = mapi_fetch_field(hdl, 5);
+ const char *c_remark = mapi_fetch_field(hdl, 7);
int space;
if (mapi_error(mid))
@@ -578,6 +707,9 @@ dump_column_definition(Mapi mid, stream
if (c_default != NULL)
mnstr_printf(toConsole, "%*s DEFAULT %s",
CAP(13 - space), "", c_default);
+
+ if (schema && tname)
+ append_comment(comments, "COLUMN", schema, tname,
c_name, NULL, c_remark);
cnt++;
if (mnstr_errnr(toConsole))
goto bailout;
@@ -743,10 +875,12 @@ describe_table(Mapi mid, const char *sch
MapiHdl hdl = NULL;
char *query;
char *view = NULL;
+ char *remark = NULL;
int type = 0;
size_t maxquerylen;
char *sname = NULL;
int hashge;
+ comment_buffer *comments = comment_buffer_create();
if (schema == NULL) {
if ((sname = strchr(tname, '.')) != NULL) {
@@ -768,8 +902,8 @@ describe_table(Mapi mid, const char *sch
query = malloc(maxquerylen);
snprintf(query, maxquerylen,
- "SELECT t.name, t.query, t.type "
- "FROM sys._tables t, sys.schemas s "
+ "SELECT t.name, t.query, t.type, c.remark "
+ "FROM sys.schemas s, sys._tables t LEFT OUTER JOIN
sys.comments c ON t.id = c.id "
"WHERE s.name = '%s' AND "
"t.schema_id = s.id AND "
"t.name = '%s'",
@@ -784,11 +918,13 @@ describe_table(Mapi mid, const char *sch
if (view)
type = atoi(view);
view = mapi_fetch_field(hdl, 1);
+ remark = mapi_fetch_field(hdl, 3);
}
if (mapi_error(mid)) {
view = NULL;
goto bailout;
}
+ append_comment(comments, type != 1 ? "TABLE" : "VIEW", sname, tname,
NULL, NULL, remark);
if (view)
view = strdup(view);
mapi_close_handle(hdl);
@@ -816,7 +952,7 @@ describe_table(Mapi mid, const char *sch
"",
schema, tname);
- if (dump_column_definition(mid, toConsole, schema, tname, NULL,
foreign, hashge))
+ if (dump_column_definition(mid, toConsole, comments, schema,
tname, NULL, foreign, hashge))
goto bailout;
if (type == 5)
mnstr_printf(toConsole, " ON '%s'", view);
@@ -826,9 +962,11 @@ describe_table(Mapi mid, const char *sch
"SELECT i.name, " /* 0 */
"k.name, " /* 1 */
"kc.nr, " /* 2 */
- "c.name " /* 3 */
- "FROM sys.idxs AS i LEFT JOIN sys.keys AS k "
- "ON i.name = k.name, "
+ "c.name, " /* 3 */
+ "rem.remark " /* 4 */
+ "FROM sys.idxs AS i "
+ "LEFT JOIN sys.keys AS k ON i.name = k.name "
+ "LEFT OUTER JOIN sys.comments rem ON i.id =
rem.id, "
"sys.objects AS kc, "
"sys._columns AS c, "
"sys.schemas s, "
@@ -850,6 +988,7 @@ describe_table(Mapi mid, const char *sch
const char *k_name = mapi_fetch_field(hdl, 1);
const char *kc_nr = mapi_fetch_field(hdl, 2);
const char *c_name = mapi_fetch_field(hdl, 3);
+ const char *remark = mapi_fetch_field(hdl, 4);
if (mapi_error(mid))
goto bailout;
@@ -864,6 +1003,7 @@ describe_table(Mapi mid, const char *sch
mnstr_printf(toConsole,
"CREATE INDEX \"%s\" ON
\"%s\".\"%s\" (",
i_name, schema, tname);
+ append_comment(comments, "INDEX", schema,
i_name, NULL, NULL, remark);
cnt = 1;
} else
mnstr_printf(toConsole, ", ");
@@ -877,6 +1017,9 @@ describe_table(Mapi mid, const char *sch
goto bailout;
}
+ write_comment_buffer(toConsole, comments);
+ comment_buffer_destroy(comments);
+
if (hdl)
mapi_close_handle(hdl);
if (view)
@@ -902,6 +1045,7 @@ describe_table(Mapi mid, const char *sch
free(sname);
if (query != NULL)
free(query);
+ comment_buffer_destroy(comments);
return 1;
}
@@ -912,6 +1056,7 @@ describe_sequence(Mapi mid, const char *
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list