duckdb 0.7.2-dev2430.0 → 0.7.2-dev2552.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/package.json +1 -1
  2. package/src/connection.cpp +1 -1
  3. package/src/duckdb/extension/icu/icu-dateadd.cpp +3 -3
  4. package/src/duckdb/extension/icu/icu-datepart.cpp +3 -3
  5. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  6. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +3 -3
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +2 -2
  9. package/src/duckdb/extension/icu/icu-makedate.cpp +1 -1
  10. package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
  11. package/src/duckdb/extension/icu/icu-table-range.cpp +2 -2
  12. package/src/duckdb/extension/icu/icu-timebucket.cpp +1 -1
  13. package/src/duckdb/extension/icu/icu-timezone.cpp +4 -4
  14. package/src/duckdb/extension/json/json-extension.cpp +6 -6
  15. package/src/duckdb/extension/parquet/parquet-extension.cpp +9 -8
  16. package/src/duckdb/src/catalog/catalog.cpp +166 -127
  17. package/src/duckdb/src/catalog/catalog_entry/copy_function_catalog_entry.cpp +3 -3
  18. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +1 -1
  19. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +90 -82
  20. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +65 -67
  21. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -3
  22. package/src/duckdb/src/catalog/catalog_entry/pragma_function_catalog_entry.cpp +4 -4
  23. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +8 -8
  24. package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +10 -10
  25. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +6 -6
  26. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +6 -6
  27. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +4 -4
  28. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +9 -9
  29. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +5 -5
  30. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +23 -23
  31. package/src/duckdb/src/catalog/catalog_entry.cpp +27 -6
  32. package/src/duckdb/src/catalog/catalog_search_path.cpp +2 -2
  33. package/src/duckdb/src/catalog/catalog_set.cpp +84 -87
  34. package/src/duckdb/src/catalog/catalog_transaction.cpp +1 -1
  35. package/src/duckdb/src/catalog/default/default_functions.cpp +1 -1
  36. package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
  37. package/src/duckdb/src/catalog/default/default_types.cpp +1 -1
  38. package/src/duckdb/src/catalog/default/default_views.cpp +1 -1
  39. package/src/duckdb/src/catalog/dependency_list.cpp +2 -2
  40. package/src/duckdb/src/catalog/dependency_manager.cpp +9 -10
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +30 -26
  42. package/src/duckdb/src/catalog/similar_catalog_entry.cpp +1 -1
  43. package/src/duckdb/src/common/types.cpp +15 -27
  44. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +2 -2
  45. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +4 -3
  46. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +19 -18
  47. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +5 -5
  48. package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -1
  49. package/src/duckdb/src/execution/operator/schema/physical_create_function.cpp +1 -1
  50. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +6 -5
  51. package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -1
  52. package/src/duckdb/src/execution/operator/schema/physical_create_sequence.cpp +1 -1
  53. package/src/duckdb/src/execution/operator/schema/physical_create_table.cpp +2 -2
  54. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +4 -3
  55. package/src/duckdb/src/execution/operator/schema/physical_create_view.cpp +1 -1
  56. package/src/duckdb/src/execution/operator/schema/physical_detach.cpp +1 -1
  57. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +2 -2
  58. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +1 -1
  59. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +4 -4
  60. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +4 -3
  61. package/src/duckdb/src/execution/physical_plan/plan_delete.cpp +1 -1
  62. package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +1 -1
  63. package/src/duckdb/src/execution/physical_plan/plan_update.cpp +1 -1
  64. package/src/duckdb/src/function/built_in_functions.cpp +10 -10
  65. package/src/duckdb/src/function/function_binder.cpp +3 -3
  66. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +5 -6
  67. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -2
  68. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +9 -8
  69. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +6 -6
  70. package/src/duckdb/src/function/table/arrow.cpp +32 -31
  71. package/src/duckdb/src/function/table/arrow_conversion.cpp +75 -59
  72. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +8 -7
  73. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +14 -14
  74. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +2 -2
  75. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +26 -25
  76. package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +13 -12
  77. package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +7 -7
  78. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +8 -9
  79. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +10 -9
  80. package/src/duckdb/src/function/table/system/duckdb_types.cpp +13 -13
  81. package/src/duckdb/src/function/table/system/duckdb_views.cpp +11 -10
  82. package/src/duckdb/src/function/table/system/pragma_collations.cpp +2 -2
  83. package/src/duckdb/src/function/table/system/pragma_database_size.cpp +5 -5
  84. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +3 -3
  85. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +2 -2
  86. package/src/duckdb/src/function/table/table_scan.cpp +39 -37
  87. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  88. package/src/duckdb/src/function/udf_function.cpp +2 -2
  89. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +122 -81
  90. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/aggregate_function_catalog_entry.hpp +2 -3
  91. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/collate_catalog_entry.hpp +3 -3
  92. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/copy_function_catalog_entry.hpp +1 -1
  93. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  94. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +24 -20
  95. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +3 -3
  96. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +1 -1
  97. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +2 -2
  98. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp +1 -1
  99. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp +2 -2
  100. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +1 -1
  101. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +22 -17
  102. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
  103. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -1
  104. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +2 -2
  105. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +1 -1
  106. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -1
  107. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +3 -3
  108. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +28 -7
  109. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +20 -19
  110. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +9 -9
  111. package/src/duckdb/src/include/duckdb/catalog/similar_catalog_entry.hpp +2 -1
  112. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +10 -4
  113. package/src/duckdb/src/include/duckdb/common/enums/on_entry_not_found.hpp +17 -0
  114. package/src/duckdb/src/include/duckdb/common/types.hpp +3 -4
  115. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -4
  116. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +3 -2
  117. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +5 -4
  118. package/src/duckdb/src/include/duckdb/function/table_function.hpp +28 -15
  119. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +2 -0
  120. package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
  121. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +3 -2
  122. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  123. package/src/duckdb/src/include/duckdb/parser/keyword_helper.hpp +2 -2
  124. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +7 -5
  125. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
  126. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +1 -1
  127. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +1 -1
  128. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +3 -2
  129. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +5 -5
  130. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +13 -0
  131. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +5 -2
  132. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +2 -0
  133. package/src/duckdb/src/include/duckdb/planner/binder.hpp +2 -2
  134. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +1 -2
  135. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +4 -7
  136. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +1 -1
  137. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +12 -0
  138. package/src/duckdb/src/main/attached_database.cpp +12 -6
  139. package/src/duckdb/src/main/capi/table_function-c.cpp +17 -16
  140. package/src/duckdb/src/main/client_context.cpp +12 -11
  141. package/src/duckdb/src/main/database_manager.cpp +13 -12
  142. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +1 -2
  143. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +3 -3
  144. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +2 -2
  145. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +2 -2
  146. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +9 -9
  147. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +2 -2
  148. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +2 -2
  149. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +2 -2
  150. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +2 -2
  151. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +3 -2
  152. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +5 -1
  153. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +1 -1
  154. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +1 -1
  155. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +1 -1
  156. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +26 -27
  157. package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +17 -17
  158. package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +9 -9
  159. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +6 -6
  160. package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +6 -6
  161. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +2 -2
  162. package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +21 -21
  163. package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +2 -3
  164. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +33 -36
  165. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +5 -5
  166. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +23 -23
  167. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -4
  168. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +7 -7
  169. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +23 -23
  170. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +4 -4
  171. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +14 -13
  172. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +36 -35
  173. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +3 -3
  174. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  175. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +4 -4
  176. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +10 -10
  177. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  178. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +4 -4
  179. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +5 -4
  180. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
  181. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +3 -3
  182. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +10 -12
  183. package/src/duckdb/src/planner/binder.cpp +2 -2
  184. package/src/duckdb/src/planner/expression/bound_expression.cpp +11 -2
  185. package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +2 -5
  186. package/src/duckdb/src/planner/operator/logical_create.cpp +2 -1
  187. package/src/duckdb/src/planner/operator/logical_create_index.cpp +2 -2
  188. package/src/duckdb/src/planner/operator/logical_delete.cpp +2 -2
  189. package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
  190. package/src/duckdb/src/planner/operator/logical_insert.cpp +2 -7
  191. package/src/duckdb/src/planner/operator/logical_update.cpp +2 -6
  192. package/src/duckdb/src/planner/parsed_data/bound_create_table_info.cpp +2 -2
  193. package/src/duckdb/src/planner/pragma_handler.cpp +3 -4
  194. package/src/duckdb/src/storage/checkpoint_manager.cpp +46 -46
  195. package/src/duckdb/src/storage/data_table.cpp +3 -6
  196. package/src/duckdb/src/storage/table/update_segment.cpp +1 -1
  197. package/src/duckdb/src/storage/wal_replay.cpp +28 -30
  198. package/src/duckdb/src/storage/write_ahead_log.cpp +8 -8
  199. package/src/duckdb/src/transaction/cleanup_state.cpp +1 -1
  200. package/src/duckdb/src/transaction/commit_state.cpp +3 -4
  201. package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
