Update of /cvsroot/monetdb/sql/src/server
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv7368/src/server

Modified Files:
        rel_bin.mx rel_exp.mx rel_select.mx sql_statement.mx 
Log Message:
adding special output for algebra version

changed sql.trace() into sql.logfile(filename:string), which can be called
from sql too.
fixed handling of dependency problem on views (one remains)



Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- rel_select.mx       27 Jan 2008 19:18:58 -0000      1.58
+++ rel_select.mx       28 Jan 2008 16:25:53 -0000      1.59
@@ -152,7 +152,7 @@
 static void
 rel_setsubquery(sql_rel*r) 
 {
-       if (r->l && r->op != op_basetable)
+       if (r->l && !is_base(r->op))
                rel_setsubquery(r->l);
        if (r->r && is_join(r->op)) 
                rel_setsubquery(r->r);
@@ -182,72 +182,6 @@
        r->name = _strdup(nme);
 }
 
-static sql_exp * exp_atom_ref(int i, sql_subtype *tpe) 
-{
-       sql_exp *e = exp_create(e_atom);
-       e->card = CARD_ATOM;
-       e->flag = i;
-       e->f = tpe;
-       return e;
-}
-
-static sql_exp * exp_param(char *name, sql_subtype *tpe, int frame) 
-{
-       sql_exp *e = exp_create(e_atom);
-       e->r = _strdup(name);
-       e->card = CARD_ATOM;
-       e->f = tpe;
-       e->flag = frame;
-       return e;
-}
-
-static sql_exp *
-exp_atom_bool(int b) {
-       sql_subtype bt; 
-
-       sql_find_subtype(&bt, "boolean", 0, 0);
-       if (b) 
-               return exp_atom(atom_bool(&bt, TRUE ));
-       else
-               return exp_atom(atom_bool(&bt, FALSE ));
-}
-
-static sql_exp * 
-exp_column( char *tname, char *cname, sql_subtype *t, int card) 
-{
-       sql_exp *e = exp_create(e_column);
-       e->name = _strdup(cname);
-       e->card = card;
-       e->l = (tname)?_strdup(tname):NULL;
-       e->r = _strdup(cname);
-       e->f = t;
-       return e;
-}
-
-static sql_exp * 
-exp_alias( char *tname, char *cname, sql_rel *orel, sql_exp *old) 
-{
-       sql_exp *e = exp_create(e_column);
-
-       assert(cname);
-       e->card = orel->card;
-       e->name = _strdup(cname);
-       e->l = (tname)?_strdup(tname):NULL;
-       e->r = _strdup(cname);
-       e->f = exp_subtype(old);
-       return e;
-}
-
-/* Set a name (alias) for the expression, such that we can refer 
-   to this expression by this simple name.
- */
-static void exp_setname( sql_exp *e, char *name )
-{
-       if (e->name)
-               _DELETE(e->name);
-       e->name = _strdup(name);
-}
-
 static sql_exp * 
 exp_alias_or_copy( mvc *sql, char *tname, char *cname, sql_rel *orel, sql_exp 
*old, int settname) 
 {
@@ -258,12 +192,12 @@
                char name[16], *nme;
                nme = number2name(name, 16, ++sql->label);
 
-               exp_setname(old, nme);
-               return exp_alias(tname, nme, orel, old);
+               exp_setname(old, NULL, nme);
+               return exp_column(tname, nme, exp_subtype(old), orel->card);
        } else if (cname && !old->name) {
-               exp_setname(old, cname);
+               exp_setname(old, NULL, cname);
        }
-       return exp_alias(tname, cname, orel, old);
+       return exp_column(tname, cname, exp_subtype(old), orel->card);
 }
 
 static sql_exp *
@@ -276,7 +210,7 @@
        if (rel->exps) /* list of aliases */
                e = exps_bind_column(rel->exps, cname);
        if (e) 
