| 72 | } |
| 73 | |
| 74 | static bool checkDatabaseAndTable(String database_name, String table_name, ContextMutablePtr context, const NameSet & ctes) |
| 75 | { |
| 76 | /// not with table |
| 77 | if (database_name.empty() && ctes.contains(table_name)) |
| 78 | return true; |
| 79 | |
| 80 | /// If the database is not specified - use the current database. |
| 81 | auto table_id = context->tryResolveStorageID(StorageID(database_name, table_name)); |
| 82 | auto storage_table = DatabaseCatalog::instance().tryGetTable(table_id, context); |
| 83 | if (database_name.empty() && !storage_table) |
| 84 | database_name = context->getCurrentDatabase(); |
| 85 | |
| 86 | if (!storage_table) |
| 87 | return false; |
| 88 | |
| 89 | if (database_name == "system") |
| 90 | return true; |
| 91 | |
| 92 | if (dynamic_cast<const StorageView *>(storage_table.get())) |
| 93 | { |
| 94 | auto table_metadata_snapshot = storage_table->getInMemoryMetadataPtr(); |
| 95 | auto subquery = table_metadata_snapshot->getSelectQuery().inner_query; |
| 96 | |
| 97 | QueryUseOptimizerVisitor checker; |
| 98 | QueryUseOptimizerContext check_context{.context = context}; |
| 99 | return ASTVisitorUtil::accept(subquery, checker, check_context); |
| 100 | } |
| 101 | |
| 102 | return storage_table->supportsOptimizer(); |
| 103 | } |
| 104 | |
| 105 | bool QueryUseOptimizerChecker::check(ASTPtr node, ContextMutablePtr context, bool throw_exception) |
| 106 | { |
no test coverage detected