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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list