Changeset: 6daf8abada9f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6daf8abada9f
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: newstorage
Log Message:

buggy tr_log_dbat


diffs (216 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -554,28 +554,26 @@ dup_idx(sql_trans *tr, sql_idx *i, sql_i
 static int
 dup_dbat( sql_trans *tr, sql_dbat *obat, sql_dbat *bat, int is_new, int temp)
 {
-
        printf("in dup_dbat\n");
 
        bat->dbid = obat->dbid;
+       bat->dtrbid = obat->dtrbid;
+       bat->cnt = obat->cnt;
+       bat->dname = _STRDUP(obat->dname);
+       bat->dtrname = _STRDUP(obat->dtrname);
+       bat->wtime = obat->wtime;
 
-       bat->dtrbid = obat->dtrbid;
-
-       bat->cnt = obat->cnt;
-
-       bat->dname = _STRDUP(obat->dname);
-
-       bat->dtrname = _STRDUP(obat->dtrname);
-
-       bat->wtime = obat->wtime;
        if (bat->dbid) {
-               if (is_new) {
+               if (is_new)
                        obat->dbid = temp_copy(bat->dbid, temp);
+               else
+                       bat->dbid = ebat_copy(bat->dbid, 0, temp);
+       }
+       if (bat->dtrbid) {
+               if (is_new)
                        obat->dtrbid = temp_copy(bat->dtrbid, temp);
-               } else {
-                       bat->dbid = ebat_copy(bat->dbid, 0, temp);
+               else
                        bat->dtrbid = ebat_copy(bat->dtrbid, 0, temp);
-               }
        }
        (void)tr;
        return LOG_OK;
@@ -1164,14 +1162,33 @@ static int
 load_dbat(sql_dbat *bat, int bid)
 {
        BAT *b = quick_descriptor(bid);
+       //BAT *dtrb = quick_descriptor(dtrbid);
 
        printf("in load_dbat\n");
 
        bat->dbid = temp_create(b);
-       bat->cnt = BATcount(b); 
+       bat->cnt = BATcount(b);
+       //bat->dtrbid = temp_create(dtrb);
        return LOG_OK;
 }
 
+/**
+static int
+create_del(sql_trans *tr, sql_table *t) {
+
+       int ok = LOG_OK;
+       BAT b;
+       sql_dbat *bat = t->data;
+
+       if (!bat) {
+               t->data = bat = ZNEW(sql_dbat);
+               bat->wtime = t->base.wtime = t->s->base.wtime = tr->wstime;
+               t->base.allocated = 1;
+       }
+       if (!bat->dname)
+               bat->dname = sql_message("D_%s_%s", t->s->base.name, 
t->base.name);
+}
+*/
 
 static int
 create_del(sql_trans *tr, sql_table *t)
@@ -1187,32 +1204,33 @@ create_del(sql_trans *tr, sql_table *t)
                bat->wtime = t->base.wtime = t->s->base.wtime = tr->wstime;
                t->base.allocated = 1;
        }
-       if (!bat->dname) {
+       if (!bat->dname)
                bat->dname = sql_message("D_%s_%s", t->s->base.name, 
t->base.name);
-               if(!bat->dtrname)
-                       bat->dtrname = sql_message("DTR_%s_%s", 
t->s->base.name, t->base.name);
-       }
+       if (!bat->dtrname)
+               bat->dtrname = sql_message("DTR_%s_%s", t->s->base.name, 
t->base.name);
        (void)tr;
        if (t->base.flag == TR_OLD && !isTempTable(t)) {
                log_bid bid = logger_find_bat(bat_logger, bat->dname);
+               //log_bid dtrbid = logger_find_bat(bat_logger, bat->dtrname);
 
                if (bid)
                        return load_dbat(bat, bid);
                ok = LOG_ERR;
-       } else if (bat->dbid && !isTempTable(t)) {
+       } else if (bat->dbid && bat->dtrbid && !isTempTable(t)) {
                return ok;
-       } else if (!bat->dbid) {
-               b = bat_new(TYPE_void, TYPE_oid, t->sz);
-               bat_set_access(b, BAT_READ);
-               bat->dbid = temp_create(b);
-               bat_destroy(b);
-
-               if (!bat->dtrbid) {
-                       b = bat_new(TYPE_void, TYPE_int, t->sz);
-                       bat_set_access(b,BAT_READ);
-                       bat->dtrbid = temp_create(b);
-                       bat_destroy(b);
-               }
+       } else {
+                       if (!bat->dbid) {
+                               b = bat_new(TYPE_void, TYPE_oid, t->sz);
+                               bat_set_access(b, BAT_READ);
+                               bat->dbid = temp_create(b);
+                               bat_destroy(b);
+                       }
+                       if (!bat->dtrbid) {
+                               b = bat_new(TYPE_void, TYPE_int, t->sz);
+                               bat_set_access(b,BAT_READ);
+                               bat->dtrbid = temp_create(b);
+                               bat_destroy(b);
+                       }
        }
        return ok;
 }
@@ -1400,10 +1418,16 @@ destroy_dbat(sql_trans *tr, sql_dbat *ba
 
        if (bat->dname)
                _DELETE(bat->dname);
+       if (bat->dtrname)
+               _DELETE(bat->dtrname);
        if (bat->dbid)
                temp_destroy(bat->dbid);
+       if (bat->dtrbid)
+               temp_destroy(bat->dtrbid);
        bat->dbid = 0;
        bat->dname = NULL;
+       bat->dtrbid = 0;
+       bat->dtrname = NULL;
        _DELETE(bat);
        if (n)
                return destroy_dbat(tr, n);
@@ -1441,6 +1465,14 @@ log_destroy_dbat(sql_trans *tr, sql_dbat
                if (bid) 
                        logger_del_bat(bat_logger, bid);
        }
+       if (bat->dtrbid && bat->dtrname) {
+               log_bid dtrbid;
+
+               ok = log_bat_transient(bat_logger, bat->dtrname);
+               dtrbid = logger_find_bat(bat_logger, bat->dtrname);
+               if (dtrbid)
+                       logger_del_bat(bat_logger, dtrbid);
+       }
        return ok;
 }
 
@@ -2085,7 +2117,7 @@ tr_log_dbat(sql_trans *tr, sql_dbat *fdb
 {
        int ok = LOG_OK;
        BAT *db = NULL;
-
+       BAT *dtrb = NULL;
 
        printf("in tr_log_dbat\n");
 
@@ -2094,9 +2126,11 @@ tr_log_dbat(sql_trans *tr, sql_dbat *fdb
 
        (void)tr;
        assert (fdb->dname);
-       if (cleared) 
+       assert (fdb->dtrname);
+       if (cleared) {
                log_bat_clear(bat_logger, fdb->dname);
-
+               log_bat_clear(bat_logger, fdb->dtrname);
+       }
        db = temp_descriptor(fdb->dbid);
        if (BUNlast(db) > BUNfirst(db)) {
                assert(store_nr_active>0);
@@ -2109,6 +2143,18 @@ tr_log_dbat(sql_trans *tr, sql_dbat *fdb
                }
        }
        bat_destroy(db);
+
+       dtrb = temp_descriptor(fdb->dtrbid);
+       if (BUNlast(dtrb) > BUNfirst(dtrb)) {
+               assert((store_nr_active)>0);
+               if (BUNlast(dtrb) > dtrb->batInserted && (store_nr_active != 1 
|| BATcount(dtrb) <= SNAPSHOT_MINSIZE))
+                       ok = log_bat(bat_logger, dtrb, fdb->dtrname);
+               if (store_nr_active == 1 && BATcount(dtrb) > SNAPSHOT_MINSIZE) {
+                       logger_add_bat(bat_logger, dtrb, fdb->dtrname);
+                       ok = log_bat_persists(bat_logger, dtrb, fdb->dtrname);
+               }
+       }
+       bat_destroy(dtrb);
        return ok;
 }
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -725,8 +725,6 @@ load_func(sql_trans *tr, sql_schema *s, 
        sqlid fid;
        rids *rs;
 
-       printf("in load_func\n");
-
        v = table_funcs.column_find_value(tr, find_sql_column(funcs, "id"), 
rid);
        fid = *(sqlid *)v;                      _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(funcs, "name"), 
rid);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to