Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32040/src/backends/monet5

Modified Files:
      Tag: SQL_2-24
        sql.mx sql_gencode.mx sql_optimizer.mx 
Log Message:
changed handling of declared tables to fix the schema_from_declared_table
bug.


U sql_gencode.mx
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.275
retrieving revision 1.275.2.1
diff -u -d -r1.275 -r1.275.2.1
--- sql_gencode.mx      24 Apr 2008 20:36:18 -0000      1.275
+++ sql_gencode.mx      4 Jun 2008 20:19:14 -0000       1.275.2.1
@@ -173,6 +173,34 @@
        }
 }
 
+int
+dump_table(MalBlkPtr mb, sql_table *t)
+{
+       int nr;
+       node *n;
+       InstrPtr k = newStmt1(mb, sqlRef, "declaredTable");
+
+       nr = getDestVar(k);
+       k = pushStr(mb, k, t->base.name );
+       for (n = t->columns.set->h; n; n = n->next) {
+               sql_column *c = n->data;
+               char *tname = c->t->base.name;
+               char *tn = sql_escape_ident(tname);
+               char *cn = c->base.name;
+               InstrPtr q = newStmt1(mb, sqlRef, "dtColumn");
+
+               q = pushArgument(mb, q, nr);
+               q = pushStr(mb, q, tn);
+               q = pushStr(mb, q, cn);
+               q = pushStr(mb, q, c->type.type->sqlname);
+               q = pushInt(mb, q, c->type.digits);
+               q = pushInt(mb, q, c->type.scale);
+               _DELETE(tn);
+       }
+       return nr;
+}
+
+
 @-
 The dump_cols produces a sequence of instructions for
 the front-end to prepare presentation of a result table (bat).
@@ -313,6 +341,15 @@
        return q;
 }
 
+InstrPtr
+pushSchema(MalBlkPtr mb, InstrPtr q, sql_table *t)
+{
+       if (t->s)
+               return pushStr(mb, q, t->s->base.name);
+       else
+               return pushNil(mb, q, TYPE_str);
+}
+
 static char*
 reconnect(MalBlkPtr mb, list *l)
 {
@@ -421,6 +458,11 @@
                                        int tt = tail_type(s)->type->localtype;
                                        char *buf;
 
+                                       if (tt == TYPE_bat) {
+                                               /* declared table */
+                                               s->nr = dump_table(mb, 
tail_type(s)->comp_type);
+                                               break;
+                                       }
                                        buf = alloca(SMALLBUFSIZ);
                                        (void) snprintf(buf, SMALLBUFSIZ, 
"A%s", s->op1.sval);
                                        q = newInstruction(mb,ASSIGNsymbol);
@@ -462,7 +504,7 @@
                        q = newStmt2(mb, sqlRef, bindRef);
                        setVarType(mb, getArg(q, 0), newBatType(ht, tt));
                        setVarUDFtype(mb,getArg(q,0));
-                       q = pushStr(mb, q, s->op1.cval->t->s->base.name);
+                       q = pushSchema(mb, q, s->op1.cval->t);
                        q = pushStr(mb, q, s->op1.cval->t->base.name);
                        q = pushStr(mb, q, s->op1.cval->base.name);
                        q = pushInt(mb, q, s->flag);
@@ -474,7 +516,7 @@
                        q = newStmt2(mb, sqlRef, binddbatRef);
                        setVarType(mb, getArg(q,0), newBatType(ht,TYPE_oid));
                        setVarUDFtype(mb,getArg(q,0));
-                       q = pushStr(mb, q, s->op1.tval->s->base.name);
+                       q = pushSchema(mb, q, s->op1.tval);
                        q = pushStr(mb, q, s->op1.tval->base.name);
                        q = pushInt(mb, q, s->flag);
                        s->nr = getDestVar(q);
@@ -488,7 +530,7 @@
                        tt = tail_type(s)->type->localtype;
                        setVarType(mb, getArg(q, 0), newBatType(ht, tt));
                        setVarUDFtype(mb,getArg(q,0));
-                       q = pushStr(mb, q, s->op1.idxval->t->s->base.name);
+                       q = pushSchema(mb, q, s->op1.idxval->t);
                        q = pushStr(mb, q, s->op1.idxval->t->base.name);
                        q = pushStr(mb, q, s->op1.idxval->base.name);
                        q = pushInt(mb, q, s->flag);
@@ -1384,7 +1426,7 @@
                        char *n = (s->type==st_append_col)?appendRef:updateRef;
 
                        q = newStmt2(mb, sqlRef, n);
-                       q = pushStr(mb, q, c->t->s->base.name);
+                       q = pushSchema(mb, q, c->t);
                        q = pushStr(mb, q, c->t->base.name);
                        q = pushStr(mb, q, c->base.name);
                        q = pushArgument(mb, q, r);
@@ -1399,7 +1441,7 @@
                        char *n = (s->type==st_append_idx)?appendRef:updateRef;
 
                        q = newStmt2(mb, sqlRef, n);
-                       q = pushStr(mb, q, i->t->s->base.name);
+                       q = pushSchema(mb, q, i->t);
                        q = pushStr(mb, q, i->t->base.name);
                        q = pushStr(mb, q, i->base.name);
                        q = pushArgument(mb, q, r);
@@ -1411,7 +1453,7 @@
                        sql_table *t = s->op1.tval;
 
                        q = newStmt1(mb, sqlRef, "delete");
-                       q = pushStr(mb, q, t->s->base.name);
+                       q = pushSchema(mb, q, t);
                        q = pushStr(mb, q, t->base.name);
                        q = pushArgument(mb, q, r);
                        s->nr = l;
@@ -1420,7 +1462,7 @@
                        sql_table *t = s->op1.tval;
 
                        q = newStmt1(mb, sqlRef, "clear_table");
-                       q = pushStr(mb, q, t->s->base.name);
+                       q = pushSchema(mb, q, t);
                        q = pushStr(mb, q, t->base.name);
                        s->nr = getDestVar(q);
                } break;

