Update of /cvsroot/monetdb/sql/src/server
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv20405/src/server
Modified Files:
rel_bin.mx rel_exp.mx rel_select.mx
Log Message:
fix compilation issues with icc
fixed bug in m4 algebra sql
Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- rel_select.mx 28 Jan 2008 16:25:53 -0000 1.59
+++ rel_select.mx 29 Jan 2008 08:51:08 -0000 1.60
@@ -1806,10 +1806,8 @@
if (!rs)
return NULL;
if (rel_convert_types(sql, &ls, &rs, 1, type_equal) <
0) {
- if (ls)
- exp_destroy(ls);
- if (rs)
- exp_destroy(rs);
+ exp_destroy(ls);
+ exp_destroy(rs);
return NULL;
}
return rel_binop_(sql, ls, rs, NULL, compare_op);
@@ -1937,7 +1935,6 @@
} else {
return sql_error(sql, 02, "IN: missing inner query");
}
- /* right is a relation without correlations */
if (right) {
sql_exp *r = NULL, *e;
@@ -1946,16 +1943,14 @@
if (p)
rel_destroy(p->l);
if (rel_convert_types(sql, &l, &r, 1, type_equal) < 0) {
- if (l)
- exp_destroy(l);
- if (r)
- exp_destroy(r);
+ exp_destroy(l);
+ exp_destroy(r);
return NULL;
}
left = p->l = rel_crossproduct(left, right, op_join);
+ left->op = op_left;
e = exp_compare( l, r, cmp_equal );
rel_join_add_exp(left, e);
- left->op = op_left;
l = rel_unop_(sql, l, NULL, "isnull");
if (sc->token == SQL_NOT_IN)
r = exp_atom_bool(1);
@@ -2161,13 +2156,14 @@
/* first remove the NULLs, TODO optimize for not null exprs */
/* TODO use exp_compare with 2 arguments */
- e = rel_unop_(sql, exp_dup(l), NULL, "isnull");
- e = exp_compare( e, exp_atom_bool(0), cmp_equal);
- if (!is_select(rel->op))
- left = rel = rel_select(rel, e);
- else
- rel_select_add_exp(rel, e);
-
+ if (l->card != CARD_ATOM) {
+ e = rel_unop_(sql, exp_dup(l), NULL, "isnull");
+ e = exp_compare( e, exp_atom_bool(0), cmp_equal);
+ if (!is_select(rel->op))
+ left = rel = rel_select(rel, e);
+ else
+ rel_select_add_exp(rel, e);
+ }
/* list of values or subqueries */
/* single element could be a 'select' */
@@ -2214,10 +2210,8 @@
rel_setsubquery(right);
rel = rel_crossproduct(left, right, op_join);
if (rel_convert_types(sql, &l, &r, 1, type_equal) < 0) {
- if (l)
- exp_destroy(l);
- if (r)
- exp_destroy(r);
+ exp_destroy(l);
+ exp_destroy(r);
return NULL;
}
e = exp_compare( l, r, cmp_equal );
@@ -2862,8 +2856,11 @@
if (opt_cond) {
sql_exp *l = rel_value_exp(sql, rel, opt_cond,
f);
sql_exp *r = rel_value_exp(sql, rel,
when->h->data.sym, f);
- if (!l || !r)
+ if (!l || !r || rel_convert_types(sql, &l, &r,
1, type_equal) < 0) {
+ exp_destroy(l);
+ exp_destroy(r);
return NULL;
+ }
cond = rel_binop_(sql, l, r, NULL, "=");
} else {
cond = rel_logical_value_exp(sql, rel,
when->h->data.sym, sql_sel);
@@ -2907,9 +2904,12 @@
if (opt_cond) {
sql_exp *l = rel_value_exp(sql, rel, opt_cond,
f);
sql_exp *r = rel_value_exp(sql, rel,
when->h->data.sym, f);
- cond = rel_binop_(sql, l, r, NULL, "=");
- if (!l || !r)
+ if (!l || !r || rel_convert_types(sql, &l, &r,
1, type_equal) < 0) {
+ exp_destroy(l);
+ exp_destroy(r);
return NULL;
+ }
+ cond = rel_binop_(sql, l, r, NULL, "=");
} else {
cond = rel_logical_value_exp(sql, rel,
when->h->data.sym, sql_sel);
}
@@ -3667,10 +3667,17 @@
valid expressions with invalid cardinality
(which need a dynamic check!!!)
*/
- if (outer && rel->card < ce->card) {
+ if (/*outer && */ rel->card < ce->card) {
+ if (ce->type == e_column && ce->r) {
+ return sql_error(sql, 02,
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", ce->r);
+ } else {
+ return sql_error(sql, 02,
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
+ }
+/*
assert(0);
ce = rel_groupby_add_aggr(sql, rel->l,
ce);
ce->card = rel->card;
+*/
}
if (sn->having) {
ce = rel_groupby_add_aggr(sql, inner,
ce);
@@ -4163,7 +4170,7 @@
sql_schema *s = NULL;
sql_table *t = NULL;
int instantiate = (sql->mode == m_execute || !persistent);
- int mode = sql->mode;
+ modes_t mode = sql->mode;
(void) check; /* Stefan: unused!? */
(void)column_spec;
Index: rel_exp.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_exp.mx,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- rel_exp.mx 28 Jan 2008 16:25:53 -0000 1.3
+++ rel_exp.mx 29 Jan 2008 08:51:08 -0000 1.4
@@ -327,7 +327,7 @@
e->l = e->r;
e->r = s;
- e->flag = swap_compare(e->flag);
+ e->flag = swap_compare((comp_type)e->flag);
}
sql_subtype *
Index: rel_bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_bin.mx,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- rel_bin.mx 28 Jan 2008 16:25:53 -0000 1.31
+++ rel_bin.mx 29 Jan 2008 08:51:08 -0000 1.32
@@ -30,9 +30,9 @@
#endif /*_REL_BIN_H_*/
@c
#include "sql_config.h"
-#define LINESIZE 80
#include "rel_bin.h"
+#include "rel_exp.h"
#include "rel_prop.h"
static stmt * subrel_bin(mvc *sql, sql_rel *rel);
@@ -182,8 +182,8 @@
*
* so here we need to ignore NULLs
*/
- if (e->flag&NO_NIL) {
- sql_subtype *t = tail_type(as);
+ if (e->flag&NO_NIL && attr) {
+ sql_subtype *t = exp_subtype(attr->h->data);
stmt *n = stmt_atom(atom_general(t, NULL, 0));
as = stmt_select2(as, n, stmt_dup(n), 0);
}
@@ -294,10 +294,15 @@
return NULL;
}
if (left && right && re->card > CARD_ATOM) {
- if (swapped)
+ if (l->nrcols == 0)
+ l =
stmt_const(bin_first_column(swapped?right:left), l);
+ if (r->nrcols == 0)
+ r =
stmt_const(bin_first_column(swapped?left:right), r);
+ if (swapped) {
s = stmt_join(r, stmt_reverse(l),
swap_compare((comp_type)e->flag));
- else
+ } else {
s = stmt_join(l, stmt_reverse(r),
(comp_type)e->flag);
+ }
} else {
s = stmt_select(l, r, (comp_type)e->flag);
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins