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

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


U sql_server.mx
Index: sql_server.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_server.mx,v
retrieving revision 1.198.2.1
retrieving revision 1.198.2.2
diff -u -d -r1.198.2.1 -r1.198.2.2
--- sql_server.mx       24 May 2008 17:17:11 -0000      1.198.2.1
+++ sql_server.mx       4 Jun 2008 20:19:13 -0000       1.198.2.2
@@ -135,6 +135,10 @@
        .COMMAND mvc_result_column( mvc m, str tname, str name, str typename, 
int digits, int scale, any val) = mvc_result_value_wrap; "Add the value to the 
row query result"
        .COMMAND mvc_result_column( mvc m, str tname, str name, str typename, 
int digits, int scale, BAT[oid,any] col) = mvc_result_column_wrap; "Add the 
colunm to the table query result"
 
+       .COMMAND mvc_declared_table( mvc m, str name) : int = 
mvc_declared_table_wrap; "Create structure for the declared table" 
+
+       .COMMAND mvc_declared_table_column( mvc m, int rs, str tname, str name, 
str typename, int digits, int scale) = mvc_declared_table_column_wrap; "Add the 
colunm to the declared table"
+
        .COMMAND mvc_schema_operation(mvc m, Stream s, str w) =
                mvc_export_schema_wrap; "export a schema operation to stream s"
 
@@ -798,6 +802,37 @@
 }
 
 int
+mvc_declared_table_wrap(int *res_id, mvc *M, str name)
+{
+       mvc *m = *(mvc**)M;
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+
+       s = mvc_bind_schema(m, "%dt%");
+       t = mvc_create_table(m, s, name, TRUE, SQL_DECLARED_TABLE, CA_DROP, 0);
+       *res_id = 0;
+       return GDK_SUCCEED;
+}
+
+int 
+mvc_declared_table_column_wrap(mvc *M, int *rs, str tname, str name, str type, 
int *digits, int *scale)
+{
+       mvc *m = *(mvc**)M;
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+       sql_subtype tpe;
+
+       if (*rs != 0)
+               return GDK_FAIL;
+       if (!sql_find_subtype(&tpe, type, *digits, *scale))
+               return GDK_FAIL;
+       s = mvc_bind_schema(m, "%dt%");
+       t = mvc_bind_table(m, s, tname);
+       (void)mvc_create_column(m, t, name, &tpe); 
+       return GDK_SUCCEED;
+}
+
+int
 mvc_result_value_wrap(mvc *M, str tn, str name, str type, int *digits, int 
*scale, ptr p, int mtype)
 {
        if (mvc_result_value(*(mvc **) M, tn, name, type, *digits, *scale, p, 
mtype))

U sql_gencode.mx
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_gencode.mx,v
retrieving revision 1.174
retrieving revision 1.174.2.1
diff -u -d -r1.174 -r1.174.2.1
--- sql_gencode.mx      9 Apr 2008 09:56:21 -0000       1.174
+++ sql_gencode.mx      4 Jun 2008 20:19:12 -0000       1.174.2.1
@@ -71,6 +71,49 @@
                }
 @)
 
+static int 
+column_namelen( sql_column *c )
+{
+       int len = 0;
+
+       if (c->t->s)
+               len += strlen(c->t->s->base.name);
+       else
+               len += 3;
+       return len + strlen(c->t->base.name) + strlen(c->base.name); 
+}
+
+static int 
+idx_namelen( sql_idx *i )
+{
+       int len = 0;
+
+       if (i->t->s)
+               len += strlen(i->t->s->base.name);
+       else
+               len += 3;
+       return len + strlen(i->t->base.name) + strlen(i->base.name); 
+}
+
+static int 
+table_namelen( sql_table *t )
+{
+       int len = 0;
+
+       if (t->s)
+               len += strlen(t->s->base.name);
+       else
+               len += 3;
+       return len + strlen(t->base.name);
+}
+
+static char *
+getschema_name(sql_table *t)
+{
+       if (t->s)
+               return t->s->base.name;
+       return "nil";
+}
 
 static void
 write_head(backend *sql, int nr)
@@ -181,6 +224,42 @@
        }
 }
 
