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

Reply via email to