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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list