Changeset: f0b6bba13c55 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f0b6bba13c55 Modified Files: sql/backends/monet5/rel_bin.c Branch: pushdown Log Message:
properly pass partition information again diffs (truncated from 319 to 300 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 @@ -1064,15 +1064,15 @@ exp_bin(backend *be, sql_exp *e, stmt *l } static stmt * -stmt_col( backend *be, sql_column *c, stmt *del) +stmt_col( backend *be, sql_column *c, stmt *del, int part) { - stmt *sc = stmt_bat(be, c, RDONLY, del?del->partition:0); + stmt *sc = stmt_bat(be, c, RDONLY, part); if (isTable(c->t) && c->t->access != TABLE_READONLY && (!isNew(c) || !isNew(c->t) /* alter */) && (c->t->persistence == SQL_PERSIST || c->t->persistence == SQL_DECLARED_TABLE) && !c->t->commit_action) { stmt *i = stmt_bat(be, c, RD_INS, 0); - stmt *u = stmt_bat(be, c, RD_UPD_ID, del?del->partition:0); + stmt *u = stmt_bat(be, c, RD_UPD_ID, part); sc = stmt_project_delta(be, sc, u, i); if (del) sc = stmt_project(be, del, sc); @@ -1083,15 +1083,15 @@ stmt_col( backend *be, sql_column *c, st } static stmt * -stmt_idx( backend *be, sql_idx *i, stmt *del) +stmt_idx( backend *be, sql_idx *i, stmt *del, int part) { - stmt *sc = stmt_idxbat(be, i, RDONLY, del?del->partition:0); + stmt *sc = stmt_idxbat(be, i, RDONLY, part); if (isTable(i->t) && i->t->access != TABLE_READONLY && (!isNew(i) || !isNew(i->t) /* alter */) && (i->t->persistence == SQL_PERSIST || i->t->persistence == SQL_DECLARED_TABLE) && !i->t->commit_action) { stmt *ic = stmt_idxbat(be, i, RD_INS, 0); - stmt *u = stmt_idxbat(be, i, RD_UPD_ID, del?del->partition:0); + stmt *u = stmt_idxbat(be, i, RD_UPD_ID, part); sc = stmt_project_delta(be, sc, u, ic); if (del) sc = stmt_project(be, del, sc); @@ -1130,7 +1130,7 @@ check_table_types(backend *be, list *typ { sql_subtype *ct = n->data; sql_column *dtc = m->data; - stmt *dtcs = stmt_col(be, dtc, dels); + stmt *dtcs = stmt_col(be, dtc, dels, dels->partition); stmt *r = check_types(be, ct, dtcs, tpe); if (!r) return NULL; @@ -1415,7 +1415,7 @@ rel2bin_sql_table(backend *be, sql_table for (n = t->columns.set->h; n; n = n->next) { sql_column *c = n->data; - stmt *sc = stmt_col(be, c, dels); + stmt *sc = stmt_col(be, c, dels, dels->partition); list_append(l, sc); } @@ -1431,7 +1431,7 @@ rel2bin_sql_table(backend *be, sql_table if (t->idxs.set) { for (n = t->idxs.set->h; n; n = n->next) { sql_idx *i = n->data; - stmt *sc = stmt_idx(be, i, dels); + stmt *sc = stmt_idx(be, i, dels, dels->partition); const char *rnme = t->base.name; /* index names are prefixed, to make them independent */ @@ -1471,11 +1471,11 @@ rel2bin_basetable(backend *be, sql_rel * /* do not include empty indices in the plan */ if ((hash_index(i->type) && list_length(i->columns) <= 1) || !idx_has_column(i->type)) continue; - col = stmt_idx(be, i, NULL/*dels*/); + col = stmt_idx(be, i, NULL/*dels*/, dels->partition); } else { sql_column *c = find_sql_column(t, oname); - col = stmt_col(be, c, NULL/*dels*/); + col = stmt_col(be, c, NULL/*dels*/, dels->partition); } } for( en = rel->exps->h; en; en = en->next ) { @@ -1492,7 +1492,7 @@ rel2bin_basetable(backend *be, sql_rel * list *l = sa_list(sql->sa); c = find_sql_column(t, cname); - s = stmt_col(be, c, NULL/*dels*/); + s = stmt_col(be, c, NULL/*dels*/, dels->partition); append(l, s); if (exps->h->next) { sql_exp *at = exps->h->next->data; @@ -1518,13 +1518,13 @@ rel2bin_basetable(backend *be, sql_rel * /* do not include empty indices in the plan */ if ((hash_index(i->type) && list_length(i->columns) <= 1) || !idx_has_column(i->type)) continue; - s = stmt_idx(be, i, NULL/*dels*/); + s = stmt_idx(be, i, NULL/*dels*/, dels->partition); if (!col) col = s; } else { sql_column *c = find_sql_column(t, oname); - s = stmt_col(be, c, NULL/*dels*/); + s = stmt_col(be, c, NULL/*dels*/, dels->partition); if (!col) col = s; } @@ -1705,13 +1705,13 @@ rel2bin_table(backend *be, sql_rel *rel, sql_column *c = n->data; if (ti->type == 2) { /* updates */ - stmt *s = stmt_col(be, c, ti->tids); + stmt *s = stmt_col(be, c, ti->tids, ti->tids->partition); append(l, stmt_alias(be, s, ti->on, c->base.name)); } if (ti->updates[c->colnr]) { append(l, stmt_alias(be, ti->updates[c->colnr], ti->nn, c->base.name)); } else { - stmt *s = stmt_col(be, c, ti->tids); + stmt *s = stmt_col(be, c, ti->tids, ti->tids->partition); append(l, stmt_alias(be, s, ti->nn, c->base.name)); assert(ti->type != 1); } @@ -3529,12 +3529,12 @@ insert_check_ukey(backend *be, list *ins if (s->key && s->nrcols == 0) { s = NULL; if (k->idx && hash_index(k->idx->type)) - s = stmt_uselect(be, stmt_idx(be, k->idx, dels), idx_inserts, cmp_equal, s, 0, 1 /* is_semantics*/); + s = stmt_uselect(be, stmt_idx(be, k->idx, dels, dels->partition), idx_inserts, cmp_equal, s, 0, 1 /* is_semantics*/); for (m = k->columns->h; m; m = m->next) { sql_kc *c = m->data; stmt *cs = list_fetch(inserts, c->c->colnr); - col = stmt_col(be, c->c, dels); + col = stmt_col(be, c->c, dels, dels->partition); if ((k->type == ukey) && stmt_has_null(col)) { stmt *nn = stmt_selectnonil(be, col, s); s = stmt_uselect( be, col, cs, cmp_equal, nn, 0, 0); @@ -3546,14 +3546,14 @@ insert_check_ukey(backend *be, list *ins list *lje = sa_list(sql->sa); list *rje = sa_list(sql->sa); if (k->idx && hash_index(k->idx->type)) { - list_append(lje, stmt_idx(be, k->idx, dels)); + list_append(lje, stmt_idx(be, k->idx, dels, dels->partition)); list_append(rje, idx_inserts); } for (m = k->columns->h; m; m = m->next) { sql_kc *c = m->data; stmt *cs = list_fetch(inserts, c->c->colnr); - col = stmt_col(be, c->c, dels); + col = stmt_col(be, c->c, dels, dels->partition); list_append(lje, col); list_append(rje, cs); } @@ -3600,7 +3600,7 @@ insert_check_ukey(backend *be, list *ins sql_kc *c = k->columns->h->data; stmt *s = list_fetch(inserts, c->c->colnr), *h = s; - s = stmt_col(be, c->c, dels); + s = stmt_col(be, c->c, dels, dels->partition); if ((k->type == ukey) && stmt_has_null(s)) { stmt *nn = stmt_selectnonil(be, s, NULL); s = stmt_project(be, nn, s); @@ -3981,7 +3981,7 @@ update_check_ukey(backend *be, stmt **up list *rje = sa_list(sql->sa); if (k->idx && hash_index(k->idx->type)) { - list_append(lje, stmt_idx(be, k->idx, nu_tids)); + list_append(lje, stmt_idx(be, k->idx, nu_tids, nu_tids->partition)); list_append(rje, idx_updates); } for (m = k->columns->h; m; m = m->next) { @@ -3992,9 +3992,9 @@ update_check_ukey(backend *be, stmt **up if (updates[c->c->colnr]) { upd = updates[c->c->colnr]; } else { - upd = stmt_project(be, tids, stmt_col(be, c->c, dels)); + upd = stmt_project(be, tids, stmt_col(be, c->c, dels, dels->partition)); } - list_append(lje, stmt_col(be, c->c, nu_tids)); + list_append(lje, stmt_col(be, c->c, nu_tids, nu_tids->partition)); list_append(rje, upd); } s = releqjoin(be, lje, rje, NULL, 1 /* hash used */, cmp_equal, 0, 0); @@ -4041,11 +4041,11 @@ update_check_ukey(backend *be, stmt **up /* } else if (updates) { //upd = updates[updcol]->op1; - //upd = stmt_project(be, upd, stmt_col(be, c->c, dels)); - upd = stmt_project(be, tids, stmt_col(be, c->c, dels)); + //upd = stmt_project(be, upd, stmt_col(be, c->c, dels, dels->partition)); + upd = stmt_project(be, tids, stmt_col(be, c->c, dels, dels->partition)); */ } else { - upd = stmt_project(be, tids, stmt_col(be, c->c, dels)); + upd = stmt_project(be, tids, stmt_col(be, c->c, dels, dels->partition)); } /* apply cand list first */ @@ -4099,7 +4099,7 @@ update_check_ukey(backend *be, stmt **up assert (updates); h = updates[c->c->colnr]; - o = stmt_col(be, c->c, nu_tids); + o = stmt_col(be, c->c, nu_tids, nu_tids->partition); s = stmt_join(be, o, h, 0, cmp_equal, 0); s = stmt_result(be, s, 0); s = stmt_binop(be, stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1), stmt_atom_lng(be, 0), ne); @@ -4117,7 +4117,7 @@ update_check_ukey(backend *be, stmt **up if (updates) { upd = updates[c->c->colnr]; } else { - upd = stmt_col(be, c->c, dels); + upd = stmt_col(be, c->c, dels, dels->partition); } /* remove nulls */ @@ -4202,7 +4202,7 @@ update_check_fkey(backend *be, stmt **up sql_kc *c = k->columns->h->data; stmt *dels = stmt_tid(be, k->t, 0); assert(0); - cur = stmt_col(be, c->c, dels); + cur = stmt_col(be, c->c, dels, dels->partition); } s = stmt_binop(be, stmt_aggr(be, idx_updates, NULL, NULL, cnt, 1, 0, 1), stmt_aggr(be, cur, NULL, NULL, cnt, 1, 0, 1), ne); @@ -4219,10 +4219,10 @@ update_check_fkey(backend *be, stmt **up } else if (updates && updcol >= 0) { assert(0); //upd = updates[updcol]->op1; - //upd = stmt_project(be, upd, stmt_col(be, c->c, tids)); - upd = stmt_col(be, c->c, tids); + //upd = stmt_project(be, upd, stmt_col(be, c->c, tids, tids->partition)); + upd = stmt_col(be, c->c, tids, tids->partition); } else { /* created idx/key using alter */ - upd = stmt_col(be, c->c, tids); + upd = stmt_col(be, c->c, tids, tids->partition); } nn = stmt_selectnil(be, upd); if (null) @@ -4262,7 +4262,7 @@ join_updated_pkey(backend *be, sql_key * list *rje = sa_list(sql->sa); fdels = stmt_tid(be, k->idx->t, 0); - rows = stmt_idx(be, k->idx, fdels); + rows = stmt_idx(be, k->idx, fdels, fdels->partition); rows = stmt_join(be, rows, tids, 0, cmp_equal, 0); /* join over the join index */ rows = stmt_result(be, rows, 0); @@ -4277,7 +4277,7 @@ join_updated_pkey(backend *be, sql_key * } else { assert(0); //upd = updates[updcol]->op1; - upd = stmt_project(be, tids, stmt_col(be, c->c, dels)); + upd = stmt_project(be, tids, stmt_col(be, c->c, dels, dels->partition)); } if (c->c->null) { /* new nulls (MATCH SIMPLE) */ stmt *nn = stmt_selectnil(be, upd); @@ -4287,7 +4287,7 @@ join_updated_pkey(backend *be, sql_key * null = nn; nulls = 1; } - col = stmt_col(be, fc->c, rows); + col = stmt_col(be, fc->c, rows, rows->partition); list_append(lje, upd); list_append(rje, col); } @@ -4373,7 +4373,7 @@ sql_update_cascade_Fkeys(backend *be, sq stmt *ftids, *upd_ids; ftids = stmt_tid(be, k->idx->t, 0); - rows = stmt_idx(be, k->idx, ftids); + rows = stmt_idx(be, k->idx, ftids, ftids->partition); rows = stmt_join(be, rows, utids, 0, cmp_equal, 0); /* join over the join index */ upd_ids = stmt_result(be, rows, 1); @@ -4497,10 +4497,10 @@ hash_update(backend *be, sql_idx * i, st assert(0); //upd = updates[updcol]->op1; //upd = rows; - //upd = stmt_project(be, upd, stmt_col(be, c->c, tids)); - upd = stmt_col(be, c->c, rows); + //upd = stmt_project(be, upd, stmt_col(be, c->c, tids, tids->partition)); + upd = stmt_col(be, c->c, rows, rows->partition); } else { /* created idx/key using alter */ - upd = stmt_col(be, c->c, tids); + upd = stmt_col(be, c->c, tids, tids->partition); } if (h && i->type == hash_idx) { @@ -4549,14 +4549,14 @@ join_idx_update(backend *be, sql_idx * i } else if (updates && updcol >= 0) { assert(0); //upd = updates[updcol]->op1; - //upd = stmt_project(be, upd, stmt_col(be, c->c, ftids)); - upd = stmt_col(be, c->c, ftids); + //upd = stmt_project(be, upd, stmt_col(be, c->c, ftids, ftids->partition)); + upd = stmt_col(be, c->c, ftids, ftids->partition); } else { /* created idx/key using alter */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list