Changeset: 19349f0c97f5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19349f0c97f5
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
Branch: copybinary
Log Message:

WIP


diffs (181 lines):

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
@@ -1701,7 +1701,6 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
 }
 
 
-/*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)
 {
@@ -1737,10 +1736,136 @@ mvc_append_bat_wrap(Client cntxt, MalBlk
                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);
+               throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Table missing 
%s.%s", sname, tname);
        c = mvc_bind_column(m, t, cname);
        if (c == NULL)
-               throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Column missing 
%s", cname);
+               throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Column missing 
%s.%s.%s", sname, tname, 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;
+}
+
+str
+mvc_append_prep_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.%s", sname, tname);
+       c = mvc_bind_column(m, t, cname);
+       if (c == NULL)
+               throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Column missing 
%s.%s.%s", sname, tname, 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_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;
+}
+
+str
+mvc_append_exec_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.%s", sname, tname);
+       c = mvc_bind_column(m, t, cname);
+       if (c == NULL)
+               throw(SQL, "sql.append_bat", SQLSTATE(42S02) "Column missing 
%s.%s.%s", sname, tname, cname);
 
        fprintf(stderr, "WOOOOOPIE1\n");
        void *cookie = store_funcs.append_col_prep(m->session->tr, c);
@@ -5324,6 +5449,18 @@ static mel_func sql_init_funcs[] = {
  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", "append_prep", mvc_append_prep_wrap, false,
+       "Prepare to append to the column. Return new mvc state and cookie to 
pass to append_exec",
+    args(2,6,
+               arg("",int),arg("",ptr),
+               
arg("mvc",int),arg("sname",str),arg("tname",str),arg("cname",str))),
+ pattern("sql", "append_exec", mvc_append_exec_wrap, false, "Perform the 
actual append",
+    args(1,3,
+               arg("",int),
+               arg("cookie",ptr),batargany("ins",1))),
+
+    // tmp_1, cookie_1 := sql.append_prep(chain_0, s, t, c_1);
+    // done_1 := sql.append_exec(cookie_1, bat_1);
 
 
 
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
@@ -67,6 +67,8 @@ 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_prep_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
+sql5_export str mvc_append_exec_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