Changeset: 6897e97739b7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6897e97739b7
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_select.c
        sql/server/rel_select.h
Branch: parquet
Log Message:

cleaning up a bit, moved some code to rel_file_loader


diffs (107 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1930,7 +1930,7 @@ rel_read(mvc *sql, char *r, int *pos, li
 
                                if (!mvc_bind_schema(sql, sname))
                                        return sql_error(sql, ERR_NOTFOUND, 
SQLSTATE(3F000) "No such schema '%s'\n", sname);
-                               if (!(tudf = find_table_function(sql, sname, 
tname, list_empty(inputs) ? NULL : inputs, list_empty(inputs) ? NULL : 
exp_types(sql->sa, inputs), F_UNION, NULL, NULL)))
+                               if (!(tudf = find_table_function(sql, sname, 
tname, list_empty(inputs) ? NULL : inputs, list_empty(inputs) ? NULL : 
exp_types(sql->sa, inputs), F_UNION)))
                                        return NULL;
                                sf = tudf->f;
                                if (tudf->type != e_func || sf->func->type != 
F_UNION)
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -555,8 +555,34 @@ file_loader_add_table_column_types(mvc *
        return NULL;
 }
 
+static sql_rel *
+rel_file_loader(mvc *sql, list *exps, list *tl, char *tname)
+{
+       sql_subfunc *f = NULL;
+       bool found = false;
+
+       if ((f = bind_func_(sql, NULL, "file_loader", tl, F_UNION, false, 
&found))) {
+               list *nexps = exps;
+               if (list_empty(tl) || f->func->vararg || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1))) {
+                       list *res_exps = sa_list(sql->sa);
+                       if (list_length(exps) == 1 && f && f->func->varres && 
strlen(f->func->mod) == 0 && strlen(f->func->imp) == 0) {
+                               sql_exp *file = exps->h->data;
+                               char *err = 
file_loader_add_table_column_types(sql, f, file, res_exps, tname);
+                               if (err)
+                                       return sql_error(sql, ERR_NOTFOUND, 
SQLSTATE(42000) "SELECT: file_loader function type resolutions failed '%s'", 
err);
+                       }
+                       sql_exp *e = exp_op(sql->sa, nexps, f);
+                       sql_rel *rel = rel_table_func(sql->sa, NULL, e, 
res_exps, TABLE_PROD_FUNC);
+                       if (rel)
+                               rel = rel_project(sql->sa, rel, res_exps);
+                       return rel;
+               }
+       }
+       return NULL;
+}
+
 sql_exp *
-find_table_function(mvc *sql, char *sname, char *fname, list *exps, list *tl, 
sql_ftype type, sql_rel **rel, char *tname)
+find_table_function(mvc *sql, char *sname, char *fname, list *exps, list *tl, 
sql_ftype type)
 {
        bool found = false;
        list *ff = NULL;
@@ -564,23 +590,6 @@ find_table_function(mvc *sql, char *snam
        int i = 0, *scores, nfunc;
 
        assert(type == F_UNION || type == F_LOADER);
-       if ((f = bind_func_(sql, sname, fname, tl, type, false, &found))) {
-               list *nexps = exps;
-               if (list_empty(tl) || f->func->vararg || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1))) {
-                       list *res_exps = sa_list(sql->sa);
-                       if (list_length(exps) == 1 && f && f->func->varres && 
strlen(f->func->mod) == 0 && strlen(f->func->imp) == 0 && strcmp(fname, 
"file_loader") == 0) {
-                               sql_exp *file = exps->h->data;
-                               char *err = 
file_loader_add_table_column_types(sql, f, file, res_exps, tname);
-                               if (err)
-                                       return sql_error(sql, ERR_NOTFOUND, 
SQLSTATE(42000) "SELECT: file_loader function type resolutions failed '%s'", 
err);
-                       }
-                       sql_exp *e = exp_op(sql->sa, nexps, f);
-                       *rel = rel_table_func(sql->sa, NULL, e, res_exps, 
TABLE_PROD_FUNC);
-                       *rel = rel_project(sql->sa, *rel, res_exps);
-                       return e;
-               }
-               found = false;
-       }
        sql->session->status = 0; /* reset error */
        sql->errstr[0] = '\0';
        if (list_empty(tl) || !(ff = sql_find_funcs(sql, sname, fname, 
list_length(tl), type, false)) || list_empty(ff)) {
@@ -708,7 +717,9 @@ rel_named_table_function(sql_query *quer
        else
                tname = make_label(sql->sa, ++sql->label);
 
-       if (!(e = find_table_function(sql, sname, fname, list_empty(exps) ? 
NULL : exps, tl, F_UNION, &rel, tname)))
+       if (!sname && strcmp(fname, "file_loader") == 0) {
+               rel = rel_file_loader(sql, exps, tl, tname);
+       } else if (!(e = find_table_function(sql, sname, fname, 
list_empty(exps) ? NULL : exps, tl, F_UNION)))
                return NULL;
 
        if (!rel) {
@@ -6330,7 +6341,7 @@ rel_loader_function(sql_query *query, sy
        }
 
        sql_exp *e = NULL;
-       if (!(e = find_table_function(sql, sname, fname, exps, tl, F_LOADER, 
NULL, NULL)))
+       if (!(e = find_table_function(sql, sname, fname, exps, tl, F_LOADER)))
                return NULL;
        sql_subfunc *sf = e->f;
        if (sq) {
diff --git a/sql/server/rel_select.h b/sql/server/rel_select.h
--- a/sql/server/rel_select.h
+++ b/sql/server/rel_select.h
@@ -30,7 +30,7 @@ extern sql_exp *rel_binop_(mvc *sql, sql
 extern sql_exp *rel_nop_(mvc *sql, sql_rel *rel, sql_exp *l, sql_exp *r, 
sql_exp *r2, sql_exp *r3, char *sname, char *fname, int card);
 extern sql_rel *rel_with_query(sql_query *query, symbol *q);
 extern sql_rel *table_ref(sql_query *query, symbol *tableref, int lateral, 
list *refs);
-extern sql_exp *find_table_function(mvc *sql, char *sname, char *fname, list 
*exps, list *tl, sql_ftype type, sql_rel **rel, char *tname);
+extern sql_exp *find_table_function(mvc *sql, char *sname, char *fname, list 
*exps, list *tl, sql_ftype type);
 extern sql_rel *rel_loader_function(sql_query* query, symbol* s, list *fexps, 
sql_subfunc **loader_function);
 extern list *check_arguments_and_find_largest_any_type(mvc *sql, sql_rel *rel, 
list *exps, sql_subfunc *sf, int maybe_zero_or_one);
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to