Changeset: 95c1c23d68fe for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=95c1c23d68fe Added Files: sql/test/merge-partitions/Tests/mergepart10.sql Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h sql/test/merge-partitions/Tests/All Branch: merge-partitions Log Message:
Simplify query plan intermediates diffs (155 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 @@ -3342,7 +3342,7 @@ rel2bin_insert(backend *be, sql_rel *rel } if(find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /* create BAT to hold the sum of affected rows */ - create_append_bat(be, TYPE_lng); + create_merge_partitions_accumulator(be); if (tr->op == op_basetable) { t = tr->l; @@ -3424,7 +3424,7 @@ rel2bin_insert(backend *be, sql_rel *rel } if(be->cur_append) //building the total number of rows affected across all tables - ret->nr = append_bat_value(be, TYPE_lng, ret->nr); + ret->nr = add_to_merge_partitions_accumulator(be, ret->nr); if (ddl) return stmt_list(be, l); @@ -4581,7 +4581,7 @@ sql_delete(backend *be, sql_table *t, st if (rows) s = stmt_aggr(be, rows, NULL, NULL, sql_bind_aggr(sql->sa, sql->session->schema, "count", NULL), 1, 0, 1); if(be->cur_append) //building the total number of rows affected across all tables - s->nr = append_bat_value(be, TYPE_lng, s->nr); + s->nr = add_to_merge_partitions_accumulator(be, s->nr); return s; } @@ -4599,7 +4599,7 @@ rel2bin_delete(backend *be, sql_rel *rel assert(0/*ddl statement*/); if(find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /* create BAT to hold the sum of affected rows */ - create_append_bat(be, TYPE_lng); + create_merge_partitions_accumulator(be); if (rel->r) { /* first construct the deletes relation */ rows = subrel_bin(be, rel->r, refs); @@ -4756,7 +4756,7 @@ sql_truncate(backend *be, sql_table *t, ret = other; if(be->cur_append) //building the total number of rows affected across all tables - other->nr = append_bat_value(be, TYPE_lng, other->nr); + other->nr = add_to_merge_partitions_accumulator(be, other->nr); /* after */ if (!sql_delete_triggers(be, next, v, 1, 3, 4)) { @@ -4797,7 +4797,7 @@ rel2bin_truncate(backend *be, sql_rel *r assert(0/*ddl statement*/); if(find_prop(rel->p, PROP_DISTRIBUTE) && be->cur_append == 0) /* create BAT to hold the sum of affected rows */ - create_append_bat(be, TYPE_lng); + create_merge_partitions_accumulator(be); n = rel->exps->h; restart_sequences = E_ATOM_INT(n->data); @@ -5193,7 +5193,6 @@ output_rel_bin(backend *be, sql_rel *rel s = stmt_output(be, s); if (sqltype == Q_UPDATE && s && (s->type != st_list || be->cur_append)) { if(be->cur_append) { /* finish the output bat */ - finish_append_bat(be, TYPE_lng); s->nr = be->cur_append; be->cur_append = 0; } diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -118,40 +118,27 @@ pushSchema(MalBlkPtr mb, InstrPtr q, sql } void -create_append_bat(backend *be, int tt) +create_merge_partitions_accumulator(backend *be) { - MalBlkPtr mb = be->mb; - InstrPtr q = newStmt(mb, batRef, newRef); - getArg(q, 0) = be->cur_append = newTmpVariable(mb, newBatType(tt)); - q = pushLng(mb, q, tt); + sql_subtype tpe; + + sql_find_subtype(&tpe, "bigint", 0, 0); + be->cur_append = constantAtom(be, be->mb, atom_int(be->mvc->sa, &tpe, 0)); } int -append_bat_value(backend *be, int tt, int nr) +add_to_merge_partitions_accumulator(backend *be, int nr) { MalBlkPtr mb = be->mb; int help = be->cur_append; - InstrPtr q = newStmt(mb, batRef, appendRef); - - getArg(q, 0) = be->cur_append = newTmpVariable(mb, newBatType(tt)); + InstrPtr q = newStmt(mb, calcRef, "+"); + + getArg(q, 0) = be->cur_append = newTmpVariable(mb, TYPE_lng); q = pushArgument(mb, q, help); q = pushArgument(mb, q, nr); - q = pushBit(mb, q, TRUE); return getDestVar(q); } -void -finish_append_bat(backend *be, int tt) -{ - MalBlkPtr mb = be->mb; - int help = be->cur_append; - InstrPtr q = newStmt(mb, aggrRef, sumRef); - - getArg(q, 0) = be->cur_append = newTmpVariable(mb, TYPE_int); - q = pushArgument(mb, q, help); - setVarType(mb, getArg(q,0), tt); -} - int stmt_key(stmt *s) { diff --git a/sql/backends/monet5/sql_statement.h b/sql/backends/monet5/sql_statement.h --- a/sql/backends/monet5/sql_statement.h +++ b/sql/backends/monet5/sql_statement.h @@ -124,9 +124,8 @@ typedef struct stmt { InstrPtr q; } stmt; -extern void create_append_bat(backend *be, int tt); -extern int append_bat_value(backend *be, int tt, int nr); -extern void finish_append_bat(backend *be, int tt); +extern void create_merge_partitions_accumulator(backend *be); +extern int add_to_merge_partitions_accumulator(backend *be, int nr); extern int stmt_key(stmt *s); diff --git a/sql/test/merge-partitions/Tests/All b/sql/test/merge-partitions/Tests/All --- a/sql/test/merge-partitions/Tests/All +++ b/sql/test/merge-partitions/Tests/All @@ -8,3 +8,4 @@ mergepart06 mergepart07 mergepart08 mergepart09 +mergepart10 diff --git a/sql/test/merge-partitions/Tests/mergepart10.sql b/sql/test/merge-partitions/Tests/mergepart10.sql new file mode 100644 --- /dev/null +++ b/sql/test/merge-partitions/Tests/mergepart10.sql @@ -0,0 +1,9 @@ +CREATE MERGE TABLE ihavenopartitions (a int, b varchar(32)) PARTITION BY VALUES (a); + +INSERT INTO ihavenopartitions VALUES (1, 'fail'); --error +DELETE FROM ihavenopartitions; +DELETE FROM ihavenopartitions WHERE a < 1; +TRUNCATE ihavenopartitions; +UPDATE ihavenopartitions SET a = 3; + +DROP TABLE ihavenopartitions; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list