duckdb 1.4.0 → 1.4.1

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 (144) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/core_functions/scalar/generic/current_setting.cpp +1 -4
  3. package/src/duckdb/extension/icu/icu-strptime.cpp +2 -1
  4. package/src/duckdb/extension/json/include/json_common.hpp +2 -4
  5. package/src/duckdb/extension/json/json_functions.cpp +5 -1
  6. package/src/duckdb/extension/parquet/column_writer.cpp +31 -21
  7. package/src/duckdb/extension/parquet/geo_parquet.cpp +21 -6
  8. package/src/duckdb/extension/parquet/include/column_writer.hpp +2 -2
  9. package/src/duckdb/extension/parquet/include/geo_parquet.hpp +28 -1
  10. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +7 -2
  11. package/src/duckdb/extension/parquet/include/reader/string_column_reader.hpp +13 -0
  12. package/src/duckdb/extension/parquet/include/writer/array_column_writer.hpp +4 -0
  13. package/src/duckdb/extension/parquet/parquet_extension.cpp +56 -1
  14. package/src/duckdb/extension/parquet/parquet_reader.cpp +4 -1
  15. package/src/duckdb/extension/parquet/parquet_statistics.cpp +5 -7
  16. package/src/duckdb/extension/parquet/parquet_writer.cpp +15 -8
  17. package/src/duckdb/extension/parquet/reader/string_column_reader.cpp +17 -4
  18. package/src/duckdb/extension/parquet/writer/array_column_writer.cpp +22 -28
  19. package/src/duckdb/extension/parquet/writer/primitive_column_writer.cpp +17 -5
  20. package/src/duckdb/extension/parquet/writer/struct_column_writer.cpp +3 -2
  21. package/src/duckdb/src/catalog/catalog_search_path.cpp +2 -2
  22. package/src/duckdb/src/catalog/catalog_set.cpp +1 -2
  23. package/src/duckdb/src/common/enum_util.cpp +20 -0
  24. package/src/duckdb/src/common/file_system.cpp +0 -30
  25. package/src/duckdb/src/common/sorting/sort.cpp +25 -6
  26. package/src/duckdb/src/common/sorting/sorted_run_merger.cpp +1 -0
  27. package/src/duckdb/src/common/string_util.cpp +24 -0
  28. package/src/duckdb/src/common/virtual_file_system.cpp +59 -10
  29. package/src/duckdb/src/execution/index/art/art_merger.cpp +0 -3
  30. package/src/duckdb/src/execution/index/art/prefix.cpp +4 -0
  31. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1 -1
  32. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +2 -2
  33. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  34. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +3 -3
  35. package/src/duckdb/src/function/table/system/duckdb_connection_count.cpp +45 -0
  36. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +11 -1
  37. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  38. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  39. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -0
  40. package/src/duckdb/src/include/duckdb/common/string_util.hpp +2 -0
  41. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +4 -1
  42. package/src/duckdb/src/include/duckdb/function/scalar/variant_functions.hpp +1 -1
  43. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  44. package/src/duckdb/src/include/duckdb/logging/log_storage.hpp +6 -6
  45. package/src/duckdb/src/include/duckdb/logging/log_type.hpp +26 -3
  46. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +4 -0
  47. package/src/duckdb/src/include/duckdb/main/client_context.hpp +2 -0
  48. package/src/duckdb/src/include/duckdb/main/connection.hpp +0 -1
  49. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +0 -1
  50. package/src/duckdb/src/include/duckdb/main/database_file_path_manager.hpp +12 -1
  51. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +3 -0
  52. package/src/duckdb/src/include/duckdb/main/relation/create_table_relation.hpp +2 -0
  53. package/src/duckdb/src/include/duckdb/main/relation/create_view_relation.hpp +2 -0
  54. package/src/duckdb/src/include/duckdb/main/relation/delete_relation.hpp +2 -0
  55. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -0
  56. package/src/duckdb/src/include/duckdb/main/relation/insert_relation.hpp +2 -0
  57. package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -0
  58. package/src/duckdb/src/include/duckdb/main/relation/update_relation.hpp +2 -0
  59. package/src/duckdb/src/include/duckdb/main/relation/write_csv_relation.hpp +2 -0
  60. package/src/duckdb/src/include/duckdb/main/relation/write_parquet_relation.hpp +2 -0
  61. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  62. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +3 -1
  63. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -2
  64. package/src/duckdb/src/include/duckdb/planner/binder.hpp +62 -3
  65. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +2 -2
  66. package/src/duckdb/src/include/duckdb/planner/operator/logical_cte.hpp +1 -1
  67. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +3 -3
  68. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  69. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +2 -2
  70. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +2 -2
  71. package/src/duckdb/src/include/duckdb/planner/tableref/bound_joinref.hpp +1 -1
  72. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +6 -1
  73. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +5 -1
  74. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +9 -7
  75. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +2 -0
  76. package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +4 -4
  77. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -6
  78. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +4 -4
  79. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -4
  80. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +5 -3
  81. package/src/duckdb/src/include/duckdb/storage/table/row_id_column_data.hpp +4 -4
  82. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +4 -4
  83. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +4 -4
  84. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +2 -2
  85. package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +2 -1
  86. package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +4 -1
  87. package/src/duckdb/src/include/duckdb/transaction/wal_write_state.hpp +1 -1
  88. package/src/duckdb/src/logging/log_types.cpp +63 -0
  89. package/src/duckdb/src/main/attached_database.cpp +16 -3
  90. package/src/duckdb/src/main/client_context.cpp +27 -19
  91. package/src/duckdb/src/main/connection.cpp +2 -5
  92. package/src/duckdb/src/main/database_file_path_manager.cpp +23 -6
  93. package/src/duckdb/src/main/database_manager.cpp +18 -3
  94. package/src/duckdb/src/main/http/http_util.cpp +3 -1
  95. package/src/duckdb/src/main/relation/create_table_relation.cpp +8 -0
  96. package/src/duckdb/src/main/relation/create_view_relation.cpp +8 -0
  97. package/src/duckdb/src/main/relation/delete_relation.cpp +8 -0
  98. package/src/duckdb/src/main/relation/explain_relation.cpp +8 -0
  99. package/src/duckdb/src/main/relation/insert_relation.cpp +8 -0
  100. package/src/duckdb/src/main/relation/query_relation.cpp +4 -0
  101. package/src/duckdb/src/main/relation/update_relation.cpp +8 -0
  102. package/src/duckdb/src/main/relation/write_csv_relation.cpp +8 -0
  103. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +8 -0
  104. package/src/duckdb/src/main/relation.cpp +2 -2
  105. package/src/duckdb/src/optimizer/filter_combiner.cpp +7 -0
  106. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -3
  107. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +4 -1
  108. package/src/duckdb/src/optimizer/rule/comparison_simplification.cpp +3 -7
  109. package/src/duckdb/src/parser/statement/relation_statement.cpp +1 -4
  110. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -0
  111. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +8 -6
  112. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -5
  113. package/src/duckdb/src/planner/binder/statement/bind_merge_into.cpp +10 -2
  114. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +20 -3
  115. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +8 -3
  116. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +9 -2
  117. package/src/duckdb/src/planner/binder.cpp +2 -2
  118. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +9 -13
  119. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +4 -0
  120. package/src/duckdb/src/planner/expression_binder.cpp +3 -1
  121. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +2 -2
  122. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +12 -14
  123. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +1 -1
  124. package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +2 -2
  125. package/src/duckdb/src/storage/compression/bitpacking.cpp +1 -2
  126. package/src/duckdb/src/storage/data_table.cpp +2 -2
  127. package/src/duckdb/src/storage/local_storage.cpp +1 -1
  128. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +67 -25
  129. package/src/duckdb/src/storage/statistics/string_stats.cpp +8 -0
  130. package/src/duckdb/src/storage/table/array_column_data.cpp +6 -5
  131. package/src/duckdb/src/storage/table/column_data.cpp +23 -9
  132. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +15 -1
  133. package/src/duckdb/src/storage/table/list_column_data.cpp +5 -4
  134. package/src/duckdb/src/storage/table/row_group.cpp +8 -8
  135. package/src/duckdb/src/storage/table/row_group_collection.cpp +12 -8
  136. package/src/duckdb/src/storage/table/row_id_column_data.cpp +5 -4
  137. package/src/duckdb/src/storage/table/standard_column_data.cpp +9 -8
  138. package/src/duckdb/src/storage/table/struct_column_data.cpp +10 -9
  139. package/src/duckdb/src/storage/table/update_segment.cpp +12 -10
  140. package/src/duckdb/src/transaction/commit_state.cpp +18 -0
  141. package/src/duckdb/src/transaction/duck_transaction.cpp +2 -10
  142. package/src/duckdb/src/transaction/wal_write_state.cpp +5 -5
  143. package/src/duckdb/third_party/httplib/httplib.hpp +6 -1
  144. package/src/duckdb/ub_src_function_table_system.cpp +2 -0
