Changeset: 0801e70ba51a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0801e70ba51a
Modified Files:
sql/storage/bat/bat_storage.c
Branch: newstorage
Log Message:
insert negative timestamps when delete row(s) of table or when drop table.
protect concurrent deletes
diffs (114 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
@@ -904,16 +904,36 @@ append_idx(sql_trans *tr, sql_idx * i, v
}
static void
-timestamps_delete(sql_trans *tr, sql_timestamps *ts, BAT *i) {
-
- (void)tr;
- (void)ts;
- (void)i;
-
+timestamps_delete_bat(sql_trans *tr, sql_timestamps *ts, BAT *i) {
+
+ BAT *delb = temp_descriptor(ts->delbid);
+
+ int nts=0;
+ BUN isz;
+
+ assert(!delb || delb->htype == TYPE_void);
+ assert(delb->T->heap.storage != STORE_PRIV);
+
+ nts = (tr->wtime) * (-1);
+
+ isz = BATcount(i);
+
+ if(isz==0)
+ return;
+ else {
+ BUN p, q = 0;
+
+ BATloop(i, p, q) {
+ BUN slot = *(Tloc(i,p));
+ BUNinplace(delb, slot, delb->H, (ptr)&nts, TRUE);
+ }
+ }
+
+ bat_destroy(delb);
}
static void
-delta_delete_bat(sql_trans *tr, sql_timestamps *ts, sql_dbat *bat, BAT *i)
+delta_delete_bat(sql_dbat *bat, BAT *i)
{
BAT *b = temp_descriptor(bat->dbid);
@@ -930,18 +950,31 @@ delta_delete_bat(sql_trans *tr, sql_time
bat_destroy(b);
bat->cnt += BATcount(i);
-
- timestamps_delete(tr, ts, i);
}
static void
-delta_delete_val(sql_trans *tr, sql_timestamps *ts, sql_dbat *bat, oid rid)
+timestamps_delete_val(sql_trans *tr, sql_timestamps *ts, oid rid) {
+
+ BAT *delb = temp_descriptor(ts->delbid);
+
+ int nts=0;
+
+ assert(!delb || delb->htype == TYPE_void);
+ assert(delb->T->heap.storage != STORE_PRIV);
+
+ nts = (tr->wtime) * (-1);
+
+ BUNinplace(delb, (BUN)rid, delb->H, (ptr)&nts, TRUE);
+
+ bat_destroy(delb);
+}
+
+static void
+delta_delete_val(sql_dbat *bat, oid rid)
{
BAT *b = temp_descriptor(bat->dbid);
printf("#in delta_delete_val\n");
- (void)tr;
- (void)ts;
if (isEbat(b)) {
temp_destroy(bat->dbid);
@@ -964,6 +997,8 @@ delete_tab(sql_trans *tr, sql_table *t,
sql_timestamps *ts;
node *n;
+ store_lock();
+
printf("#in delete_tab\n");
if (tpe == TYPE_bat && !BATcount(b))
@@ -1019,10 +1054,16 @@ delete_tab(sql_trans *tr, sql_table *t,
/* deletes only write */
bat->wtime = t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime;
- if (tpe == TYPE_bat)
- delta_delete_bat(tr, ts, bat, ib);
- else
- delta_delete_val(tr, ts, bat, *(oid*)ib);
+ if (tpe == TYPE_bat) {
+ delta_delete_bat(bat, ib);
+ timestamps_delete_bat(tr, ts, ib);
+ }
+ else {
+ delta_delete_val(bat, *(oid*)ib);
+ timestamps_delete_val(tr, ts, *(oid*)ib);
+ }
+
+ store_unlock();
}
static size_t
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list