in results.c [2132:2179]
static void AddRollback(StatementClass *stmt, QResultClass *res, SQLLEN index, const KeySet *keyset, Int4 dmlcode)
{
ConnectionClass *conn = SC_get_conn(stmt);
Rollback *rollback;
if (!CC_is_in_trans(conn))
return;
MYLOG(DETAIL_LOG_LEVEL, "entering " FORMAT_LEN "(%u,%u) %s\n", index, keyset->blocknum, keyset->offset, dmlcode == SQL_ADD ? "ADD" : (dmlcode == SQL_UPDATE ? "UPDATE" : (dmlcode == SQL_DELETE ? "DELETE" : "REFRESH")));
if (!res->rollback)
{
res->rb_count = 0;
res->rb_alloc = 10;
rollback = res->rollback = malloc(sizeof(Rollback) * res->rb_alloc);
if (!rollback)
{
res->rb_alloc = res->rb_count = 0;
return;
}
}
else
{
if (res->rb_count >= res->rb_alloc)
{
res->rb_alloc *= 2;
if (rollback = realloc(res->rollback, sizeof(Rollback) * res->rb_alloc), !rollback)
{
res->rb_alloc = res->rb_count = 0;
return;
}
res->rollback = rollback;
}
rollback = res->rollback + res->rb_count;
}
rollback->index = index;
rollback->option = dmlcode;
rollback->offset = 0;
rollback->blocknum = 0;
rollback->oid = 0;
if (keyset)
{
rollback->blocknum = keyset->blocknum;
rollback->offset = keyset->offset;
rollback->oid = keyset->oid;
}
conn->result_uncommitted = 1;
res->rb_count++;
}