@@ -90,7 +90,7 @@ Catalog &Catalog::GetCatalog(ClientContext &context, const string &catalog_name)
90
90
  //===--------------------------------------------------------------------===//
91
91
  // Schema
92
92
  //===--------------------------------------------------------------------===//
93
- CatalogEntry *Catalog::CreateSchema(ClientContext &context, CreateSchemaInfo *info) {
93
+ optional_ptr<CatalogEntry> Catalog::CreateSchema(ClientContext &context, CreateSchemaInfo &info) {
94
94
  return CreateSchema(GetCatalogTransaction(context), info);
95
95
  }
96
96
 
@@ -101,177 +101,185 @@ CatalogTransaction Catalog::GetCatalogTransaction(ClientContext &context) {
101
101
  //===--------------------------------------------------------------------===//
102
102
  // Table
103
103
  //===--------------------------------------------------------------------===//
104
- CatalogEntry *Catalog::CreateTable(ClientContext &context, BoundCreateTableInfo *info) {
104
+ optional_ptr<CatalogEntry> Catalog::CreateTable(ClientContext &context, BoundCreateTableInfo &info) {
105
105
  return CreateTable(GetCatalogTransaction(context), info);
106
106
  }
107
107
 
108
- CatalogEntry *Catalog::CreateTable(ClientContext &context, unique_ptr<CreateTableInfo> info) {
108
+ optional_ptr<CatalogEntry> Catalog::CreateTable(ClientContext &context, unique_ptr<CreateTableInfo> info) {
109
109
  auto binder = Binder::CreateBinder(context);
110
110
  auto bound_info = binder->BindCreateTableInfo(std::move(info));
111
- return CreateTable(context, bound_info.get());
111
+ return CreateTable(context, *bound_info);
112
112
  }
113
113
 
114
- CatalogEntry *Catalog::CreateTable(CatalogTransaction transaction, SchemaCatalogEntry &schema,
115
- BoundCreateTableInfo *info) {
114
+ optional_ptr<CatalogEntry> Catalog::CreateTable(CatalogTransaction transaction, SchemaCatalogEntry &schema,
115
+ BoundCreateTableInfo &info) {
116
116
  return schema.CreateTable(transaction, info);
117
117
  }
118
118
 
119
- CatalogEntry *Catalog::CreateTable(CatalogTransaction transaction, BoundCreateTableInfo *info) {
120
- auto schema = GetSchema(transaction, info->base->schema);
121
- return CreateTable(transaction, *schema, info);
119
+ optional_ptr<CatalogEntry> Catalog::CreateTable(CatalogTransaction transaction, BoundCreateTableInfo &info) {
120
+ auto &schema = GetSchema(transaction, info.base->schema);
121
+ return CreateTable(transaction, schema, info);
122
122
  }
123
123
 
124
124
  //===--------------------------------------------------------------------===//
125
125
  // View
126
126
  //===--------------------------------------------------------------------===//
127
- CatalogEntry *Catalog::CreateView(CatalogTransaction transaction, CreateViewInfo *info) {
128
- auto schema = GetSchema(transaction, info->schema);
129
- return CreateView(transaction, *schema, info);
127
+ optional_ptr<CatalogEntry> Catalog::CreateView(CatalogTransaction transaction, CreateViewInfo &info) {
128
+ auto &schema = GetSchema(transaction, info.schema);
129
+ return CreateView(transaction, schema, info);
130
130
  }
131
131
 
132
- CatalogEntry *Catalog::CreateView(ClientContext &context, CreateViewInfo *info) {
132
+ optional_ptr<CatalogEntry> Catalog::CreateView(ClientContext &context, CreateViewInfo &info) {
133
133
  return CreateView(GetCatalogTransaction(context), info);
134
134
  }
135
135
 
136
- CatalogEntry *Catalog::CreateView(CatalogTransaction transaction, SchemaCatalogEntry &schema, CreateViewInfo *info) {
136
+ optional_ptr<CatalogEntry> Catalog::CreateView(CatalogTransaction transaction, SchemaCatalogEntry &schema,
137
+ CreateViewInfo &info) {
137
138
  return schema.CreateView(transaction, info);
138
139
  }
139
140
 
140
141
  //===--------------------------------------------------------------------===//
141
142
  // Sequence
142
143
  //===--------------------------------------------------------------------===//
143
- CatalogEntry *Catalog::CreateSequence(CatalogTransaction transaction, CreateSequenceInfo *info) {
144
- auto schema = GetSchema(transaction, info->schema);
145
- return CreateSequence(transaction, *schema, info);
144
+ optional_ptr<CatalogEntry> Catalog::CreateSequence(CatalogTransaction transaction, CreateSequenceInfo &info) {
145
+ auto &schema = GetSchema(transaction, info.schema);
146
+ return CreateSequence(transaction, schema, info);
146
147
  }
147
148
 
148
- CatalogEntry *Catalog::CreateSequence(ClientContext &context, CreateSequenceInfo *info) {
149
+ optional_ptr<CatalogEntry> Catalog::CreateSequence(ClientContext &context, CreateSequenceInfo &info) {
149
150
  return CreateSequence(GetCatalogTransaction(context), info);
150
151
  }
151
152
 
152
- CatalogEntry *Catalog::CreateSequence(CatalogTransaction transaction, SchemaCatalogEntry &schema,
153
- CreateSequenceInfo *info) {
153
+ optional_ptr<CatalogEntry> Catalog::CreateSequence(CatalogTransaction transaction, SchemaCatalogEntry &schema,
154
+ CreateSequenceInfo &info) {
154
155
  return schema.CreateSequence(transaction, info);
155
156
  }
156
157
 
157
158
  //===--------------------------------------------------------------------===//
158
159
  // Type
159
160
  //===--------------------------------------------------------------------===//
160
- CatalogEntry *Catalog::CreateType(CatalogTransaction transaction, CreateTypeInfo *info) {
161
- auto schema = GetSchema(transaction, info->schema);
162
- return CreateType(transaction, *schema, info);
161
+ optional_ptr<CatalogEntry> Catalog::CreateType(CatalogTransaction transaction, CreateTypeInfo &info) {
162
+ auto &schema = GetSchema(transaction, info.schema);
163
+ return CreateType(transaction, schema, info);
163
164
  }
164
165
 
165
- CatalogEntry *Catalog::CreateType(ClientContext &context, CreateTypeInfo *info) {
166
+ optional_ptr<CatalogEntry> Catalog::CreateType(ClientContext &context, CreateTypeInfo &info) {
166
167
  return CreateType(GetCatalogTransaction(context), info);
167
168
  }
168
169
 
169
- CatalogEntry *Catalog::CreateType(CatalogTransaction transaction, SchemaCatalogEntry &schema, CreateTypeInfo *info) {
170
+ optional_ptr<CatalogEntry> Catalog::CreateType(CatalogTransaction transaction, SchemaCatalogEntry &schema,
171
+ CreateTypeInfo &info) {
170
172
  return schema.CreateType(transaction, info);
171
173
  }
172
174
 
173
175
  //===--------------------------------------------------------------------===//
174
176
  // Table Function
175
177
  //===--------------------------------------------------------------------===//
176
- CatalogEntry *Catalog::CreateTableFunction(CatalogTransaction transaction, CreateTableFunctionInfo *info) {
177
- auto schema = GetSchema(transaction, info->schema);
178
- return CreateTableFunction(transaction, *schema, info);
178
+ optional_ptr<CatalogEntry> Catalog::CreateTableFunction(CatalogTransaction transaction, CreateTableFunctionInfo &info) {
179
+ auto &schema = GetSchema(transaction, info.schema);
180
+ return CreateTableFunction(transaction, schema, info);
179
181
  }
180
182
 
181
- CatalogEntry *Catalog::CreateTableFunction(ClientContext &context, CreateTableFunctionInfo *info) {
183
+ optional_ptr<CatalogEntry> Catalog::CreateTableFunction(ClientContext &context, CreateTableFunctionInfo &info) {
182
184
  return CreateTableFunction(GetCatalogTransaction(context), info);
183
185
  }
184
186
 
185
- CatalogEntry *Catalog::CreateTableFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
186
- CreateTableFunctionInfo *info) {
187
+ optional_ptr<CatalogEntry> Catalog::CreateTableFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
188
+ CreateTableFunctionInfo &info) {
187
189
  return schema.CreateTableFunction(transaction, info);
188
190
  }
189
191
 
192
+ optional_ptr<CatalogEntry> Catalog::CreateTableFunction(ClientContext &context,
193
+ optional_ptr<CreateTableFunctionInfo> info) {
194
+ return CreateTableFunction(context, *info);
195
+ }
196
+
190
197
  //===--------------------------------------------------------------------===//
191
198
  // Copy Function
192
199
  //===--------------------------------------------------------------------===//
193
- CatalogEntry *Catalog::CreateCopyFunction(CatalogTransaction transaction, CreateCopyFunctionInfo *info) {
194
- auto schema = GetSchema(transaction, info->schema);
195
- return CreateCopyFunction(transaction, *schema, info);
200
+ optional_ptr<CatalogEntry> Catalog::CreateCopyFunction(CatalogTransaction transaction, CreateCopyFunctionInfo &info) {
201
+ auto &schema = GetSchema(transaction, info.schema);
202
+ return CreateCopyFunction(transaction, schema, info);
196
203
  }
197
204
 
198
- CatalogEntry *Catalog::CreateCopyFunction(ClientContext &context, CreateCopyFunctionInfo *info) {
205
+ optional_ptr<CatalogEntry> Catalog::CreateCopyFunction(ClientContext &context, CreateCopyFunctionInfo &info) {
199
206
  return CreateCopyFunction(GetCatalogTransaction(context), info);
200
207
  }
201
208
 
202
- CatalogEntry *Catalog::CreateCopyFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
203
- CreateCopyFunctionInfo *info) {
209
+ optional_ptr<CatalogEntry> Catalog::CreateCopyFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
210
+ CreateCopyFunctionInfo &info) {
204
211
  return schema.CreateCopyFunction(transaction, info);
205
212
  }
206
213
 
207
214
  //===--------------------------------------------------------------------===//
208
215
  // Pragma Function
209
216
  //===--------------------------------------------------------------------===//
210
- CatalogEntry *Catalog::CreatePragmaFunction(CatalogTransaction transaction, CreatePragmaFunctionInfo *info) {
211
- auto schema = GetSchema(transaction, info->schema);
212
- return CreatePragmaFunction(transaction, *schema, info);
217
+ optional_ptr<CatalogEntry> Catalog::CreatePragmaFunction(CatalogTransaction transaction,
218
+ CreatePragmaFunctionInfo &info) {
219
+ auto &schema = GetSchema(transaction, info.schema);
220
+ return CreatePragmaFunction(transaction, schema, info);
213
221
  }
214
222
 
215
- CatalogEntry *Catalog::CreatePragmaFunction(ClientContext &context, CreatePragmaFunctionInfo *info) {
223
+ optional_ptr<CatalogEntry> Catalog::CreatePragmaFunction(ClientContext &context, CreatePragmaFunctionInfo &info) {
216
224
  return CreatePragmaFunction(GetCatalogTransaction(context), info);
217
225
  }
218
226
 
219
- CatalogEntry *Catalog::CreatePragmaFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
220
- CreatePragmaFunctionInfo *info) {
227
+ optional_ptr<CatalogEntry> Catalog::CreatePragmaFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
228
+ CreatePragmaFunctionInfo &info) {
221
229
  return schema.CreatePragmaFunction(transaction, info);
222
230
  }
223
231
 
224
232
  //===--------------------------------------------------------------------===//
225
233
  // Function
226
234
  //===--------------------------------------------------------------------===//
227
- CatalogEntry *Catalog::CreateFunction(CatalogTransaction transaction, CreateFunctionInfo *info) {
228
- auto schema = GetSchema(transaction, info->schema);
229
- return CreateFunction(transaction, *schema, info);
235
+ optional_ptr<CatalogEntry> Catalog::CreateFunction(CatalogTransaction transaction, CreateFunctionInfo &info) {
236
+ auto &schema = GetSchema(transaction, info.schema);
237
+ return CreateFunction(transaction, schema, info);
230
238
  }
231
239
 
232
- CatalogEntry *Catalog::CreateFunction(ClientContext &context, CreateFunctionInfo *info) {
240
+ optional_ptr<CatalogEntry> Catalog::CreateFunction(ClientContext &context, CreateFunctionInfo &info) {
233
241
  return CreateFunction(GetCatalogTransaction(context), info);
234
242
  }
235
243
 
236
- CatalogEntry *Catalog::CreateFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
237
- CreateFunctionInfo *info) {
244
+ optional_ptr<CatalogEntry> Catalog::CreateFunction(CatalogTransaction transaction, SchemaCatalogEntry &schema,
245
+ CreateFunctionInfo &info) {
238
246
  return schema.CreateFunction(transaction, info);
239
247
  }
240
248
 
241
- CatalogEntry *Catalog::AddFunction(ClientContext &context, CreateFunctionInfo *info) {
242
- info->on_conflict = OnCreateConflict::ALTER_ON_CONFLICT;
249
+ optional_ptr<CatalogEntry> Catalog::AddFunction(ClientContext &context, CreateFunctionInfo &info) {
250
+ info.on_conflict = OnCreateConflict::ALTER_ON_CONFLICT;
243
251
  return CreateFunction(context, info);
244
252
  }
245
253
 
246
254
  //===--------------------------------------------------------------------===//
247
255
  // Collation
248
256
  //===--------------------------------------------------------------------===//
249
- CatalogEntry *Catalog::CreateCollation(CatalogTransaction transaction, CreateCollationInfo *info) {
250
- auto schema = GetSchema(transaction, info->schema);
251
- return CreateCollation(transaction, *schema, info);
257
+ optional_ptr<CatalogEntry> Catalog::CreateCollation(CatalogTransaction transaction, CreateCollationInfo &info) {
258
+ auto &schema = GetSchema(transaction, info.schema);
259
+ return CreateCollation(transaction, schema, info);
252
260
  }
253
261
 
254
- CatalogEntry *Catalog::CreateCollation(ClientContext &context, CreateCollationInfo *info) {
262
+ optional_ptr<CatalogEntry> Catalog::CreateCollation(ClientContext &context, CreateCollationInfo &info) {
255
263
  return CreateCollation(GetCatalogTransaction(context), info);
256
264
  }
257
265
 
258
- CatalogEntry *Catalog::CreateCollation(CatalogTransaction transaction, SchemaCatalogEntry &schema,
259
- CreateCollationInfo *info) {
266
+ optional_ptr<CatalogEntry> Catalog::CreateCollation(CatalogTransaction transaction, SchemaCatalogEntry &schema,
267
+ CreateCollationInfo &info) {
260
268
  return schema.CreateCollation(transaction, info);
261
269
  }
262
270
 
263
271
  //===--------------------------------------------------------------------===//
264
272
  // Index
265
273
  //===--------------------------------------------------------------------===//
266
- CatalogEntry *Catalog::CreateIndex(CatalogTransaction transaction, CreateIndexInfo *info) {
274
+ optional_ptr<CatalogEntry> Catalog::CreateIndex(CatalogTransaction transaction, CreateIndexInfo &info) {
267
275
  auto &context = transaction.GetContext();
268
276
  return CreateIndex(context, info);
269
277
  }
270
278
 
271
- CatalogEntry *Catalog::CreateIndex(ClientContext &context, CreateIndexInfo *info) {
272
- auto schema = GetSchema(context, info->schema);
273
- auto table = GetEntry<TableCatalogEntry>(context, schema->name, info->table->table_name);
274
- return schema->CreateIndex(context, info, table);
279
+ optional_ptr<CatalogEntry> Catalog::CreateIndex(ClientContext &context, CreateIndexInfo &info) {
280
+ auto &schema = GetSchema(context, info.schema);
281
+ auto &table = GetEntry<TableCatalogEntry>(context, schema.name, info.table->table_name);
282
+ return schema.CreateIndex(context, info, table);
275
283
  }
276
284
 
277
285
  //===--------------------------------------------------------------------===//
@@ -298,15 +306,15 @@ struct CatalogEntryLookup {
298
306
  //===--------------------------------------------------------------------===//
299
307
  // Generic
300
308
  //===--------------------------------------------------------------------===//
301
- void Catalog::DropEntry(ClientContext &context, DropInfo *info) {
309
+ void Catalog::DropEntry(ClientContext &context, DropInfo &info) {
302
310
  ModifyCatalog();
303
- if (info->type == CatalogType::SCHEMA_ENTRY) {
311
+ if (info.type == CatalogType::SCHEMA_ENTRY) {
304
312
  // DROP SCHEMA
305
313
  DropSchema(context, info);
306
314
  return;
307
315
  }
308
316
 
309
- auto lookup = LookupEntry(context, info->type, info->schema, info->name, info->if_exists);
317
+ auto lookup = LookupEntry(context, info.type, info.schema, info.name, info.if_not_found);
310
318
  if (!lookup.Found()) {
311
319
  return;
312
320
  }
@@ -314,9 +322,23 @@ void Catalog::DropEntry(ClientContext &context, DropInfo *info) {
314
322
  lookup.schema->DropEntry(context, info);
315
323
  }
316
324
 
317
- SchemaCatalogEntry *Catalog::GetSchema(ClientContext &context, const string &schema_name, bool if_exists,
325
+ SchemaCatalogEntry &Catalog::GetSchema(ClientContext &context, const string &name, QueryErrorContext error_context) {
326
+ return *Catalog::GetSchema(context, name, OnEntryNotFound::THROW_EXCEPTION, error_context);
327
+ }
328
+
329
+ optional_ptr<SchemaCatalogEntry> Catalog::GetSchema(ClientContext &context, const string &schema_name,
330
+ OnEntryNotFound if_not_found, QueryErrorContext error_context) {
331
+ return GetSchema(GetCatalogTransaction(context), schema_name, if_not_found, error_context);
332
+ }
333
+
334
+ SchemaCatalogEntry &Catalog::GetSchema(ClientContext &context, const string &catalog_name, const string &schema_name,
318
335
  QueryErrorContext error_context) {
319
- return GetSchema(GetCatalogTransaction(context), schema_name, if_exists, error_context);
336
+ return *Catalog::GetSchema(context, catalog_name, schema_name, OnEntryNotFound::THROW_EXCEPTION, error_context);
337
+ }
338
+
339
+ SchemaCatalogEntry &Catalog::GetSchema(CatalogTransaction transaction, const string &name,
340
+ QueryErrorContext error_context) {
341
+ return *GetSchema(transaction, name, OnEntryNotFound::THROW_EXCEPTION, error_context);
320
342
  }
321
343
 
322
344
  //===--------------------------------------------------------------------===//
@@ -327,7 +349,7 @@ SimilarCatalogEntry Catalog::SimilarEntryInSchemas(ClientContext &context, const
327
349
  SimilarCatalogEntry result;
328
350
  for (auto schema_ref : schemas) {
329
351
  auto &schema = schema_ref.get();
330
- auto transaction = schema.catalog->GetCatalogTransaction(context);
352
+ auto transaction = schema.catalog.GetCatalogTransaction(context);
331
353
  auto entry = schema.GetSimilarEntry(transaction, type, entry_name);
332
354
  if (!entry.Found()) {
333
355
  // no similar entry found
@@ -455,10 +477,10 @@ CatalogException Catalog::CreateMissingEntryException(ClientContext &context, co
455
477
  auto &db_manager = DatabaseManager::Get(context);
456
478
  auto databases = db_manager.GetDatabases(context);
457
479
  for (auto database : databases) {
458
- auto &catalog = database->GetCatalog();
480
+ auto &catalog = database.get().GetCatalog();
459
481
  auto current_schemas = catalog.GetAllSchemas(context);
460
482
  for (auto &current_schema : current_schemas) {
461
- unseen_schemas.insert(*current_schema);
483
+ unseen_schemas.insert(current_schema.get());
462
484
  }
463
485
  }
464
486
  // check if the entry exists in any extension
@@ -477,7 +499,7 @@ CatalogException Catalog::CreateMissingEntryException(ClientContext &context, co
477
499
  if (unseen_entry.Found() && unseen_entry.distance < entry.distance) {
478
500
  // the closest matching entry requires qualification as it is not in the default search path
479
501
  // check how to minimally qualify this entry
480
- auto catalog_name = unseen_entry.schema->catalog->GetName();
502
+ auto catalog_name = unseen_entry.schema->catalog.GetName();
481
503
  auto schema_name = unseen_entry.schema->name;
482
504
  bool qualify_database;
483
505
  bool qualify_schema;
@@ -493,8 +515,7 @@ CatalogException Catalog::CreateMissingEntryException(ClientContext &context, co
493
515
 
494
516
  CatalogEntryLookup Catalog::LookupEntryInternal(CatalogTransaction transaction, CatalogType type, const string &schema,
495
517
  const string &name) {
496
-
497
- auto schema_entry = (SchemaCatalogEntry *)GetSchema(transaction, schema, true);
518
+ auto schema_entry = GetSchema(transaction, schema, OnEntryNotFound::RETURN_NULL);
498
519
  if (!schema_entry) {
499
520
  return {nullptr, nullptr};
500
521
  }
@@ -506,7 +527,8 @@ CatalogEntryLookup Catalog::LookupEntryInternal(CatalogTransaction transaction,
506
527
  }
507
528
 
508
529
  CatalogEntryLookup Catalog::LookupEntry(ClientContext &context, CatalogType type, const string &schema,
509
- const string &name, bool if_exists, QueryErrorContext error_context) {
530
+ const string &name, OnEntryNotFound if_not_found,
531
+ QueryErrorContext error_context) {
510
532
  reference_set_t<SchemaCatalogEntry> schemas;
511
533
  if (IsInvalidSchema(schema)) {
512
534
  // try all schemas for this catalog
@@ -536,14 +558,15 @@ CatalogEntryLookup Catalog::LookupEntry(ClientContext &context, CatalogType type
536
558
  schemas.insert(*result.schema);
537
559
  }
538
560
  }
539
- if (if_exists) {
561
+ if (if_not_found == OnEntryNotFound::RETURN_NULL) {
540
562
  return {nullptr, nullptr};
541
563
  }
542
564
  throw CreateMissingEntryException(context, name, type, schemas, error_context);
543
565
  }
544
566
 
545
567
  CatalogEntryLookup Catalog::LookupEntry(ClientContext &context, vector<CatalogLookup> &lookups, CatalogType type,
546
- const string &name, bool if_exists, QueryErrorContext error_context) {
568
+ const string &name, OnEntryNotFound if_not_found,
569
+ QueryErrorContext error_context) {
547
570
  reference_set_t<SchemaCatalogEntry> schemas;
548
571
  for (auto &lookup : lookups) {
549
572
  auto transaction = lookup.catalog.GetCatalogTransaction(context);
@@ -555,37 +578,44 @@ CatalogEntryLookup Catalog::LookupEntry(ClientContext &context, vector<CatalogLo
555
578
  schemas.insert(*result.schema);
556
579
  }
557
580
  }
558
- if (if_exists) {
581
+ if (if_not_found == OnEntryNotFound::RETURN_NULL) {
559
582
  return {nullptr, nullptr};
560
583
  }
561
584
  throw CreateMissingEntryException(context, name, type, schemas, error_context);
562
585
  }
563
586
 
564
- CatalogEntry *Catalog::GetEntry(ClientContext &context, const string &schema, const string &name) {
587
+ CatalogEntry &Catalog::GetEntry(ClientContext &context, const string &schema, const string &name) {
565
588
  vector<CatalogType> entry_types {CatalogType::TABLE_ENTRY, CatalogType::SEQUENCE_ENTRY};
566
589
 
567
590
  for (auto entry_type : entry_types) {
568
- CatalogEntry *result = GetEntry(context, entry_type, schema, name, true);
569
- if (result != nullptr) {
570
- return result;
591
+ auto result = GetEntry(context, entry_type, schema, name, OnEntryNotFound::RETURN_NULL);
592
+ if (result) {
593
+ return *result;
571
594
  }
572
595
  }
573
596
 
574
597
  throw CatalogException("CatalogElement \"%s.%s\" does not exist!", schema, name);
575
598
  }
576
599
 
577
- CatalogEntry *Catalog::GetEntry(ClientContext &context, CatalogType type, const string &schema_name, const string &name,
578
- bool if_exists, QueryErrorContext error_context) {
579
- return LookupEntry(context, type, schema_name, name, if_exists, error_context).entry.get();
600
+ optional_ptr<CatalogEntry> Catalog::GetEntry(ClientContext &context, CatalogType type, const string &schema_name,
601
+ const string &name, OnEntryNotFound if_not_found,
602
+ QueryErrorContext error_context) {
603
+ return LookupEntry(context, type, schema_name, name, if_not_found, error_context).entry.get();
604
+ }
605
+
606
+ CatalogEntry &Catalog::GetEntry(ClientContext &context, CatalogType type, const string &schema, const string &name,
607
+ QueryErrorContext error_context) {
608
+ return *Catalog::GetEntry(context, type, schema, name, OnEntryNotFound::THROW_EXCEPTION, error_context);
580
609
  }
581
610
 
582
- CatalogEntry *Catalog::GetEntry(ClientContext &context, CatalogType type, const string &catalog, const string &schema,
583
- const string &name, bool if_exists_p, QueryErrorContext error_context) {
611
+ optional_ptr<CatalogEntry> Catalog::GetEntry(ClientContext &context, CatalogType type, const string &catalog,
612
+ const string &schema, const string &name, OnEntryNotFound if_not_found,
613
+ QueryErrorContext error_context) {
584
614
  auto entries = GetCatalogEntries(context, catalog, schema);
585
615
  vector<CatalogLookup> lookups;
586
616
  lookups.reserve(entries.size());
587
617
  for (auto &entry : entries) {
588
- if (if_exists_p) {
618
+ if (if_not_found == OnEntryNotFound::RETURN_NULL) {
589
619
  auto catalog_entry = Catalog::GetCatalogEntry(context, entry.catalog);
590
620
  if (!catalog_entry) {
591
621
  return nullptr;
@@ -595,59 +625,65 @@ CatalogEntry *Catalog::GetEntry(ClientContext &context, CatalogType type, const
595
625
  lookups.emplace_back(Catalog::GetCatalog(context, entry.catalog), entry.schema);
596
626
  }
597
627
  }
598
- auto result = LookupEntry(context, lookups, type, name, if_exists_p, error_context);
628
+ auto result = LookupEntry(context, lookups, type, name, if_not_found, error_context);
599
629
  if (!result.Found()) {
600
- D_ASSERT(if_exists_p);
630
+ D_ASSERT(if_not_found == OnEntryNotFound::RETURN_NULL);
601
631
  return nullptr;
602
632
  }
603
633
  return result.entry.get();
604
634
  }
605
635
 
606
- SchemaCatalogEntry *Catalog::GetSchema(ClientContext &context, const string &catalog_name, const string &schema_name,
607
- bool if_exists_p, QueryErrorContext error_context) {
636
+ CatalogEntry &Catalog::GetEntry(ClientContext &context, CatalogType type, const string &catalog, const string &schema,
637
+ const string &name, QueryErrorContext error_context) {
638
+ return *Catalog::GetEntry(context, type, catalog, schema, name, OnEntryNotFound::THROW_EXCEPTION, error_context);
639
+ }
640
+
641
+ optional_ptr<SchemaCatalogEntry> Catalog::GetSchema(ClientContext &context, const string &catalog_name,
642
+ const string &schema_name, OnEntryNotFound if_not_found,
643
+ QueryErrorContext error_context) {
608
644
  auto entries = GetCatalogEntries(context, catalog_name, schema_name);
609
- SchemaCatalogEntry *result = nullptr;
610
645
  for (idx_t i = 0; i < entries.size(); i++) {
611
- auto if_exists = i + 1 == entries.size() ? if_exists_p : true;
646
+ auto on_not_found = i + 1 == entries.size() ? if_not_found : OnEntryNotFound::RETURN_NULL;
612
647
  auto &catalog = Catalog::GetCatalog(context, entries[i].catalog);
613
- auto result = catalog.GetSchema(context, schema_name, if_exists, error_context);
648
+ auto result = catalog.GetSchema(context, schema_name, on_not_found, error_context);
614
649
  if (result) {
615
650
  return result;
616
651
  }
617
652
  }
618
- return result;
653
+ return nullptr;
619
654
  }
620
655
 
621
- LogicalType Catalog::GetType(ClientContext &context, const string &schema, const string &name, bool if_exists) {
622
- auto type_entry = GetEntry<TypeCatalogEntry>(context, schema, name, if_exists);
656
+ LogicalType Catalog::GetType(ClientContext &context, const string &schema, const string &name,
657
+ OnEntryNotFound if_not_found) {
658
+ auto type_entry = GetEntry<TypeCatalogEntry>(context, schema, name, if_not_found);
623
659
  if (!type_entry) {
624
660
  return LogicalType::INVALID;
625
661
  }
626
662
  auto result_type = type_entry->user_type;
627
- LogicalType::SetCatalog(result_type, type_entry);
663
+ EnumType::SetCatalog(result_type, type_entry.get());
628
664
  return result_type;
629
665
  }
630
666
 
631
667
  LogicalType Catalog::GetType(ClientContext &context, const string &catalog_name, const string &schema,
632
668
  const string &name) {
633
- auto type_entry = Catalog::GetEntry<TypeCatalogEntry>(context, catalog_name, schema, name);
634
- auto result_type = type_entry->user_type;
635
- LogicalType::SetCatalog(result_type, type_entry);
669
+ auto &type_entry = Catalog::GetEntry<TypeCatalogEntry>(context, catalog_name, schema, name);
670
+ auto result_type = type_entry.user_type;
671
+ EnumType::SetCatalog(result_type, &type_entry);
636
672
  return result_type;
637
673
  }
638
674
 
639
- vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context) {
640
- vector<SchemaCatalogEntry *> schemas;
641
- ScanSchemas(context, [&](CatalogEntry *entry) { schemas.push_back((SchemaCatalogEntry *)entry); });
675
+ vector<reference<SchemaCatalogEntry>> Catalog::GetSchemas(ClientContext &context) {
676
+ vector<reference<SchemaCatalogEntry>> schemas;
677
+ ScanSchemas(context, [&](SchemaCatalogEntry &entry) { schemas.push_back(entry); });
642
678
  return schemas;
643
679
  }
644
680
 
645
681
  bool Catalog::TypeExists(ClientContext &context, const string &catalog_name, const string &schema, const string &name) {
646
- CatalogEntry *entry;
647
- entry = GetEntry(context, CatalogType::TYPE_ENTRY, catalog_name, schema, name, true);
682
+ optional_ptr<CatalogEntry> entry;
683
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, catalog_name, schema, name, OnEntryNotFound::RETURN_NULL);
648
684
  if (!entry) {
649
685
  // look in the system catalog
650
- entry = GetEntry(context, CatalogType::TYPE_ENTRY, SYSTEM_CATALOG, schema, name, true);
686
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, SYSTEM_CATALOG, schema, name, OnEntryNotFound::RETURN_NULL);
651
687
  if (!entry) {
652
688
  return false;
653
689
  }
@@ -655,8 +691,8 @@ bool Catalog::TypeExists(ClientContext &context, const string &catalog_name, con
655
691
  return true;
656
692
  }
657
693
 
658
- vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context, const string &catalog_name) {
659
- vector<Catalog *> catalogs;
694
+ vector<reference<SchemaCatalogEntry>> Catalog::GetSchemas(ClientContext &context, const string &catalog_name) {
695
+ vector<reference<Catalog>> catalogs;
660
696
  if (IsInvalidCatalog(catalog_name)) {
661
697
  unordered_set<string> name;
662
698
 
@@ -666,45 +702,48 @@ vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context, const s
666
702
  continue;
667
703
  }
668
704
  name.insert(entry.catalog);
669
- catalogs.push_back(&Catalog::GetCatalog(context, entry.catalog));
705
+ catalogs.push_back(Catalog::GetCatalog(context, entry.catalog));
670
706
  }
671
707
  } else {
672
- catalogs.push_back(&Catalog::GetCatalog(context, catalog_name));
708
+ catalogs.push_back(Catalog::GetCatalog(context, catalog_name));
673
709
  }
674
- vector<SchemaCatalogEntry *> result;
710
+ vector<reference<SchemaCatalogEntry>> result;
675
711
  for (auto catalog : catalogs) {
676
- auto schemas = catalog->GetSchemas(context);
712
+ auto schemas = catalog.get().GetSchemas(context);
677
713
  result.insert(result.end(), schemas.begin(), schemas.end());
678
714
  }
679
715
  return result;
680
716
  }
681
717
 
682
- vector<SchemaCatalogEntry *> Catalog::GetAllSchemas(ClientContext &context) {
683
- vector<SchemaCatalogEntry *> result;
718
+ vector<reference<SchemaCatalogEntry>> Catalog::GetAllSchemas(ClientContext &context) {
719
+ vector<reference<SchemaCatalogEntry>> result;
684
720
 
685
721
  auto &db_manager = DatabaseManager::Get(context);
686
722
  auto databases = db_manager.GetDatabases(context);
687
723
  for (auto database : databases) {
688
- auto &catalog = database->GetCatalog();
724
+ auto &catalog = database.get().GetCatalog();
689
725
  auto new_schemas = catalog.GetSchemas(context);
690
726
  result.insert(result.end(), new_schemas.begin(), new_schemas.end());
691
727
  }
692
- sort(result.begin(), result.end(), [&](SchemaCatalogEntry *x, SchemaCatalogEntry *y) {
693
- if (x->catalog->GetName() < y->catalog->GetName()) {
694
- return true;
695
- }
696
- if (x->catalog->GetName() == y->catalog->GetName()) {
697
- return x->name < y->name;
698
- }
699
- return false;
700
- });
728
+ sort(result.begin(), result.end(),
729
+ [&](reference<SchemaCatalogEntry> left_p, reference<SchemaCatalogEntry> right_p) {
730
+ auto &left = left_p.get();
731
+ auto &right = right_p.get();
732
+ if (left.catalog.GetName() < right.catalog.GetName()) {
733
+ return true;
734
+ }
735
+ if (left.catalog.GetName() == right.catalog.GetName()) {
736
+ return left.name < right.name;
737
+ }
738
+ return false;
739
+ });
701
740
 
702
741
  return result;
703
742
  }
704
743
 
705
- void Catalog::Alter(ClientContext &context, AlterInfo *info) {
744
+ void Catalog::Alter(ClientContext &context, AlterInfo &info) {
706
745
  ModifyCatalog();
707
- auto lookup = LookupEntry(context, info->GetCatalogType(), info->schema, info->name, info->if_exists);
746
+ auto lookup = LookupEntry(context, info.GetCatalogType(), info.schema, info.name, info.if_not_found);
708
747
  if (!lookup.Found()) {
709
748
  return;
710
749
  }
@@ -3,9 +3,9 @@
3
3
 
4
4
  namespace duckdb {
5
5
 
6
- CopyFunctionCatalogEntry::CopyFunctionCatalogEntry(Catalog *catalog, SchemaCatalogEntry *schema,
7
- CreateCopyFunctionInfo *info)
8
- : StandardEntry(CatalogType::COPY_FUNCTION_ENTRY, schema, catalog, info->name), function(info->function) {
6
+ CopyFunctionCatalogEntry::CopyFunctionCatalogEntry(Catalog &catalog, SchemaCatalogEntry &schema,
7
+ CreateCopyFunctionInfo &info)
8
+ : StandardEntry(CatalogType::COPY_FUNCTION_ENTRY, schema, catalog, info.name), function(info.function) {
9
9
  }
10
10
 
11
11
  } // namespace duckdb
@@ -4,7 +4,7 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- DuckIndexEntry::DuckIndexEntry(Catalog *catalog, SchemaCatalogEntry *schema, CreateIndexInfo *info)
7
+ DuckIndexEntry::DuckIndexEntry(Catalog &catalog, SchemaCatalogEntry &schema, CreateIndexInfo &info)
8
8
  : IndexCatalogEntry(catalog, schema, info) {
9
9
  }
10
10