Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv15997/src/server
Modified Files:
rel_select.mx rel_subquery.mx
Log Message:
now also handle scope_subquery for both algebra and binary versions
(disabled select ... into in relational version for now)
fixed order of dropping functions in skyserver v6
U rel_subquery.mx
Index: rel_subquery.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_subquery.mx,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- rel_subquery.mx 2 Nov 2008 10:42:30 -0000 1.1
+++ rel_subquery.mx 2 Nov 2008 21:58:20 -0000 1.2
@@ -45,20 +45,31 @@
#include "sql_env.h"
static stmt *
-rel_flat_subquery(mvc *c, symbol *sym, exp_kind ek)
+rel_scope_subquery(mvc *sql, scope *scp, symbol *sq, exp_kind ek)
{
stmt *s = NULL;
- if (mvc_debug_on(c,16384)) {
- int status = c->session->status;
- sql_rel *r = rel_subquery(c, NULL, sym, ek);
+ if (mvc_debug_on(sql,16384)) {
+ int status = sql->session->status;
+ sql_rel *r = rel_subquery(sql, NULL, sq, ek);
+ if (!r && scp) {
+ sql_table *t;
+
+ sql->errstr[0] = 0;
+ sql->session->status = status;
+ /* create rel from scp */
+ assert(list_length(scp->bases) == 1);
+ t = scp->bases->h->data;
+ r = rel_basetable(t, t->base.name );
+ r = rel_subquery(sql, r, sq, ek);
+ }
if (!r) {
- if (!c->errstr[0])
- c->session->status = status;
+ if (!sql->errstr[0])
+ sql->session->status = status;
return NULL;
} else {
- r = rel_optimizer(c, r);
- s = rel_bin(c, r);
+ r = rel_optimizer(sql, r);
+ s = rel_bin(sql, r);
}
}
return s;
@@ -67,9 +78,11 @@
/* single value only */
stmt *scope_subquery(mvc *sql, scope *scp, symbol *sq, exp_kind ek )
{
- if (scp)
- printf("scope_subquery with scope \n");
- return sql_scope_subquery(sql, scp, sq, ek);
+ stmt *s = NULL;
+
+ if ((s = rel_scope_subquery(sql, scp, sq, ek)) == NULL)
+ return sql_scope_subquery(sql, scp, sq, ek);
+ return s;
}
stmt *flat_subquery(mvc *sql, symbol *sq)
@@ -77,7 +90,7 @@
stmt *s = NULL;
exp_kind ek = {type_value, card_relation, TRUE};
- if ((s = rel_flat_subquery(sql, sq, ek)) == NULL)
+ if ((s = rel_scope_subquery(sql, NULL, sq, ek)) == NULL)
return sql_flat_subquery(sql, sq);
if (s && s->type == st_ordered) {
stmt *n = sql_reorder(stmt_dup(s->op1.stval),
stmt_dup(s->op2.stval));
U rel_select.mx
Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- rel_select.mx 2 Nov 2008 10:42:30 -0000 1.91
+++ rel_select.mx 2 Nov 2008 21:58:20 -0000 1.92
@@ -33,6 +33,7 @@
extern void rel_select_add_exp(sql_rel *l, sql_exp *e);
extern sql_rel *rel_select(sql_rel *l, sql_exp *e);
extern sql_rel *rel_select_copy(sql_rel *l, list *exps);
+extern sql_rel *rel_basetable(sql_table *t, char *tname);
extern sql_exp *rel_bind_column( mvc *sql, sql_rel *rel, char *cname );
extern sql_exp *rel_bind_column2( mvc *sql, sql_rel *rel, char *tname, char
*cname );
@@ -483,7 +484,7 @@
return rel;
}
-static sql_rel *
+sql_rel *
rel_basetable(sql_table *t, char *tname)
{
sql_rel *rel = rel_create();
@@ -1390,11 +1391,18 @@
return NULL;
} else if (dlist_length(l) == 1) {
char *name = l->h->data.sval;
+ sql_arg *a = sql_bind_param(sql, name);
int var = (stack_find_var(sql, name) != NULL);
exp = rel_bind_column(sql, rel, name);
- if (exp && var)
- return sql_error(sql, 02, "SELECT: identifier '%s'
ambiguous", name);
+ if (exp) {
+ if (var || a)
+ return sql_error(sql, 02, "SELECT: identifier
'%s' ambiguous", name);
+ } else if (a) {
+ if (var)
+ return sql_error(sql, 02, "SELECT: identifier
'%s' ambiguous", name);
+ exp = exp_param(a->name, &a->type, 0);
+ }
if (!exp && var)
return rel_var_ref(sql, name, 0);
if (!exp && !var)
@@ -4015,6 +4023,10 @@
sql_rel *res = NULL;
SelectNode *sn = (SelectNode *) sq;
+ /* select ... into is currently not handled here ! */
+ if (sn->into)
+ return NULL;
+
if (sn->s.token != SQL_SELECT)
return table_ref(sql, rel, sq);
assert(sn->s.token == SQL_SELECT);
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins