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 -- [email protected]
To unsubscribe send an email to [email protected]