MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / executeImpl

Method executeImpl

src/Interpreters/InterpreterExistsQuery.cpp:39–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37
38
39QueryPipeline InterpreterExistsQuery::executeImpl()
40{
41 ASTQueryWithTableAndOutput * exists_query = nullptr;
42 bool result = false;
43
44 if ((exists_query = query_ptr->as<ASTExistsTableQuery>()))
45 {
46 if (exists_query->isTemporary())
47 {
48 result = static_cast<bool>(getContext()->tryResolveStorageID(
49 {"", exists_query->getTable()}, Context::ResolveExternal));
50 }
51 else
52 {
53 String database = getContext()->resolveDatabase(exists_query->getDatabase());
54 getContext()->checkAccess(AccessType::SHOW_TABLES, database, exists_query->getTable());
55 result = DatabaseCatalog::instance().isTableExist({database, exists_query->getTable()}, getContext());
56 }
57 }
58 else if ((exists_query = query_ptr->as<ASTExistsViewQuery>()))
59 {
60 if (exists_query->isTemporary())
61 {
62 auto storage_id = getContext()->tryResolveStorageID(
63 {"", exists_query->getTable()}, Context::ResolveExternal);
64 if (storage_id)
65 {
66 auto table = DatabaseCatalog::instance().tryGetTable(storage_id, getContext());
67 result = table && table->isView();
68 }
69 else
70 {
71 result = false;
72 }
73 }
74 else
75 {
76 String database = getContext()->resolveDatabase(exists_query->getDatabase());
77 getContext()->checkAccess(AccessType::SHOW_TABLES, database, exists_query->getTable());
78 auto table = DatabaseCatalog::instance().tryGetTable({database, exists_query->getTable()}, getContext());
79 result = table && table->isView();
80 }
81 }
82 else if ((exists_query = query_ptr->as<ASTExistsDatabaseQuery>()))
83 {
84 String database = getContext()->resolveDatabase(exists_query->getDatabase());
85 getContext()->checkAccess(AccessType::SHOW_DATABASES, database);
86 result = DatabaseCatalog::instance().isDatabaseExist(database);
87 }
88 else if ((exists_query = query_ptr->as<ASTExistsDictionaryQuery>()))
89 {
90 if (exists_query->isTemporary())
91 throw Exception(ErrorCodes::SYNTAX_ERROR, "Temporary dictionaries are not possible.");
92 String database = getContext()->resolveDatabase(exists_query->getDatabase());
93 getContext()->checkAccess(AccessType::SHOW_DICTIONARIES, database, exists_query->getTable());
94 result = DatabaseCatalog::instance().isDictionaryExist({database, exists_query->getTable()});
95 }
96

Callers

nothing calls this directly

Calls 15

tryResolveStorageIDMethod · 0.80
resolveDatabaseMethod · 0.80
isDatabaseExistMethod · 0.80
isDictionaryExistMethod · 0.80
ExceptionClass · 0.70
getContextFunction · 0.50
QueryPipelineClass · 0.50
createFunction · 0.50
isTemporaryMethod · 0.45
getTableMethod · 0.45
getDatabaseMethod · 0.45
checkAccessMethod · 0.45

Tested by

no test coverage detected