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

Reply via email to