Changeset: fa9e40ac1681 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fa9e40ac1681
Removed Files:
sql/backends/monet5/Tests/pyapi32.sql
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_gencode.c
sql/server/rel_psm.c
sql/server/rel_select.c
sql/server/sql_parser.y
Branch: pythonloader
Log Message:
Revert to revision 5f26457e4859 (because varres arguments are likely not going
to work).
diffs (232 lines):
diff --git a/sql/backends/monet5/Tests/pyapi32.sql
b/sql/backends/monet5/Tests/pyapi32.sql
deleted file mode 100644
--- a/sql/backends/monet5/Tests/pyapi32.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-START TRANSACTION;
-
-
-
-CREATE FUNCTION varres_test() RETURNS TABLE(*) LANGUAGE PYTHON {
- return {'i': 5, 'j': 10};
-};
-
-debug SELECT * FROM varres_test();
-SELECT * FROM varres_test();
-
-
-ROLLBACK;
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1407,18 +1407,14 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
}
l = sa_list(sql->sa);
if (f->func->varres) {
- if (f->func->res) {
- for(i = 0, en = rel->exps->h, n = f->res->h;
en; en = en->next, n = n->next, i++ ) {
- sql_exp *exp = en->data;
- sql_subtype *st = n->data;
- const char *rnme =
exp->rname?exp->rname:exp->l;
- stmt *s = stmt_rs_column(sql->sa, psub,
i, st);
-
- s = stmt_alias(sql->sa, s, rnme,
exp->name);
- list_append(l, s);
- }
- } else {
- list_append(l, psub);
+ for(i=0, en = rel->exps->h, n = f->res->h; en; en =
en->next, n = n->next, i++ ) {
+ sql_exp *exp = en->data;
+ sql_subtype *st = n->data;
+ const char *rnme = exp->rname?exp->rname:exp->l;
+ stmt *s = stmt_rs_column(sql->sa, psub, i, st);
+
+ s = stmt_alias(sql->sa, s, rnme, exp->name);
+ list_append(l, s);
}
} else {
for(i = 0, n = f->func->res->h; n; n = n->next, i++ ) {
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
@@ -2485,63 +2485,49 @@ static int
list *l = lst->op4.lval;
int cnt = list_length(l);
stmt *first;
- if (cnt > 0) {
- n = l->h;
- first = n->data;
-
- /* single value result, has a fast exit
*/
- if (cnt == 1 && first->nrcols <= 0 ){
- stmt *c = n->data;
- sql_subtype *t = tail_type(c);
- const char *tname =
table_name(sql->mvc->sa, c);
- const char *sname =
schema_name(sql->mvc->sa, c);
- const char *_empty = "";
- const char *tn = (tname) ?
tname : _empty;
- const char *sn = (sname) ?
sname : _empty;
- const char *cn =
column_name(sql->mvc->sa, c);
- const char *ntn =
sql_escape_ident(tn);
- const char *nsn =
sql_escape_ident(sn);
- size_t fqtnl = strlen(ntn) + 1
+ strlen(nsn) + 1;
- char *fqtn = NEW_ARRAY(char,
fqtnl);
-
- snprintf(fqtn, fqtnl, "%s.%s",
nsn, ntn);
-
- q = newStmt(mb, sqlRef,
resultSetRef);
- if (q) {
- s->nr = getDestVar(q);
- q = pushStr(mb, q,
fqtn);
- q = pushStr(mb, q, cn);
- q = pushStr(mb, q,
t->type->localtype == TYPE_void ? "char" : t->type->sqlname);
- q = pushInt(mb, q,
t->digits);
- q = pushInt(mb, q,
t->scale);
- q = pushInt(mb, q,
t->type->eclass);
- q = pushArgument(mb, q,
c->nr);
- }
-
- c_delete(ntn);
- c_delete(nsn);
- _DELETE(fqtn);
- if (q == NULL)
- return -1;
- break;
- }
- if ( (s->nr =dump_header(sql->mvc, mb,
s, l)) < 0)
- return -1;
- } else {
+
+ n = l->h;
+ first = n->data;
+
+ /* single value result, has a fast exit */
+ if (cnt == 1 && first->nrcols <= 0 ){
+ stmt *c = n->data;
+ sql_subtype *t = tail_type(c);
+ const char *tname =
table_name(sql->mvc->sa, c);
+ const char *sname =
schema_name(sql->mvc->sa, c);
+ const char *_empty = "";
+ const char *tn = (tname) ? tname :
_empty;
+ const char *sn = (sname) ? sname :
_empty;
+ const char *cn =
column_name(sql->mvc->sa, c);
+ const char *ntn = sql_escape_ident(tn);
+ const char *nsn = sql_escape_ident(sn);
+ size_t fqtnl = strlen(ntn) + 1 +
strlen(nsn) + 1;
+ char *fqtn = NEW_ARRAY(char, fqtnl);
+
+ snprintf(fqtn, fqtnl, "%s.%s", nsn,
ntn);
+
q = newStmt(mb, sqlRef, resultSetRef);
if (q) {
- const char *_empty = "";
-
s->nr = getDestVar(q);
- q = pushStr(mb, q, _empty);
- q = pushStr(mb, q, _empty);
- q = pushStr(mb, q, "char");
- q = pushInt(mb, q, 0);
- q = pushInt(mb, q, 0);
- q = pushInt(mb, q, 0);
- q = pushArgument(mb, q, 1);
+ q = pushStr(mb, q, fqtn);
+ q = pushStr(mb, q, cn);
+ q = pushStr(mb, q,
t->type->localtype == TYPE_void ? "char" : t->type->sqlname);
+ q = pushInt(mb, q, t->digits);
+ q = pushInt(mb, q, t->scale);
+ q = pushInt(mb, q,
t->type->eclass);
+ q = pushArgument(mb, q, c->nr);
}
+
+ c_delete(ntn);
+ c_delete(nsn);
+ _DELETE(fqtn);
+ if (q == NULL)
+ return -1;
+ break;
}
+ if ( (s->nr =dump_header(sql->mvc, mb, s, l)) <
0)
+ return -1;
+
} else {
q = newStmt(mb, sqlRef, raiseRef);
q = pushStr(mb, q, "not a valid output list\n");
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
@@ -694,7 +694,7 @@ rel_create_func(mvc *sql, dlist *qname,
int instantiate = (sql->emode == m_instantiate);
int deps = (sql->emode == m_deps);
int create = (!instantiate && !deps);
- bit vararg = FALSE, varres = FALSE;
+ bit vararg = FALSE;
char is_table = (res && res->token == SQL_TABLE);
char is_aggr = (type == F_AGGR);
@@ -771,15 +771,10 @@ rel_create_func(mvc *sql, dlist *qname,
if (!l)
l = sa_list(sql->sa);
if (res) {
- if (strcmp(res->data.lval->h->data.sval, "*")
== 0) {
- varres = TRUE;
- restype = NULL;
- } else {
- restype = result_type(sql, res);
- if (!restype)
- return sql_error(sql, 01,
- "CREATE %s%s:
failed to get restype", KF, F);
- }
+ restype = result_type(sql, res);
+ if (!restype)
+ return sql_error(sql, 01,
+ "CREATE %s%s: failed to
get restype", KF, F);
}
if (body && lang > FUNC_LANG_SQL) {
char *lang_body = body->h->data.sval;
@@ -791,7 +786,7 @@ rel_create_func(mvc *sql, dlist *qname,
(lang ==
FUNC_LANG_MAP_PY)?"pyapimap":"unknown";
sql->params = NULL;
if (create) {
- f = mvc_create_func(sql, sql->sa, s,
fname, l, restype, type, lang, mod, fname, lang_body, (type ==
F_LOADER)?TRUE:varres, vararg);
+ f = mvc_create_func(sql, sql->sa, s,
fname, l, restype, type, lang, mod, fname, lang_body, (type ==
F_LOADER)?TRUE:FALSE, vararg);
} else if (!sf) {
return sql_error(sql, 01, "CREATE %s%s:
R function %s.%s not bound", KF, F, s->base.name, fname );
} /*else {
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
@@ -587,12 +587,10 @@ rel_named_table_function(mvc *sql, sql_r
/* for each column add table.column name */
exps = new_exp_list(sql->sa);
- if (!sf->func->varres) {
- for (m = sf->func->res->h; m; m = m->next) {
- sql_arg *a = m->data;
-
- append(exps, exp_column(sql->sa, tname, a->name,
&a->type, CARD_MULTI, 1, 0));
- }
+ for (m = sf->func->res->h; m; m = m->next) {
+ sql_arg *a = m->data;
+
+ append(exps, exp_column(sql->sa, tname, a->name, &a->type,
CARD_MULTI, 1, 0));
}
return rel_table_func(sql->sa, rel, e, exps, (sq != NULL));
}
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -2165,12 +2165,6 @@ table_function_column_list:
append_string($$, $3);
append_type($$, &$4);
}
- | '*'
- {
- $$ = L();
- append_string($$, "*");
- append_type($$, NULL);
- }
;
func_data_type:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list