Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv8000/src/server

Modified Files:
        rel_select.mx 
Log Message:
propagated changes of Friday Aug 07 2009
from the Aug2009 branch to the development trunk

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2009/08/07 - nielsnes: src/server/rel_select.mx,1.152.2.2
bug fixing

prepare/execute statements now go to seperate query cache
check for ambiguous order by columns
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2009/08/07 - nielsnes: src/server/rel_select.mx,1.152.2.3
corrected the error message for except
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -d -r1.154 -r1.155
--- rel_select.mx       7 Aug 2009 15:49:31 -0000       1.154
+++ rel_select.mx       7 Aug 2009 21:24:48 -0000       1.155
@@ -341,7 +341,7 @@
                        break;
                if (!found && e->l && exps_bind_column2(rel->exps, e->l, e->r)) 
                        found = 1;
-               if (!found && !e->l && exps_bind_column(rel->exps, e->r)) 
+               if (!found && !e->l && exps_bind_column(rel->exps, e->r, NULL)) 
                        found = 1;
                break;
        case op_insert:
@@ -1138,6 +1138,7 @@
 static sql_rel *
 rel_bind_column_(mvc *sql, sql_rel **p, sql_rel *rel, char *cname )
 {
+       int ambiguous = 0;
        sql_rel *l = NULL, *r = NULL;
        switch(rel->op) {
        case op_join:
@@ -1168,8 +1169,12 @@
        case op_project:
        case op_table:
        case op_basetable:
-               if (rel->exps && exps_bind_column(rel->exps, cname))
+               if (rel->exps && exps_bind_column(rel->exps, cname, &ambiguous))
                        return rel;
+               if (ambiguous) {
+                       (void) sql_error(sql, ERR_AMBIGUOUS, "SELECT: 
identifier '%s' ambiguous", cname);
+                       return NULL;
+               }
                *p = rel;
                if (is_processed(rel))
                        return NULL;
@@ -1199,7 +1204,7 @@
 
        if (is_project(rel->op) || rel->op == op_table) {
                if (rel->exps) {
-                       sql_exp *e = exps_bind_column(rel->exps, cname);
+                       sql_exp *e = exps_bind_column(rel->exps, cname, NULL);
                        if (e)
                                return e;
                }
@@ -1219,7 +1224,7 @@
                return NULL;
 
        if ((is_project(rel->op) || is_base(rel->op)) && rel->exps) {
-               sql_exp *e = exps_bind_column(rel->exps, cname);
+               sql_exp *e = exps_bind_column(rel->exps, cname, NULL);
                if (e)
                        return exp_alias_or_copy(sql, e->rname, cname, rel, e, 
1);
        }
@@ -3811,7 +3816,7 @@
                        assert(order->data.lval->h->next->type == type_int);
                        if (or != rel)
                                return NULL;
-                       if (!e && col->token == SQL_COLUMN) {
+                       if (!e && sql->session->status != -ERR_AMBIGUOUS && 
col->token == SQL_COLUMN) {
                                /* reset error */
                                sql->session->status = 0;
                                sql->errstr[0] = '\0';
@@ -3822,7 +3827,7 @@
                                        e = NULL;
                                }
                        }
-                       if (!e) {
+                       if (!e && sql->session->status != -ERR_AMBIGUOUS) {
                                /* reset error */
                                sql->session->status = 0;
                                sql->errstr[0] = '\0';
@@ -4164,7 +4169,7 @@
        for (n = exps->h; n; n = n->next) {
                sql_exp *le = n->data;
                char *nm = le->name;
-               sql_exp *re = exps_bind_column(r_exps, nm);
+               sql_exp *re = exps_bind_column(r_exps, nm, NULL);
 
                if (re) {
                        found = 1;
@@ -4651,12 +4656,16 @@
        rel_remove_internal_exp(t1);
        rel_remove_internal_exp(t2);
        if (list_length(t1->exps) != list_length(t2->exps)) {
+               int t1nrcols = list_length(t1->exps);
+               int t2nrcols = list_length(t2->exps);
                char *op = "UNION";
                if (q->token == SQL_EXCEPT)
                        op = "EXCEPT";
                else if (q->token == SQL_INTERSECT)
                        op = "INTERSECT";
-               return sql_error(sql, 02, "%s: column counts (%d and %d) do not 
match", op, t1->nrcols, t2->nrcols);
+               rel_destroy(t1);
+               rel_destroy(t2);
+               return sql_error(sql, 02, "%s: column counts (%d and %d) do not 
match", op, t1nrcols, t2nrcols);
        }
        if (t1 && dist) 
                t1 = rel_distinct(t1);


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to