| 242 | } |
| 243 | |
| 244 | bool ParserSystemQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected & expected) |
| 245 | { |
| 246 | if (!ParserKeyword{Keyword::SYSTEM}.ignore(pos, expected)) |
| 247 | return false; |
| 248 | |
| 249 | using Type = ASTSystemQuery::Type; |
| 250 | |
| 251 | auto res = make_intrusive<ASTSystemQuery>(); |
| 252 | |
| 253 | bool found = false; |
| 254 | |
| 255 | for (const auto & type : magic_enum::enum_values<Type>()) |
| 256 | { |
| 257 | if (ParserKeyword::createDeprecated(ASTSystemQuery::typeToString(type)).ignore(pos, expected)) |
| 258 | { |
| 259 | res->type = type; |
| 260 | found = true; |
| 261 | break; |
| 262 | } |
| 263 | } |
| 264 | |
| 265 | /// SYSTEM DROP [...] CACHE sounds like the statement disables the cache but it merely clears it. |
| 266 | /// SYSTEM CLEAR [...] CACHE is the preferred syntax but we need to retain support for DROP. |
| 267 | if (!found) |
| 268 | { |
| 269 | static const std::vector<std::pair<std::string_view, Type>> system_aliases = { |
| 270 | {"DROP DNS CACHE", Type::CLEAR_DNS_CACHE}, |
| 271 | {"DROP CONNECTIONS CACHE", Type::CLEAR_CONNECTIONS_CACHE}, |
| 272 | {"DROP MARK CACHE", Type::CLEAR_MARK_CACHE}, |
| 273 | {"DROP PRIMARY INDEX CACHE", Type::CLEAR_PRIMARY_INDEX_CACHE}, |
| 274 | {"DROP UNCOMPRESSED CACHE", Type::CLEAR_UNCOMPRESSED_CACHE}, |
| 275 | {"DROP INDEX MARK CACHE", Type::CLEAR_INDEX_MARK_CACHE}, |
| 276 | {"DROP INDEX UNCOMPRESSED CACHE", Type::CLEAR_INDEX_UNCOMPRESSED_CACHE}, |
| 277 | {"DROP VECTOR SIMILARITY INDEX CACHE", Type::CLEAR_VECTOR_SIMILARITY_INDEX_CACHE}, |
| 278 | {"DROP TEXT INDEX TOKENS CACHE", Type::CLEAR_TEXT_INDEX_TOKENS_CACHE}, |
| 279 | {"DROP TEXT INDEX HEADER CACHE", Type::CLEAR_TEXT_INDEX_HEADER_CACHE}, |
| 280 | {"DROP TEXT INDEX POSTINGS CACHE", Type::CLEAR_TEXT_INDEX_POSTINGS_CACHE}, |
| 281 | {"DROP TEXT INDEX CACHES", Type::CLEAR_TEXT_INDEX_CACHES}, |
| 282 | {"DROP MMAP CACHE", Type::CLEAR_MMAP_CACHE}, |
| 283 | {"DROP QUERY CONDITION CACHE", Type::CLEAR_QUERY_CONDITION_CACHE}, |
| 284 | {"DROP QUERY CACHE", Type::CLEAR_QUERY_CACHE}, |
| 285 | {"DROP COMPILED EXPRESSION CACHE", Type::CLEAR_COMPILED_EXPRESSION_CACHE}, |
| 286 | {"DROP ICEBERG METADATA CACHE", Type::CLEAR_ICEBERG_METADATA_CACHE}, |
| 287 | {"DROP PARQUET METADATA CACHE", Type::CLEAR_PARQUET_METADATA_CACHE}, |
| 288 | {"DROP FILESYSTEM CACHE", Type::CLEAR_FILESYSTEM_CACHE}, |
| 289 | {"DROP DISTRIBUTED CACHE", Type::CLEAR_DISTRIBUTED_CACHE}, |
| 290 | {"DROP DISK METADATA CACHE", Type::CLEAR_DISK_METADATA_CACHE}, |
| 291 | {"DROP PAGE CACHE", Type::CLEAR_PAGE_CACHE}, |
| 292 | {"DROP SCHEMA CACHE", Type::CLEAR_SCHEMA_CACHE}, |
| 293 | {"DROP FORMAT SCHEMA CACHE", Type::CLEAR_FORMAT_SCHEMA_CACHE}, |
| 294 | {"DROP AVRO SCHEMA CACHE", Type::CLEAR_AVRO_SCHEMA_CACHE}, |
| 295 | {"DROP S3 CLIENT CACHE", Type::CLEAR_S3_CLIENT_CACHE}, |
| 296 | }; |
| 297 | |
| 298 | for (const auto & [alias, type] : system_aliases) |
| 299 | { |
| 300 | if (ParserKeyword::createDeprecatedPtr(alias)->ignore(pos, expected)) |
| 301 | { |
nothing calls this directly
no test coverage detected