-               return exp_alias(NULL, cname, rel, e);
+               return exp_column(NULL, cname, exp_subtype(e), rel->card);
        for (cn = t->columns.set->h; cn; cn = cn->next) {
                sql_column *c = cn->data;
                if (strcmp(c->base.name, cname) == 0)
@@ -480,7 +414,7 @@
                        node *en;
                        for (en = rel->exps->h; en; en = en->next) {
                                sql_exp *e = en->data;
-                               append(exps, exp_alias(NULL, e->name, rel, e));
+                               append(exps, exp_column(NULL, e->name, 
exp_subtype(e), rel->card));
                        }
                } else {
                        for (cn = t->columns.set->h; cn; cn = cn->next) {
@@ -711,14 +645,14 @@
        if ((m=exps_find_match_exp(rel->exps, e)) == NULL) {
                if (!e->name) {
                        nme = number2name(name, 16, ++sql->label);
-                       exp_setname(e, nme);
+                       exp_setname(e, NULL, nme);
                }
                append(rel->exps, e);
                m = e;
        }
        if (!tname && e->type == e_column)
                tname = e->l;
-       return exp_alias(tname, m->name, rel, m);
+       return exp_column(tname, m->name, exp_subtype(m), rel->card);
 }
 
 static void 
@@ -737,38 +671,19 @@
 }
 
 static sql_exp *
-rel_project_label_exp(mvc *sql, sql_rel *rel, sql_exp *e)
-{
-       char name[16], *nme;
-       nme = number2name(name, 16, ++sql->label);
-
-       exp_setname(e, nme);
-       return exp_alias(rel->name, nme, rel, e);
-}
-
-static sql_exp *
-rel_lastexp_renamed(mvc *sql, sql_rel *rel ) 
-{
-       sql_exp *e;
-       assert(is_project(rel->op) && list_length(rel->exps));
-
-       e = rel->exps->t->data;
-       return rel_project_label_exp(sql, rel, e);
-}
-
-static sql_exp *
 rel_lastexp(mvc *sql, sql_rel *rel ) 
 {
        sql_exp *e;
 
-       if (rel->op == op_project)
-               return rel_lastexp_renamed(sql, rel);
-       assert(is_project(rel->op) && list_length(rel->exps));
+       assert(list_length(rel->exps));
+       if (rel->op == op_project) 
+               return exp_alias_or_copy(sql, rel->name, NULL, 
+                                        rel, rel->exps->t->data, 1); 
+       assert(is_project(rel->op));
        e = rel->exps->t->data;
        return exp_column(rel->name, e->name, exp_subtype(e), e->card);
 }
 
-
 void
 rel_select_add_exp(sql_rel *l, sql_exp *e)
 {
@@ -1058,7 +973,7 @@
                        node *ne = sq->exps->h;
 
                        for (; d && ne; d = d->next, ne = ne->next) 
-                               exp_setname( ne->data, d->data.sval );
+                               exp_setname( ne->data, NULL, d->data.sval );
                }
        }
        return sq;
@@ -1195,8 +1110,8 @@
        if (!rel->exps)
                rel->exps = new_exp_list();
        append(rel->exps, e);
-       exp_setname(e, nme);
-       return exp_alias(NULL, nme, rel, e);
+       exp_setname(e, NULL, nme);
+       return exp_column(NULL, nme, exp_subtype(e), rel->card);
 }
 
 sql_exp *
@@ -1337,7 +1252,7 @@
                                sql_column *c = n->data;
                                sql_exp *e = m->data;
 
-                               exp_setname(e, c->base.name);
+                               exp_setname(e, NULL, c->base.name);
                                if (e->card == CARD_AGGR)
                                        e->card = CARD_MULTI;
                        }
@@ -3192,7 +3107,7 @@
                                if (ve) {
                                        dlist *l = dlist_create(sql->sa);
                                        symbol *sym;
-                                       exp_setname(ve, name);
+                                       exp_setname(ve, NULL, name);
                                        /* now we should rewrite the selection
                                           such that it uses the new group
                                           by column 
@@ -3510,7 +3425,7 @@
                return NULL;
        /* AS name */
        if (ve && l->h->next->data.sval) 
-               exp_setname(ve, l->h->next->data.sval);
+               exp_setname(ve, NULL, l->h->next->data.sval);
        return ve;
 }
 
