Changeset: b81ddec11ae7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b81ddec11ae7
Modified Files:
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_pipes.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_storage.h
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: newstorage
Log Message:

cleanup

) use log_delta (and new log_delta_slice) to log the inserts as updates
) store slot/inserted in the sql_timestamp, with multiple inserts keep
   them in a list of inserts
) keep deleted first location in the sql_timestamp structure
) removed insert part from the delta interface, disabled push_select optimizer 
and adapted mergetable for this

Open issue, on restart some of the deletes aren't handled properly, leading
to broken allready drop tables.


diffs (truncated from 4033 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1721,7 +1721,7 @@ log_delta(logger *lg, BAT *b, char *name
        }
 
        l.tid = lg->tid;
-       nr = (BUNlast(b) - BUNfirst(b));
+       nr = BATcount(b);
        assert(nr <= GDK_int_max);
        l.nr = (int) nr;
        lg->changes += l.nr;
@@ -1736,7 +1736,7 @@ log_delta(logger *lg, BAT *b, char *name
                    log_write_string(lg, name) == LOG_ERR)
                        return LOG_ERR;
 
-               for (p = BUNfirst(b); p < BUNlast(b) && ok == GDK_SUCCEED; p++) 
{
+               for (p = 0; p < nr && ok == GDK_SUCCEED; p++) {
                        const void *h = BUNhead(bi, p);
                        const void *t = BUNtail(bi, p);
 
@@ -1744,7 +1744,55 @@ log_delta(logger *lg, BAT *b, char *name
                        ok = (ok == GDK_FAIL) ? ok : wt(t, lg->log, 1);
                }
 
-               //if (lg->debug & 1)
+               if (lg->debug & 1)
+                       fprintf(stderr, "Logged %s %d inserts\n", name, l.nr);
+       }
+       return (ok == GDK_SUCCEED) ? LOG_OK : LOG_ERR;
+}
+
+int
+log_delta_slice(logger *lg, BUN first, size_t cnt, BAT *b, char *name)
+{
+       int ok = GDK_SUCCEED;
+       logformat l;
+       BUN p;
+       BUN nr;
+
+       if (lg->debug & 128) {
+               /* logging is switched off */
+               return LOG_OK;
+       }
+
+       l.tid = lg->tid;
+       nr = cnt;
+       assert(nr <= GDK_int_max);
+       l.nr = (int) nr;
+       lg->changes += l.nr;
+
+       if (l.nr) {
+               BATiter bi = bat_iterator(b);
+               int (*wh) (const void *, stream *, size_t) = b->htype == 
TYPE_void ? BATatoms[TYPE_oid].atomWrite : BATatoms[b->htype].atomWrite;
+               int (*wt) (const void *, stream *, size_t) = 
BATatoms[b->ttype].atomWrite;
+
+               l.flag = LOG_UPDATE;
+               if (log_write_format(lg, &l) == LOG_ERR ||
+                   log_write_string(lg, name) == LOG_ERR)
+                       return LOG_ERR;
+
+               for (p = first; p < first+cnt && ok == GDK_SUCCEED; p++) {
+                       oid id = p;
+                       const void *t = BUNtail(bi, p);
+
+                       if (b->htype == TYPE_void) {
+                               ok = wh(&id, lg->log, 1);
+                       } else {
+                               const void *h = BUNhead(bi, p);
+                               ok = wh(h, lg->log, 1);
+                       }
+                       ok = (ok == GDK_FAIL) ? ok : wt(t, lg->log, 1);
+               }
+
+               if (lg->debug & 1)
                        fprintf(stderr, "Logged %s %d inserts\n", name, l.nr);
        }
        return (ok == GDK_SUCCEED) ? LOG_OK : LOG_ERR;
@@ -1793,7 +1841,7 @@ log_bat(logger *lg, BAT *b, char *name)
                        }
                }
 
-//             if (lg->debug & 1)
+               if (lg->debug & 1)
                        fprintf(stderr, "Logged %s %d inserts\n", name, l.nr);
        }
        l.nr = (int) (b->batFirst - b->batDeleted);
@@ -1817,7 +1865,7 @@ log_bat(logger *lg, BAT *b, char *name)
                        ok = (ok == GDK_FAIL) ? ok : wt(t, lg->log, 1);
                }
 