+static void
+dump_table(backend *sql, stmt *s)
+{
+       node *n;
+       sql_table *t = tail_type(s)->comp_type;
+       ssize_t len, buflen = BUFSIZ;
+       char *buf = NEW_ARRAY(char, BUFSIZ); 
+
+       len = snprintf(buf, buflen, "var s%d := mvc_declared_table(myc, 
\"%s\");\n", -s->nr, t->base.name);
+       assert(len <= buflen);
+       write_command(sql, buf);
+       write_part(sql, buf, len);
+       len = 0;
+       for (n = t->columns.set->h; n; n = n->next) {
+               ssize_t sl;
+               sql_column *c = n->data;
+               char *tn = c->t->base.name;
+               char *cn = c->base.name;
+               char *ntn = sql_escape_ident(tn);
+               char *ncn = sql_escape_ident(cn);
+
+               sl = strlen(tn) + strlen(cn) + strlen(c->type.type->sqlname);
+               if (buflen - len < 128 + sl) {
+                       buflen += BUFSIZ + sl;
+                       buf = RENEW_ARRAY(char, buf, buflen);
+               }
+               len = snprintf(buf, buflen, "mvc_declared_table_column(myc, 
s%d, \"%s\", \"%s\", \"%s\", %u, %u);\n", -s->nr, ntn, ncn, 
c->type.type->sqlname, c->type.digits, c->type.scale);
+               assert(len <= buflen);
+               _DELETE(ntn);
+               _DELETE(ncn);
+               write_command(sql, buf);
+               write_part(sql, buf, len);
+               len = 0;
+       }
+}
+
 int
 range_join_convertable(stmt *s, stmt **base, stmt **L, stmt **H) 
 {
@@ -407,9 +486,13 @@
                                                int tt = 
tail_type(s)->type->localtype;
                                                len = snprintf(buf, buflen, 
"declareVariable(myc, \"%s\", %s(nil));\n", s->op1.sval, ATOMname(tt));
                                        }
