Changeset: 57efa07c77d9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/57efa07c77d9 Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_cat.c Branch: iso Log Message:
Adding more predicates diffs (118 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 @@ -4098,6 +4098,7 @@ static stmt * insert_check_fkey(backend *be, list *inserts, sql_key *k, stmt *idx_inserts, stmt *pin) { mvc *sql = be->mvc; + sql_trans *tr = sql->session->tr; char *msg = NULL; stmt *cs = list_fetch(inserts, 0), *s = cs; sql_subtype *lng = sql_bind_localtype("lng"); @@ -4105,6 +4106,13 @@ insert_check_fkey(backend *be, list *ins sql_subtype *bt = sql_bind_localtype("bit"); sql_subfunc *ne = sql_bind_func_result(sql, "sys", "<>", F_FUNC, bt, 2, lng, lng); + for (node *m = k->columns->h; m; m = m->next) { + sql_kc *c = m->data; + + /* foreach column add predicate */ + tr->predicates = add_predicate(sql->pa, tr->predicates, c->c); + } + if (pin && list_length(pin->op4.lval)) s = pin->op4.lval->h->data; if (s->key && s->nrcols == 0) { @@ -4206,6 +4214,7 @@ static void sql_insert_check_null(backend *be, sql_table *t, list *inserts) { mvc *sql = be->mvc; + sql_trans *tr = sql->session->tr; node *m, *n; sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", sql_bind_localtype("void"), NULL, F_AGGR); @@ -4218,6 +4227,9 @@ sql_insert_check_null(backend *be, sql_t stmt *s = i; char *msg = NULL; + /* foreach column add predicate */ + tr->predicates = add_predicate(sql->pa, tr->predicates, c); + if (!(s->key && s->nrcols == 0)) { s = stmt_selectnil(be, column(be, i)); s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1); diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -45,6 +45,17 @@ if (store_readonly(sql->session->tr->store))\ throw(SQL,"sql.cat",SQLSTATE(25006) "Schema statements cannot be executed on a readonly database."); +static list * +add_predicate(sql_allocator *sa, list *l, sql_column *c) +{ + pl *p = SA_ZNEW(sa, pl); + p->c = c; + if (!l) + l = sa_list(sa); + list_append(l, p); + return l; +} + static char * SaveArgReference(MalStkPtr stk, InstrPtr pci, int arg) { @@ -202,6 +213,7 @@ static char * alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char *psname, char *ptname, ptr min, ptr max, bit with_nills, int update) { + sql_trans *tr = sql->session->tr; sql_table *mt = NULL, *pt = NULL; sql_part *err = NULL; str msg = MAL_SUCCEED, err_min = NULL, err_max = NULL, conflict_err_min = NULL, conflict_err_max = NULL; @@ -319,6 +331,18 @@ alter_table_add_range_partition(mvc *sql } finish: + if (!msg) { + if (isPartitionedByColumnTable(mt)) { + sql_column *c = list_fetch(pt->columns->l, mt->part.pcol->colnr); + tr->predicates = add_predicate(sql->pa, tr->predicates, c); + } else { + for (node *n = mt->part.pexp->cols->h; n; n = n->next) { + int next = *(int*) n->data; + sql_column *c = list_fetch(pt->columns->l, next); + tr->predicates = add_predicate(sql->pa, tr->predicates, c); + } + } + } if (err_min) GDKfree(err_min); if (err_max) @@ -334,6 +358,7 @@ static char * alter_table_add_value_partition(mvc *sql, MalStkPtr stk, InstrPtr pci, char *msname, char *mtname, char *psname, char *ptname, bit with_nills, int update) { + sql_trans *tr = sql->session->tr; sql_table *mt = NULL, *pt = NULL; str msg = MAL_SUCCEED; sql_part *err = NULL; @@ -420,6 +445,18 @@ alter_table_add_value_partition(mvc *sql } finish: + if (!msg) { + if (isPartitionedByColumnTable(mt)) { + sql_column *c = list_fetch(pt->columns->l, mt->part.pcol->colnr); + tr->predicates = add_predicate(sql->pa, tr->predicates, c); + } else { + for (node *n = mt->part.pexp->cols->h; n; n = n->next) { + int next = *(int*) n->data; + sql_column *c = list_fetch(pt->columns->l, next); + tr->predicates = add_predicate(sql->pa, tr->predicates, c); + } + } + } return msg; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list