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

add more defensive code for delta tables


diffs (66 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
@@ -1682,7 +1682,7 @@ gtr_update_delta( sql_trans *tr, sql_del
        }
        bat_destroy(ins);
 
-       if (cbat->ucnt) {
+       if (cbat->ucnt && cbat->uibid) {
                BAT *ui = temp_descriptor(cbat->uibid);
                BAT *uv = temp_descriptor(cbat->uvbid);
                /* any updates */
@@ -1941,7 +1941,7 @@ tr_update_delta( sql_trans *tr, sql_delt
        }
        bat_destroy(ins);
 
-       if (cbat->ucnt || cleared) {
+       if ((cbat->ucnt || cleared) && cbat->uibid) {
                BAT *ui = temp_descriptor(cbat->uibid);
                BAT *uv = temp_descriptor(cbat->uvbid);
 
@@ -2140,6 +2140,11 @@ update_table(sql_trans *tr, sql_table *f
                } else if (tt->data && ft->base.allocated) {
                        tr_update_dbat(tr, tt->data, ft->data, ft->cleared);
                } else if (store_nr_active == 1 && !ft->base.allocated) {
+                       if (!tt->data && tt->po) {
+                               sql_table *ot = tr_find_table(tr->parent, tt);
+                               tt->data = timestamp_dbat(ot->data, tr->stime);
+                       }
+                       assert(tt->data);
                        tr_merge_dbat(tr, tt->data);
                        ft->data = NULL;
                } else if (ft->data) {
@@ -2175,6 +2180,11 @@ update_table(sql_trans *tr, sql_table *f
                        } else if (oc->data && cc->base.allocated) {
                                tr_update_delta(tr, oc->data, cc->data, 
cc->unique == 1);
                        } else if (store_nr_active == 1 && !cc->base.allocated) 
{
+                               if (!oc->data) {
+                                       sql_column *o = 
tr_find_column(tr->parent, oc);
+                                       oc->data = timestamp_delta(o->data, 
tr->stime);
+                               }
+                               assert(oc->data);
                                tr_merge_delta(tr, oc->data, oc->unique == 1);
                                cc->data = NULL;
                        } else if (cc->data) {
@@ -2235,6 +2245,11 @@ update_table(sql_trans *tr, sql_table *f
                                } else if (oi->data && ci->base.allocated) {
                                        tr_update_delta(tr, oi->data, ci->data, 
0);
                                } else if (store_nr_active == 1 && 
!ci->base.allocated) {
+                                       if (!oi->data) {
+                                               sql_idx *o = 
tr_find_idx(tr->parent, oi);
+                                               oi->data = 
timestamp_delta(o->data, tr->stime);
+                                       }
+                                       assert(oi->data);
                                        tr_merge_delta(tr, oi->data, 0);
                                        ci->data = NULL;
                                } else if (ci->data) {
@@ -2290,7 +2305,7 @@ tr_log_delta( sql_trans *tr, sql_delta *
        }
        bat_destroy(ins);
 
-       if (cbat->ucnt) {
+       if (cbat->ucnt && cbat->uibid) {
                BAT *ui = temp_descriptor(cbat->uibid);
                BAT *uv = temp_descriptor(cbat->uvbid);
                /* any updates */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to