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