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