Changeset: 269f1da84176 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=269f1da84176 Modified Files: sql/storage/bat/bat_storage.c Branch: default Log Message:
Defensive lines in bat storage diffs (275 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 @@ -568,11 +568,16 @@ update_col(sql_trans *tr, sql_column *c, if (!c->data || !c->base.allocated) { int type = c->type.type->localtype; sql_column *oc = tr_find_column(tr->parent, c); - sql_delta *bat = c->data = ZNEW(sql_delta), *obat = timestamp_delta(oc->data, tr->stime); - (void)dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); + sql_delta* bat = ZNEW(sql_delta),*obat; + if(!bat) + return LOG_ERR; + c->data = bat; + obat = timestamp_delta(oc->data, tr->stime); + if(dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW) == LOG_ERR) + return LOG_ERR; c->base.allocated = 1; } - bat = c->data; + bat = c->data; bat->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime = tr->wtime = tr->wstime; c->base.rtime = c->t->base.rtime = c->t->s->base.rtime = tr->rtime = tr->stime; if (tpe == TYPE_bat) @@ -593,11 +598,16 @@ update_idx(sql_trans *tr, sql_idx * i, v if (!i->data || !i->base.allocated) { int type = (oid_index(i->type))?TYPE_oid:TYPE_lng; sql_idx *oi = tr_find_idx(tr->parent, i); - sql_delta *bat = i->data = ZNEW(sql_delta), *obat = timestamp_delta(oi->data, tr->stime); - (void)dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW); + sql_delta* bat = ZNEW(sql_delta), *obat; + if(!bat) + return LOG_ERR; + i->data = bat; + obat = timestamp_delta(oi->data, tr->stime); + if(dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW) == LOG_ERR) + return LOG_ERR; i->base.allocated = 1; } - bat = i->data; + bat = i->data; bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime = tr->wtime = tr->wstime; i->base.rtime = i->t->base.rtime = i->t->s->base.rtime = tr->rtime = tr->stime; if (tpe == TYPE_bat) @@ -696,9 +706,14 @@ dup_col(sql_trans *tr, sql_column *oc, s if (oc->data) { int type = c->type.type->localtype; - sql_delta *bat = c->data = ZNEW(sql_delta), *obat = oc->data; - ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); - c->base.allocated = 1; + sql_delta *bat = ZNEW(sql_delta), *obat = oc->data; + if (!bat) + ok = LOG_ERR; + else { + c->data = bat; + ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); + c->base.allocated = 1; + } } return ok; } @@ -712,9 +727,14 @@ dup_idx(sql_trans *tr, sql_idx *i, sql_i return ok; if (i->data) { int type = (oid_index(ni->type))?TYPE_oid:TYPE_lng; - sql_delta *bat = ni->data = ZNEW(sql_delta), *obat = i->data; - ok = dup_bat(tr, ni->t, obat, bat, type, isNew(i), ni->base.flag == TR_NEW); - ni->base.allocated = 1; + sql_delta *bat = ZNEW(sql_delta), *obat = i->data; + if (!bat) + ok = LOG_ERR; + else { + ni->data = bat; + ok = dup_bat(tr, ni->t, obat, bat, type, isNew(i), ni->base.flag == TR_NEW); + ni->base.allocated = 1; + } } return ok; } @@ -744,8 +764,12 @@ dup_dbat( sql_trans *tr, sql_dbat *obat, static int dup_del(sql_trans *tr, sql_table *ot, sql_table *t) { - sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = ot->data; - int ok = dup_dbat( tr, obat, bat, isNew(t), isTempTable(t)); + int ok; + sql_dbat *bat = ZNEW(sql_dbat), *obat = ot->data; + if (!bat) + return LOG_ERR; + t->data = bat; + ok = dup_dbat( tr, obat, bat, isNew(t), isTempTable(t)); assert(t->base.allocated == 0); t->base.allocated = 1; return ok; @@ -764,11 +788,22 @@ append_col(sql_trans *tr, sql_column *c, if (!c->data || !c->base.allocated) { int type = c->type.type->localtype; sql_column *oc = tr_find_column(tr->parent, c); - sql_delta *bat = c->data = ZNEW(sql_delta), *obat = timestamp_delta(oc->data, tr->stime); - (void)dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); - c->base.allocated = 1; + sql_delta *bat = ZNEW(sql_delta), *obat; + if (!bat) + ok = LOG_ERR; + else { + c->data = bat; + obat = timestamp_delta(oc->data, tr->stime); + ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); + if(ok == LOG_OK) + c->base.allocated = 1; + } } - bat = c->data; + + if(ok == LOG_ERR) + return ok; + + bat = c->data; /* appends only write */ bat->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime = tr->wtime = tr->wstime; /* inserts are ordered with the current delta implementation */ @@ -780,8 +815,12 @@ append_col(sql_trans *tr, sql_column *c, ok = delta_append_val(bat, i); if (!c->t->data || !c->t->base.allocated) { sql_table *ot = tr_find_table(tr->parent, c->t); - sql_dbat *bat = c->t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); - dup_dbat(tr, obat, bat, isNew(ot), isTempTable(c->t)); + sql_dbat *bat = ZNEW(sql_dbat), *obat; + if (!bat) + return LOG_ERR; + c->t->data = bat; + obat = timestamp_dbat(ot->data, tr->stime); + dup_dbat(tr, obat, bat, isNew(ot), isTempTable(c->t)); c->t->base.allocated = 1; } if (c->t && c->t->data && ((sql_dbat*)c->t->data)->cached) { @@ -806,11 +845,22 @@ append_idx(sql_trans *tr, sql_idx * i, v if (!i->data || !i->base.allocated) { int type = (oid_index(i->type))?TYPE_oid:TYPE_lng; sql_idx *oi = tr_find_idx(tr->parent, i); - sql_delta *bat = i->data = ZNEW(sql_delta), *obat = timestamp_delta(oi->data, tr->stime); - (void)dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW); - i->base.allocated = 1; + sql_delta *bat = ZNEW(sql_delta), *obat; + if(!bat) + ok = LOG_ERR; + else { + i->data = bat; + obat = timestamp_delta(oi->data, tr->stime); + ok = dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW); + if(ok != LOG_ERR) + i->base.allocated = 1; + } } - bat = i->data; + + if(ok == LOG_ERR) + return ok; + + bat = i->data; /* appends only write */ bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime = tr->wtime = tr->wstime; if (tpe == TYPE_bat) @@ -819,10 +869,20 @@ append_idx(sql_trans *tr, sql_idx * i, v ok = delta_append_val(bat, ib); if (!i->t->data || !i->t->base.allocated) { sql_table *ot = tr_find_table(tr->parent, i->t); - sql_dbat *bat = i->t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); - dup_dbat(tr, obat, bat, isNew(ot), isTempTable(i->t)); - i->t->base.allocated = 1; + sql_dbat *bat = ZNEW(sql_dbat), *obat; + if(!bat) + ok = LOG_ERR; + else { + i->t->data = bat; + obat = timestamp_dbat(ot->data, tr->stime); + dup_dbat(tr, obat, bat, isNew(ot), isTempTable(i->t)); + i->t->base.allocated = 1; + } } + + if(ok == LOG_ERR) + return ok; + if (i->t && i->t->data && ((sql_dbat*)i->t->data)->cached) { sql_dbat *bat = i->t->data; @@ -895,11 +955,15 @@ delete_tab(sql_trans *tr, sql_table * t, if (!t->data || !t->base.allocated) { sql_table *ot = tr_find_table(tr->parent, t); - sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); - dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); + sql_dbat *bat = ZNEW(sql_dbat), *obat; + if(!bat) + return LOG_ERR; + t->data = bat; + obat = timestamp_dbat(ot->data, tr->stime); + dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); t->base.allocated = 1; } - bat = t->data; + bat = t->data; /* delete all cached copies */ if (bat->cached) { @@ -1302,6 +1366,8 @@ create_col(sql_trans *tr, sql_column *c) if (!bat || !c->base.allocated) { c->data = bat = ZNEW(sql_delta); + if(!bat) + return LOG_ERR; bat->wtime = c->base.wtime = tr->wstime; c->base.allocated = 1; } @@ -1373,6 +1439,8 @@ create_idx(sql_trans *tr, sql_idx *ni) if (!bat || !ni->base.allocated) { ni->data = bat = ZNEW(sql_delta); + if(!bat) + return LOG_ERR; bat->wtime = ni->base.wtime = tr->wstime; ni->base.allocated = 1; } @@ -1445,6 +1513,8 @@ create_del(sql_trans *tr, sql_table *t) if (!bat) { t->data = bat = ZNEW(sql_dbat); + if(!bat) + return LOG_ERR; bat->wtime = t->base.wtime = t->s->base.wtime = tr->wstime; t->base.allocated = 1; } @@ -1719,9 +1789,13 @@ clear_col(sql_trans *tr, sql_column *c) if (!c->data || !c->base.allocated) { int type = c->type.type->localtype; sql_column *oc = tr_find_column(tr->parent, c); - sql_delta *bat = c->data = ZNEW(sql_delta), *obat = timestamp_delta(oc->data, tr->stime); + sql_delta *bat = c->data = ZNEW(sql_delta), *obat; + if(!bat) + return 0; + obat = timestamp_delta(oc->data, tr->stime); assert(tr != gtrans); - (void)dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW); + if(dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag == TR_NEW) == LOG_ERR) + return 0; c->base.allocated = 1; } if (c->data) @@ -1738,9 +1812,11 @@ clear_idx(sql_trans *tr, sql_idx *i) int type = (oid_index(i->type))?TYPE_oid:TYPE_lng; sql_idx *oi = tr_find_idx(tr->parent, i); sql_delta *bat = i->data = ZNEW(sql_delta), *obat; - + if(!bat) + return 0; obat = timestamp_delta(oi->data, tr->stime); - (void)dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW); + if(dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == TR_NEW)) + return 0; i->base.allocated = 1; } if (i->data) @@ -1912,7 +1988,10 @@ clear_del(sql_trans *tr, sql_table *t) { if (!t->data || !t->base.allocated) { sql_table *ot = tr_find_table(tr->parent, t); - sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); + sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat; + if(!bat) + return 0; + obat = timestamp_dbat(ot->data, tr->stime); dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); t->base.allocated = 1; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list