Changeset: 06ed99ce7981 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=06ed99ce7981 Modified Files: clients/mapiclient/dump.c Branch: default Log Message:
External functions are not treated differently from other UDFs. diffs (167 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -1185,142 +1185,6 @@ dump_table(Mapi mid, char *schema, char return rc; } -static int -dump_external_functions(Mapi mid, const char *schema, const char *fname, stream *toConsole, const char dumpSystem) -{ - const char functions[] = - "SELECT \"f\".\"id\"," - "\"f\".\"name\"," - "\"f\".\"mod\"," - "\"f\".\"func\"," - "\"a\".\"name\"," - "\"a\".\"type\"," - "\"a\".\"type_digits\"," - "\"a\".\"type_scale\"," - "\"a\".\"number\", " - "\"s\".\"name\" " - "FROM \"sys\".\"args\" \"a\"," - "\"sys\".\"functions\" \"f\", " - "\"sys\".\"schemas\" \"s\" " - "WHERE \"f\".\"sql\" = FALSE AND " - "\"a\".\"func_id\" = \"f\".\"id\" AND " - "\"f\".\"schema_id\" = \"s\".\"id\" " - "%s %s " - "ORDER BY \"f\".\"id\", \"a\".\"number\""; - char query[512]; - MapiHdl hdl; - char *prev_f_id = NULL; - char *prev_f_mod = NULL; - char *prev_f_func = NULL; - char *prev_a_name = NULL; - char *prev_a_type = NULL; - char *prev_a_type_digits = NULL; - char *prev_a_type_scale = NULL; - char *sep = NULL; - - snprintf(query, sizeof(query), functions, - dumpSystem ? "" : "AND \"f\".\"id\"", - dumpSystem ? "" : has_systemfunctions(mid) ? "NOT IN (SELECT \"function_id\" FROM \"sys\".\"systemfunctions\")" : "> 2000"); - if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) - goto bailout; - while (!mnstr_errnr(toConsole) && mapi_fetch_row(hdl) != 0) { - char *f_id = mapi_fetch_field(hdl, 0); - char *f_name = mapi_fetch_field(hdl, 1); - char *f_mod = mapi_fetch_field(hdl, 2); - char *f_func = mapi_fetch_field(hdl, 3); - char *a_name = mapi_fetch_field(hdl, 4); - char *a_type = mapi_fetch_field(hdl, 5); - char *a_type_digits = mapi_fetch_field(hdl, 6); - char *a_type_scale = mapi_fetch_field(hdl, 7); - char *a_number = mapi_fetch_field(hdl, 8); - char *s_name = mapi_fetch_field(hdl, 9); - - if (schema != NULL && strcmp(s_name, schema) != 0) - continue; - if (fname != NULL && strcmp(f_name, fname) != 0) - continue; - - if (prev_f_id == NULL || strcmp(prev_f_id, f_id) != 0) { - if (prev_f_id) { - mnstr_printf(toConsole, ")"); - if (strcmp(prev_a_name, "result") == 0) { - mnstr_printf(toConsole, " RETURNS "); - dump_type(mid, toConsole, prev_a_type, prev_a_type_digits, prev_a_type_scale); - } - mnstr_printf(toConsole, - " EXTERNAL NAME \"%s\".\"%s\";\n", - prev_f_mod, prev_f_func); - free(prev_f_id); - free(prev_f_mod); - free(prev_f_func); - free(prev_a_name); - free(prev_a_type); - free(prev_a_type_digits); - free(prev_a_type_scale); - } - if (strcmp(a_name, "result") == 0) { - mnstr_printf(toConsole, - "CREATE FUNCTION \"%s\"(", - f_name); - } else - mnstr_printf(toConsole, - "CREATE PROCEDURE \"%s\"(", - f_name); - prev_f_id = strdup(f_id); - prev_f_mod = strdup(f_mod); - prev_f_func = strdup(f_func); - prev_a_name = strdup(a_name); - prev_a_type = strdup(a_type); - prev_a_type_digits = strdup(a_type_digits); - prev_a_type_scale = strdup(a_type_scale); - sep = ""; - } - if (strcmp(a_name, "result") != 0 || - strcmp(a_number, "0") != 0) { - mnstr_printf(toConsole, "%s\"%s\" ", sep, a_name); - dump_type(mid, toConsole, a_type, a_type_digits, a_type_scale); - sep = ", "; - } - } - if (prev_f_id) { - mnstr_printf(toConsole, ")"); - if (strcmp(prev_a_name, "result") == 0) { - mnstr_printf(toConsole, " RETURNS "); - dump_type(mid, toConsole, prev_a_type, prev_a_type_digits, prev_a_type_scale); - } - mnstr_printf(toConsole, - " EXTERNAL NAME \"%s\".\"%s\";\n", - prev_f_mod, prev_f_func); - free(prev_f_id); - } - if (prev_f_mod) - free(prev_f_mod); - if (prev_f_func) - free(prev_f_func); - if (prev_a_name) - free(prev_a_name); - if (prev_a_type) - free(prev_a_type); - if (prev_a_type_digits) - free(prev_a_type_digits); - if (prev_a_type_scale) - free(prev_a_type_scale); - - mapi_close_handle(hdl); - return mnstr_errnr(toConsole) ? 1 : 0; - - bailout: - 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; -} - int dump_functions(Mapi mid, stream *toConsole, const char *sname, const char *fname) { @@ -1357,11 +1221,6 @@ dump_functions(Mapi mid, stream *toConso dumpSystem = sname && fname; - if (dump_external_functions(mid, sname, fname, toConsole, dumpSystem)) { - if (schema) - free(schema); - return 1; - } l = sizeof(functions) + (sname ? strlen(sname) : 0) + 100; q = malloc(l); snprintf(q, l, functions, @@ -1729,8 +1588,6 @@ dump_database(Mapi mid, stream *toConsol hdl = NULL; /* dump tables and functions */ - if (dump_external_functions(mid, NULL, NULL, toConsole, 0)) - goto bailout; snprintf(query, sizeof(query), tables_and_functions, has_systemfunctions(mid) ? "AND \"f\".\"id\" NOT IN (SELECT \"function_id\" FROM \"sys\".\"systemfunctions\") " : ""); if ((hdl = mapi_query(mid, query)) == NULL || _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list