mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-24 02:30:51 +00:00
Truncate with metadata
This commit is contained in:
parent
35ce47951d
commit
aab4ce6394
@ -105,8 +105,9 @@ BlockIO InterpreterDropQuery::executeToTable(
|
|||||||
table->checkTableCanBeDropped();
|
table->checkTableCanBeDropped();
|
||||||
|
|
||||||
auto table_lock = table->lockExclusively(context.getCurrentQueryId(), context.getSettingsRef().lock_acquire_timeout);
|
auto table_lock = table->lockExclusively(context.getCurrentQueryId(), context.getSettingsRef().lock_acquire_timeout);
|
||||||
|
auto metadata_snapshot = table->getInMemoryMetadataPtr();
|
||||||
/// Drop table data, don't touch metadata
|
/// 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)
|
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);
|
auto table_lock = table->lockExclusively(context.getCurrentQueryId(), context.getSettingsRef().lock_acquire_timeout);
|
||||||
/// Drop table data, don't touch metadata
|
/// 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)
|
else if (kind == ASTDropQuery::Kind::Drop)
|
||||||
{
|
{
|
||||||
|
@ -292,7 +292,11 @@ public:
|
|||||||
/** Clear the table data and leave it empty.
|
/** Clear the table data and leave it empty.
|
||||||
* Must be called under lockForAlter.
|
* 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);
|
throw Exception("Truncate is not supported by storage " + getName(), ErrorCodes::NOT_IMPLEMENTED);
|
||||||
}
|
}
|
||||||
|
@ -619,7 +619,7 @@ Strings StorageDistributed::getDataPaths() const
|
|||||||
return paths;
|
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);
|
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;
|
BlockOutputStreamPtr write(const ASTPtr & query, const StorageMetadataPtr & /*metadata_snapshot*/, const Context & context) override;
|
||||||
|
|
||||||
/// Removes temporary data in local filesystem.
|
/// 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 rename(const String & new_path_to_table_data, const StorageID & new_table_id) override;
|
||||||
void renameOnDisk(const String & new_path_to_table_data);
|
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);
|
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)
|
if (paths.size() != 1)
|
||||||
throw Exception("Can't truncate table '" + getStorageID().getNameForLogs() + "' in readonly mode", ErrorCodes::DATABASE_ACCESS_DENIED);
|
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 StorageMetadataPtr & /*metadata_snapshot*/,
|
||||||
const Context & context) override;
|
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;
|
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).remove(true);
|
||||||
Poco::File(path).createDirectories();
|
Poco::File(path).createDirectories();
|
||||||
Poco::File(path + "tmp/").createDirectories();
|
Poco::File(path + "tmp/").createDirectories();
|
||||||
|
@ -27,7 +27,7 @@ class StorageJoin final : public ext::shared_ptr_helper<StorageJoin>, public Sto
|
|||||||
public:
|
public:
|
||||||
String getName() const override { return "Join"; }
|
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.
|
/// Access the innards.
|
||||||
HashJoinPtr & getJoin() { return join; }
|
HashJoinPtr & getJoin() { return join; }
|
||||||
|
@ -535,11 +535,10 @@ void StorageLog::rename(const String & new_path_to_table_data, const StorageID &
|
|||||||
renameInMemory(new_table_id);
|
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);
|
std::shared_lock<std::shared_mutex> lock(rwlock);
|
||||||
|
|
||||||
auto metadata_snapshot = getInMemoryMetadataPtr();
|
|
||||||
files.clear();
|
files.clear();
|
||||||
file_count = 0;
|
file_count = 0;
|
||||||
loaded_marks = false;
|
loaded_marks = false;
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
|
|
||||||
CheckResults checkData(const ASTPtr & /* query */, const Context & /* context */) override;
|
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)}; }
|
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);
|
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)
|
if (has_inner_table)
|
||||||
executeDropQuery(ASTDropQuery::Kind::Truncate, global_context, target_table_id);
|
executeDropQuery(ASTDropQuery::Kind::Truncate, global_context, target_table_id);
|
||||||
|
@ -37,7 +37,7 @@ public:
|
|||||||
|
|
||||||
void drop() override;
|
void drop() override;
|
||||||
|
|
||||||
void truncate(const ASTPtr &, const Context &, TableStructureWriteLockHolder &) override;
|
void truncate(const ASTPtr &, const StorageMetadataPtr &, const Context &, TableStructureWriteLockHolder &) override;
|
||||||
|
|
||||||
bool optimize(
|
bool optimize(
|
||||||
const ASTPtr & query,
|
const ASTPtr & query,
|
||||||
|
@ -148,7 +148,8 @@ void StorageMemory::drop()
|
|||||||
data.clear();
|
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);
|
std::lock_guard lock(mutex);
|
||||||
data.clear();
|
data.clear();
|
||||||
|
@ -37,11 +37,11 @@ public:
|
|||||||
size_t max_block_size,
|
size_t max_block_size,
|
||||||
unsigned num_streams) override;
|
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 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> totalRows() const override;
|
||||||
std::optional<UInt64> totalBytes() const override;
|
std::optional<UInt64> totalBytes() const override;
|
||||||
|
@ -231,7 +231,7 @@ void StorageMergeTree::drop()
|
|||||||
dropAllData();
|
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.
|
/// Asks to complete merges and does not allow them to start.
|
||||||
|
@ -75,7 +75,7 @@ public:
|
|||||||
CancellationCode killMutation(const String & mutation_id) override;
|
CancellationCode killMutation(const String & mutation_id) override;
|
||||||
|
|
||||||
void drop() 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;
|
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.
|
table_lock.release(); /// Truncate is done asynchronously.
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
void drop() override;
|
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;
|
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(); }
|
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).remove(true);
|
||||||
Poco::File(path).createDirectories();
|
Poco::File(path).createDirectories();
|
||||||
Poco::File(path + "tmp/").createDirectories();
|
Poco::File(path + "tmp/").createDirectories();
|
||||||
|
@ -67,7 +67,7 @@ public:
|
|||||||
/// Access the insides.
|
/// Access the insides.
|
||||||
SetPtr & getSet() { return set; }
|
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:
|
private:
|
||||||
SetPtr set;
|
SetPtr set;
|
||||||
|
@ -326,7 +326,7 @@ CheckResults StorageStripeLog::checkData(const ASTPtr & /* query */, const Conte
|
|||||||
return file_checker.check();
|
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);
|
std::shared_lock<std::shared_mutex> lock(rwlock);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ public:
|
|||||||
|
|
||||||
Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; }
|
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:
|
protected:
|
||||||
StorageStripeLog(
|
StorageStripeLog(
|
||||||
|
@ -429,10 +429,10 @@ CheckResults StorageTinyLog::checkData(const ASTPtr & /* query */, const Context
|
|||||||
return file_checker.check();
|
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);
|
std::unique_lock<std::shared_mutex> lock(rwlock);
|
||||||
auto metadata_snapshot = getInMemoryMetadataPtr();
|
|
||||||
|
|
||||||
disk->clearDirectory(table_path);
|
disk->clearDirectory(table_path);
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public:
|
|||||||
|
|
||||||
Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; }
|
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;
|
void drop() override;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user