Changeset: 8b64c17db04d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b64c17db04d
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/server/rel_select.h
sql/server/rel_updates.c
Branch: default
Log Message:
we need a full relabel on inserts with indices, solves a
problem with key checking/index inserts
diffs (106 lines):
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -7118,7 +7118,7 @@ rel_apply_rewrite(int *changes, mvc *sql
rel->l = nrel;
ident = exp_column(sql->sa, exp_relname(ident),
exp_name(ident), exp_subtype(ident), ident->card, has_nil(ident),
is_intern(ident));
- rel = rel_label(sql, rel);
+ rel = rel_label(sql, rel, 0);
/* look up the identity columns and label these */
le = rel_bind_column(sql, rel, ident->name, 0);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -126,12 +126,13 @@ rel_name( sql_rel *r )
}
sql_rel *
-rel_label( mvc *sql, sql_rel *r)
+rel_label( mvc *sql, sql_rel *r, int all)
{
int nr = ++sql->label;
- char name[16], *nme;
-
- nme = number2name(name, 16, nr);
+ char tname[16], *tnme;
+ char cname[16], *cnme = NULL;
+
+ tnme = number2name(tname, 16, nr);
if (!is_project(r->op)) {
r = rel_project(sql->sa, r, rel_projections(sql, r, NULL, 1,
1));
set_processed(r);
@@ -139,16 +140,26 @@ rel_label( mvc *sql, sql_rel *r)
if (is_project(r->op) && r->exps) {
node *ne = r->exps->h;
- for (; ne; ne = ne->next)
- exp_setname(sql->sa, ne->data, nme, NULL );
+ for (; ne; ne = ne->next) {
+ if (all) {
+ nr = ++sql->label;
+ cnme = number2name(cname, 16, nr);
+ }
+ exp_setname(sql->sa, ne->data, tnme, cnme );
+ }
}
/* op_projects can have a order by list */
if (r->op == op_project && r->r) {
list *exps = r->r;
node *ne = exps->h;
- for (; ne; ne = ne->next)
- exp_setname(sql->sa, ne->data, nme, NULL );
+ for (; ne; ne = ne->next) {
+ if (all) {
+ nr = ++sql->label;
+ cnme = number2name(cname, 16, nr);
+ }
+ exp_setname(sql->sa, ne->data, tnme, cnme );
+ }
}
return r;
}
@@ -2846,7 +2857,7 @@ rel_logical_value_exp(mvc *sql, sql_rel
right = rl;
}
if (right->processed)
- right = rel_label(sql, right);
+ right = rel_label(sql, right, 0);
right = rel_distinct(right);
} else {
return sql_error(sql, 02, "IN: missing inner query");
@@ -3293,7 +3304,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
}
if (!correlated) {
if (right->processed)
- right = rel_label(sql, right);
+ right = rel_label(sql, right, 0);
/*
right = rel_distinct(right);
*/
diff --git a/sql/server/rel_select.h b/sql/server/rel_select.h
--- a/sql/server/rel_select.h
+++ b/sql/server/rel_select.h
@@ -26,7 +26,7 @@ extern sql_rel * rel_project(sql_allocat
extern sql_rel * rel_inplace_project(sql_allocator *sa, sql_rel *rel, sql_rel
*l, list *e);
extern void rel_project_add_exp( mvc *sql, sql_rel *rel, sql_exp *e);
extern list * rel_projections(mvc *sql, sql_rel *rel, char *tname, int
settname , int intern);
-extern sql_rel * rel_label( mvc *sql, sql_rel *r);
+extern sql_rel * rel_label( mvc *sql, sql_rel *r, int all);
extern sql_exp *rel_column_exp(mvc *sql, sql_rel **rel, symbol *column_e, int
f);
extern void rel_add_intern(mvc *sql, sql_rel *rel);
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -233,7 +233,7 @@ rel_insert_idxs(mvc *sql, sql_table *t,
if (!t->idxs.set)
return inserts;
- inserts->r = rel_label(sql, inserts->r);
+ inserts->r = rel_label(sql, inserts->r, 1);
for (n = t->idxs.set->h; n; n = n->next) {
sql_idx *i = n->data;
sql_rel *ins = inserts->r;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list