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