forward ALTER PARTITION statements for materialized views [#CLICKHOUSE-3659]

This commit is contained in:
Alexey Zatelepin 2018-03-20 16:42:44 +03:00
parent b1274f7b34
commit 86d53b34a5
2 changed files with 44 additions and 1 deletions

View File

@ -204,11 +204,44 @@ void StorageMaterializedView::drop()
}
}
void StorageMaterializedView::checkStatementCanBeForwarded() const
{
if (!has_inner_table)
throw Exception(
"MATERIALIZED VIEW targets existing table " + target_database_name + "." + target_table_name + ". "
+ "Execute the statement directly on it.", ErrorCodes::INCORRECT_QUERY);
}
bool StorageMaterializedView::optimize(const ASTPtr & query, const ASTPtr & partition, bool final, bool deduplicate, const Context & context)
{
checkStatementCanBeForwarded();
return getTargetTable()->optimize(query, partition, final, deduplicate, context);
}
void StorageMaterializedView::dropPartition(const ASTPtr & query, const ASTPtr & partition, bool detach, const Context & context)
{
checkStatementCanBeForwarded();
getTargetTable()->dropPartition(query, partition, detach, context);
}
void StorageMaterializedView::clearColumnInPartition(const ASTPtr & partition, const Field & column_name, const Context & context)
{
checkStatementCanBeForwarded();
getTargetTable()->clearColumnInPartition(partition, column_name, context);
}
void StorageMaterializedView::attachPartition(const ASTPtr & partition, bool part, const Context & context)
{
checkStatementCanBeForwarded();
getTargetTable()->attachPartition(partition, part, context);
}
void StorageMaterializedView::freezePartition(const ASTPtr & partition, const String & with_name, const Context & context)
{
checkStatementCanBeForwarded();
getTargetTable()->freezePartition(partition, with_name, context);
}
void StorageMaterializedView::shutdown()
{
/// Make sure the dependency is removed after DETACH TABLE

View File

@ -18,7 +18,6 @@ public:
std::string getName() const override { return "MaterializedView"; }
std::string getTableName() const override { return table_name; }
ASTPtr getInnerQuery() const { return inner_query->clone(); };
StoragePtr getTargetTable() const;
NameAndTypePair getColumn(const String & column_name) const override;
bool hasColumn(const String & column_name) const override;
@ -31,7 +30,14 @@ public:
BlockOutputStreamPtr write(const ASTPtr & query, const Settings & settings) override;
void drop() override;
bool optimize(const ASTPtr & query, const ASTPtr & partition, bool final, bool deduplicate, const Context & context) override;
void dropPartition(const ASTPtr & query, const ASTPtr & partition, bool detach, const Context & context) override;
void clearColumnInPartition(const ASTPtr & partition, const Field & column_name, const Context & context) override;
void attachPartition(const ASTPtr & partition, bool part, const Context & context) override;
void freezePartition(const ASTPtr & partition, const String & with_name, const Context & context) override;
void shutdown() override;
bool checkTableCanBeDropped() const override;
@ -56,6 +62,10 @@ private:
Context & global_context;
bool has_inner_table = false;
StoragePtr getTargetTable() const;
void checkStatementCanBeForwarded() const;
protected:
StorageMaterializedView(
const String & table_name_,