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

Reply via email to