U sql_optimizer.mx
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.181
retrieving revision 1.181.2.1
diff -u -d -r1.181 -r1.181.2.1
--- sql_optimizer.mx    30 Apr 2008 06:59:31 -0000      1.181
+++ sql_optimizer.mx    4 Jun 2008 20:19:14 -0000       1.181.2.1
@@ -325,6 +325,7 @@
                        int part = 0, off = 0;
                        int k = getArg(p,0);
                        sql_bpm *bpm = NULL;
+                       sql_schema *s = mvc_bind_schema(m, sname);
 
                        if (f == binddbatRef) {
                                mode = getVarConstant(mb, getArg(p,3)).val.ival;
@@ -334,7 +335,6 @@
                        }
 
                        if( f == bindidxRef) {
-                               sql_schema *s = mvc_bind_schema(m, sname);
                                sql_idx *i = mvc_bind_idx(m, s, cname);
 
                                if (active_store_type == store_bpm) {
@@ -348,8 +348,7 @@
                                }
                                if (i->t->cnt && (mode == RDONLY || mode == 
RD_UPD))
                                        rows = i->t->cnt;
-                       } else if ( f == bindRef) {
-                               sql_schema *s = mvc_bind_schema(m, sname);
+                       } else if (s && f == bindRef) {
                                sql_table *t = mvc_bind_table(m, s, tname);
                                sql_column *c = mvc_bind_column(m, t, cname);
 

U sql.mx
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.263.2.1
retrieving revision 1.263.2.2
diff -u -d -r1.263.2.1 -r1.263.2.2
--- sql.mx      2 Jun 2008 06:39:45 -0000       1.263.2.1
+++ sql.mx      4 Jun 2008 20:19:13 -0000       1.263.2.2
@@ -153,10 +153,6 @@
 address mvc_result_file_wrap
 comment "Prepare a file result set"; 
 
-command resultSet{unsafe}( nr_cols:int, qtype:int, order:bat[:oid,:any_1] ) 
:int 
-address mvc_result_table_wrap
-comment "Prepare a table result set"; 
-
 command resultSet{unsafe}( nr_cols:int, qtype:int, order:any_1 ) :int 
 address mvc_result_row_wrap
 comment "Prepare a row result set"; 
@@ -182,6 +178,13 @@
 command rsColumn{unsafe}(rs:int, tname:str, name:str, typename:str, 
digits:int, scale:int, val:int ) :void
 address mvc_result_value_int;
 
+command declaredTable{unsafe}( name:str ) :int 
+address mvc_declared_table_wrap
+comment "Prepare a declared table"; 
+
+command dtColumn{unsafe}(rs:int, tname:str, name:str, typename:str, 
digits:int, scale:int) :void
+address mvc_declared_table_column_wrap;
+
 command exportResult{unsafe}(s:streams, res_id:int, w:str) :void
 address mvc_export_result_wrap
 comment "Export a result (in order) to stream s"; 
@@ -718,6 +721,9 @@
 @:result_value_export(sht)@
 @:result_value_export(bte)@
 
+sql5_export str mvc_declared_table_wrap(int *res_id, str *name);
+sql5_export str mvc_declared_table_column_wrap(int *ret, int *rs, str *tname, 
str *name, str *type, int *digits, int *scale);
+
 sql5_export str mvc_result_value_wrap(MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str mvc_affected_rows_wrap(int *r, lng *nr, str *w);
 sql5_export str mvc_export_result_wrap(int *ret, stream **s, int *res_id, str 
*w);
@@ -1678,6 +1684,44 @@
 }
 
 str
+mvc_declared_table_wrap(int *res_id, str *name)
+{
+       mvc *m = NULL;
+       str msg = getContext(&m, NULL);
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+
+       if (msg)
+               return msg;
+       s = mvc_bind_schema(m, "%dt%");
+       t = mvc_create_table(m, s, *name, TRUE, SQL_DECLARED_TABLE, CA_DROP, 0);
+       *res_id = 0;
+       return MAL_SUCCEED;
+}
+
+str 
+mvc_declared_table_column_wrap(int *ret, int *rs, str *tname, str *name, str 
*type, int *digits, int *scale)
+{
+       mvc *m = NULL;
+       str msg = getContext(&m, NULL);
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+       sql_subtype tpe;
+
+       (void)ret;
+       if (msg)
+               return msg;
+       if (*rs != 0)
+                throw(SQL, "sql.dtColumn", "Cannot access declared table");
+       if (!sql_find_subtype(&tpe, *type, *digits, *scale))
+                throw(SQL, "sql.dtColumn", "Cannot find column type");
+       s = mvc_bind_schema(m, "%dt%");
+       t = mvc_bind_table(m, s, *tname);
+       (void)mvc_create_column(m, t, *name, &tpe); 
+       return MAL_SUCCEED;
+}
+
+str
 mvc_affected_rows_wrap(int *r, lng *nr, str *w)
 {
        backend *b = NULL;


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to