Changeset: 5d02f4983b31 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d02f4983b31
Modified Files:
        sql/src/server/rel_updates.mx
Branch: Jun2010
Log Message:

fixed bug in multi row updates


diffs (52 lines):

diff -r 797cacf0abbd -r 5d02f4983b31 sql/src/server/rel_updates.mx
--- a/sql/src/server/rel_updates.mx     Mon Jul 05 14:38:36 2010 +0200
+++ b/sql/src/server/rel_updates.mx     Mon Jul 05 16:08:26 2010 +0200
@@ -391,25 +391,37 @@
                                exp_kind ek = {type_value, card_column, FALSE};
 
                                v = rel_value_exp(sql, &rel_val, a, sql_sel, 
ek);
-                               if (v) {
-                                       if (rel_val) {
-                                               list *exps = 
rel_projections(sql, r, NULL, 0, 1);
-                                               sql_rel *nr = 
rel_project(rel_crossproduct(rel_dup(r->l), rel_val, op_join), exps);
-                                               rel_destroy(r);
-                                               r = nr;
-                                       }
-                               } else {
+
+                               if (!v) {
                                        sql->errstr[0] = 0;
                                        sql->session->status = status;
                                        v = rel_value_exp(sql, &r, a, sql_sel, 
ek);
+                               }
+                               if (!v || (v = rel_check_type(sql, &c->type, v, 
type_equal)) == NULL) {
+                                       if (v)
+                                               exp_destroy(v);
+                                       rel_destroy(r);
+                                       return NULL;
+                               }
+                               if (rel_val) {
+                                       sql_rel *nr;
+                                       list *exps;
+
+                                       if (!exp_name(v))
+                                               exp_label(v, ++sql->label);
+                                       rel_val = rel_project(rel_val, 
rel_projections(sql, rel_val, NULL, 0, 1));
+                                       rel_project_add_exp(sql, rel_val, v);
+                                       exps = rel_projections(sql, r, NULL, 0, 
1);
+                                       nr = 
rel_project(rel_crossproduct(rel_dup(r->l), rel_val, op_join), exps);
+                                       rel_destroy(r);
+                                       r = nr;
+                                       v = exp_column(NULL, exp_name(v), 
exp_subtype(v), v->card, has_nil(v), is_intern(v));
                                }               
                        } else {
                                v = exp_atom(atom_general(&c->type, NULL, 0));
                        }
 
-                       if (!v || (v = rel_check_type(sql, &c->type, v, 
type_equal)) == NULL) {
-                               if (v)
-                                       exp_destroy(v);
+                       if (!v) {
                                rel_destroy(r);
                                return NULL;
                        }
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to