Changeset: 720c0bbce165 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=720c0bbce165 Added Files: gdk/gdk_aggr.c gdk/gdk_calc_private.h monetdb5/modules/kernel/aggr.c monetdb5/modules/kernel/aggr.mal Removed Files: monetdb5/modules/kernel/aggr.mx monetdb5/modules/kernel/aggr_be_minmax.mx monetdb5/modules/kernel/aggr_bge_minmax.mx monetdb5/modules/kernel/aggr_ri.mx Modified Files: clients/ChangeLog.Oct2012 clients/Tests/exports.stable.out clients/mapiclient/Tests/mclient--help.stable.err clients/mapiclient/Tests/mclient--help.stable.err.Windows clients/mapiclient/dump.c clients/mapiclient/mclient.1 clients/mapiclient/mclient.c clients/mapiclient/tomograph.c clients/mapilib/mapi.c clients/odbc/driver/ODBCConvert.c clients/odbc/driver/SQLExecute.c clients/python/test/control.py common/utils/msabaoth.c gdk/Makefile.ag gdk/gdk_atoms.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_calc.c gdk/gdk_calc.h gdk/gdk_heap.c gdk/gdk_logger.c gdk/gdk_relop.mx gdk/gdk_storage.c gdk/gdk_utils.c java/src/nl/cwi/monetdb/merovingian/SabaothDB.java monetdb5/ChangeLog.Jul2012 monetdb5/extras/jaql/jaql.mal monetdb5/extras/jaql/jaqlgencode.c monetdb5/extras/jaql/jaqltree.h monetdb5/extras/jaql/json.c monetdb5/mal/Tests/tst034.stable.out monetdb5/mal/Tests/tst274.stable.out.oid64 monetdb5/mal/mal_atom.c monetdb5/mal/mal_client.c monetdb5/mal/mal_function.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_parser.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_readline.c monetdb5/modules/kernel/Makefile.ag monetdb5/modules/kernel/status.c monetdb5/modules/mal/bbp.c monetdb5/modules/mal/clients.c monetdb5/modules/mal/cluster.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/tablet.c monetdb5/optimizer/opt_macro.c monetdb5/optimizer/opt_origin.c monetdb5/optimizer/opt_pipes.c monetdb5/optimizer/opt_wrapper.c sql/backends/monet5/sql.mx sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_user.c sql/backends/monet5/vaults/fits.c sql/server/rel_bin.c sql/server/rel_optimizer.c sql/server/rel_select.c sql/server/sql_atom.c sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out tools/merovingian/utils/control.c tools/merovingian/utils/database.c tools/merovingian/utils/utils.c Branch: DVframework Log Message:
merge with default. diffs (truncated from 9199 to 300 lines): diff --git a/clients/ChangeLog.Oct2012 b/clients/ChangeLog.Oct2012 --- a/clients/ChangeLog.Oct2012 +++ b/clients/ChangeLog.Oct2012 @@ -1,6 +1,9 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Tue Sep 4 2012 Fabian Groffen <fab...@cwi.nl> +- mclient now accepts URIs as database to connect to. + * Thu Jul 19 2012 Gijs Molenaar <g.j.molen...@uva.nl> - all strings returned by python2 are unicode, removed use_unicode option - python2 and 3 type convertion speed improvements 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 @@ -118,6 +118,9 @@ PROPrec *BATgetprop(BAT *b, int idx); gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *g, BAT *e, BAT *h); BAT *BATgroupavg(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); BAT *BATgroupcount(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); +BAT *BATgroupmax(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); +BAT *BATgroupmedian(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); +BAT *BATgroupmin(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); BAT *BATgroupprod(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); BAT *BATgroupsize(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); BAT *BATgroupsum(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); @@ -591,6 +594,11 @@ str AGGRcount2nonils(bat *retval, bat *b str AGGRcount3(bat *retval, bat *bid, bat *gid, bat *eid, bit *ignorenils); str AGGRcount3nils(bat *retval, bat *bid, bat *gid, bat *eid); str AGGRcount3nonils(bat *retval, bat *bid, bat *gid, bat *eid); +str AGGRmax2(bat *retval, bat *bid, bat *eid); +str AGGRmax3(bat *retval, bat *bid, bat *gid, bat *eid); +str AGGRmedian(bat *retval, bat *bid, int *skip_nils); +str AGGRmin2(bat *retval, bat *bid, bat *eid); +str AGGRmin3(bat *retval, bat *bid, bat *gid, bat *eid); str AGGRprod2_bte(bat *retval, bat *bid, bat *eid); str AGGRprod2_dbl(bat *retval, bat *bid, bat *eid); str AGGRprod2_flt(bat *retval, bat *bid, bat *eid); @@ -608,8 +616,14 @@ str AGGRprod3_wrd(bat *retval, bat *bid, str AGGRsize2(bat *retval, bat *bid, bat *eid); str AGGRsubavg_dbl(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils, int *abort_on_error); str AGGRsubavgcand_dbl(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils, int *abort_on_error); -str AGGRsubcount(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils, int *abort_on_error); -str AGGRsubcountcand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils, int *abort_on_error); +str AGGRsubcount(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils); +str AGGRsubcountcand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils); +str AGGRsubmax(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils); +str AGGRsubmaxcand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils); +str AGGRsubmedian(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils); +str AGGRsubmediancand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils); +str AGGRsubmin(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils); +str AGGRsubmincand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, int *skip_nils); str AGGRsubprod_bte(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils, int *abort_on_error); str AGGRsubprod_dbl(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils, int *abort_on_error); str AGGRsubprod_flt(bat *retval, bat *bid, bat *gid, bat *eid, int *skip_nils, int *abort_on_error); @@ -878,10 +892,6 @@ str AUTHrequireAdminOrUser(Client *c, st str AUTHresolveUser(str *ret, oid *uid); str AUTHsetPassword(Client *c, str *username, str *passwd); str AUTHunlockVault(str *password); -str AX3aggrX3_max(int *ret, int *bid, int *eid); -str AX3aggrX3_max3(int *ret, int *bid, int *gid, int *eid); -str AX3aggrX3_min(int *ret, int *bid, int *eid); -str AX3aggrX3_min3(int *ret, int *bid, int *gid, int *eid); str BATPCREilike(int *ret, int *b, str *pat, str *esc); str BATPCREilike2(int *ret, int *b, str *pat); str BATPCRElike(int *ret, int *b, str *pat, str *esc); diff --git a/clients/mapiclient/Tests/mclient--help.stable.err b/clients/mapiclient/Tests/mclient--help.stable.err --- a/clients/mapiclient/Tests/mclient--help.stable.err +++ b/clients/mapiclient/Tests/mclient--help.stable.err @@ -16,7 +16,7 @@ Options are: -h hostname | --host=hostname host or UNIX domain socket to connect to -p portnr | --port=portnr port to connect to -u user | --user=user user id - -d database | --database=database database to connect to + -d database | --database=database database to connect to (may be URI) -e | --echo echo the query -E charset | --encoding=charset specify encoding (character set) of the terminal -f kind | --format=kind specify output format {csv,tab,raw,sql,xml} diff --git a/clients/mapiclient/Tests/mclient--help.stable.err.Windows b/clients/mapiclient/Tests/mclient--help.stable.err.Windows --- a/clients/mapiclient/Tests/mclient--help.stable.err.Windows +++ b/clients/mapiclient/Tests/mclient--help.stable.err.Windows @@ -16,7 +16,7 @@ Options are: -h hostname | --host=hostname host to connect to -p portnr | --port=portnr port to connect to -u user | --user=user user id - -d database | --database=database database to connect to + -d database | --database=database database to connect to (may be URI) -e | --echo echo the query -E charset | --encoding=charset specify encoding (character set) of the terminal -f kind | --format=kind specify output format {csv,tab,raw,sql,xml} diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -244,8 +244,13 @@ dump_foreign_keys(Mapi mid, const char * "ORDER BY \"fs\".\"name\",\"fkt\".\"name\"," "\"fkk\".\"name\", \"nr\""; } - if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) + hdl = mapi_query(mid, query); + if (query != NULL && maxquerylen != 0) + free(query); + maxquerylen = 0; + if (hdl == NULL || mapi_error(mid)) goto bailout; + cnt = mapi_fetch_row(hdl); while (cnt != 0) { char *c_psname = mapi_fetch_field(hdl, 0); @@ -313,7 +318,7 @@ dump_foreign_keys(Mapi mid, const char * actions[on_delete]); if (0 < on_update && on_update < NR_ACTIONS && - on_delete != 2 /* RESTRICT -- default */) + on_update != 2 /* RESTRICT -- default */) mnstr_printf(toConsole, " ON UPDATE %s", actions[on_update]); } @@ -947,6 +952,10 @@ describe_sequence(Mapi mid, char *schema } if (mapi_error(mid)) goto bailout; + if (sname != NULL) + free(sname); + if (query != NULL) + free(query); mapi_close_handle(hdl); hdl = NULL; return 0; @@ -1018,7 +1027,7 @@ dump_table_data(Mapi mid, char *schema, MapiHdl hdl = NULL; char *query; size_t maxquerylen; - int *string; + int *string = NULL; char *sname = NULL; if (schema == NULL) { @@ -1136,9 +1145,9 @@ dump_table_data(Mapi mid, char *schema, if (mnstr_errnr(toConsole)) goto bailout; } - free(string); if (mapi_error(mid)) goto bailout; + free(string); doreturn: if (hdl) @@ -1162,6 +1171,8 @@ dump_table_data(Mapi mid, char *schema, free(sname); if (query != NULL) free(query); + if (string != NULL) + free(string); return 1; } @@ -1283,13 +1294,19 @@ dump_external_functions(Mapi mid, const " 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; @@ -1322,9 +1339,9 @@ dump_functions(Mapi mid, stream *toConso char *q; size_t l; char dumpSystem; + char *schema = NULL; if (sname == NULL) { - char *schema; if (fname == NULL) { schema = NULL; } else if ((schema = strchr(fname, '.')) != NULL) { @@ -1342,8 +1359,11 @@ dump_functions(Mapi mid, stream *toConso dumpSystem = sname && fname; - if (dump_external_functions(mid, sname, fname, toConsole, dumpSystem)) + 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, @@ -1370,10 +1390,14 @@ dump_functions(Mapi mid, stream *toConso } if (mapi_error(mid)) goto bailout; + if (schema) + free(schema); mapi_close_handle(hdl); return mnstr_errnr(toConsole) ? 1 : 0; bailout: + if (schema) + free(schema); if (hdl) { if (mapi_result_error(hdl)) mapi_explain_result(hdl, stderr); @@ -1728,6 +1752,10 @@ dump_database(Mapi mid, stream *toConsol if (mapi_error(mid)) goto bailout; + if (schema == NULL) { + /* cannot happen, but make analysis tools happy */ + continue; + } if (sname != NULL && strcmp(schema, sname) != 0) continue; if (curschema == NULL || strcmp(schema, curschema) != 0) { @@ -1738,12 +1766,10 @@ dump_database(Mapi mid, stream *toConsol curschema); } if (func == NULL) { - if (schema) - schema = strdup(schema); + schema = strdup(schema); tname = strdup(tname); rc = dump_table(mid, schema, tname, toConsole, describe, describe, useInserts); - if (schema) - free(schema); + free(schema); free(tname); } else mnstr_printf(toConsole, "%s\n", func); @@ -1925,14 +1951,19 @@ dump_version(Mapi mid, stream *toConsole goto cleanup; if (name != NULL && val != NULL) { - if (strcmp(name, "gdk_dbname") == 0) + if (strcmp(name, "gdk_dbname") == 0) { + assert(dbname == NULL); dbname = *val == '\0' ? NULL : strdup(val); - else if (strcmp(name, "monet_version") == 0) + } else if (strcmp(name, "monet_version") == 0) { + assert(dbver == NULL); dbver = *val == '\0' ? NULL : strdup(val); - else if (strcmp(name, "monet_release") == 0) + } else if (strcmp(name, "monet_release") == 0) { + assert(dbrel == NULL); dbrel = *val == '\0' ? NULL : strdup(val); - else if (strcmp(name, "merovingian_uri") == 0) + } else if (strcmp(name, "merovingian_uri") == 0) { + assert(uri == NULL); uri = strdup(val); + } } } if (uri != NULL) { diff --git a/clients/mapiclient/mclient.1 b/clients/mapiclient/mclient.1 --- a/clients/mapiclient/mclient.1 +++ b/clients/mapiclient/mclient.1 @@ -114,10 +114,12 @@ option is omitted, the default of is assumed. .TP \fB\-\-database=\fP\fIdatabase\fP (\fB\-d\fP \fIdatabase\fP) -Specify the name of the database to connect to. The \fB-d\fP can be +Specify the name or URI of the database to connect to. The \fB-d\fP can be omitted if an equally named file does not exist in the current directory. As such, the first non-option argument will be interpreted as database to connect to if the argument does not exist as file. +Valid URIs are as returned by +.RB "`monetdb discover`, see " monetdb "(1), and look like " "mapi:monetdb://hostname:port/database" . .TP \fB\-\-host=\fP\fIhostname\fP (\fB\-h\fP \fIhostname\fP) Specify the name of the host on which the server runs (default: diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -2595,7 +2595,7 @@ usage(const char *prog, int xit) #endif fprintf(stderr, " -p portnr | --port=portnr port to connect to\n"); fprintf(stderr, " -u user | --user=user user id\n"); - fprintf(stderr, " -d database | --database=database database to connect to\n"); + fprintf(stderr, " -d database | --database=database database to connect to (may be URI)\n"); fprintf(stderr, " -e | --echo echo the query\n"); #ifdef HAVE_ICONV @@ -3003,7 +3003,13 @@ main(int argc, char **argv) has_fileargs = optind != argc; } _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list