Skip to content
This repository was archived by the owner on Sep 27, 2019. It is now read-only.

Commit 42b9725

Browse files
make check passes. Need to add test with hybrid layout.
1 parent 6fb3211 commit 42b9725

File tree

9 files changed

+44
-28
lines changed

9 files changed

+44
-28
lines changed

src/gc/gc_manager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace gc {
2424

2525
// Check a tuple and reclaim all varlen field
2626
void GCManager::CheckAndReclaimVarlenColumns(storage::TileGroup *tile_group, oid_t tuple_id) {
27-
oid_t tile_count = tile_group->tile_count;
27+
oid_t tile_count = tile_group->tile_count_;
2828
oid_t tile_col_count;
2929
type::TypeId type_id;
3030
char *tuple_location;

src/include/storage/tile_group.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class TileGroup : public Printable {
130130

131131
// Get the tile at given offset in the tile group
132132
inline Tile *GetTile(const oid_t tile_offset) const {
133-
PELOTON_ASSERT(tile_offset < tile_count);
133+
PELOTON_ASSERT(tile_offset < tile_count_);
134134
Tile *tile = tiles[tile_offset].get();
135135
return tile;
136136
}
@@ -152,7 +152,7 @@ class TileGroup : public Printable {
152152

153153
void SetTileGroupId(oid_t tile_group_id_) { tile_group_id = tile_group_id_; }
154154

155-
size_t GetTileCount() const { return tile_count; }
155+
size_t GetTileCount() const { return tile_count_; }
156156

157157
type::Value GetValue(oid_t tuple_id, oid_t column_id);
158158

@@ -189,7 +189,7 @@ class TileGroup : public Printable {
189189
oid_t num_tuple_slots;
190190

191191
// number of tiles
192-
oid_t tile_count;
192+
oid_t tile_count_;
193193

194194
std::mutex tile_group_mutex;
195195

src/storage/abstract_table.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ AbstractTable::AbstractTable(oid_t table_oid, catalog::Schema *schema,
3030

3131
// The default Layout should always be ROW or COLUMN
3232
PELOTON_ASSERT((layout_type == LayoutType::ROW) || (layout_type == LayoutType::COLUMN));
33-
default_layout_ = std::make_shared<const Layout>(schema->GetColumnCount(), layout_type);
33+
default_layout_ = std::shared_ptr<const Layout>(
34+
new Layout(schema->GetColumnCount(), layout_type));
3435
}
3536

3637
AbstractTable::~AbstractTable() {

src/storage/data_table.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,8 @@ void DataTable::AddTileGroupWithOidForRecovery(const oid_t &tile_group_id) {
937937
if (default_layout_->IsRowStore()) {
938938
layout = default_layout_;
939939
} else {
940-
layout = std::make_shared<const Layout>((schema->GetColumnCount());
940+
layout = std::shared_ptr<const Layout>(
941+
new const Layout(schema->GetColumnCount()));
941942
}
942943

943944
std::shared_ptr<TileGroup> tile_group(TileGroupFactory::GetTileGroup(
@@ -1365,7 +1366,7 @@ void DataTable::ClearIndexSamples() {
13651366
}
13661367

13671368
void DataTable::SetDefaultLayout(const column_map_type &column_map) {
1368-
default_layout_ = std::make_shared<const Layout>(column_map);
1369+
default_layout_ = std::shared_ptr<const Layout>(new const Layout(column_map));
13691370
}
13701371

13711372
const Layout& DataTable::GetDefaultLayout() const {

src/storage/layout.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,27 @@ std::vector<catalog::Schema> Layout::GetLayoutSchemas(
160160
// Build the schema tile at a time
161161
std::map<oid_t, std::vector<catalog::Column>> tile_schemas;
162162

163-
// This only works if the order of columns in the tile are the same
164-
// as the schema. This snipet was initially in abstract_table.cpp.
165-
for (auto column_info : column_layout_) {
166-
tile_schemas[column_info.second.first].push_back(
167-
schema->GetColumn(column_info.first));
168-
}
163+
// Handle schemas population based on the layout type
164+
if (layout_type_ == LayoutType::ROW) {
165+
schemas.push_back(*schema);
166+
} else if (layout_type_ == LayoutType::COLUMN) {
167+
for (oid_t col_id = 0; col_id < num_columns_; col_id++) {
168+
std::vector<catalog::Column> tile_schema({schema->GetColumn(col_id)});
169+
schemas.push_back(tile_schema);
170+
}
171+
} else {
172+
// For LayoutType::HYBRID, use the old technique.
173+
// This only works if the order of columns in the tile are the same
174+
// as the schema. This snipet was initially in abstract_table.cpp.
175+
for (auto column_info : column_layout_) {
176+
tile_schemas[column_info.second.first].push_back(
177+
schema->GetColumn(column_info.first));
178+
}
169179

170-
for (auto entry : tile_schemas) {
171-
catalog::Schema tile_schema(entry.second);
172-
schemas.push_back(tile_schema);
180+
for (auto entry : tile_schemas) {
181+
catalog::Schema tile_schema(entry.second);
182+
schemas.push_back(tile_schema);
183+
}
173184
}
174185

175186
return schemas;

src/storage/tile_group.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ TileGroup::TileGroup(BackendType backend_type,
4141
table(table),
4242
num_tuple_slots(tuple_count),
4343
tile_group_layout_(layout){
44-
tile_count = schemas.size();
45-
for (oid_t tile_itr = 0; tile_itr < tile_count; tile_itr++) {
44+
tile_count_ = schemas.size();
45+
for (oid_t tile_itr = 0; tile_itr < tile_count_; tile_itr++) {
4646
auto &manager = catalog::Manager::GetInstance();
4747
oid_t tile_id = manager.GetNextTileId();
4848

@@ -107,7 +107,7 @@ void TileGroup::CopyTuple(const Tuple *tuple, const oid_t &tuple_slot_id) {
107107
oid_t tile_column_count;
108108
oid_t column_itr = 0;
109109

110-
for (oid_t tile_itr = 0; tile_itr < tile_count; tile_itr++) {
110+
for (oid_t tile_itr = 0; tile_itr < tile_count_; tile_itr++) {
111111
storage::Tile *tile = GetTile(tile_itr);
112112
PELOTON_ASSERT(tile);
113113
const catalog::Schema *schema = tile->GetSchema();
@@ -188,7 +188,7 @@ oid_t TileGroup::InsertTupleFromRecovery(cid_t commit_id, oid_t tuple_slot_id,
188188
oid_t tile_column_count;
189189
oid_t column_itr = 0;
190190

191-
for (oid_t tile_itr = 0; tile_itr < tile_count; tile_itr++) {
191+
for (oid_t tile_itr = 0; tile_itr < tile_count_; tile_itr++) {
192192
storage::Tile *tile = GetTile(tile_itr);
193193
PELOTON_ASSERT(tile);
194194
const catalog::Schema *schema = tile->GetSchema();
@@ -287,7 +287,7 @@ oid_t TileGroup::InsertTupleFromCheckpoint(oid_t tuple_slot_id,
287287
oid_t tile_column_count;
288288
oid_t column_itr = 0;
289289

290-
for (oid_t tile_itr = 0; tile_itr < tile_count; tile_itr++) {
290+
for (oid_t tile_itr = 0; tile_itr < tile_count_; tile_itr++) {
291291

292292
storage::Tile *tile = GetTile(tile_itr);
293293
PELOTON_ASSERT(tile);
@@ -336,7 +336,7 @@ void TileGroup::SetValue(type::Value &value, oid_t tuple_id,
336336

337337
std::shared_ptr<Tile> TileGroup::GetTileReference(
338338
const oid_t tile_offset) const {
339-
PELOTON_ASSERT(tile_offset < tile_count);
339+
PELOTON_ASSERT(tile_offset < tile_count_);
340340
return tiles[tile_offset];
341341
}
342342

@@ -360,7 +360,7 @@ const std::string TileGroup::GetInfo() const {
360360
os << "Table[" << table_id << "] " << std::endl;
361361
os << (*tile_group_header) << std::endl;
362362

363-
for (oid_t tile_itr = 0; tile_itr < tile_count; tile_itr++) {
363+
for (oid_t tile_itr = 0; tile_itr < tile_count_; tile_itr++) {
364364
Tile *tile = GetTile(tile_itr);
365365
if (tile != nullptr) {
366366
os << std::endl << (*tile);

test/executor/seq_scan_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ storage::DataTable *CreateTable() {
101101
storage::TileGroupFactory::GetTileGroup(
102102
INVALID_OID, INVALID_OID,
103103
TestingHarness::GetInstance().GetNextTileGroupId(), table.get(),
104-
schemas1, column_map1, tuple_count)));
104+
schemas1, layout1, tuple_count)));
105105

106106
table->AddTileGroup(std::shared_ptr<storage::TileGroup>(
107107
storage::TileGroupFactory::GetTileGroup(
108108
INVALID_OID, INVALID_OID,
109109
TestingHarness::GetInstance().GetNextTileGroupId(), table.get(),
110-
schemas2, column_map2, tuple_count)));
110+
schemas2, layout2, tuple_count)));
111111

112112
TestingExecutorUtil::PopulateTiles(table->GetTileGroup(0), tuple_count);
113113
TestingExecutorUtil::PopulateTiles(table->GetTileGroup(1), tuple_count);

test/executor/testing_executor_util.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "index/index_factory.h"
3030
#include "storage/data_table.h"
3131
#include "storage/database.h"
32+
#include "storage/layout.h"
3233
#include "storage/table_factory.h"
3334
#include "storage/tile.h"
3435
#include "storage/tile_group.h"
@@ -171,7 +172,7 @@ std::shared_ptr<storage::TileGroup> TestingExecutorUtil::CreateTileGroup(
171172
column_map[3] = std::make_pair(1, 1);
172173

173174
std::shared_ptr<const storage::Layout> layout =
174-
std::make_shared<const storage::Layout>(column_map);
175+
std::shared_ptr<const storage::Layout>(new const storage::Layout(column_map));
175176

176177
std::shared_ptr<storage::TileGroup> tile_group_ptr(
177178
storage::TileGroupFactory::GetTileGroup(

test/executor/update_test.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ storage::DataTable *CreateTable() {
9191
column_map1[3] = std::make_pair(1, 1);
9292

9393
std::shared_ptr<const storage::Layout> layout1 =
94-
std::make_shared<const storage::Layout>(column_map1);
94+
std::shared_ptr<const storage::Layout>(
95+
new const storage::Layout(column_map1));
9596

9697
std::map<oid_t, std::pair<oid_t, oid_t>> column_map2;
9798
column_map2[0] = std::make_pair(0, 0);
@@ -100,7 +101,8 @@ storage::DataTable *CreateTable() {
100101
column_map2[3] = std::make_pair(1, 2);
101102

102103
std::shared_ptr<const storage::Layout> layout2 =
103-
std::make_shared<const storage::Layout>(column_map2);
104+
std::shared_ptr<const storage::Layout>(
105+
new const storage::Layout(column_map1));
104106

105107
// Create tile groups.
106108
table->AddTileGroup(std::shared_ptr<storage::TileGroup>(

0 commit comments

Comments
 (0)