@@ -78,14 +78,14 @@ TEST_F(LogBufferTests, InsertLogBufferTest) {
78
78
values.push_back (val3);
79
79
insert_record.SetValuesArray (reinterpret_cast <char *>(values.data ()), static_cast <uint32_t >(values.size ()));
80
80
log_buffer->WriteRecord (insert_record);
81
- size_t buffer_size1 = sizeof (int32_t ) + sizeof (int8_t ) + sizeof (int64_t ) * 3 + sizeof (int64_t ) * 4 +
81
+ size_t buffer_size = sizeof (int32_t ) + sizeof (int8_t ) + sizeof (int64_t ) * 3 + sizeof (int64_t ) * 4 +
82
82
sizeof (double ) * 3 ;
83
- EXPECT_EQ (buffer_size1 , log_buffer->GetSize ());
83
+ EXPECT_EQ (buffer_size , log_buffer->GetSize ());
84
84
85
85
ReferenceSerializeInput log_buffer_input (log_buffer->GetData (), log_buffer->GetSize ());
86
86
87
87
// Insert record
88
- EXPECT_EQ (buffer_size1 - sizeof (int32_t ), log_buffer_input.ReadInt ());
88
+ EXPECT_EQ (buffer_size - sizeof (int32_t ), log_buffer_input.ReadInt ());
89
89
EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_INSERT), log_buffer_input.ReadEnumInSingleByte ());
90
90
EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
91
91
EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
@@ -99,6 +99,101 @@ TEST_F(LogBufferTests, InsertLogBufferTest) {
99
99
EXPECT_EQ (value3, log_buffer_input.ReadDouble ());
100
100
}
101
101
102
+ TEST_F (LogBufferTests, UpdateLogBufferTest) {
103
+ oid_t block = 1 , offset = 16 , new_block = 1 , new_offset = 24 ;
104
+ ItemPointer location (block, offset);
105
+ ItemPointer new_location (new_block, new_offset);
106
+ eid_t epoch_id = 3 ;
107
+ txn_id_t txn_id = 99 ;
108
+ cid_t commit_id = 98 ;
109
+ oid_t database_id = 10 ;
110
+ oid_t table_id = 20 ;
111
+ oid_t tile_group_id = 30 ;
112
+ double value1 = 9.1 , value2 = 9.2 , value3 = 9.3 ;
113
+ oid_t target_oid1 = 2 , target_oid2 = 4 , target_oid3 = 5 ;
114
+
115
+ logging::LogBuffer *log_buffer;
116
+ log_buffer = new logging::LogBuffer (logging::LogManager::GetInstance ().GetTransactionBufferSize ());
117
+
118
+ // TILES
119
+ std::vector<std::string> tile_column_names;
120
+ std::vector<std::vector<std::string>> column_names;
121
+
122
+ tile_column_names.push_back (" INTEGER COL" );
123
+ column_names.push_back (tile_column_names);
124
+
125
+ std::vector<catalog::Schema> schemas;
126
+ std::vector<catalog::Column> columns;
127
+
128
+ // SCHEMA
129
+ catalog::Column column1 (type::TypeId::INTEGER, type::Type::GetTypeSize (type::TypeId::INTEGER),
130
+ " A" , true );
131
+ columns.push_back (column1);
132
+
133
+ std::unique_ptr<catalog::Schema> schema1 (new catalog::Schema (columns));
134
+ schemas.push_back (*schema1);
135
+
136
+ std::map<oid_t , std::pair<oid_t , oid_t >> column_map;
137
+ column_map[0 ] = std::make_pair (0 , 0 );
138
+
139
+ std::shared_ptr<storage::TileGroup> tile_group (storage::TileGroupFactory::GetTileGroup (
140
+ database_id, table_id, tile_group_id, nullptr , schemas, column_map, 3 ));
141
+ catalog::Manager::GetInstance ().AddTileGroup (block, tile_group);
142
+
143
+ logging::LogRecord insert_record = logging::LogRecordFactory::CreateTupleRecord (
144
+ LogRecordType::TUPLE_INSERT, location, epoch_id, txn_id, commit_id);
145
+ logging::LogRecord update_record = logging::LogRecordFactory::CreateTupleRecord (
146
+ LogRecordType::TUPLE_UPDATE, location, new_location, epoch_id, txn_id,
147
+ commit_id);
148
+
149
+ EXPECT_EQ (log_buffer->GetThreshold (), logging::LogManager::GetInstance ().GetTransactionBufferSize ());
150
+
151
+ type::Value val1 = type::ValueFactory::GetDecimalValue (value1);
152
+ type::Value val2 = type::ValueFactory::GetDecimalValue (value2);
153
+ type::Value val3 = type::ValueFactory::GetDecimalValue (value3);
154
+ std::vector<type::Value> values;
155
+ values.push_back (val1);
156
+ values.push_back (val2);
157
+ values.push_back (val3);
158
+ expression::AbstractExpression *expr = nullptr ;
159
+ planner::DerivedAttribute tmp_att (expr);
160
+ Target target1 = std::make_pair (target_oid1, tmp_att);
161
+ Target target2 = std::make_pair (target_oid2, tmp_att);
162
+ Target target3 = std::make_pair (target_oid3, tmp_att);
163
+ TargetList *target_list = new TargetList;
164
+ target_list->push_back (target1);
165
+ target_list->push_back (target2);
166
+ target_list->push_back (target3);
167
+ update_record.SetOffsetsArray (target_list);
168
+ update_record.SetValuesArray (reinterpret_cast <char *>(values.data ()), static_cast <uint32_t >(values.size ()));
169
+ log_buffer->WriteRecord (update_record);
170
+ size_t buffer_size = sizeof (int32_t ) + sizeof (int8_t ) + sizeof (int64_t ) * 3 + sizeof (int64_t ) * 7 +
171
+ (sizeof (int32_t ) + sizeof (double )) * 3 ;
172
+ EXPECT_EQ (buffer_size, log_buffer->GetSize ());
173
+
174
+ ReferenceSerializeInput log_buffer_input (log_buffer->GetData (), log_buffer->GetSize ());
175
+
176
+ // Update Record
177
+ EXPECT_EQ (buffer_size - sizeof (int32_t ), log_buffer_input.ReadInt ());
178
+ EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_UPDATE), log_buffer_input.ReadEnumInSingleByte ());
179
+ EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
180
+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
181
+ EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
182
+ EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
183
+ EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
184
+ EXPECT_EQ (block, log_buffer_input.ReadLong ());
185
+ EXPECT_EQ (offset, log_buffer_input.ReadLong ());
186
+ EXPECT_EQ (new_block, log_buffer_input.ReadLong ());
187
+ EXPECT_EQ (new_offset, log_buffer_input.ReadLong ());
188
+ EXPECT_EQ (update_record.GetNumValues (), log_buffer_input.ReadLong ());
189
+ EXPECT_EQ (target_oid1, log_buffer_input.ReadInt ());
190
+ EXPECT_EQ (value1, log_buffer_input.ReadDouble ());
191
+ EXPECT_EQ (target_oid2, log_buffer_input.ReadInt ());
192
+ EXPECT_EQ (value2, log_buffer_input.ReadDouble ());
193
+ EXPECT_EQ (target_oid3, log_buffer_input.ReadInt ());
194
+ EXPECT_EQ (value3, log_buffer_input.ReadDouble ());
195
+ }
196
+
102
197
TEST_F (LogBufferTests, LogBufferTest) {
103
198
oid_t block = 1 , offset = 16 , old_block = 1 , old_offset = 8 , new_block = 1 ,
104
199
new_offset = 24 ;
0 commit comments