Changeset: a41eab244f5b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a41eab244f5b
Modified Files:
clients/mapiclient/dump.c
sql/backends/monet5/Tests/rapi02.sql
sql/backends/monet5/sql_gencode.c
sql/include/sql_catalog.h
sql/jdbc/tests/Tests/Test_Dobjects.stable.out
sql/server/rel_psm.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-2010/Tests/slow-query.Bug-2671.sql
sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Tests/systemfunctions.stable.out
sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
sql/test/bugs/Tests/innerjoin_multiple-bug-sf-943661.stable.out
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check5.stable.out
Branch: RIntegration
Log Message:
approved tests and fixed bug in handling the sql/mal functions
set return types also for calls which return single values.
diffs (truncated from 1007 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1202,7 +1202,7 @@ dump_external_functions(Mapi mid, const
"FROM \"sys\".\"args\" \"a\","
"\"sys\".\"functions\" \"f\", "
"\"sys\".\"schemas\" \"s\" "
- "WHERE \"f\".\"sql\" = FALSE AND "
+ "WHERE \"f\".\"language\" = 1 AND "
"\"a\".\"func_id\" = \"f\".\"id\" AND "
"\"f\".\"schema_id\" = \"s\".\"id\" "
"%s %s "
@@ -1328,7 +1328,7 @@ dump_functions(Mapi mid, stream *toConso
"SELECT \"f\".\"func\", \"f\".\"name\", \"s\".\"name\" "
"FROM \"sys\".\"schemas\" \"s\","
"\"sys\".\"functions\" \"f\" "
- "WHERE \"f\".\"sql\" = TRUE AND "
+ "WHERE \"f\".\"language\" = 2 AND "
"\"s\".\"id\" = \"f\".\"schema_id\""
"%s %s "
"%s%s%s "
@@ -1536,7 +1536,7 @@ dump_database(Mapi mid, stream *toConsol
"\"f\".\"func\" AS \"func\" "
"FROM \"sys\".\"schemas\" \"s\", "
"\"sys\".\"functions\" \"f\" "
- "WHERE \"f\".\"sql\" = TRUE AND "
+ "WHERE \"f\".\"language\" = 2 AND "
"\"s\".\"id\" = \"f\".\"schema_id\" "
"%s" /* and f.id not in systemfunctions */
"UNION "
diff --git a/sql/backends/monet5/Tests/rapi02.sql
b/sql/backends/monet5/Tests/rapi02.sql
--- a/sql/backends/monet5/Tests/rapi02.sql
+++ b/sql/backends/monet5/Tests/rapi02.sql
@@ -1,14 +1,14 @@
-- MonetDB R interface
-- testing robustness, should not cause a segfault
-create function rapi00(i integer) returns table (d float)
+create function rapi02(i integer) returns table (d float)
language R {
arg1 <- c(1804289383, 846930886, 1681692777, 1714636915, 1957747793,
424238335, 719885386, 1649760492, 596516649, 1189641421);
someval <- Re(fft(arg1)); return(someval);
};
-select * from functions where name = 'rapi00';
+select * from functions where name = 'rapi02';
-explain select * from rapi00() as R;
+explain select * from rapi02() as R;
-drop function rapi00;
+drop function rapi02;
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1567,20 +1567,19 @@ static int
char *mod, *fimp;
int l = _dumpstmt(sql, mb, s->op1);
sql_func *f = s->op4.funcval->func;
+ int rtype = s->op4.funcval->res.type->localtype;
if (backend_create_func(sql, f) < 0)
return -1;
mod = sql_func_mod(s->op4.funcval->func);
fimp = sql_func_imp(s->op4.funcval->func);
if (s->op1->nrcols && strcmp(fimp, "not_uniques") == 0)
{
- int rtype = s->op4.funcval->res.type->localtype;
q = newStmt(mb, mod, fimp);
setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, rtype));
setVarUDFtype(mb, getArg(q, 0));
q = pushArgument(mb, q, l);
} else if (s->op1->nrcols) {
- int rtype = s->op4.funcval->res.type->localtype;
q = newStmt(mb, "mal", "multiplex");
setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, rtype));
@@ -1590,6 +1589,7 @@ static int
q = pushArgument(mb, q, l);
} else {
q = newStmt(mb, mod, fimp);
+ setVarType(mb, getArg(q, 0), rtype);
if (f->lang == FUNC_LANG_R)
q = pushStr(mb, q, f->query);
q = pushArgument(mb, q, l);
@@ -1604,6 +1604,7 @@ static int
char *mod, *fimp;
int l = _dumpstmt(sql, mb, s->op1);
int r = _dumpstmt(sql, mb, s->op2);
+ int rtype = s->op4.funcval->res.type->localtype;
sql_func *f = s->op4.funcval->func;
if (backend_create_func(sql, f) < 0)
@@ -1616,12 +1617,12 @@ static int
if (s->op1->nrcols || s->op2->nrcols) {
if (!special) {
- q = multiplex2(mb, mod,
convertOperator(fimp), l, r, s->op4.funcval->res.type->localtype);
+ q = multiplex2(mb, mod,
convertOperator(fimp), l, r, rtype);
} else {
mod = convertMultiplexMod(mod, fimp);
fimp = convertMultiplexFcn(fimp);
q = newStmt(mb, "mal", "multiplex");
- setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, s->op4.funcval->res.type->localtype));
+ setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, rtype));
setVarUDFtype(mb, getArg(q, 0));
q = pushStr(mb, q, mod);
q = pushStr(mb, q, fimp);
@@ -1635,6 +1636,7 @@ static int
q = newStmt(mb, mod, convertOperator(fimp));
if (f->lang == FUNC_LANG_R)
q = pushStr(mb, q, f->query);
+ setVarType(mb, getArg(q, 0), rtype);
q = pushArgument(mb, q, l);
if (special) {
q = pushInt(mb, q, tpe->digits);
@@ -1650,6 +1652,7 @@ static int
sql_subtype *tpe = NULL;
int special = 0;
sql_subfunc *f = s->op4.funcval;
+ int rtype = (f->res.type)?f->res.type->localtype:0;
node *n;
/* dump operands */
_dumpstmt(sql, mb, s->op1);
@@ -1663,17 +1666,18 @@ static int
q = multiplexN(mb, mod, fimp);
if (!q) {
q = newStmt(mb, "mal", "multiplex");
- setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, f->res.type->localtype));
+ setVarType(mb, getArg(q, 0),
newBatType(TYPE_oid, rtype));
setVarUDFtype(mb, getArg(q, 0));
q = pushStr(mb, q, mod);
q = pushStr(mb, q, fimp);
} else {
- setVarType(mb, getArg(q, 0),
newBatType(TYPE_any, f->res.type->localtype));
+ setVarType(mb, getArg(q, 0),
newBatType(TYPE_any, rtype));
setVarUDFtype(mb, getArg(q, 0));
}
} else {
fimp = convertOperator(fimp);
q = newStmt(mb, mod, fimp);
+ setVarType(mb, getArg(q, 0), rtype);
}
/* first dynamic output of copy* functions */
if (f->res.comp_type)
@@ -2553,6 +2557,7 @@ int
backend_create_func(backend *be, sql_func *f)
{
switch(f->lang) {
+ case FUNC_LANG_INT:
case FUNC_LANG_MAL:
case FUNC_LANG_SQL:
return backend_create_sql_func(be, f);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -282,11 +282,12 @@ typedef struct sql_arg {
#define IS_FILT(f) (f->type == F_FILT)
#define IS_UNION(f) (f->type == F_UNION)
-#define FUNC_LANG_MAL 0
-#define FUNC_LANG_SQL 1
-#define FUNC_LANG_R 2
-#define FUNC_LANG_C 3
-#define FUNC_LANG_J 4
+#define FUNC_LANG_INT 0 /* internal */
+#define FUNC_LANG_MAL 1 /* create sql external mod.func */
+#define FUNC_LANG_SQL 2 /* create ... sql function/procedure */
+#define FUNC_LANG_R 3 /* create .. language R */
+#define FUNC_LANG_C 4
+#define FUNC_LANG_J 5
typedef struct sql_func {
sql_base base;
diff --git a/sql/jdbc/tests/Tests/Test_Dobjects.stable.out
b/sql/jdbc/tests/Tests/Test_Dobjects.stable.out
--- a/sql/jdbc/tests/Tests/Test_Dobjects.stable.out
+++ b/sql/jdbc/tests/Tests/Test_Dobjects.stable.out
@@ -55,6 +55,7 @@ mTests_sql_jdbc_tests
Resultset with 3 columns
TABLE_SCHEM TABLE_CATALOG TABLE_CAT
json mTests_sql_jdbc_tests mTests_sql_jdbc_tests
+rapi mTests_sql_jdbc_tests mTests_sql_jdbc_tests
sys mTests_sql_jdbc_tests mTests_sql_jdbc_tests
tmp mTests_sql_jdbc_tests mTests_sql_jdbc_tests
Resultset with 3 columns
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -764,7 +764,7 @@ rel_create_func(mvc *sql, dlist *qname,
"CREATE %s%s: failed to
get restype", KF, F);
}
- if (body && lang != FUNC_LANG_SQL) {
+ if (body && lang > FUNC_LANG_SQL) {
char *lang_body = body->h->data.sval;
char *mod = (lang == FUNC_LANG_R)?"rapi":
(lang == FUNC_LANG_C)?"capi":
@@ -782,7 +782,7 @@ rel_create_func(mvc *sql, dlist *qname,
f->res = *restype;
f->sql = 0; /* native */
}
- } else if (body && lang == FUNC_LANG_SQL) {
+ } else if (body) {
list *b = NULL;
sql_schema *old_schema = cur_schema(sql);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -728,7 +728,7 @@ load_func(sql_trans *tr, sql_schema *s,
v = table_funcs.column_find_value(tr, find_sql_column(funcs,
"language"), rid);
t->lang = *(int *)v; _DELETE(v);
v = table_funcs.column_find_value(tr, find_sql_column(funcs, "type"),
rid);
- t->sql = (t->lang==FUNC_LANG_SQL)?1:0;
+ t->sql = (t->lang==FUNC_LANG_SQL||t->lang==FUNC_LANG_MAL)?1:0;
t->type = *(int *)v; _DELETE(v);
v = table_funcs.column_find_value(tr, find_sql_column(funcs,
"side_effect"), rid);
t->side_effect = *(bit *)v; _DELETE(v);
@@ -736,7 +736,7 @@ load_func(sql_trans *tr, sql_schema *s,
t->res.type = NULL;
t->s = s;
t->fix_scale = SCALE_EQ;
- if (t->type != FUNC_LANG_MAL) {
+ if (t->lang != FUNC_LANG_INT) {
t->query = t->imp;
t->imp = NULL;
}
@@ -1017,7 +1017,7 @@ insert_functions(sql_trans *tr, sql_tabl
for (n = funcs->h; n; n = n->next) {
sql_func *f = n->data;
- int lang = f->sql?FUNC_LANG_SQL:FUNC_LANG_MAL;
+ int lang = FUNC_LANG_INT;
bit se = f->side_effect;
sqlid id;
int number = 0;
@@ -3683,7 +3683,7 @@ create_sql_func(sql_allocator *sa, char
t->mod = (mod)?sa_strdup(sa, mod):NULL;
t->type = type;
t->lang = lang;
- t->sql = (lang==FUNC_LANG_SQL)?1:0;
+ t->sql = (lang==FUNC_LANG_SQL||lang==FUNC_LANG_MAL)?1:0;
t->side_effect = res?FALSE:TRUE;
t->ops = args;
t->res.scale = t->res.digits = 0;
@@ -3712,7 +3712,7 @@ sql_trans_create_func(sql_trans *tr, sql
t->mod = (mod)?sa_strdup(tr->sa, mod):NULL;
t->type = type;
t->lang = lang;
- t->sql = (lang==FUNC_LANG_SQL)?1:0;
+ t->sql = (lang==FUNC_LANG_SQL||lang==FUNC_LANG_MAL)?1:0;
se = t->side_effect = res?FALSE:TRUE;
t->ops = sa_list(tr->sa);
t->fix_scale = SCALE_EQ;
diff --git
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
---
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
+++
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
@@ -68,7 +68,7 @@ Ready.
[ NULL, "sys", "functions", "name", "varchar", 256, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 2, NULL,
NULL, NULL ]
[ NULL, "sys", "functions", "func", "varchar", 8196, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 3, NULL,
NULL, NULL ]
[ NULL, "sys", "functions", "mod", "varchar", 8196, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 4, NULL,
NULL, NULL ]
-[ NULL, "sys", "functions", "sql", "boolean", 1, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 5, NULL,
NULL, NULL ]
+[ NULL, "sys", "functions", "language", "int", 32, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 5, NULL,
NULL, NULL ]
[ NULL, "sys", "functions", "type", "int", 32, 0, 0,
10, NULL, NULL, NULL, 0, 0, 0, 6, NULL, NULL,
NULL ]
[ NULL, "sys", "functions", "side_effect", "boolean", 1,
0, 0, 10, NULL, NULL, NULL, 0, 0, 0, 7,
NULL, NULL, NULL ]
[ NULL, "sys", "functions", "schema_id", "int", 32, 0,
0, 10, NULL, NULL, NULL, 0, 0, 0, 8, NULL,
NULL, NULL ]
diff --git a/sql/test/BugTracker-2010/Tests/slow-query.Bug-2671.sql
b/sql/test/BugTracker-2010/Tests/slow-query.Bug-2671.sql
--- a/sql/test/BugTracker-2010/Tests/slow-query.Bug-2671.sql
+++ b/sql/test/BugTracker-2010/Tests/slow-query.Bug-2671.sql
@@ -10,6 +10,6 @@ SELECT "f"."id",
FROM "sys"."args" "a",
"sys"."functions" "f"
WHERE "f"."id" NOT IN (SELECT "function_id" FROM "sys"."systemfunctions") AND
- "f"."sql" = FALSE AND
+ "f"."language" = 0 AND
"a"."func_id" = "f"."id"
ORDER BY "f"."id", "a"."number";
diff --git
a/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
b/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
---
a/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
+++
b/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
@@ -35,6 +35,7 @@ Ready.
[ "sys" ]
[ "tmp" ]
[ "json" ]
+[ "rapi" ]
[ "ft" ]
# 15:58:57 >
diff --git
a/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
b/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
---
a/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
+++
b/sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
@@ -31,6 +31,7 @@ Ready.
[ "sys" ]
[ "tmp" ]
[ "json" ]
+[ "rapi" ]
[ "ft" ]
#drop function ft.func;
#drop schema ft;
diff --git
a/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
b/sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list