Changeset: d9d6af881bc6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d9d6af881bc6 Modified Files: sql/backends/monet5/sql_upgrades.c sql/common/sql_types.c sql/include/sql_catalog.h sql/storage/store.c Branch: privfuncs Log Message:
Added 'private' field for functions diffs (truncated from 1233 to 300 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -71,7 +71,7 @@ sql_fix_system_tables(Client c, mvc *sql sql_arg *arg; node *m; - if (func->base.id >= FUNC_OIDS) + if (func->private || func->base.id >= FUNC_OIDS) continue; pos += snprintf(buf + pos, bufsize - pos, @@ -1808,31 +1808,6 @@ sql_update_jun2020_sp1_hugeint(Client c, #endif static str -sql_update_jun2020_sp2(Client c, mvc *sql, const char *prev_schema, bool *systabfixed) -{ - /* we need to update the system tables, but only if we haven't done - * so already, and if we are actually upgrading the database */ - if (*systabfixed) - return MAL_SUCCEED; /* already done */ - - char *buf = "select id from sys.functions where name = 'nullif' and schema_id = (select id from sys.schemas where name = 'sys');\n"; - res_table *output; - char *err = SQLstatementIntern(c, buf, "update", 1, 0, &output); - if (err == NULL) { - BAT *b = BATdescriptor(output->cols[0].b); - if (b) { - if (BATcount(b) == 0) { - err = sql_fix_system_tables(c, sql, prev_schema); - *systabfixed = true; - } - BBPunfix(b->batCacheid); - } - res_table_destroy(output); - } - return err; -} - -static str sql_update_oscar_lidar(Client c) { char *query = @@ -4815,13 +4790,6 @@ SQLupgrades(Client c, mvc *m) } #endif - if ((err = sql_update_jun2020_sp2(c, m, prev_schema, &systabfixed)) != NULL) { - TRC_CRITICAL(SQL_PARSER, "%s\n", err); - freeException(err); - GDKfree(prev_schema); - return -1; - } - sql_find_subtype(&tp, "varchar", 0, 0); if (sql_bind_func(m, s->base.name, "lidarattach", &tp, NULL, F_PROC)) { if ((err = sql_update_oscar_lidar(c)) != NULL) { diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -626,7 +626,7 @@ sql_create_arg(sql_allocator *sa, const } static sql_func * -sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const char *imp, sql_ftype type, bit semantics, +sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const char *imp, sql_ftype type, bit semantics, bit private, int fix_scale, unsigned int res_scale, sql_type *res, int nargs, va_list valist) { list *ops = SA_LIST(sa, (fdestroy) &arg_destroy); @@ -654,6 +654,7 @@ sql_create_func_(sql_allocator *sa, cons t->instantiated = TRUE; t->lang = FUNC_LANG_INT; t->semantics = semantics; + t->private = private; t->fix_scale = fix_scale; t->s = NULL; t->system = TRUE; @@ -670,76 +671,76 @@ sql_create_func_(sql_allocator *sa, cons } static sql_func * -sql_create_procedure(sql_allocator *sa, const char *name, const char *mod, const char *imp, int nargs, ...) +sql_create_procedure(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit private, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_PROC, TRUE, SCALE_NONE, 0, NULL, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_PROC, TRUE, private, SCALE_NONE, 0, NULL, nargs, valist); va_end(valist); return res; } static sql_func * -sql_create_func(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, int fix_scale, +sql_create_func(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, bit private, int fix_scale, unsigned int res_scale, sql_type *fres, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_FUNC, semantics, fix_scale, res_scale, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_FUNC, semantics, private, fix_scale, res_scale, fres, nargs, valist); va_end(valist); return res; } static sql_func * -sql_create_aggr(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, sql_type *fres, int nargs, ...) +sql_create_aggr(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, bit private, sql_type *fres, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_AGGR, semantics, SCALE_NONE, 0, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_AGGR, semantics, private, SCALE_NONE, 0, fres, nargs, valist); va_end(valist); return res; } static sql_func * -sql_create_filter(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, int fix_scale, +sql_create_filter(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, bit private, int fix_scale, unsigned int res_scale, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_FILT, semantics, fix_scale, res_scale, BIT, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_FILT, semantics, private, fix_scale, res_scale, BIT, nargs, valist); va_end(valist); return res; } static sql_func * -sql_create_union(sql_allocator *sa, const char *name, const char *mod, const char *imp, int fix_scale, +sql_create_union(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit private, int fix_scale, unsigned int res_scale, sql_type *fres, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_UNION, TRUE, fix_scale, res_scale, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_UNION, TRUE, private, fix_scale, res_scale, fres, nargs, valist); va_end(valist); return res; } static sql_func * -sql_create_analytic(sql_allocator *sa, const char *name, const char *mod, const char *imp, int fix_scale, sql_type *fres, int nargs, ...) +sql_create_analytic(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit private, int fix_scale, sql_type *fres, int nargs, ...) { sql_func *res; va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, TRUE, fix_scale, 0, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, TRUE, private, fix_scale, 0, fres, nargs, valist); va_end(valist); return res; } @@ -842,8 +843,8 @@ sqltypeinit( sql_allocator *sa) BLOB = *t++ = sql_create_type(sa, "BLOB", 0, 0, 0, EC_BLOB, "blob"); - sql_create_func(sa, "length", "blob", "nitems", FALSE, SCALE_NONE, 0, INT, 1, BLOB); - sql_create_func(sa, "octet_length", "blob", "nitems", FALSE, SCALE_NONE, 0, INT, 1, BLOB); + sql_create_func(sa, "length", "blob", "nitems", FALSE, FALSE, SCALE_NONE, 0, INT, 1, BLOB); + sql_create_func(sa, "octet_length", "blob", "nitems", FALSE, FALSE, SCALE_NONE, 0, INT, 1, BLOB); if (backend_has_module(&(int){0}, "geom")) { /* not the old version, change into check for module existence */ // the geom module is loaded @@ -855,335 +856,334 @@ sqltypeinit( sql_allocator *sa) MBR = *t++ = sql_create_type(sa, "MBR", 0, SCALE_NONE, 0, EC_EXTERNAL, "mbr"); /* mbr operator functions */ - sql_create_func(sa, "mbr_overlap", "geom", "mbrOverlaps", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap", "geom", "mbrOverlaps", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_above", "geom", "mbrAbove", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_above", "geom", "mbrAbove", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_below", "geom", "mbrBelow", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_below", "geom", "mbrBelow", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_right", "geom", "mbrRight", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_right", "geom", "mbrRight", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_left", "geom", "mbrLeft", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_left", "geom", "mbrLeft", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_contains", "geom", "mbrContains", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_contains", "geom", "mbrContains", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_contained", "geom", "mbrContained", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_contained", "geom", "mbrContained", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", TRUE, SCALE_FIX, 0, DBL, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", TRUE, SCALE_FIX, 0, DBL, 2, MBR, MBR); - sql_create_func(sa, "left_shift", "geom", "mbrLeft", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "left_shift", "geom", "mbrLeft", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "right_shift", "geom", "mbrRight", TRUE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "right_shift", "geom", "mbrRight", TRUE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_overlap", "geom", "mbrOverlaps", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_overlap", "geom", "mbrOverlaps", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_above", "geom", "mbrAbove", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_above", "geom", "mbrAbove", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_below", "geom", "mbrBelow", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_below", "geom", "mbrBelow", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_right", "geom", "mbrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_right", "geom", "mbrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_left", "geom", "mbrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_left", "geom", "mbrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_contains", "geom", "mbrContains", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_contains", "geom", "mbrContains", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_contained", "geom", "mbrContained", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_contained", "geom", "mbrContained", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", TRUE, FALSE, SCALE_FIX, 0, DBL, 2, GEOM, GEOM); + sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", TRUE, FALSE, SCALE_FIX, 0, DBL, 2, MBR, MBR); + sql_create_func(sa, "left_shift", "geom", "mbrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "left_shift", "geom", "mbrLeft", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); + sql_create_func(sa, "right_shift", "geom", "mbrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); + sql_create_func(sa, "right_shift", "geom", "mbrRight", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); } *t = NULL; -// sql_create_func(sa, "st_pointfromtext", "geom", "st_pointformtext", TRUE, SCALE_NONE, 0, OID, 1, OID); /* The grouping aggregate doesn't have a backend implementation. It gets replaced at rel_unnest */ - sql_create_aggr(sa, "grouping", "", "", TRUE, BTE, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", TRUE, SHT, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", TRUE, INT, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", TRUE, LNG, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, TRUE, BTE, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, TRUE, SHT, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, TRUE, INT, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, TRUE, LNG, 1, ANY); #ifdef HAVE_HGE - sql_create_aggr(sa, "grouping", "", "", TRUE, HGE, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, TRUE, HGE, 1, ANY); #endif - sql_create_aggr(sa, "not_unique", "aggr", "not_unique", TRUE, BIT, 1, OID); + sql_create_aggr(sa, "not_unique", "aggr", "not_unique", TRUE, TRUE, BIT, 1, OID); /* well to be precise it does reduce and map */ /* functions needed for all types */ - sql_create_func(sa, "hash", "mkey", "hash", TRUE, SCALE_FIX, 0, LNG, 1, ANY); - sql_create_func(sa, "rotate_xor_hash", "calc", "rotate_xor_hash", TRUE, SCALE_NONE, 0, LNG, 3, LNG, INT, ANY); - sql_create_func(sa, "=", "calc", "=", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "<>", "calc", "!=", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "isnull", "calc", "isnil", TRUE, SCALE_FIX, 0, BIT, 1, ANY); - sql_create_func(sa, "isnotnull", "calc", "isnotnil", TRUE, SCALE_FIX, 0, BIT, 1, ANY); - sql_create_func(sa, ">", "calc", ">", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, ">=", "calc", ">=", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "<", "calc", "<", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "<=", "calc", "<=", FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "between", "calc", "between", FALSE, SCALE_FIX, 0, BIT, 8, ANY, ANY, ANY, BIT, BIT, BIT, BIT, BIT); - sql_create_aggr(sa, "zero_or_one", "aggr", "zero_or_one", TRUE, ANY, 1, ANY); - sql_create_aggr(sa, "all", "aggr", "all", TRUE, ANY, 1, ANY); - sql_create_aggr(sa, "null", "aggr", "null", TRUE, BIT, 1, ANY); - sql_create_func(sa, "any", "sql", "any", TRUE, SCALE_NONE, 0, BIT, 3, BIT, BIT, BIT); - sql_create_func(sa, "all", "sql", "all", TRUE, SCALE_NONE, 0, BIT, 3, BIT, BIT, BIT); - sql_create_aggr(sa, "anyequal", "aggr", "anyequal", TRUE, BIT, 1, ANY); /* needs 3 arguments (l,r,nil)(ugh) */ - sql_create_aggr(sa, "allnotequal", "aggr", "allnotequal", TRUE, BIT, 1, ANY); /* needs 3 arguments (l,r,nil)(ugh) */ - sql_create_func(sa, "sql_anyequal", "aggr", "anyequal", TRUE, SCALE_NONE, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "sql_not_anyequal", "aggr", "not_anyequal", TRUE, SCALE_NONE, 0, BIT, 2, ANY, ANY); - sql_create_aggr(sa, "exist", "aggr", "exist", TRUE, BIT, 1, ANY); - sql_create_aggr(sa, "not_exist", "aggr", "not_exist", TRUE, BIT, 1, ANY); - sql_create_func(sa, "sql_exists", "aggr", "exist", TRUE, SCALE_NONE, 0, BIT, 1, ANY); - sql_create_func(sa, "sql_not_exists", "aggr", "not_exist", TRUE, SCALE_NONE, 0, BIT, 1, ANY); + sql_create_func(sa, "hash", "mkey", "hash", TRUE, TRUE, SCALE_FIX, 0, LNG, 1, ANY); + sql_create_func(sa, "rotate_xor_hash", "calc", "rotate_xor_hash", TRUE, TRUE, SCALE_NONE, 0, LNG, 3, LNG, INT, ANY); + sql_create_func(sa, "=", "calc", "=", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, "<>", "calc", "!=", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, "isnull", "calc", "isnil", TRUE, FALSE, SCALE_FIX, 0, BIT, 1, ANY); + sql_create_func(sa, "isnotnull", "calc", "isnotnil", TRUE, FALSE, SCALE_FIX, 0, BIT, 1, ANY); + sql_create_func(sa, ">", "calc", ">", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, ">=", "calc", ">=", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, "<", "calc", "<", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, "<=", "calc", "<=", FALSE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org