@@ -3607,7 +3522,7 @@
                        rel = rel_compare_exp(sql, rel, exp_dup(lc), 
exp_dup(rc), "=", NULL, sql_where);
                        cond = rel_unop_(sql, exp_dup(lc), NULL, "isnull");
                        lc = rel_nop_(sql, cond, exp_dup(rc), exp_dup(lc), 
NULL, NULL, "ifthenelse");
-                       exp_setname(lc, nm);
+                       exp_setname(lc, NULL, nm);
                        append(outexps, lc);
                } else if (all) {
                        found = 0;
@@ -3693,7 +3608,7 @@
 
                                assert(e->type == e_cmp);
                                assert(re->type == e_column);
-                               re = exp_alias(inner->name, re->r, inner, re);
+                               re = exp_column(inner->name, re->r, 
exp_subtype(re), inner->card);
                                e = exp_compare( exp_dup(e->l), re, e->flag);
                                append(jexps, e);
                        }
@@ -4050,6 +3965,7 @@
        if (js && js->token != SQL_USING) {     /* On sql_logical_exp */
                rel = rel_logical_exp(sql, rel, js, sql_where);
        } else if (js) {        /* using */
+               char *tname = NULL;
                dnode *n = js->data.lval->h;
                list *outexps = new_exp_list(), *exps;
                node *m;
@@ -4069,7 +3985,7 @@
                        rel = rel_compare_exp(sql, rel, exp_dup(ls), 
exp_dup(rs), "=", NULL, sql_where);
                        cond = rel_unop_(sql, exp_dup(ls), NULL, "isnull");
                        ls = rel_nop_(sql, cond, exp_dup(rs), exp_dup(ls), 
NULL, NULL, "ifthenelse");
-                       exp_setname(ls, nm);
+                       exp_setname(ls, tname, nm);
                        append(outexps, ls);
                        if (!rel) {
                                list_destroy(outexps);
@@ -4107,10 +4023,13 @@
                }
                list_destroy(exps);
                rel = rel_project(rel, outexps);
-               if (!rel->name)
-                       rel_label(rel, ++sql->label);
        } else {                /* ! js -> natural join */
                rel = join_on_column_name(sql, rel, t1, t2, 0);
+               /* As the natural join only returns a new relation with 
+                  join columns, we should rename this relation too beable
+                  to uniquely describe a column of this relation again
+                  (not refering to the lower relation columns).
+                */
                if (!rel->name)
                        rel_label(rel, ++sql->label);
        }

Index: rel_exp.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_exp.mx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- rel_exp.mx  27 Jan 2008 19:18:58 -0000      1.2
+++ rel_exp.mx  28 Jan 2008 16:25:53 -0000      1.3
@@ -28,7 +28,6 @@
 
 #define new_exp_list() list_create((fdestroy)&exp_destroy)
 
-extern sql_exp *exp_create( int type);
 extern sql_exp *exp_dup(sql_exp* e);
 extern void exp_destroy(sql_exp* e);
 
@@ -53,9 +52,14 @@
 #define exp_aggr1(e, a, d, n, c) \
        exp_aggr(append(new_exp_list(), e), a, d, n, c)
 extern sql_exp * exp_atom( atom *a);
+extern sql_exp * exp_atom_bool(int b); 
 extern sql_exp * exp_atom_int(int i);
 extern sql_exp * exp_atom_str(str s, sql_subtype *st);
 extern sql_exp * exp_atom_clob(str s);
+extern sql_exp * exp_atom_ref(int i, sql_subtype *tpe);
+extern sql_exp * exp_param(char *name, sql_subtype *tpe, int frame);
+extern sql_exp * exp_column( char *tname, char *name, sql_subtype *t, int 
card);
+extern void exp_setname( sql_exp *e, char *tname, char *name );
 
 extern void exp_swap( sql_exp *e );
 
