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