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

Commit 71aeb02

Browse files
Changed AnalyzeAllTables to AnalyzeAllTablesWithDatabaseOid
1 parent 6ffb0b3 commit 71aeb02

File tree

3 files changed

+28
-31
lines changed

3 files changed

+28
-31
lines changed

src/include/optimizer/stats/stats_storage.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ class StatsStorage {
6767

6868
/* Functions for triggerring stats collection */
6969

70-
ResultType AnalyzeStatsForAllTables(
70+
ResultType AnalyzeStatsForAllTablesWithDatabaseOid(
71+
oid_t database_oid,
7172
concurrency::TransactionContext *txn = nullptr);
7273

7374
ResultType AnalyzeStatsForTable(

src/optimizer/stats/stats_storage.cpp

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -257,41 +257,32 @@ std::shared_ptr<TableStats> StatsStorage::GetTableStats(
257257
* AnalyzeStatsForAllTables - This function iterates all databases and
258258
* datatables to collect their stats and store them in the column_stats_catalog.
259259
*/
260-
// Deprecating this function because the notion is no longer true.
261-
// Needs to be handled differently. Used only in tests.
262-
ResultType StatsStorage::AnalyzeStatsForAllTables(
260+
ResultType StatsStorage::AnalyzeStatsForAllTablesWithDatabaseOid(
261+
oid_t database_oid,
263262
UNUSED_ATTRIBUTE concurrency::TransactionContext *txn) {
264263
if (txn == nullptr) {
265264
LOG_TRACE("Do not have transaction to analyze all tables' stats.");
266265
return ResultType::FAILURE;
267266
}
268267

269268
auto storage_manager = storage::StorageManager::GetInstance();
270-
271-
oid_t database_count = storage_manager->GetDatabaseCount();
272-
LOG_TRACE("Database count: %u", database_count);
273-
for (oid_t db_offset = 0; db_offset < database_count; db_offset++) {
274-
auto database = storage_manager->GetDatabaseWithOffset(db_offset);
275-
auto database_oid = database->GetOid();
276-
if (database_oid == CATALOG_DATABASE_OID) {
269+
auto database = storage_manager->GetDatabaseWithOid(database);
270+
PELOTON_ASSERT(database != nullptr);
271+
auto pg_database = catalog::Catalog::GetInstance()
272+
->GetDatabaseObject(database_oid, txn);
273+
auto table_objects = pg_database->GetTableObjects();
274+
for (auto &table_object_entry : table_objects) {
275+
auto table_oid = table_object_entry.first;
276+
auto table_object = table_object_entry.second;
277+
if (table_object->GetSchemaName() == CATALOG_SCHEMA_NAME) {
277278
continue;
278279
}
279-
auto pg_database = catalog::Catalog::GetInstance()
280-
->GetDatabaseObject(database_oid, txn);
281-
auto table_objects = pg_database->GetTableObjects();
282-
for (auto &table_object_entry : table_objects) {
283-
auto table_oid = table_object_entry.first;
284-
auto table_object = table_object_entry.second;
285-
if (table_object->GetSchemaName() == CATALOG_SCHEMA_NAME) {
286-
continue;
287-
}
288-
LOG_TRACE("Analyzing table: %s", table_object->GetTableName().c_str());
289-
auto table = database->GetTableWithOid(table_oid);
290-
std::unique_ptr<TableStatsCollector> table_stats_collector(
291-
new TableStatsCollector(table));
292-
table_stats_collector->CollectColumnStats();
293-
InsertOrUpdateTableStats(table, table_stats_collector.get(), txn);
294-
}
280+
LOG_TRACE("Analyzing table: %s", table_object->GetTableName().c_str());
281+
auto table = database->GetTableWithOid(table_oid);
282+
std::unique_ptr<TableStatsCollector> table_stats_collector(
283+
new TableStatsCollector(table));
284+
table_stats_collector->CollectColumnStats();
285+
InsertOrUpdateTableStats(table, table_stats_collector.get(), txn);
295286
}
296287
return ResultType::SUCCESS;
297288
}

test/optimizer/stats_storage_test.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,16 +235,18 @@ TEST_F(StatsStorageTests, AnalyzeStatsForTableTest) {
235235
TEST_F(StatsStorageTests, AnalyzeStatsForAllTablesTest) {
236236
const std::string db_name = "test_db";
237237
auto data_table = CreateTestDBAndTable();
238+
auto db_oid = data_table->GetDatabaseOid();
238239

239240
StatsStorage *stats_storage = StatsStorage::GetInstance();
240241

241242
// Must pass in the transaction.
242-
ResultType result = stats_storage->AnalyzeStatsForAllTables();
243+
ResultType result = stats_storage
244+
->AnalyzeStatsForAllTablesWithDatabaseOid(db_oid);
243245
EXPECT_EQ(result, ResultType::FAILURE);
244246

245247
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
246248
auto txn = txn_manager.BeginTransaction();
247-
result = stats_storage->AnalyzeStatsForAllTables(txn);
249+
result = stats_storage->AnalyzeStatsForAllTablesWithDatabaseOid(db_oid, txn);
248250
EXPECT_EQ(result, ResultType::SUCCESS);
249251
txn_manager.CommitTransaction(txn);
250252

@@ -257,16 +259,19 @@ TEST_F(StatsStorageTests, AnalyzeStatsForAllTablesTest) {
257259
TEST_F(StatsStorageTests, GetTableStatsTest) {
258260
const std::string db_name = "test_db";
259261
auto data_table = CreateTestDBAndTable();
262+
auto db_oid = data_table->GetDatabaseOid();
263+
260264
StatsStorage *stats_storage = StatsStorage::GetInstance();
261265

262266
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
263267
auto txn = txn_manager.BeginTransaction();
264-
stats_storage->AnalyzeStatsForAllTables(txn);
268+
ResultType result = stats_storage
269+
->AnalyzeStatsForAllTablesWithDatabaseOid(db_oid, txn);
265270
txn_manager.CommitTransaction(txn);
266271

267272
txn = txn_manager.BeginTransaction();
268273
std::shared_ptr<TableStats> table_stats = stats_storage->GetTableStats(
269-
data_table->GetDatabaseOid(), data_table->GetOid(), txn);
274+
db_oid, data_table->GetOid(), txn);
270275
txn_manager.CommitTransaction(txn);
271276
EXPECT_EQ(table_stats->num_rows, tuple_count);
272277
TestingExecutorUtil::DeleteDatabase(db_name);

0 commit comments

Comments
 (0)