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