Changeset: 215dad4da580 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=215dad4da580
Modified Files:
sql/backends/monet5/sql.mx
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_psm.c
Branch: Feb2013
Log Message:
Niels' fix for the assertion "rel_bin.c:4465: subrel_bin" triggered by UDFs.
All op_apply operators are supposed to be replaced during rel_optimizer().
However, an op_ddl didn't get optimised in the expected way, so the op_apply
operators in its subexpressions were not replaced, which triggers the
assertion.
diffs (121 lines):
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -2461,6 +2461,8 @@ create_func( mvc *sql, char *sname, sql_
sql->sa = sa_create();
buf = sa_strdup(sql->sa, nf->query);
r = rel_parse(sql, buf, m_deps);
+ if (r)
+ r = rel_optimizer(sql, r);
if (r) {
stmt *sb = rel_bin(sql, r);
list *id_col_l = stmt_list_dependencies(sql->sa, sb,
COLUMN_DEPENDENCY);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -23,6 +23,7 @@
#include "rel_exp.h"
#include "rel_psm.h"
#include "rel_prop.h" /* for prop_copy() */
+#include "rel_optimizer.h"
static sql_exp *
exp_create(sql_allocator *sa, int type )
@@ -439,10 +440,11 @@ exp_if(sql_allocator *sa, sql_exp *cond,
}
sql_exp *
-exp_rel(sql_allocator *sa, sql_rel *rel)
+exp_rel(mvc *sql, sql_rel *rel)
{
- sql_exp *e = exp_create(sa, e_psm);
+ sql_exp *e = exp_create(sql->sa, e_psm);
+ rel = rel_optimizer(sql, rel);
e->l = rel;
e->flag = PSM_REL;
return e;
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -20,6 +20,8 @@
#ifndef _REL_EXP_H_
#define _REL_EXP_H_
+#include "sql_mvc.h"
+
#define new_exp_list(sa) sa_list(sa)
#define exp2list(sa,e) append(sa_list(sa),e)
@@ -72,7 +74,7 @@ extern sql_exp * exp_var(sql_allocator *
extern sql_exp * exp_return(sql_allocator *sa, sql_exp *val, int level);
extern sql_exp * exp_while(sql_allocator *sa, sql_exp *cond, list *stmts);
extern sql_exp * exp_if(sql_allocator *sa, sql_exp *cond, list *if_stmts, list
*else_stmts);
-extern sql_exp * exp_rel(sql_allocator *sa, sql_rel * r);
+extern sql_exp * exp_rel(mvc *sql, sql_rel * r);
extern void exp_setname(sql_allocator *sa, sql_exp *e, char *rname, char *name
);
extern void exp_setrelname(sql_allocator *sa, sql_exp *e, int nr );
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
@@ -91,12 +91,12 @@ psm_set_exp(mvc *sql, dnode *n)
if (!e)
return NULL;
if (rel) {
- sql_exp *er = exp_rel(sql->sa, rel);
+ sql_exp *er = exp_rel(sql, rel);
list *b = sa_list(sql->sa);
append(b, er);
append(b, exp_set(sql->sa, name, e, level));
- res = exp_rel(sql->sa, rel_psm_block(sql->sa, b));
+ res = exp_rel(sql, rel_psm_block(sql->sa, b));
} else {
res = exp_set(sql->sa, name, e, level);
}
@@ -389,7 +389,7 @@ rel_psm_return( mvc *sql, sql_subtype *r
return NULL;
if (rel && ek.card != card_relation)
- append(l, exp_rel(sql->sa, rel));
+ append(l, exp_rel(sql, rel));
else if (rel) {
list *exps = sa_list(sql->sa);
node *n, *m;
@@ -418,7 +418,7 @@ rel_psm_return( mvc *sql, sql_subtype *r
rel -> exps = exps;
else
rel = rel_project(sql->sa, rel, exps);
- res = exp_rel(sql->sa, rel);
+ res = exp_rel(sql, rel);
} else if (!rel && res->tpe.comp_type){ /* handle return table-var */
sql_rel *rel = stack_find_rel_var(sql, res->r);
list *exps = sa_list(sql->sa);
@@ -439,7 +439,7 @@ rel_psm_return( mvc *sql, sql_subtype *r
append(exps, e);
}
rel = rel_project(sql->sa, rel, exps);
- res = exp_rel(sql->sa, rel);
+ res = exp_rel(sql, rel);
}
append(l, exp_return(sql->sa, res, stack_nr_of_declared_tables(sql)));
return l;
@@ -461,7 +461,7 @@ rel_select_into( mvc *sql, symbol *sq, e
if (!r)
return NULL;
nl = sa_list(sql->sa);
- append(nl, exp_rel(sql->sa, r));
+ append(nl, exp_rel(sql, r));
for (m = r->exps->h, n = into->h; m && n; m = m->next, n = n->next) {
sql_subtype *tpe = NULL;
char *nme = n->data.sval;
@@ -578,7 +578,7 @@ sequential_block (mvc *sql, sql_subtype
sql_rel *r = rel_updates(sql, s);
if (!r)
return NULL;
- res = exp_rel(sql->sa, r);
+ res = exp_rel(sql, r);
} break;
default:
res = sql_error(sql, 01,
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list