Skip to content

Commit 5ee9b56

Browse files
Do not change the snapshot after at reading from MT
1 parent 4222ac5 commit 5ee9b56

6 files changed

Lines changed: 19 additions & 18 deletions

File tree

src/Planner/Planner.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ void collectFiltersForAnalysis(const QueryTreeNodePtr & query_tree, const Planne
189189

190190
const auto & query_context = planner_context->getQueryContext();
191191

192-
Planner planner(updated_query_tree, {});
192+
SelectQueryOptions select_query_options;
193+
Planner planner(updated_query_tree, select_query_options);
193194
planner.buildQueryPlanIfNeeded();
194195

195196
auto & result_query_plan = planner.getQueryPlan();

src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,14 +1304,18 @@ QueryPlanStepPtr MergeTreeDataSelectExecutor::readFromParts(
13041304

13051305
selectColumnNames(column_names_to_return, data, real_column_names, virt_column_names, sample_factor_column_queried);
13061306

1307+
/// Do not keep data parts in snapshot.
1308+
/// They are stored separately, and some could be released after PK analysis.
1309+
auto storage_snapshot_copy = storage_snapshot->clone(std::make_unique<MergeTreeData::SnapshotData>());
1310+
13071311
return std::make_unique<ReadFromMergeTree>(
13081312
std::move(parts),
13091313
std::move(alter_conversions),
13101314
real_column_names,
13111315
virt_column_names,
13121316
data,
13131317
query_info,
1314-
storage_snapshot,
1318+
storage_snapshot_copy,
13151319
context,
13161320
max_block_size,
13171321
num_streams,

src/Storages/StorageMergeTree.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,6 @@ void StorageMergeTree::read(
255255
processed_stage, nullptr, enable_parallel_reading))
256256
query_plan = std::move(*plan);
257257
}
258-
259-
/// Now, copy of parts that is required for the query, stored in the processors,
260-
/// while snapshot_data.parts includes all parts, even one that had been filtered out with partition pruning,
261-
/// reset them to avoid holding them.
262-
auto & snapshot_data = assert_cast<MergeTreeData::SnapshotData &>(*storage_snapshot->data);
263-
snapshot_data.parts = {};
264-
snapshot_data.alter_conversions = {};
265258
}
266259

267260
std::optional<UInt64> StorageMergeTree::totalRows(const Settings &) const

src/Storages/StorageReplicatedMergeTree.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5103,15 +5103,6 @@ void StorageReplicatedMergeTree::read(
51035103
const size_t max_block_size,
51045104
const size_t num_streams)
51055105
{
5106-
SCOPE_EXIT({
5107-
/// Now, copy of parts that is required for the query, stored in the processors,
5108-
/// while snapshot_data.parts includes all parts, even one that had been filtered out with partition pruning,
5109-
/// reset them to avoid holding them.
5110-
auto & snapshot_data = assert_cast<MergeTreeData::SnapshotData &>(*storage_snapshot->data);
5111-
snapshot_data.parts = {};
5112-
snapshot_data.alter_conversions = {};
5113-
});
5114-
51155106
const auto & settings = local_context->getSettingsRef();
51165107

51175108
/// The `select_sequential_consistency` setting has two meanings:

src/Storages/StorageSnapshot.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ namespace ErrorCodes
1717
extern const int COLUMN_QUERIED_MORE_THAN_ONCE;
1818
}
1919

20+
std::shared_ptr<StorageSnapshot> StorageSnapshot::clone(DataPtr data_) const
21+
{
22+
auto res = std::make_shared<StorageSnapshot>(storage, metadata, object_columns);
23+
24+
res->projection = projection;
25+
res->data = std::move(data_);
26+
27+
return res;
28+
}
29+
2030
void StorageSnapshot::init()
2131
{
2232
for (const auto & [name, type] : storage.getVirtuals())

src/Storages/StorageSnapshot.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ struct StorageSnapshot
6060
init();
6161
}
6262

63+
std::shared_ptr<StorageSnapshot> clone(DataPtr data_) const;
64+
6365
/// Get all available columns with types according to options.
6466
NamesAndTypesList getColumns(const GetColumnsOptions & options) const;
6567

0 commit comments

Comments
 (0)