提交 aab4ce63 编写于 作者: A alesapin

Truncate with metadata

上级 35ce4795
......@@ -105,8 +105,9 @@ BlockIO InterpreterDropQuery::executeToTable(
table->checkTableCanBeDropped();
auto table_lock = table->lockExclusively(context.getCurrentQueryId(), context.getSettingsRef().lock_acquire_timeout);
auto metadata_snapshot = table->getInMemoryMetadataPtr();
/// Drop table data, don't touch metadata
table->truncate(query_ptr, context, table_lock);
table->truncate(query_ptr, metadata_snapshot, context, table_lock);
}
else if (query.kind == ASTDropQuery::Kind::Drop)
{
......@@ -187,7 +188,8 @@ BlockIO InterpreterDropQuery::executeToTemporaryTable(const String & table_name,
{
auto table_lock = table->lockExclusively(context.getCurrentQueryId(), context.getSettingsRef().lock_acquire_timeout);
/// Drop table data, don't touch metadata
table->truncate(query_ptr, context, table_lock);
auto metadata_snapshot = table->getInMemoryMetadataPtr();
table->truncate(query_ptr, metadata_snapshot, context, table_lock);
}
else if (kind == ASTDropQuery::Kind::Drop)
{
......
......@@ -292,7 +292,11 @@ public:
/** Clear the table data and leave it empty.
* Must be called under lockForAlter.
*/
virtual void truncate(const ASTPtr & /*query*/, const Context & /* context */, TableStructureWriteLockHolder &)
virtual void truncate(
const ASTPtr & /*query*/,
const StorageMetadataPtr & /* metadata_snapshot */,
const Context & /* context */,
TableStructureWriteLockHolder &)
{
throw Exception("Truncate is not supported by storage " + getName(), ErrorCodes::NOT_IMPLEMENTED);
}
......
......@@ -619,7 +619,7 @@ Strings StorageDistributed::getDataPaths() const
return paths;
}
void StorageDistributed::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageDistributed::truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &)
{
std::lock_guard lock(cluster_nodes_mutex);
......
......@@ -82,7 +82,7 @@ public:
BlockOutputStreamPtr write(const ASTPtr & query, const StorageMetadataPtr & /*metadata_snapshot*/, const Context & context) override;
/// Removes temporary data in local filesystem.
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
void rename(const String & new_path_to_table_data, const StorageID & new_table_id) override;
void renameOnDisk(const String & new_path_to_table_data);
......
......@@ -523,7 +523,11 @@ void StorageFile::rename(const String & new_path_to_table_data, const StorageID
renameInMemory(new_table_id);
}
void StorageFile::truncate(const ASTPtr & /*query*/, const Context & /* context */, TableStructureWriteLockHolder &)
void StorageFile::truncate(
const ASTPtr & /*query*/,
const StorageMetadataPtr & /* metadata_snapshot */,
const Context & /* context */,
TableStructureWriteLockHolder &)
{
if (paths.size() != 1)
throw Exception("Can't truncate table '" + getStorageID().getNameForLogs() + "' in readonly mode", ErrorCodes::DATABASE_ACCESS_DENIED);
......
......@@ -38,7 +38,11 @@ public:
const StorageMetadataPtr & /*metadata_snapshot*/,
const Context & context) override;
void truncate(const ASTPtr & /*query*/, const Context & /* context */, TableStructureWriteLockHolder &) override;
void truncate(
const ASTPtr & /*query*/,
const StorageMetadataPtr & /* metadata_snapshot */,
const Context & /* context */,
TableStructureWriteLockHolder &) override;
void rename(const String & new_path_to_table_data, const StorageID & new_table_id) override;
......
......@@ -64,10 +64,9 @@ StorageJoin::StorageJoin(
}
void StorageJoin::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageJoin::truncate(
const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &)
{
/// TODO(alesap) FIXME
auto metadata_snapshot = getInMemoryMetadataPtr();
Poco::File(path).remove(true);
Poco::File(path).createDirectories();
Poco::File(path + "tmp/").createDirectories();
......
......@@ -27,7 +27,7 @@ class StorageJoin final : public ext::shared_ptr_helper<StorageJoin>, public Sto
public:
String getName() const override { return "Join"; }
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &) override;
/// Access the innards.
HashJoinPtr & getJoin() { return join; }
......
......@@ -535,11 +535,10 @@ void StorageLog::rename(const String & new_path_to_table_data, const StorageID &
renameInMemory(new_table_id);
}
void StorageLog::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &)
{
std::shared_lock<std::shared_mutex> lock(rwlock);
auto metadata_snapshot = getInMemoryMetadataPtr();
files.clear();
file_count = 0;
loaded_marks = false;
......
......@@ -39,7 +39,7 @@ public:
CheckResults checkData(const ASTPtr & /* query */, const Context & /* context */) override;
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &) override;
Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; }
......
......@@ -173,7 +173,7 @@ void StorageMaterializedView::drop()
executeDropQuery(ASTDropQuery::Kind::Drop, global_context, target_table_id);
}
void StorageMaterializedView::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageMaterializedView::truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &)
{
if (has_inner_table)
executeDropQuery(ASTDropQuery::Kind::Truncate, global_context, target_table_id);
......
......@@ -37,7 +37,7 @@ public:
void drop() override;
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
bool optimize(
const ASTPtr & query,
......
......@@ -148,7 +148,8 @@ void StorageMemory::drop()
data.clear();
}
void StorageMemory::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageMemory::truncate(
const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &)
{
std::lock_guard lock(mutex);
data.clear();
......
......@@ -37,11 +37,11 @@ public:
size_t max_block_size,
unsigned num_streams) override;
BlockOutputStreamPtr write(const ASTPtr & query, const StorageMetadataPtr & /*metadata_snapshot*/, const Context & context) override;
BlockOutputStreamPtr write(const ASTPtr & query, const StorageMetadataPtr & metadata_snapshot, const Context & context) override;
void drop() override;
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
std::optional<UInt64> totalRows() const override;
std::optional<UInt64> totalBytes() const override;
......
......@@ -231,7 +231,7 @@ void StorageMergeTree::drop()
dropAllData();
}
void StorageMergeTree::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageMergeTree::truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &)
{
{
/// Asks to complete merges and does not allow them to start.
......
......@@ -75,7 +75,7 @@ public:
CancellationCode killMutation(const String & mutation_id) override;
void drop() override;
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
void alter(const AlterCommands & commands, const Context & context, TableStructureWriteLockHolder & table_lock_holder) override;
......
......@@ -4011,7 +4011,8 @@ void StorageReplicatedMergeTree::dropPartition(const ASTPtr & query, const ASTPt
}
void StorageReplicatedMergeTree::truncate(const ASTPtr & query, const Context & query_context, TableStructureWriteLockHolder & table_lock)
void StorageReplicatedMergeTree::truncate(
const ASTPtr & query, const StorageMetadataPtr &, const Context & query_context, TableStructureWriteLockHolder & table_lock)
{
table_lock.release(); /// Truncate is done asynchronously.
......
......@@ -120,7 +120,7 @@ public:
*/
void drop() override;
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
void rename(const String & new_path_to_table_data, const StorageID & new_table_id) override;
......
......@@ -142,9 +142,8 @@ void StorageSet::finishInsert() { set->finishInsert(); }
size_t StorageSet::getSize() const { return set->getTotalRowCount(); }
void StorageSet::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageSet::truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &)
{
auto metadata_snapshot = getInMemoryMetadataPtr();
Poco::File(path).remove(true);
Poco::File(path).createDirectories();
Poco::File(path + "tmp/").createDirectories();
......
......@@ -67,7 +67,7 @@ public:
/// Access the insides.
SetPtr & getSet() { return set; }
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &) override;
private:
SetPtr set;
......
......@@ -326,7 +326,7 @@ CheckResults StorageStripeLog::checkData(const ASTPtr & /* query */, const Conte
return file_checker.check();
}
void StorageStripeLog::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageStripeLog::truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &)
{
std::shared_lock<std::shared_mutex> lock(rwlock);
......
......@@ -42,7 +42,7 @@ public:
Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; }
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
protected:
StorageStripeLog(
......
......@@ -429,10 +429,10 @@ CheckResults StorageTinyLog::checkData(const ASTPtr & /* query */, const Context
return file_checker.check();
}
void StorageTinyLog::truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &)
void StorageTinyLog::truncate(
const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &)
{
std::unique_lock<std::shared_mutex> lock(rwlock);
auto metadata_snapshot = getInMemoryMetadataPtr();
disk->clearDirectory(table_path);
......
......@@ -41,7 +41,7 @@ public:
Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; }
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, const Context &, TableStructureWriteLockHolder &) override;
void drop() override;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册