@@ -25,6 +25,80 @@ namespace test {
25
25
26
26
class LogBufferTests : public PelotonTest {};
27
27
28
+ TEST_F (LogBufferTests, InsertLogBufferTest) {
29
+ oid_t block = 1 , offset = 16 ;
30
+ ItemPointer location (block, offset);
31
+ eid_t epoch_id = 3 ;
32
+ txn_id_t txn_id = 99 ;
33
+ cid_t commit_id = 98 ;
34
+ oid_t database_id = 10 ;
35
+ oid_t table_id = 20 ;
36
+ oid_t tile_group_id = 30 ;
37
+ double value1 = 9.1 , value2 = 9.2 , value3 = 9.3 ;
38
+
39
+ logging::LogBuffer *log_buffer;
40
+ log_buffer = new logging::LogBuffer (logging::LogManager::GetInstance ().GetTransactionBufferSize ());
41
+
42
+ // TILES
43
+ std::vector<std::string> tile_column_names;
44
+ std::vector<std::vector<std::string>> column_names;
45
+
46
+ tile_column_names.push_back (" INTEGER COL" );
47
+ column_names.push_back (tile_column_names);
48
+
49
+ std::vector<catalog::Schema> schemas;
50
+ std::vector<catalog::Column> columns;
51
+
52
+ // SCHEMA
53
+ catalog::Column column1 (type::TypeId::INTEGER, type::Type::GetTypeSize (type::TypeId::INTEGER),
54
+ " A" , true );
55
+ columns.push_back (column1);
56
+
57
+ std::unique_ptr<catalog::Schema> schema1 (new catalog::Schema (columns));
58
+ schemas.push_back (*schema1);
59
+
60
+ std::map<oid_t , std::pair<oid_t , oid_t >> column_map;
61
+ column_map[0 ] = std::make_pair (0 , 0 );
62
+
63
+ std::shared_ptr<storage::TileGroup> tile_group (storage::TileGroupFactory::GetTileGroup (
64
+ database_id, table_id, tile_group_id, nullptr , schemas, column_map, 3 ));
65
+ catalog::Manager::GetInstance ().AddTileGroup (block, tile_group);
66
+
67
+ logging::LogRecord insert_record = logging::LogRecordFactory::CreateTupleRecord (
68
+ LogRecordType::TUPLE_INSERT, location, epoch_id, txn_id, commit_id);
69
+
70
+ EXPECT_EQ (log_buffer->GetThreshold (), logging::LogManager::GetInstance ().GetTransactionBufferSize ());
71
+
72
+ type::Value val1 = type::ValueFactory::GetDecimalValue (value1);
73
+ type::Value val2 = type::ValueFactory::GetDecimalValue (value2);
74
+ type::Value val3 = type::ValueFactory::GetDecimalValue (value3);
75
+ std::vector<type::Value> values;
76
+ values.push_back (val1);
77
+ values.push_back (val2);
78
+ values.push_back (val3);
79
+ insert_record.SetValuesArray (reinterpret_cast <char *>(values.data ()), static_cast <uint32_t >(values.size ()));
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 +
82
+ sizeof (double ) * 3 ;
83
+ EXPECT_EQ (buffer_size1, log_buffer->GetSize ());
84
+
85
+ ReferenceSerializeInput log_buffer_input (log_buffer->GetData (), log_buffer->GetSize ());
86
+
87
+ // Insert record
88
+ EXPECT_EQ (buffer_size1 - sizeof (int32_t ), log_buffer_input.ReadInt ());
89
+ EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_INSERT), log_buffer_input.ReadEnumInSingleByte ());
90
+ EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
91
+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
92
+ EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
93
+ EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
94
+ EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
95
+ EXPECT_EQ (block, log_buffer_input.ReadLong ());
96
+ EXPECT_EQ (offset, log_buffer_input.ReadLong ());
97
+ EXPECT_EQ (value1, log_buffer_input.ReadDouble ());
98
+ EXPECT_EQ (value2, log_buffer_input.ReadDouble ());
99
+ EXPECT_EQ (value3, log_buffer_input.ReadDouble ());
100
+ }
101
+
28
102
TEST_F (LogBufferTests, LogBufferTest) {
29
103
oid_t block = 1 , offset = 16 , old_block = 1 , old_offset = 8 , new_block = 1 ,
30
104
new_offset = 24 ;
@@ -115,8 +189,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
115
189
// Insert record
116
190
EXPECT_EQ (buffer_size1 - sizeof (int32_t ), log_buffer_input.ReadInt ());
117
191
EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_INSERT), log_buffer_input.ReadEnumInSingleByte ());
118
- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
119
192
EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
193
+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
120
194
EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
121
195
EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
122
196
EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
@@ -129,8 +203,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
129
203
// Update Record
130
204
EXPECT_EQ (buffer_size2 - sizeof (int32_t ), log_buffer_input.ReadInt ());
131
205
EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_UPDATE), log_buffer_input.ReadEnumInSingleByte ());
132
- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
133
206
EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
207
+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
134
208
EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
135
209
EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
136
210
EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
@@ -149,8 +223,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
149
223
// Delete record
150
224
EXPECT_EQ (buffer_size3 - sizeof (int32_t ), log_buffer_input.ReadInt ());
151
225
EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_DELETE), log_buffer_input.ReadEnumInSingleByte ());
152
- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
153
226
EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
227
+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
154
228
EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
155
229
EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
156
230
EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
0 commit comments