-//             if (lg->debug & 1)
+               if (lg->debug & 1)
                        fprintf(stderr, "Logged %s %d deletes\n", name, l.nr);
        }
        return (ok == GDK_SUCCEED) ? LOG_OK : LOG_ERR;
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -113,6 +113,7 @@ gdk_export int log_bat_clear(logger *lg,
 gdk_export int log_bat_persists(logger *lg, BAT *b, char *n);
 gdk_export int log_bat_transient(logger *lg, char *n);
 gdk_export int log_delta(logger *lg, BAT *b, char *n);
+gdk_export int log_delta_slice(logger *lg, BUN first, size_t cnt, BAT *b, char 
*n);
 
 gdk_export int log_tstart(logger *lg); /* TODO return transaction id */
 gdk_export int log_tend(logger *lg);
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -231,9 +231,6 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
        for(k=1; k < mat[m].mi->argc; k++) {
                InstrPtr q = copyInstruction(p);
 
-               /* remove last argument */
-               if (k < mat[m].mi->argc-1)
-                       q->argc--;
                /* make sure to resolve again */
                q->token = ASSIGNsymbol; 
                q->typechk = TYPE_UNKNOWN;
@@ -1586,8 +1583,6 @@ OPTmergetableImplementation(Client cntxt
                        if ((e=is_a_mat(getArg(p,fe), mat, mtop)) >= 0)
                                break;
 
-               /* delta* operator have a ins bat as last argument, we move the 
inserts into the last delta statement, ie
-                * all but last need to remove one argument */
                if (match == 3 && bats == 4 && isDelta(p) && 
                   (m=is_a_mat(getArg(p,fm), mat, mtop)) >= 0 &&
                   (n=is_a_mat(getArg(p,fn), mat, mtop)) >= 0 &&
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -74,7 +74,7 @@ struct PIPELINES {
         "optimizer.evaluate();"
         "optimizer.emptySet();"
         "optimizer.aliases();"
-        "optimizer.pushselect();"
+        //"optimizer.pushselect();"
         "optimizer.mitosis();"
         "optimizer.mergetable();"
         "optimizer.deadcode();"
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -721,9 +721,8 @@ stmt_col( mvc *sql, sql_column *c, stmt 
        if (isTable(c->t) && !c->t->readonly &&
           (c->base.flag != TR_NEW || c->t->base.flag != TR_NEW /* alter */) &&
           (c->t->persistence == SQL_PERSIST || c->t->persistence == 
SQL_DECLARED_TABLE) && !c->t->commit_action) {
-               stmt *i = stmt_bat(sql->sa, c, RD_INS);
                stmt *u = stmt_bat(sql->sa, c, RD_UPD);
-               sc = stmt_project_delta(sql->sa, sc, u, i);
+               sc = stmt_project_delta(sql->sa, sc, u);
                sc = stmt_project(sql->sa, del, sc);
        } else if (del) { /* always handle the deletes */
                sc = stmt_project(sql->sa, del, sc);
@@ -739,9 +738,8 @@ stmt_idx( mvc *sql, sql_idx *i, stmt *de
        if (isTable(i->t) && !i->t->readonly &&
           (i->base.flag != TR_NEW || i->t->base.flag != TR_NEW /* alter */) &&
           (i->t->persistence == SQL_PERSIST || i->t->persistence == 
SQL_DECLARED_TABLE) && !i->t->commit_action) {
-               stmt *ic = stmt_idxbat(sql->sa, i, RD_INS);
                stmt *u = stmt_idxbat(sql->sa, i, RD_UPD);
-               sc = stmt_project_delta(sql->sa, sc, u, ic);
+               sc = stmt_project_delta(sql->sa, sc, u);
                sc = stmt_project(sql->sa, del, sc);
        } else if (del) { /* always handle the deletes */
                sc = stmt_project(sql->sa, del, sc);
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -233,16 +233,16 @@ comment "Bind the 'schema.table.column' 
        1 - inserts
        2 - updates";
 
-command delta ( col:bat[:oid,:any_3], uid:bat[:oid,:oid], 
uval:bat[:oid,:any_3], ins:bat[:oid,:any_3] )
+command delta (col:bat[:oid,:any_3], uid:bat[:oid,:oid], uval:bat[:oid,:any_3])
                :bat[:oid,:any_3] 
 address DELTAbat
 comment "Return column bat with delta's applied.";
 
-command projectdelta( subselect:bat[:oid,:oid], col:bat[:oid,:any_3], 
uid:bat[:oid,:oid], uval:bat[:oid,:any_3], ins:bat[:oid,:any_3] ) 
:bat[:oid,:any_3] 
+command projectdelta( subselect:bat[:oid,:oid], col:bat[:oid,:any_3], 
uid:bat[:oid,:oid], uval:bat[:oid,:any_3] ) :bat[:oid,:any_3] 
 address DELTAproject
 comment "Return column bat with delta's applied.";
 
-command subdelta ( col:bat[:oid,:oid], cand:bat[:oid,:oid], 
uid:bat[:oid,:oid], uval:bat[:oid,:oid], ins:bat[:oid,:oid] ) :bat[:oid,:oid]
+command subdelta ( col:bat[:oid,:oid], cand:bat[:oid,:oid], 
uid:bat[:oid,:oid], uval:bat[:oid,:oid] ) :bat[:oid,:oid]
 address DELTAsub
 comment "Return a single bat of subselected delta.";
 
@@ -1377,9 +1377,9 @@ sql5_export str mvc_bind_idxbat_wrap(Cli
 sql5_export str mvc_clear_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str mvc_delete_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLtid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
-sql5_export str DELTAbat(bat *result, bat *col, bat *uid, bat *uval, bat *ins);
-sql5_export str DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval, 
bat *ins);
-sql5_export str DELTAproject(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval, bat *ins);
+sql5_export str DELTAbat(bat *result, bat *col, bat *uid, bat *uval);
+sql5_export str DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval);
+sql5_export str DELTAproject(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval);
 sql5_export str DELTAbat2(bat *result, bat *col, bat *uid, bat *uval);
 sql5_export str DELTAsub2(bat *result, bat *col, bat *cid, bat *uid, bat 
*uval);
 sql5_export str DELTAproject2(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval);
@@ -3514,33 +3514,31 @@ setwritable(BAT *b)
 str 
 DELTAbat2(bat *result, bat *col, bat *uid, bat *uval)
 {
-       return DELTAbat(result, col, uid, uval, NULL);
+       return DELTAbat(result, col, uid, uval);
 }
 
 str 
 DELTAsub2(bat *result, bat *col, bat *cid, bat *uid, bat *uval)
 {
-       return DELTAsub(result, col, cid, uid, uval, NULL);
+       return DELTAsub(result, col, cid, uid, uval);
 }
 
 str 
 DELTAproject2(bat *result, bat *sub, bat *col, bat *uid, bat *uval)
 {
-       return DELTAproject(result, sub, col, uid, uval, NULL);
+       return DELTAproject(result, sub, col, uid, uval);
 }
 
 str 
-DELTAbat(bat *result, bat *col, bat *uid, bat *uval, bat *ins)
-{
-       BAT *c, *u_id, *u_val, *u, *i = NULL, *res;
+DELTAbat(bat *result, bat *col, bat *uid, bat *uval)
+{
+       BAT *c, *u_id, *u_val, *u, *res;
 
        if ((u_id = BBPquickdesc(ABS(*uid), 0)) == NULL) 
                throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
-       if (ins && (i = BBPquickdesc(ABS(*ins), 0)) == NULL) 
-               throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
-
-       /* no updates, no inserts */
-       if (BATcount(u_id) == 0 && (!i || BATcount(i) == 0)) {
+
+       /* no updates */
+       if (BATcount(u_id) == 0) {
                BBPincref(*result = *col, TRUE);
                return MAL_SUCCEED;
        }
@@ -3548,12 +3546,6 @@ DELTAbat(bat *result, bat *col, bat *uid
        if ((c = BBPquickdesc(ABS(*col), 0)) == NULL) 
                throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
 
-       /* bat may change */
-       /*if (i && BATcount(c) == 0 && BATcount(u_id) == 0) {
-               BBPincref(*result = *ins, TRUE);
-               return MAL_SUCCEED;
-       }*/
-
        c = BATdescriptor(*col);
        if ((res = BATcopy(c, TYPE_void, c->ttype, TRUE)) == NULL) 
                throw(MAL, "sql.delta", OPERATION_FAILED);
@@ -3569,28 +3561,20 @@ DELTAbat(bat *result, bat *col, bat *uid
                res = BATreplace(res, u, TRUE);
        BBPunfix(u->batCacheid);
 
-       /*if (i && BATcount(i)) {
-               i = BATdescriptor(*ins);
-               res = BATappend(res, i, TRUE);
-               BBPunfix(i->batCacheid);
-       }*/
-
        BBPkeepref(*result = res->batCacheid);
        return MAL_SUCCEED;
 }
 
 str 
-DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval, bat *ins)
-{
-       BAT *c, *cminu, *u_id, *u_val, *u, *i = NULL, *res;
+DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval)
+{
+       BAT *c, *cminu, *u_id, *u_val, *u, *res;
 
        if ((u_id = BBPquickdesc(ABS(*uid), 0)) == NULL) 
                throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
-       if (ins && (i = BBPquickdesc(ABS(*ins), 0)) == NULL) 
-               throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
-
-       /* no updates, no inserts */
-       if (BATcount(u_id) == 0 && (!i || BATcount(i) == 0)) {
+
+       /* no updates */
+       if (BATcount(u_id) == 0) {
                BBPincref(*result = *col, TRUE);
                return MAL_SUCCEED;
        }
@@ -3598,12 +3582,6 @@ DELTAsub(bat *result, bat *col, bat *cid
        if ((c = BBPquickdesc(ABS(*col), 0)) == NULL) 
                throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
 
-       /* bat may change */
-       if (i && BATcount(c) == 0 && BATcount(u_id) == 0) {
-               BBPincref(*result = *ins, TRUE);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to