Used the basic column store for tmp relations w/o variable length attributes.
diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt
index 8912414..a91ab3f 100644
--- a/query_optimizer/CMakeLists.txt
+++ b/query_optimizer/CMakeLists.txt
@@ -131,6 +131,7 @@
quickstep_relationaloperators_TextScanOperator
quickstep_relationaloperators_UpdateOperator
quickstep_storage_AggregationOperationState_proto
+ quickstep_storage_BasicColumnStoreTupleStorageSubBlock
quickstep_storage_HashTableFactory
quickstep_storage_HashTable_proto
quickstep_storage_InsertDestination_proto
diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp
index 45f5f78..d6db2a4 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -105,6 +105,7 @@
#include "relational_operators/TextScanOperator.hpp"
#include "relational_operators/UpdateOperator.hpp"
#include "storage/AggregationOperationState.pb.h"
+#include "storage/BasicColumnStoreTupleStorageSubBlock.hpp"
#include "storage/HashTable.pb.h"
#include "storage/HashTableFactory.hpp"
#include "storage/InsertDestination.pb.h"
@@ -149,6 +150,8 @@
DEFINE_bool(optimize_joins, false,
"Enable post execution plan generation optimizations for joins.");
+DEFINE_bool(use_column_store, true, "Use the column store for blocks in temporary relations.");
+
namespace E = ::quickstep::optimizer::expressions;
namespace P = ::quickstep::optimizer::physical;
namespace S = ::quickstep::serialization;
@@ -325,6 +328,23 @@
++aid;
}
+ if (FLAGS_use_column_store && !catalog_relation->isVariableLength()) {
+ StorageBlockLayoutDescription layout_description;
+ layout_description.set_num_slots(1);
+ layout_description.mutable_tuple_store_description()
+ ->set_sub_block_type(TupleStorageSubBlockDescription::BASIC_COLUMN_STORE);
+
+ DCHECK(BasicColumnStoreTupleStorageSubBlock::DescriptionIsValid(*catalog_relation,
+ layout_description.tuple_store_description()));
+
+ unique_ptr<StorageBlockLayout> layout(
+ new StorageBlockLayout(*catalog_relation, layout_description));
+ layout->finalize();
+ catalog_relation->setDefaultStorageBlockLayout(layout.release());
+ } else {
+ // Use the default row store for variable length attributes.
+ }
+
*catalog_relation_output = catalog_relation.get();
const relation_id output_rel_id = optimizer_context_->catalog_database()->addRelation(
catalog_relation.release());
@@ -335,6 +355,9 @@
insert_destination_proto->set_insert_destination_type(S::InsertDestinationType::BLOCK_POOL);
insert_destination_proto->set_relation_id(output_rel_id);
+
+ insert_destination_proto->mutable_layout()->MergeFrom(
+ (*catalog_relation_output)->getDefaultStorageBlockLayout().getDescription());
}
void ExecutionGenerator::dropAllTemporaryRelations() {
diff --git a/storage/StorageBlockLayout.proto b/storage/StorageBlockLayout.proto
index cafc0e9..4db6f06 100644
--- a/storage/StorageBlockLayout.proto
+++ b/storage/StorageBlockLayout.proto
@@ -66,7 +66,7 @@
SMA = 1;
BLOOM_FILTER = 2;
BITWEAVING_H = 3;
- BITWEAVING_V = 4;
+ BITWEAVING_V = 4;
}
required IndexSubBlockType sub_block_type = 1;