| 1 | #include "duckdb/transaction/rollback_state.hpp" |
|---|---|
| 2 | #include "duckdb/transaction/delete_info.hpp" |
| 3 | #include "duckdb/transaction/update_info.hpp" |
| 4 | |
| 5 | #include "duckdb/storage/uncompressed_segment.hpp" |
| 6 | #include "duckdb/storage/table/chunk_info.hpp" |
| 7 | |
| 8 | #include "duckdb/catalog/catalog_entry.hpp" |
| 9 | #include "duckdb/catalog/catalog_set.hpp" |
| 10 | |
| 11 | using namespace duckdb; |
| 12 | using namespace std; |
| 13 | |
| 14 | void RollbackState::RollbackEntry(UndoFlags type, data_ptr_t data) { |
| 15 | switch (type) { |
| 16 | case UndoFlags::CATALOG_ENTRY: { |
| 17 | // undo this catalog entry |
| 18 | CatalogEntry *catalog_entry = *((CatalogEntry **)data); |
| 19 | assert(catalog_entry->set); |
| 20 | catalog_entry->set->Undo(catalog_entry); |
| 21 | break; |
| 22 | } |
| 23 | case UndoFlags::DELETE_TUPLE: { |
| 24 | auto info = (DeleteInfo *)data; |
| 25 | // reset the deleted flag on rollback |
| 26 | info->vinfo->CommitDelete(NOT_DELETED_ID, info->rows, info->count); |
| 27 | break; |
| 28 | } |
| 29 | case UndoFlags::UPDATE_TUPLE: { |
| 30 | auto info = (UpdateInfo *)data; |
| 31 | info->segment->RollbackUpdate(info); |
| 32 | break; |
| 33 | } |
| 34 | default: |
| 35 | assert(type == UndoFlags::EMPTY_ENTRY); |
| 36 | break; |
| 37 | } |
| 38 | } |
| 39 |