Changeset: da1ad6733b0c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/da1ad6733b0c
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/MAL-signatures.test
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: pp_hashjoin
Log Message:

make sure we synchronize on claim but also on first append, this make appending 
happen (mostly) in order which reduces the use of BATupdates, to fill the 
earlier created holes.


diffs (133 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -51419,6 +51419,11 @@ pattern sql.append(X_0:int, X_1:str, X_2
 mvc_append_wrap
 Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence.
 sql
+append
+pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:oid, X_5:bat[:oid], 
X_6:any, X_7:int):int
+mvc_append_wrap
+Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence.
+sql
 argRecord
 pattern sql.argRecord():str
 SQLargRecord
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -39584,6 +39584,11 @@ pattern sql.append(X_0:int, X_1:str, X_2
 mvc_append_wrap
 Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence.
 sql
+append
+pattern sql.append(X_0:int, X_1:str, X_2:str, X_3:str, X_4:oid, X_5:bat[:oid], 
X_6:any, X_7:int):int
+mvc_append_wrap
+Append to the column tname.cname (possibly optimized to replace the insert bat 
of tname.cname. Returns sequence number for order dependence.
+sql
 argRecord
 pattern sql.argRecord():str
 SQLargRecord
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
@@ -6040,12 +6040,14 @@ rel2bin_insert(backend *be, sql_rel *rel
        }
 
        int mvc_var = be->mvc_var;
+       bool first = true;
        for (n = ol_first_node(t->columns), m = inserts->op4.lval->h; n && m; n 
= n->next, m = m->next) {
 
                stmt *ins = m->data;
                sql_column *c = n->data;
 
-               insert = stmt_append_col(be, c, pos, ins, &mvc_var, rel->flag);
+               insert = stmt_append_col(be, c, pos, ins, &mvc_var, rel->flag, 
first);
+               first = false;
                append(l,insert);
        }
        be->mvc_var = mvc_var;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1770,6 +1770,14 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        bat Pos = *getArgReference_bat(stk, pci, 6);
        ptr ins = getArgReference(stk, pci, 7);
        int tpe = getArgType(mb, pci, 7), log_res = LOG_OK;
+       int sync_nr = -1;
+       Pipeline *p = NULL;
+       if (pci->argc == 9) {
+               p = pipeline_get_thread_private_pipeline();
+               sync_nr = *getArgReference_int(stk, pci, 8);
+               if (p->seqnr >= 0) /* seq number from file/generator inputs */
+                       sync_nr = p->seqnr;
+       }
        bool isbat = false;
        sql_schema *s;
        sql_table *t;
@@ -1826,15 +1834,23 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        if (b)
                cnt = BATcount(b);
        sqlstore *store = m->session->tr->store;
+       if (sync_nr >= 0) {
+               bool done = 0;
+               pipeline_get_token(p, 6, sync_nr, &done);
+       }
        if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
                log_res = store->storage_api.append_col(m->session->tr, c, 
offset, pos, ins, cnt, isbat, tpe);
        } else if (cname[0] == '%' && (i = mvc_bind_idx(m, s, cname + 1)) != 
NULL) {
                log_res = store->storage_api.append_idx(m->session->tr, i, 
offset, pos, ins, cnt, isbat, tpe);
        } else {
+               if (sync_nr >= 0)
+                       pipeline_pass_token(p, 6, sync_nr);
                bat_destroy(pos);
                bat_destroy(b);
                throw(SQL, "sql.append", SQLSTATE(38000) "Unable to find column 
or index %s.%s.%s",sname,tname,cname);
        }
+       if (sync_nr >= 0)
+               pipeline_pass_token(p, 6, sync_nr);
        bat_destroy(pos);
        bat_destroy(b);
        if (log_res != LOG_OK) /* the conflict case should never happen, but 
leave it here */
@@ -5799,6 +5815,8 @@ static mel_func sql_init_funcs[] = {
  pattern("sql", "depend", mvc_add_dependency_change, true, "Set dml dependency 
on current transaction for a table.", args(0,3, 
arg("sname",str),arg("tname",str),arg("cnt",lng))),
  pattern("sql", "predicate", mvc_add_column_predicate, true, "Add predicate on 
current transaction for a table column.", args(0,3, 
arg("sname",str),arg("tname",str),arg("cname",str))),
  pattern("sql", "append", mvc_append_wrap, false, "Append to the column 
tname.cname (possibly optimized to replace the insert bat of tname.cname. 
Returns sequence number for order dependence.", args(1,8, arg("",int), 
arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str),arg("offset",oid),batarg("pos",oid),argany("ins",0))),
+ pattern("sql", "append", mvc_append_wrap, false, "Append to the column 
tname.cname (possibly optimized to replace the insert bat of tname.cname. 
Returns sequence number for order dependence.", args(1,9, arg("",int), 
arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str),arg("offset",oid),batarg("pos",oid),argany("ins",0),arg("sync_nr",
 int))),
+
  pattern("sql", "update", mvc_update_wrap, false, "Update the values of the 
column tname.cname. Returns sequence number for order dependence)", args(1,7, 
arg("",int), 
arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str),argany("rids",0),argany("upd",0))),
  pattern("sql", "clear_table", mvc_clear_table_wrap, true, "Clear the table 
sname.tname.", args(1,4, 
arg("",lng),arg("sname",str),arg("tname",str),arg("restart_sequences",int))),
  pattern("sql", "tid", SQLtid, false, "Return a column with the valid tuple 
identifiers associated with the table sname.tname.", args(1,4, 
batarg("",oid),arg("mvc",int),arg("sname",str),arg("tname",str))),
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
@@ -868,7 +868,7 @@ stmt_idxbat(backend *be, sql_idx *i, int
 }
 
 stmt *
-stmt_append_col(backend *be, sql_column *c, stmt *offset, stmt *b, int 
*mvc_var_update, int fake)
+stmt_append_col(backend *be, sql_column *c, stmt *offset, stmt *b, int 
*mvc_var_update, int fake, bool first)
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
@@ -916,6 +916,8 @@ stmt_append_col(backend *be, sql_column 
                q = pushArgument(mb, q, b->nr);
                if (mvc_var_update != NULL)
                        *mvc_var_update = getDestVar(q);
+               if (be->pp && first && offset && offset->q && offset->q->argc 
== 8)
+                       q = pushArgument(mb, q, getArg(offset->q, 7));
        } else {
                return b;
        }
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
@@ -167,7 +167,7 @@ extern stmt *stmt_tid(backend *be, sql_t
 extern stmt *stmt_claim(backend *be, sql_table *t, stmt *cnt, int sync);
 extern void stmt_add_dependency_change(backend *be, sql_table *t, stmt *cnt);
 extern void stmt_add_column_predicate(backend *be, sql_column *c);
-extern stmt *stmt_append_col(backend *be, sql_column *c, stmt *offset, stmt 
*b, int *mvc_var_update, int locked);
+extern stmt *stmt_append_col(backend *be, sql_column *c, stmt *offset, stmt 
*b, int *mvc_var_update, int locked, bool first);
 extern stmt *stmt_append_idx(backend *be, sql_idx *i, stmt *offset, stmt *b);
 extern stmt *stmt_update_col(backend *be, sql_column *c, stmt *tids, stmt 
*upd);
 extern stmt *stmt_update_idx(backend *be, sql_idx *i, stmt *tids, stmt *upd);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to