| 340 | } |
| 341 | |
| 342 | static void loadSystemDatabaseImpl(ContextMutablePtr context, const String & database_name, const String & default_engine) |
| 343 | { |
| 344 | /// If it is already loaded. |
| 345 | if (DatabaseCatalog::instance().isDatabaseExist(database_name)) |
| 346 | return; |
| 347 | |
| 348 | auto default_db_disk = Context::getGlobalContextInstance()->getDatabaseDisk(); |
| 349 | auto metadata_file = DatabaseCatalog::getMetadataFilePath(database_name); |
| 350 | auto metadata_tmp_file = DatabaseCatalog::getMetadataTmpFilePath(database_name); |
| 351 | default_db_disk->removeFileIfExists(metadata_tmp_file); |
| 352 | |
| 353 | LOG_TEST( |
| 354 | getLogger("loadSystemDatabase"), |
| 355 | "metadata_file_path {}, existsFile {}", |
| 356 | metadata_file, |
| 357 | default_db_disk->existsFile(metadata_file)); |
| 358 | if (default_db_disk->existsFile(metadata_file)) |
| 359 | { |
| 360 | /// 'has_force_restore_data_flag' is true, to not fail on loading query_log table, if it is corrupted. |
| 361 | loadDatabase(context, database_name, metadata_file, true); |
| 362 | } |
| 363 | else |
| 364 | { |
| 365 | checkUnsupportedVersion(context, database_name); |
| 366 | /// Initialize system database manually |
| 367 | String database_create_query = "CREATE DATABASE "; |
| 368 | database_create_query += database_name; |
| 369 | database_create_query += " ENGINE="; |
| 370 | database_create_query += default_engine; |
| 371 | executeCreateQuery(database_create_query, context, database_name, "<no file>", true, true); |
| 372 | } |
| 373 | } |
| 374 | |
| 375 | static void convertOrdinaryDatabaseToAtomic(LoggerPtr log, ContextMutablePtr context, const DatabasePtr & database, |
| 376 | const String & name, const String tmp_name) |
no test coverage detected