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

Reply via email to