Changeset: 043bdedcd293 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=043bdedcd293
Modified Files:
sql/src/common/sql_types.mx
sql/src/server/rel_bin.mx
sql/src/server/rel_exp.mx
sql/src/server/rel_optimizer.mx
sql/src/server/sql_mvc.mx
Branch: default
Log Message:
merge from Jun2010
diffs (133 lines):
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/common/sql_types.mx
--- a/sql/src/common/sql_types.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/common/sql_types.mx Tue Aug 17 08:47:36 2010 +0200
@@ -378,7 +378,7 @@
sql_subtype *
sql_bind_subtype(char *name, unsigned int digits, unsigned int scale)
{
- sql_subtype *res = NEW(sql_subtype);
+ sql_subtype *res = ZNEW(sql_subtype);
if (!sql_find_subtype(res, name, digits, scale)) {
_DELETE(res);
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_bin.mx
--- a/sql/src/server/rel_bin.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_bin.mx Tue Aug 17 08:47:36 2010 +0200
@@ -638,8 +638,13 @@
tail_type(l),
tail_type(r));
assert(f);
s = stmt_binop(l, r, f);
- } else
+ } else {
+ /* this can still be a join (as
relationa algebra and single value subquery results still means joins */
s = stmt_uselect(l, r,
(comp_type)e->flag);
+ /* so we still need the proper side */
+ if (swapped)
+ s = stmt_reverse(s);
+ }
}
}
if (is_anti(e))
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_exp.mx
--- a/sql/src/server/rel_exp.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_exp.mx Tue Aug 17 08:47:36 2010 +0200
@@ -694,13 +694,52 @@
return -1;
}
+static int
+exp_is_complex( sql_exp *e )
+{
+ switch (e->type) {
+ case e_atom:
+ return 0;
+ case e_convert:
+ return exp_is_complex(e->l);
+ case e_func:
+ case e_aggr:
+ {
+ int r = (e->card != CARD_ATOM);
+ node *n;
+ list *l = e->l;
+
+ if (r && l)
+ for (n = l->h; n; n = n->next)
+ r |= exp_is_complex(n->data);
+ return r;
+ }
+ case e_column:
+ case e_cmp:
+ return 0;
+ }
+ return 0;
+}
+
+static int
+complex_select(sql_exp *e)
+{
+ sql_exp *l = e->l, *r = e->r;
+
+ if (l->card == CARD_ATOM || r->card == CARD_ATOM)
+ return 1;
+ if (exp_is_complex(l) || exp_is_complex(r))
+ return 1;
+ return 0;
+}
+
int
exp_is_join(sql_exp *e)
{
/* only simple compare expressions, ie not or lists
or range expressions (e->f)
*/
- if (e->type == e_cmp && e->flag != cmp_or && e->l && e->r && !e->f &&
e->card >= CARD_AGGR)
+ if (e->type == e_cmp && e->flag != cmp_or && e->l && e->r && !e->f &&
e->card >= CARD_AGGR && !complex_select(e))
return 0;
return -1;
}
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/rel_optimizer.mx
--- a/sql/src/server/rel_optimizer.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/rel_optimizer.mx Tue Aug 17 08:47:36 2010 +0200
@@ -566,7 +566,7 @@
list *lexps = list_map(eje, lr, (fmap) &joinexp_col);
list *rexps = list_map(eje, rr, (fmap) &joinexp_col);
list *lcols, *rcols;
-
+
lr = find_basetable(lr);
rr = find_basetable(rr);
if (!lr || !rr) {
diff -r 6acbf14b23fa -r 043bdedcd293 sql/src/server/sql_mvc.mx
--- a/sql/src/server/sql_mvc.mx Mon Aug 16 17:53:58 2010 +0200
+++ b/sql/src/server/sql_mvc.mx Tue Aug 17 08:47:36 2010 +0200
@@ -1489,6 +1489,7 @@
sql->vars[sql->topvars].name = _strdup(name);
sql->vars[sql->topvars].value.vtype = 0;
sql->vars[sql->topvars].type = *type;
+ assert(sql->vars[sql->topvars].type.comp_type == NULL);
sql->vars[sql->topvars].view = 0;
sql->topvars++;
}
@@ -1504,6 +1505,7 @@
sql->vars[sql->topvars].name = _strdup(name);
sql->vars[sql->topvars].value.vtype = 0;
sql->vars[sql->topvars].type = *type;
+ assert(sql->vars[sql->topvars].type.comp_type != NULL);
sql->vars[sql->topvars].view = 0;
sql->topvars++;
}
@@ -1560,6 +1562,8 @@
sql->vars[sql->topvars].s = NULL;
sql->vars[sql->topvars].name = NULL;
sql->vars[sql->topvars].value.vtype = 0;
+ sql->vars[sql->topvars].view = 0;
+ sql->vars[sql->topvars].type.comp_type = NULL;
if (name)
sql->vars[sql->topvars].name = _strdup(name);
sql->topvars++;
diff -r 6acbf14b23fa -r 043bdedcd293
sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout
--- a/sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout Mon Aug
16 17:53:58 2010 +0200
+++ b/sql/src/test/BugTracker/Tests/connect_crash.SF-1436626.timeout Tue Aug
17 08:47:36 2010 +0200
@@ -1,1 +1,1 @@
-0.2
+0.4
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list