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