-                               } else { 
-                                       if ((s->flag & VAR_DECLARE) == 0) {
-                                               len = snprintf(buf, buflen, 
"var s%d := %s;\n", -s->nr, s->op1.sval);
+                               } else if ((s->flag & VAR_DECLARE) == 0) {
+                                       len = snprintf(buf, buflen, "var s%d := 
%s;\n", -s->nr, s->op1.sval);
+                               } else {
+                                       int tt = tail_type(s)->type->localtype;
+                                       if (tt == TYPE_bat) {
+                                               dump_table(sql, s);
+                                               break;
                                        } else {
                                                len = snprintf(buf, buflen, 
"var %s;\n", s->op1.sval);
                                        }
@@ -441,31 +524,30 @@
                        backend_dec_nr2(s->op1.stval);
                        break;
                case st_bat: {
-                       buflen = 128 + strlen(s->op1.cval->t->s->base.name) + 
strlen(s->op1.cval->t->base.name) + strlen(s->op1.cval->base.name);
-
+                       buflen = 128 + column_namelen(s->op1.cval); 
                        buf = NEW_ARRAY(char, buflen + 1);
 
-                       len = snprintf(buf, buflen, "var s%d := mvc_bind(myc, 
\"%s\", \"%s\", \"%s\", %d);\n", -s->nr, s->op1.cval->t->s->base.name, 
s->op1.cval->t->base.name, s->op1.cval->base.name, s->flag);
+                       len = snprintf(buf, buflen, "var s%d := mvc_bind(myc, 
\"%s\", \"%s\", \"%s\", %d);\n", -s->nr, getschema_name(s->op1.cval->t), 
s->op1.cval->t->base.name, s->op1.cval->base.name, s->flag);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr); 
                        _DELETE(buf);
                        break;
                }
                case st_dbat:{
-                       buflen = 128 + strlen(s->op1.tval->s->base.name) + 
strlen(s->op1.tval->base.name);
+                       buflen = 128 + table_namelen(s->op1.tval); 
                        buf = NEW_ARRAY(char, buflen + 1);
 
-                       len = snprintf(buf, buflen, "var s%d := 
mvc_bind_dbat(myc, \"%s\", \"%s\", %d);\n", -s->nr, s->op1.tval->s->base.name, 
s->op1.tval->base.name, s->flag);
+                       len = snprintf(buf, buflen, "var s%d := 
mvc_bind_dbat(myc, \"%s\", \"%s\", %d);\n", -s->nr, 
getschema_name(s->op1.tval), s->op1.tval->base.name, s->flag);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        _DELETE(buf);
                        break;
                }
                case st_idxbat:{
-                       buflen = 128 + strlen(s->op1.idxval->t->s->base.name) + 
strlen(s->op1.idxval->t->base.name) + strlen(s->op1.idxval->base.name);
+                       buflen = 128 + idx_namelen(s->op1.idxval); 
                        buf = NEW_ARRAY(char, buflen + 1);
 
-                       len = snprintf(buf, buflen, "var s%d := 
mvc_bind_idxbat(myc, \"%s\", \"%s\", \"%s\", %d);\n", -s->nr, 
s->op1.idxval->t->s->base.name, s->op1.idxval->t->base.name, 
s->op1.idxval->base.name, s->flag);
+                       len = snprintf(buf, buflen, "var s%d := 
mvc_bind_idxbat(myc, \"%s\", \"%s\", \"%s\", %d);\n", -s->nr, 
getschema_name(s->op1.idxval->t), s->op1.idxval->t->base.name, 
s->op1.idxval->base.name, s->flag);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        _DELETE(buf);
@@ -1123,9 +1205,9 @@
                        sql_column *c = s->op1.cval; 
                        int r = backend_dumpstmt_(s->op2.stval, nr, sql);
 
-                       buflen = 128 + strlen(c->t->s->base.name) + 
strlen(c->t->base.name) + strlen(c->base.name);
+                       buflen = 128 + column_namelen(c);
                        buf = NEW_ARRAY(char, buflen + 1);
-                       len = snprintf(buf, buflen, "var s%d := mvc_%s(myc, 
\"%s\", \"%s\", \"%s\", s%d);\n", -s->nr, n, c->t->s->base.name, 
c->t->base.name, c->base.name, r);
+                       len = snprintf(buf, buflen, "var s%d := mvc_%s(myc, 
\"%s\", \"%s\", \"%s\", s%d);\n", -s->nr, n, getschema_name(c->t), 
c->t->base.name, c->base.name, r);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        backend_dump_nil(sql, s->op2.stval);
@@ -1138,9 +1220,9 @@
                        sql_idx *i = s->op1.idxval; 
                        int r = backend_dumpstmt_(s->op2.stval, nr, sql);
 
-                       buflen = 128 + strlen(i->t->s->base.name) + 
strlen(i->t->base.name) + strlen(i->base.name);
+                       buflen = 128 + idx_namelen(i);
                        buf = NEW_ARRAY(char, buflen + 1);
-                       len = snprintf(buf, buflen, "var s%d := mvc_%s_idx(myc, 
\"%s\", \"%s\", \"%s\", s%d);\n", -s->nr, n, i->t->s->base.name, 
i->t->base.name, i->base.name, r);
+                       len = snprintf(buf, buflen, "var s%d := mvc_%s_idx(myc, 
\"%s\", \"%s\", \"%s\", s%d);\n", -s->nr, n, getschema_name(i->t), 
i->t->base.name, i->base.name, r);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        backend_dump_nil(sql, s->op2.stval);
@@ -1151,9 +1233,9 @@
                        sql_table *t = s->op1.tval;
                        int r = backend_dumpstmt_(s->op2.stval, nr, sql);
 
-                       buflen = strlen(t->base.name) + strlen(t->s->base.name) 
+ SMALLBUFSIZ;
+                       buflen = table_namelen(t) + SMALLBUFSIZ;
                        buf = NEW_ARRAY(char, buflen + 1);
-                       len = snprintf(buf, buflen, "var s%d := mvc_delete(myc, 
\"%s\", \"%s\", s%d);\n", -s->nr, t->s->base.name, t->base.name, r);
+                       len = snprintf(buf, buflen, "var s%d := mvc_delete(myc, 
\"%s\", \"%s\", s%d);\n", -s->nr, getschema_name(t), t->base.name, r);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        _DELETE(buf);
@@ -1162,10 +1244,10 @@
                case st_table_clear:{
                        sql_table *t = s->op1.tval;
 
-                       buflen = strlen(t->base.name) + strlen(t->s->base.name) 
+ SMALLBUFSIZ;
+                       buflen = table_namelen(t) + SMALLBUFSIZ;
                        buf = NEW_ARRAY(char, buflen + 1);
 
-                       len = snprintf(buf, buflen, "var s%d := 
mvc_clear_table(myc, \"%s\", \"%s\");\n", -s->nr, t->s->base.name, 
t->base.name);
+                       len = snprintf(buf, buflen, "var s%d := 
mvc_clear_table(myc, \"%s\", \"%s\");\n", -s->nr, getschema_name(t), 
t->base.name);
                        assert(len <= buflen);
                        dump(sql, buf, len, -s->nr);
                        _DELETE(buf);
@@ -1755,28 +1837,6 @@
                                sql_error(c, 003, buf);
                                return -1;
                        }
-                       /*
-                       if (atom_null(a)) {
-                               int t = argv[i].vtype;
-
-                               if (a->data.vtype != t) {
-                                       a->data.vtype = t;
-                                       if (ATOMstorage(t) < TYPE_str) {
-                                               ptr p = ATOMnilptr(t);
-
-                                               VALset(&a->data, t, p);
-                                       } else {
-                                               a->data.val.pval = NULL;
-                                       }
-                               }
-                       } else if (a->data.vtype != argv[i].vtype && 
argv[i].vtype == TYPE_dbl) { 
-                               a->data.vtype = argv[i].vtype;
-                               a->data.val.dval = a->d;
-                       } else if (a->data.vtype != argv[i].vtype && 
argv[i].vtype == TYPE_flt) { 
-                               a->data.vtype = argv[i].vtype;
-                               a->data.val.fval = a->d;
-                       }
-                       */
                        /* cast DEC into FLT */
                        argv[i] = a->data;
                }


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