| 54 | } |
| 55 | |
| 56 | void CnchWorkerResource::executeCreateQuery(ContextMutablePtr context, const String & create_query, bool skip_if_exists, const ColumnsDescription & object_columns) |
| 57 | { |
| 58 | LOG_DEBUG(&Poco::Logger::get("WorkerResource"), "start create cloud table {}", create_query); |
| 59 | auto ast_query = parseCreateQuery(context, create_query); |
| 60 | auto & ast_create_query = ast_query->as<ASTCreateQuery &>(); |
| 61 | |
| 62 | /// set query settings |
| 63 | /// TODO: can we remove this? i.e., don't rely on create query to pass query setting |
| 64 | if (ast_create_query.settings_ast) |
| 65 | InterpreterSetQuery(ast_create_query.settings_ast, context).executeForCurrentContext(); |
| 66 | |
| 67 | auto res = createStorageFromQuery(ast_create_query, context); |
| 68 | if (auto cloud_table = std::dynamic_pointer_cast<StorageCloudMergeTree>(res)) |
| 69 | cloud_table->resetObjectColumns(object_columns); |
| 70 | res->startup(); |
| 71 | |
| 72 | bool throw_if_exists = !ast_create_query.if_not_exists && !skip_if_exists; |
| 73 | const auto & database_name = ast_create_query.database; // not empty. |
| 74 | const auto & table_name = ast_create_query.table; |
| 75 | String tenant_db = formatTenantDatabaseName(database_name); |
| 76 | insertCloudTable({tenant_db, table_name}, res, context, throw_if_exists); |
| 77 | } |
| 78 | |
| 79 | void CnchWorkerResource::executeCacheableCreateQuery( |
| 80 | ContextMutablePtr context, |
no test coverage detected