@@ -7,6 +7,7 @@
7
7
  #include "duckdb/transaction/duck_transaction.hpp"
8
8
  #include "duckdb/transaction/update_info.hpp"
9
9
  #include "duckdb/transaction/undo_buffer.hpp"
10
+ #include "duckdb/storage/data_table.hpp"
10
11
 
11
12
  #include <algorithm>
12
13
 
@@ -104,9 +105,10 @@ idx_t UpdateInfo::GetAllocSize(idx_t type_size) {
104
105
  return AlignValue<idx_t>(sizeof(UpdateInfo) + (sizeof(sel_t) + type_size) * STANDARD_VECTOR_SIZE);
105
106
  }
106
107
 
107
- void UpdateInfo::Initialize(UpdateInfo &info, transaction_t transaction_id) {
108
+ void UpdateInfo::Initialize(UpdateInfo &info, DataTable &data_table, transaction_t transaction_id) {
108
109
  info.max = STANDARD_VECTOR_SIZE;
109
110
  info.version_number = transaction_id;
111
+ info.table = &data_table;
110
112
  info.segment = nullptr;
111
113
  info.prev.entry = nullptr;
112
114
  info.next.entry = nullptr;
@@ -1236,11 +1238,11 @@ static idx_t SortSelectionVector(SelectionVector &sel, idx_t count, row_t *ids)
1236
1238
  return pos;
1237
1239
  }
1238
1240
 
1239
- UpdateInfo *CreateEmptyUpdateInfo(TransactionData transaction, idx_t type_size, idx_t count,
1241
+ UpdateInfo *CreateEmptyUpdateInfo(TransactionData transaction, DataTable &data_table, idx_t type_size, idx_t count,
1240
1242
  unsafe_unique_array<char> &data) {
1241
1243
  data = make_unsafe_uniq_array_uninitialized<char>(UpdateInfo::GetAllocSize(type_size));
1242
1244
  auto update_info = reinterpret_cast<UpdateInfo *>(data.get());
1243
- UpdateInfo::Initialize(*update_info, transaction.transaction_id);
1245
+ UpdateInfo::Initialize(*update_info, data_table, transaction.transaction_id);
1244
1246
  return update_info;
1245
1247
  }
1246
1248
 
@@ -1258,8 +1260,8 @@ void UpdateSegment::InitializeUpdateInfo(idx_t vector_idx) {
1258
1260
  }
1259
1261
  }
1260
1262
 
1261
- void UpdateSegment::Update(TransactionData transaction, idx_t column_index, Vector &update_p, row_t *ids, idx_t count,
1262
- Vector &base_data) {
1263
+ void UpdateSegment::Update(TransactionData transaction, DataTable &data_table, idx_t column_index, Vector &update_p,
1264
+ row_t *ids, idx_t count, Vector &base_data) {
1263
1265
  // obtain an exclusive lock
1264
1266
  auto write_lock = lock.GetExclusiveLock();
1265
1267
 
@@ -1322,10 +1324,10 @@ void UpdateSegment::Update(TransactionData transaction, idx_t column_index, Vect
1322
1324
  // no updates made yet by this transaction: initially the update info to empty
1323
1325
  if (transaction.transaction) {
1324
1326
  auto &dtransaction = transaction.transaction->Cast<DuckTransaction>();
1325
- node_ref = dtransaction.CreateUpdateInfo(type_size, count);
1327
+ node_ref = dtransaction.CreateUpdateInfo(type_size, data_table, count);
1326
1328
  node = &UpdateInfo::Get(node_ref);
1327
1329
  } else {
1328
- node = CreateEmptyUpdateInfo(transaction, type_size, count, update_info_data);
1330
+ node = CreateEmptyUpdateInfo(transaction, data_table, type_size, count, update_info_data);
1329
1331
  }
1330
1332
  node->segment = this;
1331
1333
  node->vector_index = vector_index;
@@ -1360,7 +1362,7 @@ void UpdateSegment::Update(TransactionData transaction, idx_t column_index, Vect
1360
1362
  idx_t alloc_size = UpdateInfo::GetAllocSize(type_size);
1361
1363
  auto handle = root->allocator.Allocate(alloc_size);
1362
1364
  auto &update_info = UpdateInfo::Get(handle);
1363
- UpdateInfo::Initialize(update_info, TRANSACTION_ID_START - 1);
1365
+ UpdateInfo::Initialize(update_info, data_table, TRANSACTION_ID_START - 1);
1364
1366
  update_info.column_index = column_index;
1365
1367
 
1366
1368
  InitializeUpdateInfo(update_info, ids, sel, count, vector_index, vector_offset);
@@ -1370,10 +1372,10 @@ void UpdateSegment::Update(TransactionData transaction, idx_t column_index, Vect
1370
1372
  UndoBufferReference node_ref;
1371
1373
  optional_ptr<UpdateInfo> transaction_node;
1372
1374
  if (transaction.transaction) {
1373
- node_ref = transaction.transaction->CreateUpdateInfo(type_size, count);
1375
+ node_ref = transaction.transaction->CreateUpdateInfo(type_size, data_table, count);
1374
1376
  transaction_node = &UpdateInfo::Get(node_ref);
1375
1377
  } else {
1376
- transaction_node = CreateEmptyUpdateInfo(transaction, type_size, count, update_info_data);
1378
+ transaction_node = CreateEmptyUpdateInfo(transaction, data_table, type_size, count, update_info_data);
1377
1379
  }
1378
1380
 
1379
1381
  InitializeUpdateInfo(*transaction_node, ids, sel, count, vector_index, vector_offset);
@@ -165,6 +165,12 @@ void CommitState::CommitEntry(UndoFlags type, data_ptr_t data) {
165
165
  case UndoFlags::INSERT_TUPLE: {
166
166
  // append:
167
167
  auto info = reinterpret_cast<AppendInfo *>(data);
168
+ if (!info->table->IsMainTable()) {
169
+ auto table_name = info->table->GetTableName();
170
+ auto table_modification = info->table->TableModification();
171
+ throw TransactionException("Attempting to modify table %s but another transaction has %s this table",
172
+ table_name, table_modification);
173
+ }
168
174
  // mark the tuples as committed
169
175
  info->table->CommitAppend(commit_id, info->start_row, info->count);
170
176
  break;
@@ -172,6 +178,12 @@ void CommitState::CommitEntry(UndoFlags type, data_ptr_t data) {
172
178
  case UndoFlags::DELETE_TUPLE: {
173
179
  // deletion:
174
180
  auto info = reinterpret_cast<DeleteInfo *>(data);
181
+ if (!info->table->IsMainTable()) {
182
+ auto table_name = info->table->GetTableName();
183
+ auto table_modification = info->table->TableModification();
184
+ throw TransactionException("Attempting to modify table %s but another transaction has %s this table",
185
+ table_name, table_modification);
186
+ }
175
187
  // mark the tuples as committed
176
188
  info->version_info->CommitDelete(info->vector_idx, commit_id, *info);
177
189
  break;
@@ -179,6 +191,12 @@ void CommitState::CommitEntry(UndoFlags type, data_ptr_t data) {
179
191
  case UndoFlags::UPDATE_TUPLE: {
180
192
  // update:
181
193
  auto info = reinterpret_cast<UpdateInfo *>(data);
194
+ if (!info->table->IsMainTable()) {
195
+ auto table_name = info->table->GetTableName();
196
+ auto table_modification = info->table->TableModification();
197
+ throw TransactionException("Attempting to modify table %s but another transaction has %s this table",
198
+ table_name, table_modification);
199
+ }
182
200
  info->version_number = commit_id;
183
201
  break;
184
202
  }
@@ -126,11 +126,11 @@ void DuckTransaction::PushAppend(DataTable &table, idx_t start_row, idx_t row_co
126
126
  append_info->count = row_count;
127
127
  }
128
128
 
129
- UndoBufferReference DuckTransaction::CreateUpdateInfo(idx_t type_size, idx_t entries) {
129
+ UndoBufferReference DuckTransaction::CreateUpdateInfo(idx_t type_size, DataTable &data_table, idx_t entries) {
130
130
  idx_t alloc_size = UpdateInfo::GetAllocSize(type_size);
131
131
  auto undo_entry = undo_buffer.CreateEntry(UndoFlags::UPDATE_TUPLE, alloc_size);
132
132
  auto &update_info = UpdateInfo::Get(undo_entry);
133
- UpdateInfo::Initialize(update_info, transaction_id);
133
+ UpdateInfo::Initialize(update_info, data_table, transaction_id);
134
134
  return undo_entry;
135
135
  }
136
136
 
@@ -246,14 +246,6 @@ ErrorData DuckTransaction::Commit(AttachedDatabase &db, transaction_t new_commit
246
246
  // no need to flush anything if we made no changes
247
247
  return ErrorData();
248
248
  }
249
- for (auto &entry : modified_tables) {
250
- auto &tbl = entry.first.get();
251
- if (!tbl.IsMainTable()) {
252
- return ErrorData(
253
- TransactionException("Attempting to modify table %s but another transaction has %s this table",
254
- tbl.GetTableName(), tbl.TableModification()));
255
- }
256
- }
257
249
  D_ASSERT(db.IsSystem() || db.IsTemporary() || !IsReadOnly());
258
250
 
259
251
  UndoBuffer::IteratorState iterator_state;
@@ -27,10 +27,10 @@ WALWriteState::WALWriteState(DuckTransaction &transaction_p, WriteAheadLog &log,
27
27
  : transaction(transaction_p), log(log), commit_state(commit_state), current_table_info(nullptr) {
28
28
  }
29
29
 
30
- void WALWriteState::SwitchTable(DataTableInfo *table_info, UndoFlags new_op) {
31
- if (current_table_info != table_info) {
30
+ void WALWriteState::SwitchTable(DataTableInfo &table_info, UndoFlags new_op) {
31
+ if (current_table_info != &table_info) {
32
32
  // write the current table to the log
33
- log.WriteSetTable(table_info->GetSchemaName(), table_info->GetTableName());
33
+ log.WriteSetTable(table_info.GetSchemaName(), table_info.GetTableName());
34
34
  current_table_info = table_info;
35
35
  }
36
36
  }
@@ -171,7 +171,7 @@ void WALWriteState::WriteCatalogEntry(CatalogEntry &entry, data_ptr_t dataptr) {
171
171
 
172
172
  void WALWriteState::WriteDelete(DeleteInfo &info) {
173
173
  // switch to the current table, if necessary
174
- SwitchTable(info.table->GetDataTableInfo().get(), UndoFlags::DELETE_TUPLE);
174
+ SwitchTable(*info.table->GetDataTableInfo(), UndoFlags::DELETE_TUPLE);
175
175
 
176
176
  if (!delete_chunk) {
177
177
  delete_chunk = make_uniq<DataChunk>();
@@ -198,7 +198,7 @@ void WALWriteState::WriteUpdate(UpdateInfo &info) {
198
198
  auto &column_data = info.segment->column_data;
199
199
  auto &table_info = column_data.GetTableInfo();
200
200
 
201
- SwitchTable(&table_info, UndoFlags::UPDATE_TUPLE);
201
+ SwitchTable(table_info, UndoFlags::UPDATE_TUPLE);
202
202
 
203
203
  // initialize the update chunk
204
204
  vector<LogicalType> update_types;
@@ -7077,7 +7077,12 @@ inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) {
7077
7077
  }
7078
7078
 
7079
7079
  auto location = res.get_header_value("location");
7080
- if (location.empty()) { return false; }
7080
+ if (location.empty()) {
7081
+ // s3 requests will not return a location header, and instead a
7082
+ // X-Amx-Region-Bucket header. Return true so all response headers
7083
+ // are returned to the httpfs/calling extension
7084
+ return true;
7085
+ }
7081
7086
 
7082
7087
  const Regex re(
7083
7088
  R"((?:(https?):)?(?://(?:\[([\d:]+)\]|([^:/?#]+))(?::(\d+))?)?([^?#]*)(\?[^#]*)?(?:#.*)?)");
@@ -1,3 +1,5 @@
1
+ #include "src/function/table/system/duckdb_connection_count.cpp"
2
+
1
3
  #include "src/function/table/system/duckdb_approx_database_count.cpp"
2
4
 
3
5
  #include "src/function/table/system/duckdb_columns.cpp"