Changeset: f1b1cacd2cc0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f1b1cacd2cc0
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: tvtree
Log Message:

merged with nested


diffs (63 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -5971,9 +5971,12 @@ table_update_stmts(mvc *sql, sql_table *
        return SA_ZNEW_ARRAY(sql->sa, stmt *, *Len);
 }
 
+static stmt *insert_ms(backend *be, sql_table *st, sql_subtype *ct, stmt *ms);
+
 static node *
-insert_composite(stmt **updates, sql_column *c, node *n, node *m)
-{
+insert_composite(backend *be, stmt **updates, sql_table *st, sql_column *c, 
node *n, node *m)
+{
+       mvc *sql = be->mvc;
        node *f;
        stmt *input_tuple = m->data;
 
@@ -5984,8 +5987,15 @@ insert_composite(stmt **updates, sql_col
        for(n = n->next, f = c->type.type->d.fields->h, m = 
input_tuple->op4.lval->h; n && m && f; f = f->next) {
                sql_column *c = n->data;
 
-               if (c->type.type->composite && !c->type.multiset) {
-                       n = insert_composite(updates, c, n, m);
+               if (c->type.multiset) {
+                       sql_table *nst = mvc_bind_table(sql, st->s, 
c->storage_type);
+                       if (!nst)
+                               return sql_error(sql, 10, SQLSTATE(27000) 
"INSERT INTO: sub table '%s' missing", c->storage_type);
+                       updates[c->colnr] = insert_ms(be, nst, &c->type, 
m->data);
+                       n = n->next;
+                       m = m->next;
+               } else if (c->type.type->composite && !c->type.multiset) {
+                       n = insert_composite(be, updates, st, c, n, m);
                        m = m->next;
                } else {
                        updates[c->colnr] = m->data;
@@ -6022,7 +6032,7 @@ insert_ms(backend *be, sql_table *st, sq
                        n = n->next;
                        m = m->next;
                } else if (c->type.type->composite && !c->type.multiset) {
-                       n = insert_composite(updates, c, n, m);
+                       n = insert_composite(be, updates, st, c, n, m);
                        m = m->next;
                } else {
                        insert = updates[c->colnr] = m->data;
@@ -6148,7 +6158,7 @@ rel2bin_insert_ms(backend *be, sql_rel *
                        n = n->next;
                        m = m->next;
                } else if (c->type.type->composite && !c->type.multiset) {
-                       n = insert_composite(updates, c, n, m);
+                       n = insert_composite(be, updates, t, c, n, m);
                        m = m->next;
                } else {
                        updates[c->colnr] = m->data;
@@ -6313,7 +6323,7 @@ rel2bin_insert(backend *be, sql_rel *rel
                sql_column *c = n->data;
 
                if (c->type.type->composite && !c->type.multiset) {
-                       n = insert_composite(updates, c, n, m);
+                       n = insert_composite(be, updates, t, c, n, m);
                        m = m->next;
                } else {
                        updates[c->colnr] = m->data;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to