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

Reply via email to