Changeset: e53fddd85021 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e53fddd85021 Modified Files: monetdb5/optimizer/opt_bincopyfrom.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h Branch: copybinary Log Message:
Rewrite sql.append to sql.append_bat for the time being, only after importColumn diffs (139 lines): diff --git a/monetdb5/optimizer/opt_bincopyfrom.c b/monetdb5/optimizer/opt_bincopyfrom.c --- a/monetdb5/optimizer/opt_bincopyfrom.c +++ b/monetdb5/optimizer/opt_bincopyfrom.c @@ -28,6 +28,7 @@ OPTbincopyfromImplementation(Client cntx (void)pci; str importTableRef = putName("importTable"); + str append_batRef = putName("append_bat"); int found_at = -1; for (int i = 0; i < mb->stop; i++) { @@ -47,13 +48,21 @@ OPTbincopyfromImplementation(Client cntx goto end; } + bool importTable_seen; + importTable_seen = false; for (int i = 0; i < old_stop; i++) { InstrPtr p = old_mb_stmt[i]; - if (p->modname != sqlRef || p->fcnname != importTableRef) { + if (p->modname == sqlRef && p->fcnname == importTableRef) { + msg = transform(mb, p); + importTable_seen = true; + } else if (p->modname == sqlRef && p->fcnname == appendRef && isaBatType(getArgType(mb, p, 5))) { + if (importTable_seen) { + setFunctionId(p, append_batRef); + } pushInstruction(mb, p); - continue; + } else { + pushInstruction(mb, p); } - msg = transform(mb, p); if (msg != MAL_SUCCEED) return msg; } 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 @@ -1700,6 +1700,71 @@ mvc_append_wrap(Client cntxt, MalBlkPtr return MAL_SUCCEED; } + +/*mvc_append_bat_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */ +str +mvc_append_bat_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + int *res = getArgReference_int(stk, pci, 0); + mvc *m = NULL; + str msg; + const char *sname = *getArgReference_str(stk, pci, 2); + const char *tname = *getArgReference_str(stk, pci, 3); + const char *cname = *getArgReference_str(stk, pci, 4); + assert(isaBatType(getArgType(mb, pci, 5))); + bat batid = *getArgReference_bat(stk, pci, 5); + sql_schema *s; + sql_table *t; + sql_column *c; + + if (strNil(sname)) + throw(SQL, "sql.append_bat", SQLSTATE(42000) "sql.append_bat schema name is nil"); + if (strNil(tname)) + throw(SQL, "sql.append_bat", SQLSTATE(42000) "sql.append_bat table name is nil"); + if (strNil(cname)) + throw(SQL, "sql.append_bat", SQLSTATE(42000) "sql.append_bat column name is nil"); + + if (cname[0] == '%') + throw(SQL, "sql.append_bat", SQLSTATE(42000) "sql.append_bat not intended for indices: %s.%s.%s", sname, tname, cname); + + *res = 0; + if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) + return msg; + if ((msg = checkSQLContext(cntxt)) != NULL) + return msg; + s = mvc_bind_schema(m, sname); + if (s == NULL) + throw(SQL, "sql.append_bat", SQLSTATE(3F000) "Schema missing %s", sname); + t = mvc_bind_table(m, s, tname); + if (t == NULL) + throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Table missing %s", tname); + c = mvc_bind_column(m, t, cname); + if (c == NULL) + throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Column missing %s", cname); + + fprintf(stderr, "WOOOOOPIE1\n"); + void *cookie = store_funcs.append_col_prep(m->session->tr, c); + + BAT *b = BATdescriptor(batid); + if (b == NULL) + throw(SQL, "sql.append_bat_exec", SQLSTATE(HY005) "Cannot access column descriptor %s.%s.%s", + sname,tname,cname); + if( b && BATcount(b) > 4096 && !b->batTransient) + BATmsync(b); + + fprintf(stderr, "WOOOOOPIE2\n"); + int ret = store_funcs.append_col_exec(cookie, b); + + if (b) { + BBPunfix(b->batCacheid); + } + + if (ret != LOG_OK) + throw(SQL, "sql_append_bat_exec", GDK_EXCEPTION); + + return MAL_SUCCEED; +} + /*mvc_update_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */ str mvc_update_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) @@ -5252,7 +5317,16 @@ static mel_func sql_init_funcs[] = { command("sql", "project", BATleftproject, false, "Last step of a left outer join, ie project the inner join (l,r) over the left input side (col)", args(1,4, batarg("",oid),batarg("col",oid),batarg("l",oid),batarg("r",oid))), command("sql", "getVersion", mvc_getVersion, false, "Return the database version identifier for a client.", args(1,2, arg("",lng),arg("clientid",int))), pattern("sql", "grow", mvc_grow_wrap, false, "Resize the tid column of a declared table.", args(1,3, arg("",int),batarg("tid",oid),argany("",1))), + + 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,6, arg("",int),arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str),argany("ins",0))), + + pattern("sql", "append_bat", mvc_append_bat_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,6, arg("",int),arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str),batargany("ins",1))), + + + + 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,3, arg("",lng),arg("sname",str),arg("tname",str))), 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.h b/sql/backends/monet5/sql.h --- a/sql/backends/monet5/sql.h +++ b/sql/backends/monet5/sql.h @@ -66,6 +66,7 @@ sql5_export str SQLcatalog(Client cntxt, sql5_export str mvc_grow_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +sql5_export str mvc_append_bat_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str mvc_append_column(sql_trans *t, sql_column *c, BAT *ins); sql5_export str mvc_update_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list