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

Reply via email to