Changeset: 257c389c10e3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/257c389c10e3
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: iso
Log Message:

add predicates in ukey check


diffs (56 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
@@ -3907,10 +3907,22 @@ sql_parse(backend *be, sql_schema *s, co
        return sq;
 }
 
+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 stmt *
 insert_check_ukey(backend *be, list *inserts, sql_key *k, stmt *idx_inserts)
 {
        mvc *sql = be->mvc;
+       sql_trans *tr = sql->session->tr;
 /* pkey's cannot have NULLs, ukeys however can
    current implementation switches on 'NOT NULL' on primary key columns */
 
@@ -3940,6 +3952,9 @@ insert_check_ukey(backend *be, list *ins
                                sql_kc *c = m->data;
                                stmt *cs = list_fetch(inserts, c->c->colnr);
 
+                               /* foreach column add predicate */
+                               tr->predicates = add_predicate(sql->pa, 
tr->predicates, c->c);
+
                                col = stmt_col(be, c->c, dels, dels->partition);
                                if ((k->type == ukey) && stmt_has_null(col)) {
                                        stmt *nn = stmt_selectnonil(be, col, s);
@@ -3959,6 +3974,9 @@ insert_check_ukey(backend *be, list *ins
                                sql_kc *c = m->data;
                                stmt *cs = list_fetch(inserts, c->c->colnr);
 
+                               /* foreach column add predicate */
+                               tr->predicates = add_predicate(sql->pa, 
tr->predicates, c->c);
+
                                col = stmt_col(be, c->c, dels, dels->partition);
                                list_append(lje, col);
                                list_append(rje, cs);
@@ -4019,6 +4037,9 @@ insert_check_ukey(backend *be, list *ins
                sql_kc *c = k->columns->h->data;
                stmt *s = list_fetch(inserts, c->c->colnr), *h = s;
 
+               /* add predicate for this column */
+               tr->predicates = add_predicate(sql->pa, tr->predicates, c->c);
+
                s = stmt_col(be, c->c, dels, dels->partition);
                if ((k->type == ukey) && stmt_has_null(s)) {
                        stmt *nn = stmt_selectnonil(be, s, NULL);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to