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

Commit 2f6dd56

Browse files
committed
Merge branch 'master' into jenkins
2 parents 0fcc3ff + b7d4ba5 commit 2f6dd56

File tree

12 files changed

+65
-42
lines changed

12 files changed

+65
-42
lines changed

src/binder/binder_context.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,8 @@ void BinderContext::AddRegularTable(const std::string db_name,
3737
const std::string table_alias,
3838
concurrency::TransactionContext *txn) {
3939
// using catalog object to retrieve meta-data
40-
// PL_ASSERT(txn->catalog_cache.GetDatabaseObject(db_name) != nullptr);
4140
auto table_object =
4241
catalog::Catalog::GetInstance()->GetTableObject(db_name, table_name, txn);
43-
// txn->catalog_cache.GetDatabaseObject(db_name)->GetTableObject(table_name, true);
4442

4543
if (regular_table_alias_map_.find(table_alias) !=
4644
regular_table_alias_map_.end() ||

src/include/optimizer/cost_calculator.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class Memo;
2121
// Derive cost for a physical group expressionh
2222
class CostCalculator : public OperatorVisitor {
2323
public:
24-
double CalculateCost(GroupExpression *gexpr, Memo *memo);
24+
double CalculateCost(GroupExpression *gexpr, Memo *memo,
25+
concurrency::TransactionContext *txn);
2526

2627
void Visit(const DummyScan *) override;
2728
void Visit(const PhysicalSeqScan *) override;
@@ -53,6 +54,7 @@ class CostCalculator : public OperatorVisitor {
5354

5455
GroupExpression *gexpr_;
5556
Memo *memo_;
57+
concurrency::TransactionContext *txn_;
5658
double output_cost_ = 0;
5759
};
5860

src/include/optimizer/optimizer_metadata.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class OptimizerMetadata {
2929
Memo memo;
3030
RuleSet rule_set;
3131
OptimizerTaskPool *task_pool;
32-
catalog::CatalogCache* catalog_cache;
32+
concurrency::TransactionContext* txn;
3333

3434
void SetTaskPool(OptimizerTaskPool *task_pool) {
3535
this->task_pool = task_pool;

src/include/optimizer/stats/stats_storage.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,21 @@ class StatsStorage {
6262
oid_t table_id,
6363
oid_t column_id);
6464

65-
std::shared_ptr<TableStats> GetTableStats(oid_t database_id, oid_t table_id);
65+
std::shared_ptr<TableStats> GetTableStats(
66+
oid_t database_id, oid_t table_id, concurrency::TransactionContext *txn);
6667

67-
std::shared_ptr<TableStats> GetTableStats(oid_t database_id, oid_t table_id,
68-
std::vector<oid_t> column_ids);
68+
std::shared_ptr<TableStats> GetTableStats(
69+
oid_t database_id, oid_t table_id, std::vector<oid_t> column_ids,
70+
concurrency::TransactionContext *txn);
6971

7072
/* Functions for triggerring stats collection */
7173

72-
ResultType AnalyzeStatsForAllTables(concurrency::TransactionContext *txn = nullptr);
74+
ResultType AnalyzeStatsForAllTables(
75+
concurrency::TransactionContext *txn = nullptr);
7376

74-
ResultType AnalyzeStatsForTable(storage::DataTable *table,
75-
concurrency::TransactionContext *txn = nullptr);
77+
ResultType AnalyzeStatsForTable(
78+
storage::DataTable *table,
79+
concurrency::TransactionContext *txn = nullptr);
7680

7781
ResultType AnalayzeStatsForColumns(storage::DataTable *table,
7882
std::vector<std::string> column_names);

src/include/optimizer/stats_calculator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class TableStats;
2727
class StatsCalculator : public OperatorVisitor {
2828
public:
2929
void CalculateStats(GroupExpression *gexpr, ExprSet required_cols,
30-
Memo *memo);
30+
Memo *memo, concurrency::TransactionContext* txn);
3131

3232
void Visit(const LogicalGet *) override;
3333
void Visit(const LogicalQueryDerivedGet *) override;
@@ -75,6 +75,7 @@ class StatsCalculator : public OperatorVisitor {
7575
GroupExpression *gexpr_;
7676
ExprSet required_cols_;
7777
Memo *memo_;
78+
concurrency::TransactionContext* txn_;
7879
};
7980

8081
} // namespace optimizer

src/optimizer/cost_calculator.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
namespace peloton {
2525
namespace optimizer {
2626

27-
double CostCalculator::CalculateCost(GroupExpression *gexpr, Memo *memo) {
27+
double CostCalculator::CalculateCost(GroupExpression *gexpr, Memo *memo,
28+
concurrency::TransactionContext *txn) {
2829
gexpr_ = gexpr;
2930
memo_ = memo;
31+
txn_ = txn;
3032
gexpr_->Op().Accept(this);
3133
return output_cost_;
3234
}
@@ -36,8 +38,8 @@ void CostCalculator::Visit(UNUSED_ATTRIBUTE const DummyScan *op) {
3638
}
3739
void CostCalculator::Visit(const PhysicalSeqScan *op) {
3840
auto table_stats = std::dynamic_pointer_cast<TableStats>(
39-
StatsStorage::GetInstance()->GetTableStats(op->table_->GetDatabaseOid(),
40-
op->table_->GetTableOid()));
41+
StatsStorage::GetInstance()->GetTableStats(
42+
op->table_->GetDatabaseOid(), op->table_->GetTableOid(), txn_));
4143
if (table_stats->GetColumnCount() == 0) {
4244
output_cost_ = 1.f;
4345
return;
@@ -46,8 +48,8 @@ void CostCalculator::Visit(const PhysicalSeqScan *op) {
4648
}
4749
void CostCalculator::Visit(UNUSED_ATTRIBUTE const PhysicalIndexScan *op) {
4850
auto table_stats = std::dynamic_pointer_cast<TableStats>(
49-
StatsStorage::GetInstance()->GetTableStats(op->table_->GetDatabaseOid(),
50-
op->table_->GetTableOid()));
51+
StatsStorage::GetInstance()->GetTableStats(
52+
op->table_->GetDatabaseOid(), op->table_->GetTableOid(), txn_));
5153
if (table_stats->GetColumnCount() == 0 || table_stats->num_rows == 0) {
5254
output_cost_ = 0.f;
5355
return;

src/optimizer/optimizer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,14 @@ shared_ptr<planner::AbstractPlan> Optimizer::BuildPelotonPlanTree(
110110
make_shared<binder::BindNodeVisitor>(txn, default_database_name);
111111
bind_node_visitor->BindNameToNode(parse_tree);
112112

113-
metadata_.catalog_cache = &txn->catalog_cache;
114113
// Handle ddl statement
115114
bool is_ddl_stmt;
116115
auto ddl_plan = HandleDDLStatement(parse_tree, is_ddl_stmt, txn);
117116
if (is_ddl_stmt) {
118117
return move(ddl_plan);
119118
}
120119

120+
metadata_.txn = txn;
121121
// Generate initial operator tree from query tree
122122
shared_ptr<GroupExpression> gexpr = InsertQueryTree(parse_tree, txn);
123123
GroupID root_id = gexpr->GetGroupID();

src/optimizer/optimizer_task.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ void DeriveStats::execute() {
249249
}
250250

251251
StatsCalculator calculator;
252-
calculator.CalculateStats(gexpr_, required_cols_, &context_->metadata->memo);
252+
calculator.CalculateStats(gexpr_, required_cols_, &context_->metadata->memo,
253+
context_->metadata->txn);
253254
gexpr_->SetDerivedStats();
254255
}
255256
//===--------------------------------------------------------------------===//
@@ -291,8 +292,8 @@ void OptimizeInputs::execute() {
291292
// 1. Collect stats needed and cache them in the group
292293
// 2. Calculate cost based on children's stats
293294
CostCalculator cost_calculator;
294-
cur_total_cost_ +=
295-
cost_calculator.CalculateCost(group_expr_, &context_->metadata->memo);
295+
cur_total_cost_ += cost_calculator.CalculateCost(
296+
group_expr_, &context_->metadata->memo, context_->metadata->txn);
296297
}
297298

298299
for (; cur_child_idx_ < (int)group_expr_->GetChildrenGroupsSize();
@@ -367,7 +368,8 @@ void OptimizeInputs::execute() {
367368
std::make_shared<PropertySet>(extended_output_properties);
368369
CostCalculator cost_calculator;
369370
cur_total_cost_ += cost_calculator.CalculateCost(
370-
memo_enforced_expr, &context_->metadata->memo);
371+
memo_enforced_expr, &context_->metadata->memo,
372+
context_->metadata->txn);
371373

372374
// Update hash tables for group and group expression
373375
memo_enforced_expr->SetLocalHashTable(

src/optimizer/stats/stats_storage.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ void StatsStorage::InsertOrUpdateColumnStats(
104104
oid_t database_id, oid_t table_id, oid_t column_id, int num_rows,
105105
double cardinality, double frac_null, std::string most_common_vals,
106106
std::string most_common_freqs, std::string histogram_bounds,
107-
std::string column_name, bool has_index, concurrency::TransactionContext *txn) {
107+
std::string column_name, bool has_index,
108+
concurrency::TransactionContext *txn) {
108109
LOG_TRACE("InsertOrUpdateColumnStats, %d, %lf, %lf, %s, %s, %s", num_rows,
109110
cardinality, frac_null, most_common_vals.c_str(),
110111
most_common_freqs.c_str(), histogram_bounds.c_str());
@@ -215,15 +216,12 @@ std::shared_ptr<ColumnStats> StatsStorage::ConvertVectorToColumnStats(
215216
*
216217
* The return value is the shared_ptr of TableStats wrapper.
217218
*/
218-
std::shared_ptr<TableStats> StatsStorage::GetTableStats(oid_t database_id,
219-
oid_t table_id) {
219+
std::shared_ptr<TableStats> StatsStorage::GetTableStats(
220+
oid_t database_id, oid_t table_id, concurrency::TransactionContext *txn) {
220221
auto column_stats_catalog = catalog::ColumnStatsCatalog::GetInstance(nullptr);
221-
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
222-
auto txn = txn_manager.BeginTransaction();
223222
std::map<oid_t, std::unique_ptr<std::vector<type::Value>>> column_stats_map;
224223
column_stats_catalog->GetTableStats(database_id, table_id, txn,
225224
column_stats_map);
226-
txn_manager.CommitTransaction(txn);
227225

228226
std::vector<std::shared_ptr<ColumnStats>> column_stats_ptrs;
229227
for (auto it = column_stats_map.begin(); it != column_stats_map.end(); ++it) {
@@ -242,10 +240,9 @@ std::shared_ptr<TableStats> StatsStorage::GetTableStats(oid_t database_id,
242240
* The return value is the shared_ptr of TableStats wrapper.
243241
*/
244242
std::shared_ptr<TableStats> StatsStorage::GetTableStats(
245-
oid_t database_id, oid_t table_id, std::vector<oid_t> column_ids) {
243+
oid_t database_id, oid_t table_id, std::vector<oid_t> column_ids,
244+
concurrency::TransactionContext *txn) {
246245
auto column_stats_catalog = catalog::ColumnStatsCatalog::GetInstance(nullptr);
247-
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
248-
auto txn = txn_manager.BeginTransaction();
249246
std::map<oid_t, std::unique_ptr<std::vector<type::Value>>> column_stats_map;
250247
column_stats_catalog->GetTableStats(database_id, table_id, txn,
251248
column_stats_map);
@@ -299,8 +296,8 @@ ResultType StatsStorage::AnalyzeStatsForAllTables(
299296
* AnalyzeStatsForTable - This function analyzes the stats for one table and
300297
* sotre the stats in column_stats_catalog.
301298
*/
302-
ResultType StatsStorage::AnalyzeStatsForTable(storage::DataTable *table,
303-
concurrency::TransactionContext *txn) {
299+
ResultType StatsStorage::AnalyzeStatsForTable(
300+
storage::DataTable *table, concurrency::TransactionContext *txn) {
304301
if (txn == nullptr) {
305302
LOG_TRACE("Do not have transaction to analyze the table stats: %s",
306303
table->GetName().c_str());

src/optimizer/stats_calculator.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ namespace peloton {
2727
namespace optimizer {
2828

2929
void StatsCalculator::CalculateStats(GroupExpression *gexpr,
30-
ExprSet required_cols, Memo *memo) {
30+
ExprSet required_cols, Memo *memo,
31+
concurrency::TransactionContext *txn) {
3132
gexpr_ = gexpr;
3233
memo_ = memo;
3334
required_cols_ = required_cols;
35+
txn_ = txn;
3436
gexpr->Op().Accept(this);
3537
}
3638

@@ -41,7 +43,7 @@ void StatsCalculator::Visit(const LogicalGet *op) {
4143
}
4244
auto table_stats = std::dynamic_pointer_cast<TableStats>(
4345
StatsStorage::GetInstance()->GetTableStats(op->table->GetDatabaseOid(),
44-
op->table->GetTableOid()));
46+
op->table->GetTableOid(), txn_));
4547
// First, get the required stats of the base table
4648
std::unordered_map<std::string, std::shared_ptr<ColumnStats>> required_stats;
4749
for (auto &col : required_cols_) {

0 commit comments

Comments
 (0)