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]