Changeset: e9adf6d6f451 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e9adf6d6f451 Modified Files: geom/monetdb5/geom_upgrade.c sql/backends/monet5/sql_upgrades.c sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: Jun2016 Log Message:
Fix sys.args and sys.functions tables for internal functions when doing a database upgrade. diffs (truncated from 63784 to 300 lines): diff --git a/geom/monetdb5/geom_upgrade.c b/geom/monetdb5/geom_upgrade.c --- a/geom/monetdb5/geom_upgrade.c +++ b/geom/monetdb5/geom_upgrade.c @@ -100,32 +100,14 @@ geom_catalog_upgrade(void *lg, int olddb const char *s = "sys"; char n[64]; BUN p,q; - const struct { - char *name; - int type; - } nf[] = { - {"functions_id", TYPE_int}, - {"functions_name", TYPE_str}, - {"functions_func", TYPE_str}, - {"functions_mod", TYPE_str}, - {"functions_language", TYPE_int}, - {"functions_type", TYPE_int}, - {"functions_side_effect", TYPE_bit}, - {"functions_varres", TYPE_bit}, - {"functions_vararg", TYPE_bit}, - {"functions_schema_id", TYPE_int} - }; - BAT *ff[10], *ffn[10]; - BATiter ffi[10]; - int val, maxid, i; size_t ii; - bit bval; ulist *ul; - if ((ul = list_init(32)) == NULL) - return 0; if (olddb) { /* Update the catalog to use the new geometry types */ + if ((ul = list_init(32)) == NULL) + return 0; + ct = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s, "_columns_type"))); cti = bat_iterator(ct); cd = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s, "_columns_type_digits"))); @@ -216,83 +198,18 @@ geom_catalog_upgrade(void *lg, int olddb !list_add(&ul, cs, cns, N(n, NULL, s, "_columns_type_scale"))) return 0; + for (ii = 0; ii < ul->count; ii++) { + BATsetaccess(ul->elements[ii].nb, BAT_READ); + logger_add_bat(lg, ul->elements[ii].nb, ul->elements[ii].n); + if (ul->elements[ii].ob) + BBPunfix(ul->elements[ii].ob->batCacheid); + } + list_delete(ul); } /* Note that the new GEOM types are added to sys.types in * sql_update_geom() in sql_upgrades.c */ - /* Add the new functions */ - for (i = 0; i < 10; i++) { - if (!(ff[i] = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s, nf[i].name))))) - return 0; - ffi[i] = bat_iterator(ff[i]); - if (!(ffn[i] = BATnew(TYPE_void, nf[i].type, BATcount(ff[i]), PERSISTENT))) - return 0; - BATseqbase(ffn[i], ff[i]->hseqbase); - } - maxid = 0; - for(p=BUNfirst(ff[0]), q=BUNlast(ff[0]); p<q; p++) { - for (i = 0; i < 10; i++) - BUNappend(ffn[i], BUNtail(ffi[i], p), TRUE); - maxid = maxid < *(int*)BUNtail(ffi[0], p) ? *(int*)BUNtail(ffi[0], p) : maxid; - } - -#define GEOM_UPGRADE_STORE_FUNC(ba, id, name, mod, sqlname) \ -do { \ - val = id; \ - BUNappend(ba[0], &val, TRUE); \ - BUNappend(ba[1], name, TRUE); \ - BUNappend(ba[2], sqlname, TRUE); \ - BUNappend(ba[3], mod, TRUE); \ - val = 0; BUNappend(ba[4], &val, TRUE); \ - val = 1; BUNappend(ba[5], &val, TRUE); \ - bval = false; BUNappend(ba[6], &bval, TRUE); \ - bval = false; BUNappend(ba[7], &bval, TRUE); \ - bval = false; BUNappend(ba[8], &bval, TRUE); \ - val = 0; BUNappend(ba[9], &val, TRUE); \ -} while (0) - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap", "geom", "mbrOverlaps"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap", "geom", "mbrOverlaps"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_above", "geom", "mbrAbove"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_above", "geom", "mbrAbove"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_below", "geom", "mbrBelow"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_below", "geom", "mbrBelow"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_right", "geom", "mbrRight"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_right", "geom", "mbrRight"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_left", "geom", "mbrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_left", "geom", "mbrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_contains", "geom", "mbrContains"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_contains", "geom", "mbrContains"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_contained", "geom", "mbrContained"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_contained", "geom", "mbrContained"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_equal", "geom", "mbrEqual"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_equal", "geom", "mbrEqual"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_distance", "geom", "mbrDistance"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "mbr_distance", "geom", "mbrDistance"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "left_shift", "geom", "mbrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "left_shift", "geom", "mbrLeft"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "right_shift", "geom", "mbrRight"); - GEOM_UPGRADE_STORE_FUNC(ffn, ++maxid, "right_shift", "geom", "mbrRight"); -#undef GEOM_UPGRADE_STORE_FUNC - for (i = 0; i < 10; i++) - if (!list_add(&ul, ff[i], ffn[i], N(n, NULL, s, nf[i].name))) - return 0; - - for (ii = 0; ii < ul->count; ii++) { - BATsetaccess(ul->elements[ii].nb, BAT_READ); - logger_add_bat(lg, ul->elements[ii].nb, ul->elements[ii].n); - if (ul->elements[ii].ob) BBPunfix(ul->elements[ii].ob->batCacheid); - } - list_delete(ul); - return 1; } @@ -4450,6 +4367,8 @@ geom_sql_upgrade(int olddb) pos += snprintf(buf + pos, bufsize - pos, "\n\n"); pos += snprintf(buf + pos, bufsize - pos, + "delete from sys.systemfunctions where function_id not in (select id from sys.functions);\n"); + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.systemfunctions (select id from sys.functions where name in (" "'contains', 'geometrytype', 'getproj4', 'get_type', " "'has_m', 'has_z', 'internaltransform', 'left_shift', " 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 @@ -1156,7 +1156,7 @@ create function sys.\"epoch\"(ts TIMESTA static str sql_update_jun2016(Client c, mvc *sql) { - size_t bufsize = 25000, pos = 0; + size_t bufsize = 1000000, pos = 0; char *buf = GDKmalloc(bufsize), *err = NULL; ValRecord *schvar = stack_get_var(sql, "current_schema"); char *schema = NULL; @@ -1172,10 +1172,54 @@ sql_update_jun2016(Client c, mvc *sql) for (n = types->h; n; n = n->next) { sql_type *t = n->data; - if (t->base.id < 2000) { - pos += snprintf(buf + pos, bufsize - pos, "insert into sys.types values (%d, '%s', '%s', %d, %d, %d, %d, %d);\n", t->base.id, t->base.name, t->sqlname, t->digits, t->scale, t->radix, t->eclass, t->s ? t->s->base.id : s->base.id); + if (t->base.id >= 2000) + continue; + + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.types values (%d, '%s', '%s', %d, %d, %d, %d, %d);\n", t->base.id, t->base.name, t->sqlname, t->digits, t->scale, t->radix, t->eclass, t->s ? t->s->base.id : s->base.id); + } + pos += snprintf(buf + pos, bufsize - pos, "delete from sys.functions where id < 2000;\n"); + pos += snprintf(buf + pos, bufsize - pos, "delete from sys.args where func_id not in (select id from sys.functions);\n"); + for (n = funcs->h; n; n = n->next) { + sql_func *f = n->data; + int number = 0; + sql_arg *a; + node *m; + + if (f->base.id >= 2000) + continue; + + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.functions values (%d, '%s', '%s', '%s', %d, %d, %s, %s, %s, %d);\n", f->base.id, f->base.name, f->imp, f->mod, FUNC_LANG_INT, f->type, f->side_effect ? "true" : "false", f->varres ? "true" : "false", f->vararg ? "true" : "false", f->s ? f->s->base.id : s->base.id); + if (f->res) { + for (m = f->res->h; m; m = m->next, number++) { + a = m->data; + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values (%d, %d, 'res_%d', '%s', %d, %d, %d, %d);\n", store_next_oid(), f->base.id, number, a->type.type->sqlname, a->type.digits, a->type.scale, a->inout, number); + } + } + for (m = f->ops->h; m; m = m->next, number++) { + a = m->data; + if (a->name) + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values (%d, %d, '%s', '%s', %d, %d, %d, %d);\n", store_next_oid(), f->base.id, a->name, a->type.type->sqlname, a->type.digits, a->type.scale, a->inout, number); + else + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values (%d, %d, 'arg_%d', '%s', %d, %d, %d, %d);\n", store_next_oid(), f->base.id, number, a->type.type->sqlname, a->type.digits, a->type.scale, a->inout, number); } } + for (n = aggrs->h; n; n = n->next) { + sql_func *aggr = n->data; + sql_arg *arg; + + if (aggr->base.id >= 2000) + continue; + + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.functions values (%d, '%s', '%s', '%s', %d, %d, false, %s, %s, %d);\n", aggr->base.id, aggr->base.name, aggr->imp, aggr->mod, FUNC_LANG_INT, aggr->type, aggr->varres ? "true" : "false", aggr->vararg ? "true" : "false", aggr->s ? aggr->s->base.id : s->base.id); + arg = aggr->res->h->data; + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values (%d, %d, 'res', '%s', %d, %d, %d, 0);\n", store_next_oid(), aggr->base.id, arg->type.type->sqlname, arg->type.digits, arg->type.scale, arg->inout); + if (aggr->ops->h) { + arg = aggr->ops->h->data; + + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values (%d, %d, 'arg', '%s', %d, %d, %d, 1);\n", store_next_oid(), aggr->base.id, arg->type.type->sqlname, arg->type.digits, arg->type.scale, arg->inout); + } + } + pos += snprintf(buf + pos, bufsize - pos, "insert into sys.systemfunctions (select id from sys.functions where id < 2000 and id not in (select function_id from sys.systemfunctions));\n"); pos += snprintf(buf + pos, bufsize - pos, "grant execute on filter function \"like\"(string, string, string) to public;\n"); pos += snprintf(buf + pos, bufsize - pos, "grant execute on filter function \"ilike\"(string, string, string) to public;\n"); diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 --- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 +++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 @@ -59,6 +59,5518 @@ insert into sys.types values (28, 'sqlbl insert into sys.types values (29, 'wkb', 'geometry', 0, 0, 0, 15, 2000); insert into sys.types values (30, 'wkba', 'geometrya', 0, 0, 0, 16, 2000); insert into sys.types values (31, 'mbr', 'mbr', 0, 0, 0, 16, 2000); +delete from sys.functions where id < 2000; +delete from sys.args where func_id not in (select id from sys.functions); +insert into sys.functions values (32, 'mbr_overlap', 'mbrOverlaps', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7584, 32, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7585, 32, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7586, 32, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (33, 'mbr_overlap', 'mbrOverlaps', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7587, 33, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7588, 33, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7589, 33, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (34, 'mbr_above', 'mbrAbove', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7590, 34, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7591, 34, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7592, 34, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (35, 'mbr_above', 'mbrAbove', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7593, 35, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7594, 35, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7595, 35, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (36, 'mbr_below', 'mbrBelow', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7596, 36, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7597, 36, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7598, 36, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (37, 'mbr_below', 'mbrBelow', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7599, 37, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7600, 37, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7601, 37, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (38, 'mbr_right', 'mbrRight', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7602, 38, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7603, 38, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7604, 38, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (39, 'mbr_right', 'mbrRight', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7605, 39, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7606, 39, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7607, 39, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (40, 'mbr_left', 'mbrLeft', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7608, 40, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7609, 40, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7610, 40, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (41, 'mbr_left', 'mbrLeft', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7611, 41, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7612, 41, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7613, 41, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (42, 'mbr_overlap_or_above', 'mbrOverlapOrAbove', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7614, 42, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7615, 42, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7616, 42, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (43, 'mbr_overlap_or_above', 'mbrOverlapOrAbove', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7617, 43, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7618, 43, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7619, 43, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (44, 'mbr_overlap_or_below', 'mbrOverlapOrBelow', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7620, 44, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7621, 44, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7622, 44, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (45, 'mbr_overlap_or_below', 'mbrOverlapOrBelow', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7623, 45, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7624, 45, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7625, 45, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (46, 'mbr_overlap_or_right', 'mbrOverlapOrRight', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7626, 46, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7627, 46, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7628, 46, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (47, 'mbr_overlap_or_right', 'mbrOverlapOrRight', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7629, 47, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7630, 47, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7631, 47, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (48, 'mbr_overlap_or_left', 'mbrOverlapOrLeft', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7632, 48, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7633, 48, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7634, 48, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (49, 'mbr_overlap_or_left', 'mbrOverlapOrLeft', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7635, 49, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7636, 49, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7637, 49, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (50, 'mbr_contains', 'mbrContains', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7638, 50, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7639, 50, 'arg_1', 'geometry', 0, 0, 1, 1); +insert into sys.args values (7640, 50, 'arg_2', 'geometry', 0, 0, 1, 2); +insert into sys.functions values (51, 'mbr_contains', 'mbrContains', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7641, 51, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7642, 51, 'arg_1', 'mbr', 0, 0, 1, 1); +insert into sys.args values (7643, 51, 'arg_2', 'mbr', 0, 0, 1, 2); +insert into sys.functions values (52, 'mbr_contained', 'mbrContained', 'geom', 0, 1, false, false, false, 2000); +insert into sys.args values (7644, 52, 'res_0', 'boolean', 1, 0, 0, 0); +insert into sys.args values (7645, 52, 'arg_1', 'geometry', 0, 0, 1, 1); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list