@@ -82,12 +86,13 @@
 #include "rel_semantic.h"
 #include "rel_exp.h"
 
-sql_exp * 
+static sql_exp * 
 exp_create( int type ) 
 {
        sql_exp *e = NEW(sql_exp);
        sql_ref_init(&e->ref);
        e->name = NULL;
+       e->rname = NULL;
        e->card = 0;
        e->flag = 0;
        e->l = e->r = NULL;
@@ -230,6 +235,18 @@
 }
 
 sql_exp *
+exp_atom_bool(int b) 
+{
+       sql_subtype bt; 
+
+       sql_find_subtype(&bt, "boolean", 0, 0);
+       if (b) 
+               return exp_atom(atom_bool(&bt, TRUE ));
+       else
+               return exp_atom(atom_bool(&bt, FALSE ));
+}
+
+sql_exp *
 exp_atom_int(int i) 
 {
        sql_subtype it; 
@@ -253,6 +270,56 @@
        return exp_atom(atom_string(&clob, _strdup(s), 1 ));
 }
 
+sql_exp * 
+exp_atom_ref(int i, sql_subtype *tpe) 
+{
+       sql_exp *e = exp_create(e_atom);
+       e->card = CARD_ATOM;
+       e->flag = i;
+       e->f = tpe;
+       return e;
+}
+
+sql_exp * 
+exp_param(char *name, sql_subtype *tpe, int frame) 
+{
+       sql_exp *e = exp_create(e_atom);
+       e->r = _strdup(name);
+       e->card = CARD_ATOM;
+       e->f = tpe;
+       e->flag = frame;
+       return e;
+}
+
+sql_exp * 
+exp_column( char *tname, char *cname, sql_subtype *t, int card) 
+{
+       sql_exp *e = exp_create(e_column);
+
+       assert(cname);
+       e->card = card;
+       e->name = _strdup(cname);
+       e->l = (tname)?_strdup(tname):NULL;
+       e->r = _strdup(cname);
+       e->f = t;
+       return e;
+}
+
+/* Set a name (alias) for the expression, such that we can refer 
+   to this expression by this simple name.
+ */
+void 
+exp_setname( sql_exp *e, char *tname, char *name )
+{
+       if (e->name)
+               _DELETE(e->name);
+       e->name = _strdup(name);
+
+       if (e->rname)
+               _DELETE(e->rname);
+       e->rname = (tname)?_strdup(tname):NULL;
+}
+
 void
 exp_swap( sql_exp *e ) 
 {

Index: rel_bin.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_bin.mx,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- rel_bin.mx  27 Jan 2008 21:13:06 -0000      1.30
+++ rel_bin.mx  28 Jan 2008 16:25:53 -0000      1.31
@@ -884,9 +884,8 @@
 
                if (!s) {
                        assert(0);
+                       cond_stmt_destroy(sub);
                        list_destroy(l);
-                       if (sub) 
-                               stmt_destroy(sub);
                        return NULL;
                }
                if (sub && sub->nrcols >= 1 && s->nrcols == 0)

Index: sql_statement.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_statement.mx,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -d -r1.157 -r1.158
--- sql_statement.mx    11 Jan 2008 10:52:14 -0000      1.157
+++ sql_statement.mx    28 Jan 2008 16:25:53 -0000      1.158
@@ -923,8 +923,9 @@
                case st_bat:
                case st_append_col:
                case st_update_col:
-                       if (depend_type == COLUMN_DEPENDENCY) {
-                               dep_list = list_append(dep_list, 
&(s->op1.cval->base.id));
+                       if (depend_type == COLUMN_DEPENDENCY) { 
+                               if (isTable(s->op1.cval->t)) 
+                                       dep_list = list_append(dep_list, 
&(s->op1.cval->base.id));
                                dep_list = list_append(dep_list, 
&(s->op1.cval->t->base.id));
                        }
                        break;


-------------------------------------------------------------------------
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