| 561 | } |
| 562 | |
| 563 | ASTPtr DatabaseOnDisk::getCreateDatabaseQueryImpl() const |
| 564 | { |
| 565 | auto default_db_disk = getContext()->getDatabaseDisk(); |
| 566 | ASTPtr ast; |
| 567 | |
| 568 | const auto & settings = getContext()->getSettingsRef(); |
| 569 | { |
| 570 | auto metadata_file_path = DatabaseCatalog::getMetadataFilePath(database_name); |
| 571 | ast = parseQueryFromMetadata(log, getContext(), default_db_disk, metadata_file_path, true); |
| 572 | auto & ast_create_query = ast->as<ASTCreateQuery &>(); |
| 573 | ast_create_query.attach = false; |
| 574 | ast_create_query.setDatabase(database_name); |
| 575 | } |
| 576 | if (!ast) |
| 577 | { |
| 578 | /// Handle databases (such as default) for which there are no database.sql files. |
| 579 | /// If database.sql doesn't exist, then engine is Ordinary |
| 580 | String query = "CREATE DATABASE " + backQuoteIfNeed(database_name) + " ENGINE = Ordinary"; |
| 581 | ParserCreateQuery parser; |
| 582 | ast = parseQuery( |
| 583 | parser, query.data(), query.data() + query.size(), "", 0, settings[Setting::max_parser_depth], settings[Setting::max_parser_backtracks]); |
| 584 | } |
| 585 | |
| 586 | if (!comment.empty()) |
| 587 | { |
| 588 | auto & ast_create_query = ast->as<ASTCreateQuery &>(); |
| 589 | ast_create_query.set(ast_create_query.comment, make_intrusive<ASTLiteral>(comment)); |
| 590 | } |
| 591 | |
| 592 | return ast; |
| 593 | } |
| 594 | |
| 595 | void DatabaseOnDisk::drop(ContextPtr local_context) |
| 596 | { |
nothing calls this directly
no test coverage detected