1 | #include "duckdb/execution/operator/schema/physical_drop.hpp" |
---|---|
2 | #include "duckdb/main/client_data.hpp" |
3 | #include "duckdb/main/database_manager.hpp" |
4 | #include "duckdb/main/database.hpp" |
5 | #include "duckdb/main/client_context.hpp" |
6 | #include "duckdb/catalog/catalog_search_path.hpp" |
7 | #include "duckdb/main/settings.hpp" |
8 | |
9 | namespace duckdb { |
10 | |
11 | //===--------------------------------------------------------------------===// |
12 | // Source |
13 | //===--------------------------------------------------------------------===// |
14 | SourceResultType PhysicalDrop::GetData(ExecutionContext &context, DataChunk &chunk, OperatorSourceInput &input) const { |
15 | switch (info->type) { |
16 | case CatalogType::PREPARED_STATEMENT: { |
17 | // DEALLOCATE silently ignores errors |
18 | auto &statements = ClientData::Get(context&: context.client).prepared_statements; |
19 | if (statements.find(x: info->name) != statements.end()) { |
20 | statements.erase(x: info->name); |
21 | } |
22 | break; |
23 | } |
24 | case CatalogType::SCHEMA_ENTRY: { |
25 | auto &catalog = Catalog::GetCatalog(context&: context.client, catalog_name: info->catalog); |
26 | catalog.DropEntry(context&: context.client, info&: *info); |
27 | auto qualified_name = QualifiedName::Parse(input: info->name); |
28 | |
29 | // Check if the dropped schema was set as the current schema |
30 | auto &client_data = ClientData::Get(context&: context.client); |
31 | auto &default_entry = client_data.catalog_search_path->GetDefault(); |
32 | auto ¤t_catalog = default_entry.catalog; |
33 | auto ¤t_schema = default_entry.schema; |
34 | D_ASSERT(info->name != DEFAULT_SCHEMA); |
35 | |
36 | if (info->catalog == current_catalog && current_schema == info->name) { |
37 | // Reset the schema to default |
38 | SchemaSetting::SetLocal(context&: context.client, DEFAULT_SCHEMA); |
39 | } |
40 | break; |
41 | } |
42 | default: { |
43 | auto &catalog = Catalog::GetCatalog(context&: context.client, catalog_name: info->catalog); |
44 | catalog.DropEntry(context&: context.client, info&: *info); |
45 | break; |
46 | } |
47 | } |
48 | |
49 | return SourceResultType::FINISHED; |
50 | } |
51 | |
52 | } // namespace duckdb |
53 |