#pragma once #include #include #include #include #include /// General functionality for several different database engines. namespace DB { void applyMetadataChangesToCreateQuery(const ASTPtr & query, const StorageInMemoryMetadata & metadata); ASTPtr getCreateQueryFromStorage(const StoragePtr & storage, const ASTPtr & ast_storage, bool only_ordinary, uint32_t max_parser_depth, bool throw_on_error); /// Cleans a CREATE QUERY from temporary flags like "IF NOT EXISTS", "OR REPLACE", "AS SELECT" (for non-views), etc. void cleanupObjectDefinitionFromTemporaryFlags(ASTCreateQuery & query); class Context; /// A base class for databases that manage their own list of tables. class DatabaseWithOwnTablesBase : public IDatabase, protected WithContext { public: bool isTableExist(const String & table_name, ContextPtr context) const override; StoragePtr tryGetTable(const String & table_name, ContextPtr context) const override; bool empty() const override; void attachTable(ContextPtr context, const String & table_name, const StoragePtr & table, const String & relative_table_path) override; StoragePtr detachTable(ContextPtr context, const String & table_name) override; DatabaseTablesIteratorPtr getTablesIterator(ContextPtr context, const FilterByNameFunction & filter_by_table_name) const override; DatabaseTablesIteratorPtr getTablesIteratorForBackup(const BackupEntriesCollector & backup_entries_collector) const override; void backupCreateTableQuery(BackupEntriesCollector & backup_entries_collector, const StoragePtr & storage, const ASTPtr & create_table_query) override; void createTableRestoredFromBackup(const RestorerFromBackup & restorer, const ASTPtr & create_table_query) override; void shutdown() override; ~DatabaseWithOwnTablesBase() override; protected: Tables tables; Poco::Logger * log; DatabaseWithOwnTablesBase(const String & name_, const String & logger, ContextPtr context); void attachTableUnlocked(const String & table_name, const StoragePtr & table, std::unique_lock & lock); StoragePtr detachTableUnlocked(const String & table_name, std::unique_lock & lock); StoragePtr getTableUnlocked(const String & table_name, std::unique_lock & lock) const; }; }