Changeset: a1be8b1e8538 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a1be8b1e8538 Modified Files: sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_exp.c sql/storage/store.c Branch: out2in Log Message:
Add semantics flag for functions. diffs (truncated from 913 to 300 lines): 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 @@ -1020,7 +1020,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); @@ -1034,6 +1034,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; @@ -1047,6 +1048,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; @@ -1066,32 +1068,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; } @@ -1104,7 +1106,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; } @@ -1116,7 +1118,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; } @@ -1220,8 +1222,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 @@ -1232,36 +1234,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; @@ -1269,139 +1271,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", "=", 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, ">", "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); + sql_create_func(sa, "between", "calc", "between", TRUE, 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", TRUE, ANY, 1, ANY); + sql_create_aggr(sa, "all", "sql", "all", TRUE, ANY, 1, ANY); + sql_create_aggr(sa, "null", "sql", "null", TRUE, BIT, 1, ANY); + sql_create_func(sa, "any", "sql", "any", TRUE, FALSE, SCALE_NONE, 0, BIT, 3, BIT, BIT, BIT); + sql_create_func(sa, "all", "sql", "all", TRUE, FALSE, 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, FALSE, SCALE_NONE, 0, BIT, 2, ANY, ANY); + sql_create_func(sa, "sql_not_anyequal", "aggr", "not_anyequal", TRUE, FALSE, 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, FALSE, SCALE_NONE, 0, BIT, 1, ANY); + sql_create_func(sa, "sql_not_exists", "aggr", "not_exist", TRUE, FALSE, SCALE_NONE, 0, BIT, 1, ANY); /* needed for relational version */ - sql_create_func(sa, "identity", "calc", "identity", FALSE, SCALE_NONE, 0, OID, 1, ANY); - sql_create_func(sa, "rowid", "calc", "identity", FALSE, SCALE_NONE, 0, INT, 1, ANY); + sql_create_func(sa, "identity", "calc", "identity", TRUE, FALSE, SCALE_NONE, 0, OID, 1, ANY); + sql_create_func(sa, "rowid", "calc", "identity", TRUE, FALSE, SCALE_NONE, 0, INT, 1, ANY); /* needed for indices/clusters oid(schema.table,val) returns max(head(schema.table))+1 */ - sql_create_func(sa, "rowid", "calc", "rowid", FALSE, SCALE_NONE, 0, OID, 3, ANY, STR, STR); - sql_create_aggr(sa, "min", "aggr", "min", ANY, 1, ANY); - sql_create_aggr(sa, "max", "aggr", "max", ANY, 1, ANY); - sql_create_func(sa, "sql_min", "calc", "min", FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); - sql_create_func(sa, "sql_max", "calc", "max", FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); - sql_create_func(sa, "least", "calc", "min_no_nil", FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); - sql_create_func(sa, "greatest", "calc", "max_no_nil", FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); - sql_create_func(sa, "ifthenelse", "calc", "ifthenelse", FALSE, SCALE_FIX, 0, ANY, 3, BIT, ANY, ANY); + sql_create_func(sa, "rowid", "calc", "rowid", TRUE, FALSE, SCALE_NONE, 0, OID, 3, ANY, STR, STR); + sql_create_aggr(sa, "min", "aggr", "min", FALSE, ANY, 1, ANY); + sql_create_aggr(sa, "max", "aggr", "max", FALSE, ANY, 1, ANY); + sql_create_func(sa, "sql_min", "calc", "min", FALSE, FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); + sql_create_func(sa, "sql_max", "calc", "max", FALSE, FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); + sql_create_func(sa, "least", "calc", "min_no_nil", FALSE, FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); + sql_create_func(sa, "greatest", "calc", "max_no_nil", FALSE, FALSE, SCALE_FIX, 0, ANY, 2, ANY, ANY); + sql_create_func(sa, "ifthenelse", "calc", "ifthenelse", TRUE, FALSE, SCALE_FIX, 0, ANY, 3, BIT, ANY, ANY); /* sum for numerical and decimals */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestINT, 1, BTE); - sql_create_aggr(sa, "sum", "aggr", "sum", LargestINT, 1, SHT); - sql_create_aggr(sa, "sum", "aggr", "sum", LargestINT, 1, INT); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestINT, 1, BTE); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestINT, 1, SHT); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestINT, 1, INT); //sql_create_aggr(sa, "sum", "aggr", "sum", LargestINT, 1, LNG, LargestINT); #ifdef HAVE_HGE if (have_hge) - sql_create_aggr(sa, "sum", "aggr", "sum", LargestINT, 1, HGE); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestINT, 1, HGE); #endif - sql_create_aggr(sa, "sum", "aggr", "sum", LNG, 1, LNG); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LNG, 1, LNG); t = decimals; /* BTE */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestDEC, 1, *(t)); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestDEC, 1, *(t)); t++; /* SHT */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestDEC, 1, *(t)); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestDEC, 1, *(t)); t++; /* INT */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestDEC, 1, *(t)); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestDEC, 1, *(t)); t++; /* LNG */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestDEC, 1, *(t)); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestDEC, 1, *(t)); #ifdef HAVE_HGE if (have_hge) { t++; /* HGE */ - sql_create_aggr(sa, "sum", "aggr", "sum", LargestDEC, 1, *(t)); + sql_create_aggr(sa, "sum", "aggr", "sum", FALSE, LargestDEC, 1, *(t)); } #endif /* prod for numerical and decimals */ - sql_create_aggr(sa, "prod", "aggr", "prod", LargestINT, 1, BTE); - sql_create_aggr(sa, "prod", "aggr", "prod", LargestINT, 1, SHT); - sql_create_aggr(sa, "prod", "aggr", "prod", LargestINT, 1, INT); - sql_create_aggr(sa, "prod", "aggr", "prod", LargestINT, 1, LNG); + sql_create_aggr(sa, "prod", "aggr", "prod", FALSE, LargestINT, 1, BTE); + sql_create_aggr(sa, "prod", "aggr", "prod", FALSE, LargestINT, 1, SHT); + sql_create_aggr(sa, "prod", "aggr", "prod", FALSE, LargestINT, 1, INT); + sql_create_aggr(sa, "prod", "aggr", "prod", FALSE, LargestINT, 1, LNG); #ifdef HAVE_HGE if (HAVE_HGE) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list