| 26 | } |
| 27 | |
| 28 | static PlannerTableStats getPlannerStats(main::ClientContext* context, |
| 29 | storage::StorageManager& storageManager, catalog::TableCatalogEntry& tableEntry, |
| 30 | table_id_t physicalTableID = INVALID_TABLE_ID) { |
| 31 | const auto tableID = |
| 32 | physicalTableID == INVALID_TABLE_ID ? tableEntry.getTableID() : physicalTableID; |
| 33 | auto* table = storageManager.getTable(tableID); |
| 34 | if (auto cachedStats = storageManager.getCachedPlannerTableStats(tableID); |
| 35 | cachedStats.has_value() && cachedStats->tableChangeEpoch == table->getChangeEpoch()) { |
| 36 | return std::move(cachedStats.value()); |
| 37 | } |
| 38 | return storage::buildPlannerTableStats(storageManager, *catalog::Catalog::Get(*context), |
| 39 | transaction::Transaction::Get(*context), tableEntry, physicalTableID, |
| 40 | storage::PlannerStatsMode::SCHEMA_ONLY); |
| 41 | } |
| 42 | |
| 43 | void CardinalityEstimator::init(const QueryGraph& queryGraph) { |
| 44 | for (auto i = 0u; i < queryGraph.getNumQueryNodes(); ++i) { |
no test coverage detected