diff --git a/dbms/src/Databases/DatabaseLazy.cpp b/dbms/src/Databases/DatabaseLazy.cpp index 4c9e07e89d4..d4d37ec83f5 100644 --- a/dbms/src/Databases/DatabaseLazy.cpp +++ b/dbms/src/Databases/DatabaseLazy.cpp @@ -46,18 +46,6 @@ namespace ErrorCodes static constexpr size_t METADATA_FILE_BUFFER_SIZE = 32768; -static size_t getLastModifiedEpochTime(const String & table_metadata_path) { - Poco::File meta_file(table_metadata_path); - - if (meta_file.exists()) - { - return meta_file.getLastModified().epochTime(); - } - else - { - return static_cast(0); - } -} DatabaseLazy::DatabaseLazy(const String & name_, const String & metadata_path_, time_t expiration_time_, const Context & context) : name(name_) @@ -219,7 +207,7 @@ void DatabaseLazy::attachTable(const String & table_name, const StoragePtr & tab std::forward_as_tuple(table_name), std::forward_as_tuple(table, current_time, - getLastModifiedEpochTime(getTableMetadataPath(table_name)))).second) + DatabaseOnDisk::getTableMetadataModificationTime(*this, table_name))).second) throw Exception("Table " + getDatabaseName() + "." + table_name + " already exists.", ErrorCodes::TABLE_ALREADY_EXISTS); if (!cache_expiration_queue.emplace(current_time, table_name).second) throw Exception("Failed to insert element to expiration queue.", ErrorCodes::LOGICAL_ERROR); diff --git a/dbms/src/Databases/DatabaseOnDisk.cpp b/dbms/src/Databases/DatabaseOnDisk.cpp index aa4135a4186..357876915a0 100644 --- a/dbms/src/Databases/DatabaseOnDisk.cpp +++ b/dbms/src/Databases/DatabaseOnDisk.cpp @@ -233,6 +233,23 @@ String DatabaseOnDisk::getTableMetadataPath(const IDatabase & database, const St return detail::getTableMetadataPath(database.getMetadataPath(), table_name); } +time_t DatabaseOnDisk::getTableMetadataModificationTime( + const IDatabase & database, + const String & table_name) +{ + String table_metadata_path = getTableMetadataPath(database, table_name); + Poco::File meta_file(table_metadata_path); + + if (meta_file.exists()) + { + return meta_file.getLastModified().epochTime(); + } + else + { + return static_cast(0); + } +} + void DatabaseOnDisk::iterateTableFiles(const IDatabase & database, Poco::Logger * log, const IteratingFunction & iterating_function) { Poco::DirectoryIterator dir_end; diff --git a/dbms/src/Databases/DatabaseOnDisk.h b/dbms/src/Databases/DatabaseOnDisk.h index 02b9c7aefe5..ed5664ad379 100644 --- a/dbms/src/Databases/DatabaseOnDisk.h +++ b/dbms/src/Databases/DatabaseOnDisk.h @@ -64,6 +64,11 @@ public: const IDatabase & database, const String & table_name); + static time_t getTableMetadataModificationTime( + const IDatabase & database, + const String & table_name); + + using IteratingFunction = std::function; static void iterateTableFiles(const IDatabase & database, Poco::Logger * log, const IteratingFunction & iterating_function); diff --git a/dbms/src/Databases/DatabaseOrdinary.cpp b/dbms/src/Databases/DatabaseOrdinary.cpp index e034cfb5088..4a48108dd28 100644 --- a/dbms/src/Databases/DatabaseOrdinary.cpp +++ b/dbms/src/Databases/DatabaseOrdinary.cpp @@ -218,20 +218,10 @@ void DatabaseOrdinary::renameTable( time_t DatabaseOrdinary::getTableMetadataModificationTime( - const Context & /*context*/, + const Context & /* context */, const String & table_name) { - String table_metadata_path = getTableMetadataPath(table_name); - Poco::File meta_file(table_metadata_path); - - if (meta_file.exists()) - { - return meta_file.getLastModified().epochTime(); - } - else - { - return static_cast(0); - } + return DatabaseOnDisk::getTableMetadataModificationTime(*this, table_name); } ASTPtr DatabaseOrdinary::getCreateTableQuery(const Context & context, const String & table_name) const