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

Reply via email to