Changeset: 59b752c4a0d0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=59b752c4a0d0
Modified Files:
clients/mapiclient/dump.c
clients/mapiclient/msqldump.c
Branch: default
Log Message:
Merge with Mar2018 branch.
diffs (truncated from 508 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
@@ -121,15 +121,15 @@ get_schema(Mapi mid)
}
/* return TRUE if the HUGEINT type exists */
-static int
+static bool
has_hugeint(Mapi mid)
{
MapiHdl hdl;
- int ret;
+ bool ret;
static int hashge = -1;
if (hashge >= 0)
- return hashge;
+ return (bool) hashge;
if ((hdl = mapi_query(mid,
"SELECT id "
@@ -145,7 +145,7 @@ has_hugeint(Mapi mid)
if (mapi_error(mid))
goto bailout;
mapi_close_handle(hdl);
- hashge = ret;
+ hashge = (int) ret;
return ret;
bailout:
@@ -383,8 +383,8 @@ static int dump_column_definition(
const char *schema,
const char *tname,
const char *tid,
- int foreign,
- int hashge);
+ bool foreign,
+ bool hashge);
static const char *geomsubtypes[] = {
NULL, /* 0 */
@@ -399,7 +399,7 @@ static const char *geomsubtypes[] = {
};
static int
-dump_type(Mapi mid, stream *toConsole, const char *c_type, const char
*c_type_digits, const char *c_type_scale, int hashge)
+dump_type(Mapi mid, stream *toConsole, const char *c_type, const char
*c_type_digits, const char *c_type_scale, bool hashge)
{
int space = 0;
@@ -533,7 +533,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, const char *schema, const
char *tname, const char *tid, bool foreign, bool hashge)
{
MapiHdl hdl = NULL;
char *query;
@@ -782,7 +782,7 @@ describe_table(Mapi mid, const char *sch
int type = 0;
size_t maxquerylen;
char *sname = NULL;
- int hashge;
+ bool hashge;
if (schema == NULL) {
if ((sname = strchr(tname, '.')) != NULL) {
@@ -1338,102 +1338,15 @@ dump_table(Mapi mid, const char *schema,
}
static int
-dump_function_comment(Mapi mid, stream *toConsole, const char *id)
-{
- int len = 5120;
- char *query = malloc(len);
- MapiHdl hdl = NULL;
- int hashge;
-
- if (!query)
- return 1;
-
- snprintf(query, len,
- "%s "
- "SELECT coalesce(function_type_keyword, '') AS category, "
- "s.name AS schema, "
- "CASE RANK() OVER (PARTITION BY f.id ORDER BY p.number
ASC) WHEN 1 THEN f.name ELSE NULL END AS name, "
- "p.type, "
- "p.type_digits, "
- "p.type_scale, "
- "CASE RANK() OVER (PARTITION BY f.id ORDER BY p.number
DESC) WHEN 1 THEN c.remark ELSE NULL END AS remark, "
- "ROW_NUMBER() OVER (ORDER BY f.id, p.number) AS line "
- "FROM sys.functions f "
- "JOIN comments c ON f.id = c.id "
- "JOIN sys.schemas s ON f.schema_id = s.id "
- "LEFT OUTER JOIN sys.function_types ft ON f.type =
ft.function_type_id "
- "LEFT OUTER JOIN sys.args p ON f.id = p.func_id AND
p.inout = 1 "
- "WHERE f.id = %s "
- "ORDER BY line",
- get_compat_clause(mid),
- id);
-
- hashge = has_hugeint(mid);
- hdl = mapi_query(mid, query);
- if (hdl == NULL || mapi_error(mid))
- goto bailout;
- while (!mnstr_errnr(toConsole) && mapi_fetch_row(hdl) != 0) {
- int i = 0;
- char *category = mapi_fetch_field(hdl, i++);
- char *sname = mapi_fetch_field(hdl, i++);
- char *name = mapi_fetch_field(hdl, i++);
- char *type = mapi_fetch_field(hdl, i++);
- char *type_digits = mapi_fetch_field(hdl, i++);
- char *type_scale = mapi_fetch_field(hdl, i++);
- char *remark = mapi_fetch_field(hdl, i++);
-
- if (name) {
- mnstr_printf(toConsole, "COMMENT ON %s ", category);
- quoted_print(toConsole, sname, false);
- mnstr_printf(toConsole, ".");
- quoted_print(toConsole, name, false);
- mnstr_printf(toConsole, "(");
- } else {
- mnstr_printf(toConsole, ", ");
- }
-
- if (type) {
- dump_type(NULL, toConsole, type, type_digits,
type_scale, hashge);
- }
-
- if (remark) {
- mnstr_printf(toConsole, ") IS ");
- quoted_print(toConsole, remark, true);
- mnstr_printf(toConsole, ";\n");
- }
- }
- if (mapi_error(mid))
- goto bailout;
-
- free(query);
- mapi_close_handle(hdl);
- return 0;
-
- bailout:
- if (query)
- free(query);
- if (hdl) {
- if (mapi_result_error(hdl))
- mapi_explain_result(hdl, stderr);
- else
- mapi_explain_query(hdl, stderr);
- mapi_close_handle(hdl);
- } else
- mapi_explain(mid, stderr);
-
- return 1;
-}
-
-static int
-dump_function(Mapi mid, stream *toConsole, const char *fid, int hashge)
+dump_function(Mapi mid, stream *toConsole, const char *fid, bool hashge)
{
MapiHdl hdl;
size_t qlen = 5120 + strlen(fid);
char *query = malloc(qlen);
char *q, *end_q;
const char *sep;
- char *ffunc = NULL, *flkey = NULL;
- const char *sname, *fname, *ftkey;
+ char *ffunc = NULL, *flkey = NULL, *remark = NULL;
+ char *sname, *fname, *ftkey;
int flang, ftype;
if (!query)
@@ -1449,12 +1362,14 @@ dump_function(Mapi mid, stream *toConsol
"f.type, "
"s.name, "
"f.name, "
- "function_type_keyword, "
- "language_keyword "
+ "ft.function_type_keyword, "
+ "fl.language_keyword, "
+ "c.remark "
"FROM sys.functions f "
"JOIN sys.schemas s ON f.schema_id = s.id "
"JOIN function_types ft ON f.type =
ft.function_type_id "
"LEFT OUTER JOIN function_languages fl ON f.language
= fl.language_id "
+ "LEFT OUTER JOIN comments c ON f.id = c.id "
"WHERE f.id = %s",
get_compat_clause(mid), fid);
if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) {
@@ -1474,6 +1389,13 @@ dump_function(Mapi mid, stream *toConsol
fname = mapi_fetch_field(hdl, 5);
ftkey = mapi_fetch_field(hdl, 6);
flkey = mapi_fetch_field(hdl, 7);
+ remark = mapi_fetch_field(hdl, 8);
+ if (remark) {
+ remark = strdup(remark);
+ sname = strdup(sname);
+ fname = strdup(fname);
+ ftkey = strdup(ftkey);
+ }
if (flang == 1 || flang == 2) {
/* all information is stored in the func column
* first skip initial comments and empty lines */
@@ -1485,74 +1407,111 @@ dump_function(Mapi mid, stream *toConsol
ffunc++;
}
mnstr_printf(toConsole, "%s\n", ffunc);
- mapi_close_handle(hdl);
- free(query);
- return 0;
+ if (remark == NULL) {
+ mapi_close_handle(hdl);
+ free(query);
+ return 0;
+ }
+ } else {
+ mnstr_printf(toConsole, "CREATE %s ", ftkey);
+ quoted_print(toConsole, sname, false);
+ mnstr_printf(toConsole, ".");
+ quoted_print(toConsole, fname, false);
+ mnstr_printf(toConsole, "(");
}
/* strdup these two because they are needed after another query */
ffunc = strdup(ffunc);
if (flkey)
flkey = strdup(flkey);
- mnstr_printf(toConsole, "CREATE %s ", ftkey);
- quoted_print(toConsole, sname, false);
- mnstr_printf(toConsole, ".");
- quoted_print(toConsole, fname, false);
- mnstr_printf(toConsole, "(");
snprintf(query, qlen, "SELECT a.name, a.type, a.type_digits,
a.type_scale, a.inout FROM sys.args a, sys.functions f WHERE a.func_id = f.id
AND f.id = %s ORDER BY a.inout DESC, a.number", fid);
mapi_close_handle(hdl);
- if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) {
- free(query);
+ hdl = mapi_query(mid, query);
+ free(query);
+ if (hdl == NULL || mapi_error(mid)) {
free(ffunc);
free(flkey);
+ if (remark)
+ free(remark);
return 1;
}
- sep = "";
- while (mapi_fetch_row(hdl) != 0) {
- const char *aname = mapi_fetch_field(hdl, 0);
- const char *atype = mapi_fetch_field(hdl, 1);
- const char *adigs = mapi_fetch_field(hdl, 2);
- const char *ascal = mapi_fetch_field(hdl, 3);
- const char *ainou = mapi_fetch_field(hdl, 4);
-
- if (strcmp(ainou, "0") == 0) {
- /* end of arguments */
- break;
- }
-
- mnstr_printf(toConsole, "%s", sep);
- quoted_print(toConsole, aname, false);
- mnstr_printf(toConsole, " ");
- dump_type(mid, toConsole, atype, adigs, ascal, hashge);
- sep = ", ";
- }
- mnstr_printf(toConsole, ")");
- if (ftype == 1 || ftype == 3 || ftype == 5) {
- sep = "TABLE (";
- mnstr_printf(toConsole, " RETURNS ");
- do {
+ if (flang != 1 && flang != 2) {
+ sep = "";
+ while (mapi_fetch_row(hdl) != 0) {
const char *aname = mapi_fetch_field(hdl, 0);
const char *atype = mapi_fetch_field(hdl, 1);
const char *adigs = mapi_fetch_field(hdl, 2);
const char *ascal = mapi_fetch_field(hdl, 3);
+ const char *ainou = mapi_fetch_field(hdl, 4);
- assert(strcmp(mapi_fetch_field(hdl, 4), "0") == 0);
- if (ftype == 5) {
- mnstr_printf(toConsole, "%s", sep);
- quoted_print(toConsole, aname, false);
- mnstr_printf(toConsole, " ");
- sep = ", ";
+ if (strcmp(ainou, "0") == 0) {
+ /* end of arguments */
+ break;
}
+
+ mnstr_printf(toConsole, "%s", sep);
+ quoted_print(toConsole, aname, false);
+ mnstr_printf(toConsole, " ");
dump_type(mid, toConsole, atype, adigs, ascal, hashge);
- } while (mapi_fetch_row(hdl) != 0);
+ sep = ", ";
+ }
+ mnstr_printf(toConsole, ")");
+ if (ftype == 1 || ftype == 3 || ftype == 5) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list