1#include "duckdb/catalog/default/default_schemas.hpp"
2#include "duckdb/catalog/catalog_entry/duck_schema_entry.hpp"
3#include "duckdb/common/string_util.hpp"
4
5namespace duckdb {
6
7struct DefaultSchema {
8 const char *name;
9};
10
11static DefaultSchema internal_schemas[] = {{.name: "information_schema"}, {.name: "pg_catalog"}, {.name: nullptr}};
12
13static bool GetDefaultSchema(const string &input_schema) {
14 auto schema = StringUtil::Lower(str: input_schema);
15 for (idx_t index = 0; internal_schemas[index].name != nullptr; index++) {
16 if (internal_schemas[index].name == schema) {
17 return true;
18 }
19 }
20 return false;
21}
22
23DefaultSchemaGenerator::DefaultSchemaGenerator(Catalog &catalog) : DefaultGenerator(catalog) {
24}
25
26unique_ptr<CatalogEntry> DefaultSchemaGenerator::CreateDefaultEntry(ClientContext &context, const string &entry_name) {
27 if (GetDefaultSchema(input_schema: entry_name)) {
28 return make_uniq_base<CatalogEntry, DuckSchemaEntry>(args&: catalog, args: StringUtil::Lower(str: entry_name), args: true);
29 }
30 return nullptr;
31}
32
33vector<string> DefaultSchemaGenerator::GetDefaultEntries() {
34 vector<string> result;
35 for (idx_t index = 0; internal_schemas[index].name != nullptr; index++) {
36 result.emplace_back(args&: internal_schemas[index].name);
37 }
38 return result;
39}
40
41} // namespace duckdb
42