Changeset: b50e087abea1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b50e087abea1 Added Files: sql/server/cmp_exp_eval.h sql/server/rel_out2inner_join.txt sql/server/rel_outer_join_optimizer.h Modified Files: sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out sql/backends/monet5/sql_upgrades.c sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_exp.c sql/storage/bat/bat_logger.c sql/storage/store.c sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out sql/test/bugs/Tests/innerjoin_multiple-bug-sf-943661.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.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.32bit sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out sql/test/sys-schema/Tests/check_Not_Nullable_columns.stable.out sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: default Log Message:
Merge out2in branch into default. diffs (truncated from 210045 to 300 lines): diff --git a/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out b/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out --- a/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out +++ b/sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out @@ -65,10 +65,10 @@ stdout of test 'pyloader3_01` in directo #DROP LOADER myfunc2; #DROP LOADER myfunc3; #SELECT * FROM functions WHERE name='myfunc'; -% sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions # table_name -% id, name, func, mod, language, type, side_effect, varres, vararg, schema_id, system # name -% int, varchar, varchar, varchar, int, int, boolean, boolean, boolean, int, boolean # type -% 1, 0, 0, 0, 1, 1, 5, 5, 5, 1, 5 # length +% sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions # table_name +% id, name, func, mod, language, type, side_effect, varres, vararg, schema_id, system, semantics # name +% int, varchar, varchar, varchar, int, int, boolean, boolean, boolean, int, boolean, boolean # type +% 1, 0, 0, 0, 1, 1, 5, 5, 5, 1, 5, 5 # length #ROLLBACK; # 13:26:39 > 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 @@ -80,13 +80,14 @@ sql_fix_system_tables(Client c, mvc *sql pos += snprintf(buf + pos, bufsize - pos, "insert into sys.functions values" " (%d, '%s', '%s', '%s', %d, %d, false," - " %s, %s, %d, %s);\n", + " %s, %s, %d, %s, %s);\n", func->base.id, func->base.name, func->imp, func->mod, (int) FUNC_LANG_INT, (int) func->type, func->varres ? "true" : "false", func->vararg ? "true" : "false", func->s ? func->s->base.id : s->base.id, - func->system ? "true" : "false"); + func->system ? "true" : "false", + func->semantics ? "true" : "false"); arg = func->res->h->data; pos += snprintf(buf + pos, bufsize - pos, "insert into sys.args values" @@ -109,7 +110,7 @@ sql_fix_system_tables(Client c, mvc *sql pos += snprintf(buf + pos, bufsize - pos, "insert into sys.functions values" " (%d, '%s', '%s', '%s'," - " %d, %d, %s, %s, %s, %d, %s);\n", + " %d, %d, %s, %s, %s, %d, %s, %s);\n", func->base.id, func->base.name, func->imp, func->mod, (int) FUNC_LANG_INT, (int) func->type, @@ -117,7 +118,8 @@ sql_fix_system_tables(Client c, mvc *sql func->varres ? "true" : "false", func->vararg ? "true" : "false", func->s ? func->s->base.id : s->base.id, - func->system ? "true" : "false"); + func->system ? "true" : "false", + func->semantics ? "true" : "false"); if (func->res) { for (m = func->res->h; m; m = m->next, number++) { arg = m->data; @@ -2783,6 +2785,19 @@ sql_update_jun2020_bam(Client c, mvc *m, } static str +sql_update_semantics(Client c) +{ + char* update_query = + "update sys.functions set semantics = false where type <> 6 and func not ilike '%CREATE FUNCTION%' and name in ('length','octet_length','>','>=','<','<=','min','max','sql_min','sql_max','least','greatest','sum','prod','mod','and',\n" + "'or','xor','not','sql_mul','sql_div','sql_sub','sql_add','bit_and','bit_or','bit_xor','bit_not','left_shift','right_shift','abs','sign','scale_up','scale_down','round','power','floor','ceil','ceiling','sin','cos','tan','asin',\n" + "'acos','atan','sinh','cot','cosh','tanh','sqrt','exp','log','ln','log10','log2','pi','curdate','current_date','curtime','current_time','current_timestamp','localtime','localtimestamp','local_timezone','century','decade','year',\n" + "'quarter','month','day','dayofyear','weekofyear','dayofweek','dayofmonth','week','hour','minute','second','strings','locate','charindex','splitpart','substring','substr','truncate','concat','ascii','code','right','left','upper',\n" + "'ucase','lower','lcase','trim','ltrim','rtrim','lpad','rpad','insert','replace','repeat','space','char_length','character_length','soundex','qgramnormalize');"; + + return SQLstatementIntern(c, &update_query, "update", true, false, NULL); +} + +static str sql_update_default(Client c, mvc *sql, const char *prev_schema) { size_t bufsize = 1024, pos = 0; @@ -2851,6 +2866,12 @@ sql_update_default(Client c, mvc *sql, c } res_table_destroy(output); GDKfree(buf); + + if (err) + return err; + + err = sql_update_semantics(c); + return err; /* usually MAL_SUCCEED */ } 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 @@ -1019,7 +1019,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 side_effect, +sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const char *imp, sql_ftype type, bit semantics, bit side_effect, int fix_scale, unsigned int res_scale, sql_type *res, int nargs, va_list valist) { list *ops = sa_list(sa); @@ -1033,6 +1033,7 @@ sql_create_func_(sql_allocator *sa, cons if (res) fres = create_arg(sa, NULL, sql_create_subtype(sa, res, 0, 0), ARG_OUT); base_init(sa, &t->base, store_next_oid(), 0, name); + t->imp = sa_strdup(sa, imp); t->mod = sa_strdup(sa, mod); t->ops = ops; @@ -1046,6 +1047,7 @@ sql_create_func_(sql_allocator *sa, cons t->nr = list_length(funcs); t->sql = 0; t->lang = FUNC_LANG_INT; + t->semantics = semantics; t->side_effect = side_effect; t->fix_scale = fix_scale; t->s = NULL; @@ -1065,32 +1067,32 @@ sql_create_procedure(sql_allocator *sa, va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_PROC, side_effect, SCALE_NONE, 0, NULL, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_PROC, TRUE, side_effect, 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 side_effect, int fix_scale, +sql_create_func(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, bit side_effect, 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, side_effect, fix_scale, res_scale, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_FUNC, semantics, side_effect, 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, sql_type *fres, int nargs, ...) +sql_create_aggr(sql_allocator *sa, const char *name, const char *mod, const char *imp, bit semantics, 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, FALSE, SCALE_NONE, 0, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_AGGR, semantics, FALSE, SCALE_NONE, 0, fres, nargs, valist); va_end(valist); return res; } @@ -1103,7 +1105,7 @@ sql_create_union(sql_allocator *sa, cons va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_UNION, side_effect, fix_scale, res_scale, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_UNION, TRUE, side_effect, fix_scale, res_scale, fres, nargs, valist); va_end(valist); return res; } @@ -1115,7 +1117,7 @@ sql_create_analytic(sql_allocator *sa, c va_list valist; va_start(valist, nargs); - res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, FALSE, fix_scale, 0, fres, nargs, valist); + res = sql_create_func_(sa, name, mod, imp, F_ANALYTIC, TRUE, FALSE, fix_scale, 0, fres, nargs, valist); va_end(valist); return res; } @@ -1219,8 +1221,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 (geomcatalogfix_get() != NULL) { // the geom module is loaded @@ -1231,36 +1233,36 @@ 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", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap", "geom", "mbrOverlaps", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_above", "geom", "mbrAbove", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_above", "geom", "mbrAbove", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_below", "geom", "mbrBelow", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_below", "geom", "mbrBelow", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_right", "geom", "mbrRight", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_right", "geom", "mbrRight", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_left", "geom", "mbrLeft", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_left", "geom", "mbrLeft", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_above", "geom", "mbrOverlapOrAbove", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_below", "geom", "mbrOverlapOrBelow", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_right", "geom", "mbrOverlapOrRight", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_overlap_or_left", "geom", "mbrOverlapOrLeft", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_contains", "geom", "mbrContains", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_contains", "geom", "mbrContains", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_contained", "geom", "mbrContained", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_contained", "geom", "mbrContained", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_equal", "geom", "mbrEqual", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", FALSE, SCALE_FIX, 0, DBL, 2, GEOM, GEOM); - sql_create_func(sa, "mbr_distance", "geom", "mbrDistance", FALSE, SCALE_FIX, 0, DBL, 2, MBR, MBR); - sql_create_func(sa, "left_shift", "geom", "mbrLeft", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "left_shift", "geom", "mbrLeft", FALSE, SCALE_FIX, 0, BIT, 2, MBR, MBR); - sql_create_func(sa, "right_shift", "geom", "mbrRight", FALSE, SCALE_FIX, 0, BIT, 2, GEOM, GEOM); - sql_create_func(sa, "right_shift", "geom", "mbrRight", FALSE, 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); } end = t; @@ -1268,139 +1270,139 @@ sqltypeinit( sql_allocator *sa) // sql_create_func(sa, "st_pointfromtext", "geom", "st_pointformtext", FALSE, 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", "", "", BTE, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", SHT, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", INT, 1, ANY); - sql_create_aggr(sa, "grouping", "", "", LNG, 1, ANY); + 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); #ifdef HAVE_HGE - sql_create_aggr(sa, "grouping", "", "", HGE, 1, ANY); + sql_create_aggr(sa, "grouping", "", "", TRUE, HGE, 1, ANY); #endif - sql_create_aggr(sa, "not_unique", "sql", "not_unique", BIT, 1, OID); + sql_create_aggr(sa, "not_unique", "sql", "not_unique", 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", FALSE, SCALE_FIX, 0, LNG, 1, ANY); - sql_create_func(sa, "rotate_xor_hash", "calc", "rotate_xor_hash", FALSE, 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", FALSE, 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", "sql", "zero_or_one", ANY, 1, ANY); - sql_create_aggr(sa, "all", "sql", "all", ANY, 1, ANY); - sql_create_aggr(sa, "null", "sql", "null", BIT, 1, ANY); - sql_create_func(sa, "any", "sql", "any", FALSE, SCALE_NONE, 0, BIT, 3, BIT, BIT, BIT); - sql_create_func(sa, "all", "sql", "all", FALSE, SCALE_NONE, 0, BIT, 3, BIT, BIT, BIT); - sql_create_aggr(sa, "anyequal", "aggr", "anyequal", BIT, 1, ANY); /* needs 3 arguments (l,r,nil)(ugh) */ - sql_create_aggr(sa, "allnotequal", "aggr", "allnotequal", BIT, 1, ANY); /* needs 3 arguments (l,r,nil)(ugh) */ - sql_create_func(sa, "sql_anyequal", "aggr", "anyequal", FALSE, SCALE_NONE, 0, BIT, 2, ANY, ANY); - sql_create_func(sa, "sql_not_anyequal", "aggr", "not_anyequal", FALSE, SCALE_NONE, 0, BIT, 2, ANY, ANY); - sql_create_aggr(sa, "exist", "aggr", "exist", BIT, 1, ANY); - sql_create_aggr(sa, "not_exist", "aggr", "not_exist", BIT, 1, ANY); - sql_create_func(sa, "sql_exists", "aggr", "exist", FALSE, SCALE_NONE, 0, BIT, 1, ANY); - sql_create_func(sa, "sql_not_exists", "aggr", "not_exist", FALSE, SCALE_NONE, 0, BIT, 1, ANY); + sql_create_func(sa, "hash", "mkey", "hash", TRUE, FALSE, SCALE_FIX, 0, LNG, 1, ANY); + sql_create_func(sa, "rotate_xor_hash", "calc", "rotate_xor_hash", TRUE, FALSE, SCALE_NONE, 0, LNG, 3, LNG, INT, ANY); + sql_create_func(sa, "=", "calc", "=", TRUE, FALSE, SCALE_FIX, 0, BIT, 2, ANY, ANY); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list