Changeset: 320e476e197b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=320e476e197b Added Files: clients/mapilib/ChangeLog common/stream/ChangeLog monetdb5/modules/mal/Tests/pqueue2.mal sql/backends/monet5/datacell/Tests/datacell99.sql sql/backends/monet5/datacell/Tests/datacell99.stable.err sql/backends/monet5/datacell/Tests/datacell99.stable.out sql/backends/monet5/datacell/Tests/emili.sql sql/backends/monet5/datacell/Tests/emili.txt sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.sql sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.stable.err sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.stable.out sql/test/BugTracker-2014/Tests/crash_on_or_with_in.Bug-3461.sql sql/test/BugTracker-2014/Tests/crash_on_or_with_in.Bug-3461.stable.err sql/test/BugTracker-2014/Tests/crash_on_or_with_in.Bug-3461.stable.out sql/test/BugTracker-2014/Tests/in_incorrect_multi.Bug-3462.sql sql/test/BugTracker-2014/Tests/in_incorrect_multi.Bug-3462.stable.err sql/test/BugTracker-2014/Tests/in_incorrect_multi.Bug-3462.stable.out sql/test/BugTracker-2014/Tests/select-having.Bug-3458.sql sql/test/BugTracker-2014/Tests/select-having.Bug-3458.stable.err sql/test/BugTracker-2014/Tests/select-having.Bug-3458.stable.out sql/test/BugTracker-2014/Tests/setreadonly_forgets_changes.Bug-3446.sql sql/test/BugTracker-2014/Tests/setreadonly_forgets_changes.Bug-3446.stable.err sql/test/BugTracker-2014/Tests/setreadonly_forgets_changes.Bug-3446.stable.out Removed Files: sql/backends/monet5/datacell/Tests/emili/README sql/backends/monet5/datacell/Tests/emili/emili.sql sql/backends/monet5/datacell/Tests/emili/sensor.log.gz sql/backends/monet5/datacell/Tests/pair00.mal sql/backends/monet5/datacell/Tests/pair00.stable.err sql/backends/monet5/datacell/Tests/pair00.stable.out sql/backends/monet5/datacell/Tests/petrinet00.mal sql/backends/monet5/datacell/Tests/petrinet00.stable.err sql/backends/monet5/datacell/Tests/petrinet00.stable.out Modified Files: clients/ChangeLog.Jan2014 clients/Tests/exports.stable.out clients/mapiclient/dump.c clients/mapilib/mapi.c clients/odbc/driver/ODBCUtil.c clients/odbc/driver/SQLColumnPrivileges.c clients/odbc/driver/SQLColumns.c clients/odbc/driver/SQLConnect.c clients/odbc/driver/SQLExecDirect.c clients/odbc/driver/SQLForeignKeys.c clients/odbc/driver/SQLPrimaryKeys.c clients/odbc/driver/SQLProcedures.c clients/odbc/driver/SQLSetConnectAttr.c clients/odbc/driver/SQLSpecialColumns.c clients/odbc/driver/SQLStatistics.c clients/odbc/driver/SQLTablePrivileges.c clients/odbc/driver/SQLTables.c common/stream/stream.c common/stream/stream.h gdk/gdk.h gdk/gdk_atoms.c gdk/gdk_imprints.c gdk/gdk_logger.c gdk/gdk_sample.c gdk/gdk_system.h gdk/gdk_system_private.h gdk/gdk_utils.c geom/monetdb5/geom.c monetdb5/mal/mal_client.c monetdb5/mal/mal_session.c monetdb5/modules/atoms/blob.c monetdb5/modules/atoms/streams.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/algebra.h monetdb5/modules/kernel/algebra.mal monetdb5/modules/mal/Tests/All monetdb5/modules/mal/Tests/pqueue.mal monetdb5/modules/mal/Tests/pqueue.stable.out monetdb5/modules/mal/Tests/remote12.mal monetdb5/modules/mal/groupby.c monetdb5/modules/mal/joinpath.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/mal_mapi.h monetdb5/modules/mal/pqueue.c monetdb5/modules/mal/pqueue.h monetdb5/modules/mal/pqueue.mal monetdb5/modules/mal/remote.c monetdb5/modules/mal/sample.c monetdb5/modules/mal/sample.h monetdb5/modules/mal/sample.mal monetdb5/optimizer/opt_support.c sql/backends/monet5/datacell/Tests/All sql/backends/monet5/datacell/Tests/basket00.stable.err sql/backends/monet5/datacell/Tests/basket00.stable.out sql/backends/monet5/datacell/Tests/datacell00.sql sql/backends/monet5/datacell/Tests/dcload.sql sql/backends/monet5/datacell/Tests/dcload.stable.err sql/backends/monet5/datacell/Tests/emitter00.stable.err sql/backends/monet5/datacell/Tests/emitter00.stable.out sql/backends/monet5/datacell/Tests/receptor00.stable.err sql/backends/monet5/datacell/Tests/receptor00.stable.out sql/backends/monet5/datacell/Tests/scenario04.stable.out sql/backends/monet5/datacell/basket.c sql/backends/monet5/datacell/datacell.c sql/backends/monet5/datacell/petrinet.c sql/backends/monet5/datacell/receptor.mal sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_gencode.h sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statistics.c sql/rel.txt sql/server/rel_optimizer.c sql/server/rel_select.c sql/test/BugTracker-2014/Tests/All testing/Mfilter.py.in Branch: newstorage Log Message:
merged with default diffs (truncated from 5926 to 300 lines): diff --git a/clients/ChangeLog.Jan2014 b/clients/ChangeLog.Jan2014 --- a/clients/ChangeLog.Jan2014 +++ b/clients/ChangeLog.Jan2014 @@ -1,3 +1,7 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Tue Apr 1 2014 Sjoerd Mullender <sjo...@acm.org> +- ODBC: Implemented {call procedure-name(...)} escape. The version + {?=call ...} is not implemented. + diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -177,7 +177,6 @@ BAT *BATreplace(BAT *b, BAT *n, bit forc BAT *BATrevert(BAT *b); BAT *BATroles(BAT *b, const char *hnme, const char *tnme); BAT *BATsample(BAT *b, BUN n); -BAT *BATsample_(BAT *b, BUN n); BAT *BATsave(BAT *b); BAT *BATselect(BAT *b, const void *tl, const void *th); BAT *BATselect_(BAT *b, const void *tl, const void *th, bit li, bit hi); @@ -310,7 +309,6 @@ size_t MT_getrss(void); void MT_global_exit(int status) __attribute__((__noreturn__)); void MT_init(void); int MT_join_thread(MT_Id t); -int MT_kill_thread(MT_Id t); int MT_lockf(char *filename, int mode, off_t off, off_t len); MT_Id MT_locktrace; unsigned long long MT_locktrace_cnt[65536]; @@ -800,7 +798,6 @@ str ALGstdevp(dbl *res, int *bid); str ALGsubjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, bit *nil_matches, lng *estimate); str ALGsubleftjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, bit *nil_matches, lng *estimate); str ALGsubouterjoin(bat *r1, bat *r2, bat *l, bat *r, bat *sl, bat *sr, bit *nil_matches, lng *estimate); -str ALGsubsample(int *result, int *bid, int *param); str ALGsubselect1(bat *result, bat *bid, const void *low, const void *high, const bit *li, const bit *hi, const bit *anti); str ALGsubselect2(bat *result, bat *bid, bat *sid, const void *low, const void *high, const bit *li, const bit *hi, const bit *anti); str ALGsubslice_wrd(int *ret, bat *bid, wrd *start, wrd *end); @@ -1995,7 +1992,6 @@ str SERVERdisconnectALL(int *ret); str SERVERdisconnectWithAlias(int *ret, str *db_alias); str SERVERerror(int *ret, int *idx); str SERVERexecute(int *ret, int *idx); -void SERVERexit(void); str SERVERexplain(str *ret, int *idx); str SERVERfetch_all_rows(lng *ret, int *idx); str SERVERfetch_field_bat(int *bid, int *idx); @@ -2986,7 +2982,7 @@ ssize_t mnstr_read_block(stream *s, void ssize_t mnstr_readline(stream *s, void *buf, size_t maxcnt); stream *mnstr_rstream(stream *s); void mnstr_set_byteorder(stream *s, char bigendian); -void mnstr_settimeout(stream *s, unsigned int secs); +void mnstr_settimeout(stream *s, unsigned int ms, int( *func)(void)); int mnstr_type(stream *s); ssize_t mnstr_write(stream *s, const void *buf, size_t elmsize, size_t cnt); int mnstr_writeBte(stream *s, signed char val); diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -1185,153 +1185,17 @@ 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) { const char functions[] = - "SELECT \"f\".\"func\", \"f\".\"name\", \"s\".\"name\" " + "SELECT \"f\".\"func\" " "FROM \"sys\".\"schemas\" \"s\"," "\"sys\".\"functions\" \"f\" " "WHERE \"f\".\"sql\" = TRUE AND " "\"s\".\"id\" = \"f\".\"schema_id\"" "%s %s " - "%s%s%s " + "%s%s%s%s%s%s " "ORDER BY \"f\".\"id\""; MapiHdl hdl; char *q; @@ -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, @@ -1369,20 +1228,16 @@ dump_functions(Mapi mid, stream *toConso dumpSystem ? "" : has_systemfunctions(mid) ? "NOT IN (SELECT \"function_id\" FROM \"sys\".\"systemfunctions\")" : "> 2000", sname ? " AND \"s\".\"name\" = '" : "", sname ? sname : "", - sname ? "'" : ""); + sname ? "'" : "", + fname ? " AND \"f\".\"name\" = '" : "", + fname ? fname : "", + fname ? "'" : ""); hdl = mapi_query(mid, q); free(q); if (hdl == NULL || mapi_error(mid)) goto bailout; while (!mnstr_errnr(toConsole) && mapi_fetch_row(hdl) != 0) { char *query = mapi_fetch_field(hdl, 0); - char *f_name = mapi_fetch_field(hdl, 1); - char *s_name = mapi_fetch_field(hdl, 2); - - if (sname != NULL && strcmp(sname, s_name) != 0) - continue; - if (fname != NULL && strcmp(fname, f_name) != 0) - continue; mnstr_printf(toConsole, "%s\n", query); } @@ -1733,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 || diff --git a/clients/mapilib/ChangeLog b/clients/mapilib/ChangeLog new file mode 100644 --- /dev/null +++ b/clients/mapilib/ChangeLog @@ -0,0 +1,6 @@ +# ChangeLog file for mapilib +# This file is updated with Maddlog + +* Fri Mar 28 2014 Sjoerd Mullender <sjo...@acm.org> +- Changed mapi_timeout argument from seconds to milliseconds. + diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c --- a/clients/mapilib/mapi.c +++ b/clients/mapilib/mapi.c @@ -2988,8 +2988,8 @@ mapi_timeout(Mapi mid, unsigned int time mapi_check(mid, "mapi_timeout"); if (mid->trace == MAPI_TRACE) printf("Set timeout to %u\n", timeout); - mnstr_settimeout(mid->to, timeout); - mnstr_settimeout(mid->from, timeout); + mnstr_settimeout(mid->to, timeout, NULL); + mnstr_settimeout(mid->from, timeout, NULL); return MOK; } diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c --- a/clients/odbc/driver/ODBCUtil.c +++ b/clients/odbc/driver/ODBCUtil.c @@ -539,6 +539,49 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL free(nquery); nquery = q; q += n; + } else if (strncasecmp(p, "call ", 5) == 0) { + const char *proc, *procend; + + p += 5; + while (*p == ' ') + p++; + proc = p; + while (*p && isascii(*p) && isalnum(*p)) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list