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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list