duckdb 0.7.2-dev2320.0 → 0.7.2-dev2410.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 (200) hide show
  1. package/package.json +1 -1
  2. package/src/data_chunk.cpp +1 -1
  3. package/src/duckdb/extension/icu/icu-extension.cpp +2 -2
  4. package/src/duckdb/extension/icu/icu-makedate.cpp +52 -0
  5. package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
  6. package/src/duckdb/extension/icu/third_party/icu/i18n/calendar.cpp +4 -0
  7. package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.cpp +28 -28
  8. package/src/duckdb/extension/icu/third_party/icu/i18n/dangical.h +4 -4
  9. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  10. package/src/duckdb/extension/json/json_functions/json_create.cpp +1 -1
  11. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  12. package/src/duckdb/extension/json/json_functions.cpp +2 -2
  13. package/src/duckdb/extension/json/json_serializer.cpp +1 -1
  14. package/src/duckdb/extension/parquet/column_reader.cpp +1 -1
  15. package/src/duckdb/extension/parquet/column_writer.cpp +3 -3
  16. package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +2 -2
  17. package/src/duckdb/src/common/arrow/arrow_appender.cpp +2 -2
  18. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  19. package/src/duckdb/src/common/file_buffer.cpp +8 -0
  20. package/src/duckdb/src/common/operator/cast_operators.cpp +24 -25
  21. package/src/duckdb/src/common/radix_partitioning.cpp +34 -0
  22. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +2 -2
  23. package/src/duckdb/src/common/row_operations/row_scatter.cpp +1 -1
  24. package/src/duckdb/src/common/sort/partition_state.cpp +44 -124
  25. package/src/duckdb/src/common/sort/sorted_block.cpp +1 -1
  26. package/src/duckdb/src/common/types/bit.cpp +18 -18
  27. package/src/duckdb/src/common/types/blob.cpp +7 -7
  28. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
  29. package/src/duckdb/src/common/types/column/column_data_collection.cpp +1 -1
  30. package/src/duckdb/src/common/types/hash.cpp +1 -1
  31. package/src/duckdb/src/common/types/hyperloglog.cpp +1 -1
  32. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  33. package/src/duckdb/src/common/types/string_heap.cpp +2 -2
  34. package/src/duckdb/src/common/types/string_type.cpp +2 -2
  35. package/src/duckdb/src/common/types/timestamp.cpp +1 -1
  36. package/src/duckdb/src/common/types/vector.cpp +7 -7
  37. package/src/duckdb/src/execution/index/art/art_key.cpp +2 -2
  38. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +144 -31
  39. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +698 -0
  40. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +1 -1
  41. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  42. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +7 -1
  43. package/src/duckdb/src/function/aggregate/distributive/arg_min_max.cpp +2 -2
  44. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +2 -2
  45. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +2 -2
  46. package/src/duckdb/src/function/aggregate/distributive/first.cpp +2 -2
  47. package/src/duckdb/src/function/aggregate/distributive/kurtosis.cpp +3 -2
  48. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -2
  49. package/src/duckdb/src/function/aggregate/distributive/skew.cpp +5 -1
  50. package/src/duckdb/src/function/aggregate/distributive/string_agg.cpp +1 -1
  51. package/src/duckdb/src/function/cast/list_casts.cpp +1 -1
  52. package/src/duckdb/src/function/cast/struct_cast.cpp +1 -1
  53. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -3
  54. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +1 -1
  55. package/src/duckdb/src/function/scalar/blob/encode.cpp +1 -1
  56. package/src/duckdb/src/function/scalar/date/strftime.cpp +3 -3
  57. package/src/duckdb/src/function/scalar/generic/current_setting.cpp +1 -1
  58. package/src/duckdb/src/function/scalar/list/list_sort.cpp +30 -56
  59. package/src/duckdb/src/function/scalar/string/ascii.cpp +1 -1
  60. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
  61. package/src/duckdb/src/function/scalar/string/concat.cpp +6 -6
  62. package/src/duckdb/src/function/scalar/string/contains.cpp +2 -2
  63. package/src/duckdb/src/function/scalar/string/damerau_levenshtein.cpp +2 -2
  64. package/src/duckdb/src/function/scalar/string/hex.cpp +4 -4
  65. package/src/duckdb/src/function/scalar/string/instr.cpp +1 -1
  66. package/src/duckdb/src/function/scalar/string/jaccard.cpp +1 -1
  67. package/src/duckdb/src/function/scalar/string/jaro_winkler.cpp +5 -5
  68. package/src/duckdb/src/function/scalar/string/length.cpp +1 -1
  69. package/src/duckdb/src/function/scalar/string/levenshtein.cpp +2 -2
  70. package/src/duckdb/src/function/scalar/string/like.cpp +10 -11
  71. package/src/duckdb/src/function/scalar/string/mismatches.cpp +2 -2
  72. package/src/duckdb/src/function/scalar/string/nfc_normalize.cpp +1 -1
  73. package/src/duckdb/src/function/scalar/string/pad.cpp +3 -3
  74. package/src/duckdb/src/function/scalar/string/prefix.cpp +2 -2
  75. package/src/duckdb/src/function/scalar/string/printf.cpp +1 -1
  76. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  77. package/src/duckdb/src/function/scalar/string/repeat.cpp +1 -1
  78. package/src/duckdb/src/function/scalar/string/replace.cpp +3 -3
  79. package/src/duckdb/src/function/scalar/string/reverse.cpp +1 -1
  80. package/src/duckdb/src/function/scalar/string/starts_with.cpp +2 -2
  81. package/src/duckdb/src/function/scalar/string/string_split.cpp +3 -3
  82. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +2 -2
  83. package/src/duckdb/src/function/scalar/string/substring.cpp +3 -3
  84. package/src/duckdb/src/function/scalar/string/suffix.cpp +2 -2
  85. package/src/duckdb/src/function/scalar/string/translate.cpp +3 -3
  86. package/src/duckdb/src/function/scalar/string/trim.cpp +3 -3
  87. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  88. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +5 -7
  89. package/src/duckdb/src/function/scalar/union/union_extract.cpp +1 -1
  90. package/src/duckdb/src/function/table/copy_csv.cpp +1 -1
  91. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +2 -2
  92. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  93. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +1 -1
  94. package/src/duckdb/src/include/duckdb/common/enums/debug_initialize.hpp +17 -0
  95. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +8 -0
  96. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  97. package/src/duckdb/src/include/duckdb/common/file_buffer.hpp +3 -0
  98. package/src/duckdb/src/include/duckdb/common/radix.hpp +1 -1
  99. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +3 -0
  100. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +11 -60
  101. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +8 -6
  102. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  103. package/src/duckdb/src/include/duckdb/execution/operator/join/outer_join_marker.hpp +6 -1
  104. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +93 -0
  105. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +1 -1
  106. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +17 -0
  107. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +1 -1
  108. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -2
  109. package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +3 -0
  110. package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -0
  111. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  112. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  113. package/src/duckdb/src/include/duckdb/main/config.hpp +7 -2
  114. package/src/duckdb/src/include/duckdb/main/settings.hpp +13 -3
  115. package/src/duckdb/src/include/duckdb/optimizer/cse_optimizer.hpp +1 -1
  116. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +4 -2
  117. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
  118. package/src/duckdb/src/include/duckdb/planner/binder.hpp +1 -1
  119. package/src/duckdb/src/include/duckdb/planner/expression_binder/aggregate_binder.hpp +1 -1
  120. package/src/duckdb/src/include/duckdb/planner/expression_binder/alter_binder.hpp +1 -1
  121. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +4 -3
  122. package/src/duckdb/src/include/duckdb/planner/expression_binder/check_binder.hpp +1 -1
  123. package/src/duckdb/src/include/duckdb/planner/expression_binder/constant_binder.hpp +1 -1
  124. package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +1 -1
  125. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  126. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +1 -1
  127. package/src/duckdb/src/include/duckdb/planner/expression_binder/insert_binder.hpp +1 -1
  128. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +2 -2
  129. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  130. package/src/duckdb/src/include/duckdb/planner/expression_binder/relation_binder.hpp +1 -1
  131. package/src/duckdb/src/include/duckdb/planner/expression_binder/returning_binder.hpp +1 -1
  132. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +1 -1
  133. package/src/duckdb/src/include/duckdb/planner/expression_binder/update_binder.hpp +1 -1
  134. package/src/duckdb/src/include/duckdb/planner/expression_binder/where_binder.hpp +2 -2
  135. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +12 -9
  136. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +1 -0
  137. package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +3 -0
  138. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +2 -1
  139. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +11 -5
  140. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  141. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  142. package/src/duckdb/src/main/capi/result-c.cpp +2 -2
  143. package/src/duckdb/src/main/config.cpp +26 -0
  144. package/src/duckdb/src/main/settings/settings.cpp +31 -8
  145. package/src/duckdb/src/optimizer/cse_optimizer.cpp +9 -8
  146. package/src/duckdb/src/parser/expression/subquery_expression.cpp +1 -1
  147. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -0
  148. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +33 -29
  149. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +8 -10
  150. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +1 -1
  151. package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +2 -2
  152. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +1 -1
  153. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +8 -7
  154. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +2 -2
  155. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +6 -6
  156. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +2 -2
  157. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +1 -1
  158. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +6 -14
  159. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +2 -5
  160. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +1 -1
  161. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +8 -8
  162. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +5 -5
  163. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +2 -2
  164. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  165. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -2
  166. package/src/duckdb/src/planner/binder/tableref/plan_expressionlistref.cpp +1 -1
  167. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +4 -4
  168. package/src/duckdb/src/planner/expression.cpp +2 -1
  169. package/src/duckdb/src/planner/expression_binder/aggregate_binder.cpp +2 -2
  170. package/src/duckdb/src/planner/expression_binder/alter_binder.cpp +2 -2
  171. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +4 -4
  172. package/src/duckdb/src/planner/expression_binder/check_binder.cpp +4 -4
  173. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +1 -1
  174. package/src/duckdb/src/planner/expression_binder/constant_binder.cpp +3 -3
  175. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
  176. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +4 -4
  177. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +2 -2
  178. package/src/duckdb/src/planner/expression_binder/insert_binder.cpp +2 -2
  179. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
  180. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +4 -4
  181. package/src/duckdb/src/planner/expression_binder/relation_binder.cpp +2 -2
  182. package/src/duckdb/src/planner/expression_binder/returning_binder.cpp +2 -2
  183. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +3 -3
  184. package/src/duckdb/src/planner/expression_binder/update_binder.cpp +2 -2
  185. package/src/duckdb/src/planner/expression_binder/where_binder.cpp +4 -4
  186. package/src/duckdb/src/planner/expression_binder.cpp +12 -12
  187. package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -2
  188. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  189. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -1
  190. package/src/duckdb/src/storage/compression/fsst.cpp +3 -3
  191. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
  192. package/src/duckdb/src/storage/meta_block_writer.cpp +4 -0
  193. package/src/duckdb/src/storage/partial_block_manager.cpp +11 -4
  194. package/src/duckdb/src/storage/single_file_block_manager.cpp +16 -9
  195. package/src/duckdb/src/storage/standard_buffer_manager.cpp +5 -2
  196. package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
  197. package/src/duckdb/src/storage/storage_manager.cpp +7 -2
  198. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +21 -1
  199. package/src/duckdb/ub_src_execution_operator_join.cpp +2 -0
  200. package/src/statement.cpp +3 -3
@@ -68,10 +68,12 @@ public:
68
68
  return GetSize() <= INLINE_LENGTH;
69
69
  }
70
70
 
71
- //! this is unsafe since the string will not be terminated at the end
72
- const char *GetDataUnsafe() const {
71
+ const char *GetData() const {
73
72
  return IsInlined() ? (const char *)value.inlined.inlined : value.pointer.ptr;
74
73
  }
74
+ const char *GetDataUnsafe() const {
75
+ return GetData();
76
+ }
75
77
 
76
78
  char *GetDataWriteable() const {
77
79
  return IsInlined() ? (char *)value.inlined.inlined : value.pointer.ptr;
@@ -86,7 +88,7 @@ public:
86
88
  }
87
89
 
88
90
  string GetString() const {
89
- return string(GetDataUnsafe(), GetSize());
91
+ return string(GetData(), GetSize());
90
92
  }
91
93
 
92
94
  explicit operator string() const {
@@ -108,7 +110,7 @@ public:
108
110
  } else {
109
111
  // copy the data into the prefix
110
112
  #ifndef DUCKDB_DEBUG_NO_INLINE
111
- auto dataptr = (char *)GetDataUnsafe();
113
+ auto dataptr = (char *)GetData();
112
114
  memcpy(value.pointer.prefix, dataptr, PREFIX_LENGTH);
113
115
  #else
114
116
  memset(value.pointer.prefix, 0, PREFIX_BYTES);
@@ -124,7 +126,7 @@ public:
124
126
  #ifdef DUCKDB_DEBUG_NO_INLINE
125
127
  if (a.GetSize() != b.GetSize())
126
128
  return false;
127
- return (memcmp(a.GetDataUnsafe(), b.GetDataUnsafe(), a.GetSize()) == 0);
129
+ return (memcmp(a.GetData(), b.GetData(), a.GetSize()) == 0);
128
130
  #endif
129
131
  uint64_t A = Load<uint64_t>((const_data_ptr_t)&a);
130
132
  uint64_t B = Load<uint64_t>((const_data_ptr_t)&b);
@@ -177,7 +179,7 @@ public:
177
179
  if (A != B)
178
180
  return bswap(A) > bswap(B);
179
181
  #endif
180
- auto memcmp_res = memcmp(left.GetDataUnsafe(), right.GetDataUnsafe(), min_length);
182
+ auto memcmp_res = memcmp(left.GetData(), right.GetData(), min_length);
181
183
  return memcmp_res > 0 || (memcmp_res == 0 && left_length > right_length);
182
184
  }
183
185
  };
@@ -143,7 +143,7 @@ public:
143
143
  return heap.AddString(data);
144
144
  }
145
145
  string_t AddBlob(string_t data) {
146
- return heap.AddBlob(data.GetDataUnsafe(), data.GetSize());
146
+ return heap.AddBlob(data.GetData(), data.GetSize());
147
147
  }
148
148
  string_t EmptyString(idx_t len) {
149
149
  return heap.EmptyString(len);
@@ -29,7 +29,7 @@ struct OuterJoinLocalScanState {
29
29
 
30
30
  class OuterJoinMarker {
31
31
  public:
32
- OuterJoinMarker(bool enabled);
32
+ explicit OuterJoinMarker(bool enabled);
33
33
 
34
34
  bool Enabled() {
35
35
  return enabled;
@@ -60,6 +60,11 @@ public:
60
60
  //! Perform the scan
61
61
  void Scan(OuterJoinGlobalScanState &gstate, OuterJoinLocalScanState &lstate, DataChunk &result);
62
62
 
63
+ //! Read-only matches vector
64
+ const bool *GetMatches() const {
65
+ return found_match.get();
66
+ }
67
+
63
68
  private:
64
69
  bool enabled;
65
70
  unique_ptr<bool[]> found_match;
@@ -0,0 +1,93 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/execution/operator/join/physical_asof_join.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/execution/operator/join/physical_comparison_join.hpp"
12
+ #include "duckdb/planner/bound_result_modifier.hpp"
13
+
14
+ namespace duckdb {
15
+
16
+ //! PhysicalAsOfJoin represents a piecewise merge loop join between
17
+ //! two tables
18
+ class PhysicalAsOfJoin : public PhysicalComparisonJoin {
19
+ public:
20
+ static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::ASOF_JOIN;
21
+
22
+ public:
23
+ PhysicalAsOfJoin(LogicalComparisonJoin &op, unique_ptr<PhysicalOperator> left, unique_ptr<PhysicalOperator> right);
24
+
25
+ vector<LogicalType> join_key_types;
26
+ vector<column_t> null_sensitive;
27
+
28
+ // Equalities
29
+ vector<unique_ptr<Expression>> lhs_partitions;
30
+ vector<unique_ptr<Expression>> rhs_partitions;
31
+
32
+ // Inequality Only
33
+ vector<BoundOrderByNode> lhs_orders;
34
+ vector<BoundOrderByNode> rhs_orders;
35
+
36
+ // Projection mappings
37
+ vector<column_t> right_projection_map;
38
+
39
+ public:
40
+ // Operator Interface
41
+ unique_ptr<GlobalOperatorState> GetGlobalOperatorState(ClientContext &context) const override;
42
+ unique_ptr<OperatorState> GetOperatorState(ExecutionContext &context) const override;
43
+
44
+ bool ParallelOperator() const override {
45
+ return true;
46
+ }
47
+
48
+ protected:
49
+ // CachingOperator Interface
50
+ OperatorResultType ExecuteInternal(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
51
+ GlobalOperatorState &gstate, OperatorState &state) const override;
52
+
53
+ public:
54
+ // Source interface
55
+ unique_ptr<LocalSourceState> GetLocalSourceState(ExecutionContext &context,
56
+ GlobalSourceState &gstate) const override;
57
+ unique_ptr<GlobalSourceState> GetGlobalSourceState(ClientContext &context) const override;
58
+ void GetData(ExecutionContext &context, DataChunk &chunk, GlobalSourceState &gstate,
59
+ LocalSourceState &lstate) const override;
60
+
61
+ bool IsSource() const override {
62
+ return IsRightOuterJoin(join_type);
63
+ }
64
+ bool ParallelSource() const override {
65
+ return true;
66
+ }
67
+
68
+ public:
69
+ // Sink Interface
70
+ unique_ptr<GlobalSinkState> GetGlobalSinkState(ClientContext &context) const override;
71
+ unique_ptr<LocalSinkState> GetLocalSinkState(ExecutionContext &context) const override;
72
+ SinkResultType Sink(ExecutionContext &context, GlobalSinkState &state, LocalSinkState &lstate,
73
+ DataChunk &input) const override;
74
+ void Combine(ExecutionContext &context, GlobalSinkState &gstate, LocalSinkState &lstate) const override;
75
+ SinkFinalizeType Finalize(Pipeline &pipeline, Event &event, ClientContext &context,
76
+ GlobalSinkState &gstate) const override;
77
+
78
+ bool IsSink() const override {
79
+ return true;
80
+ }
81
+ bool ParallelSink() const override {
82
+ return true;
83
+ }
84
+
85
+ private:
86
+ // resolve joins that output max N elements (SEMI, ANTI, MARK)
87
+ void ResolveSimpleJoin(ExecutionContext &context, DataChunk &input, DataChunk &chunk, OperatorState &state) const;
88
+ // resolve joins that can potentially output N*M elements (INNER, LEFT, FULL)
89
+ OperatorResultType ResolveComplexJoin(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
90
+ OperatorState &state) const;
91
+ };
92
+
93
+ } // namespace duckdb
@@ -199,7 +199,7 @@ public:
199
199
  ~CachingOperatorState() override {
200
200
  }
201
201
 
202
- virtual void Finalize(const PhysicalOperator &op, ExecutionContext &context) override {
202
+ void Finalize(const PhysicalOperator &op, ExecutionContext &context) override {
203
203
  }
204
204
 
205
205
  unique_ptr<DataChunk> cached_chunk;
@@ -44,6 +44,23 @@ public:
44
44
  unordered_map<string, unique_ptr<ParsedExpression>> &defaults);
45
45
 
46
46
  virtual string ToSQL(const string &schema, const string &name) const;
47
+
48
+ public:
49
+ template <class TARGET>
50
+ TARGET &Cast() {
51
+ if (type != TARGET::TYPE) {
52
+ throw InternalException("Failed to cast macro to type - macro type mismatch");
53
+ }
54
+ return (TARGET &)*this;
55
+ }
56
+
57
+ template <class TARGET>
58
+ const TARGET &Cast() const {
59
+ if (type != TARGET::TYPE) {
60
+ throw InternalException("Failed to cast macro to type - macro type mismatch");
61
+ }
62
+ return (const TARGET &)*this;
63
+ }
47
64
  };
48
65
 
49
66
  } // namespace duckdb
@@ -22,7 +22,7 @@ void ParseRegexOptions(const string &options, duckdb_re2::RE2::Options &result,
22
22
  void ParseRegexOptions(ClientContext &context, Expression &expr, RE2::Options &target, bool *global_replace = nullptr);
23
23
 
24
24
  inline duckdb_re2::StringPiece CreateStringPiece(const string_t &input) {
25
- return duckdb_re2::StringPiece(input.GetDataUnsafe(), input.GetSize());
25
+ return duckdb_re2::StringPiece(input.GetData(), input.GetSize());
26
26
  }
27
27
 
28
28
  inline string_t Extract(const string_t &input, Vector &result, const RE2 &re, const duckdb_re2::StringPiece &rewrite) {
@@ -58,7 +58,7 @@ struct LengthFun {
58
58
 
59
59
  template <class TA, class TR>
60
60
  static inline TR Length(TA input) {
61
- auto input_data = input.GetDataUnsafe();
61
+ auto input_data = input.GetData();
62
62
  auto input_length = input.GetSize();
63
63
  TR length = 0;
64
64
  for (idx_t i = 0; i < input_length; i++) {
@@ -69,7 +69,7 @@ struct LengthFun {
69
69
 
70
70
  template <class TA, class TR>
71
71
  static inline TR GraphemeCount(TA input) {
72
- auto input_data = input.GetDataUnsafe();
72
+ auto input_data = input.GetData();
73
73
  auto input_length = input.GetSize();
74
74
  for (idx_t i = 0; i < input_length; i++) {
75
75
  if (input_data[i] & 0x80) {
@@ -19,6 +19,9 @@
19
19
  namespace duckdb {
20
20
 
21
21
  class ScalarMacroFunction : public MacroFunction {
22
+ public:
23
+ static constexpr const MacroType TYPE = MacroType::SCALAR_MACRO;
24
+
22
25
  public:
23
26
  ScalarMacroFunction(unique_ptr<ParsedExpression> expression);
24
27
 
@@ -19,6 +19,9 @@
19
19
  namespace duckdb {
20
20
 
21
21
  class TableMacroFunction : public MacroFunction {
22
+ public:
23
+ static constexpr const MacroType TYPE = MacroType::TABLE_MACRO;
24
+
22
25
  public:
23
26
  explicit TableMacroFunction(unique_ptr<QueryNode> query_node);
24
27
  TableMacroFunction(void);
@@ -80,7 +80,7 @@ struct ToCStringCastWrapper {
80
80
  Vector result_vector(LogicalType::VARCHAR, nullptr);
81
81
  auto result_string = OP::template Operation<SOURCE_TYPE>(input, result_vector);
82
82
  auto result_size = result_string.GetSize();
83
- auto result_data = result_string.GetDataUnsafe();
83
+ auto result_data = result_string.GetData();
84
84
 
85
85
  char *allocated_data = (char *)duckdb_malloc(result_size + 1);
86
86
  memcpy(allocated_data, result_data, result_size);
@@ -71,6 +71,8 @@ struct ClientConfig {
71
71
  bool force_external = false;
72
72
  //! Force disable cross product generation when hyper graph isn't connected, used for testing
73
73
  bool force_no_cross_product = false;
74
+ //! Force use of IEJoin to implement AsOfJoin, used for testing
75
+ bool force_asof_iejoin = false;
74
76
  //! If this context should also try to use the available replacement scans
75
77
  //! True by default
76
78
  bool use_replacement_scans = true;
@@ -106,8 +106,8 @@ struct DBConfigOptions {
106
106
  string collation = string();
107
107
  //! The order type used when none is specified (default: ASC)
108
108
  OrderType default_order_type = OrderType::ASCENDING;
109
- //! Null ordering used when none is specified (default: NULLS FIRST)
110
- OrderByNullType default_null_order = OrderByNullType::NULLS_FIRST;
109
+ //! Null ordering used when none is specified (default: NULLS LAST)
110
+ DefaultOrderByNullType default_null_order = DefaultOrderByNullType::NULLS_LAST;
111
111
  //! enable COPY and related commands
112
112
  bool enable_external_access = true;
113
113
  //! Whether or not object cache is used
@@ -145,6 +145,8 @@ struct DBConfigOptions {
145
145
  bool enable_fsst_vectors = false;
146
146
  //! Start transactions immediately in all attached databases - instead of lazily when a database is referenced
147
147
  bool immediate_transaction_mode = false;
148
+ //! Debug setting - how to initialize blocks in the storage layer when allocating
149
+ DebugInitialize debug_initialize = DebugInitialize::NO_INITIALIZE;
148
150
  //! The set of unrecognized (other) options
149
151
  unordered_map<string, Value> unrecognized_options;
150
152
 
@@ -226,6 +228,9 @@ public:
226
228
  void SetDefaultMaxThreads();
227
229
  void SetDefaultMaxMemory();
228
230
 
231
+ OrderType ResolveOrder(OrderType order_type) const;
232
+ OrderByNullType ResolveNullOrder(OrderType order_type, OrderByNullType null_type) const;
233
+
229
234
  private:
230
235
  unique_ptr<CompressionFunctionSet> compression_functions;
231
236
  unique_ptr<CastFunctionSet> cast_functions;
@@ -66,9 +66,19 @@ struct DebugForceNoCrossProduct {
66
66
  };
67
67
 
68
68
  struct OrderedAggregateThreshold {
69
- static constexpr const char *Name = "ordered_aggregate_threshold";
70
- static constexpr const char *Description = "the number of rows to accumulate before sorting, used for tuning";
71
- static constexpr const LogicalTypeId InputType = LogicalTypeId::UBIGINT;
69
+ static constexpr const char *Name = "ordered_aggregate_threshold"; // NOLINT
70
+ static constexpr const char *Description = // NOLINT
71
+ "the number of rows to accumulate before sorting, used for tuning";
72
+ static constexpr const LogicalTypeId InputType = LogicalTypeId::UBIGINT; // NOLINT
73
+ static void SetLocal(ClientContext &context, const Value &parameter);
74
+ static void ResetLocal(ClientContext &context);
75
+ static Value GetSetting(ClientContext &context);
76
+ };
77
+
78
+ struct DebugAsOfIEJoin {
79
+ static constexpr const char *Name = "debug_asof_iejoin"; // NOLINT
80
+ static constexpr const char *Description = "DEBUG SETTING: force use of IEJoin to implement AsOf joins"; // NOLINT
81
+ static constexpr const LogicalTypeId InputType = LogicalTypeId::BOOLEAN; // NOLINT
72
82
  static void SetLocal(ClientContext &context, const Value &parameter);
73
83
  static void ResetLocal(ClientContext &context);
74
84
  static Value GetSetting(ClientContext &context);
@@ -30,7 +30,7 @@ private:
30
30
  //! First iteration: count how many times each expression occurs
31
31
  void CountExpressions(Expression &expr, CSEReplacementState &state);
32
32
  //! Second iteration: perform the actual replacement of the duplicate expressions with common subexpressions nodes
33
- void PerformCSEReplacement(unique_ptr<Expression> *expr, CSEReplacementState &state);
33
+ void PerformCSEReplacement(unique_ptr<Expression> &expr, CSEReplacementState &state);
34
34
 
35
35
  //! Main method to extract common subexpressions
36
36
  void ExtractCommonSubExpresions(LogicalOperator &op);
@@ -87,8 +87,10 @@ public:
87
87
  // Start with function call
88
88
  string result = schema.empty() ? function_name : schema + "." + function_name;
89
89
  result += "(";
90
- result += StringUtil::Join(entry.children, entry.children.size(), ", ",
91
- [](const unique_ptr<BASE> &child) { return child->ToString(); });
90
+ if (entry.children.size()) {
91
+ result += StringUtil::Join(entry.children, entry.children.size(), ", ",
92
+ [](const unique_ptr<BASE> &child) { return child->ToString(); });
93
+ }
92
94
  // Lead/Lag extra arguments
93
95
  if (entry.offset_expr.get()) {
94
96
  result += ", ";
@@ -184,6 +184,7 @@ private:
184
184
  //! Transform a Postgres duckdb_libpgquery::T_PGSelectStmt node into a QueryNode
185
185
  unique_ptr<QueryNode> TransformSelectNode(duckdb_libpgquery::PGSelectStmt *node);
186
186
  unique_ptr<QueryNode> TransformSelectInternal(duckdb_libpgquery::PGSelectStmt *node);
187
+ void TransformModifiers(duckdb_libpgquery::PGSelectStmt &stmt, QueryNode &node);
187
188
 
188
189
  //===--------------------------------------------------------------------===//
189
190
  // Expression Transform
@@ -321,7 +321,7 @@ private:
321
321
 
322
322
  unique_ptr<LogicalOperator> PlanFilter(unique_ptr<Expression> condition, unique_ptr<LogicalOperator> root);
323
323
 
324
- void PlanSubqueries(unique_ptr<Expression> *expr, unique_ptr<LogicalOperator> *root);
324
+ void PlanSubqueries(unique_ptr<Expression> &expr, unique_ptr<LogicalOperator> &root);
325
325
  unique_ptr<Expression> PlanSubquery(BoundSubqueryExpression &expr, unique_ptr<LogicalOperator> &root);
326
326
  unique_ptr<LogicalOperator> PlanLateralJoin(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
327
327
  vector<CorrelatedColumnInfo> &correlated_columns,
@@ -21,7 +21,7 @@ public:
21
21
  AggregateBinder(Binder &binder, ClientContext &context);
22
22
 
23
23
  protected:
24
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
24
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
25
25
  bool root_expression = false) override;
26
26
 
27
27
  string UnsupportedAggregateMessage() override;
@@ -24,7 +24,7 @@ public:
24
24
  vector<LogicalIndex> &bound_columns;
25
25
 
26
26
  protected:
27
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
27
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
28
28
  bool root_expression = false) override;
29
29
 
30
30
  BindResult BindColumn(ColumnRefExpression &expr);
@@ -40,10 +40,11 @@ public:
40
40
  }
41
41
 
42
42
  protected:
43
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
43
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
44
44
  bool root_expression = false) override;
45
45
 
46
- BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth) override;
46
+ BindResult BindAggregate(FunctionExpression &expr, optional_ptr<AggregateFunctionCatalogEntry> function,
47
+ idx_t depth) override;
47
48
 
48
49
  bool inside_window;
49
50
  bool bound_aggregate = false;
@@ -53,7 +54,7 @@ protected:
53
54
  case_insensitive_map_t<idx_t> alias_map;
54
55
 
55
56
  protected:
56
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth);
57
+ BindResult BindColumnRef(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth);
57
58
  BindResult BindGroupingFunction(OperatorExpression &op, idx_t depth) override;
58
59
  BindResult BindWindow(WindowExpression &expr, idx_t depth);
59
60
 
@@ -25,7 +25,7 @@ public:
25
25
  physical_index_set_t &bound_columns;
26
26
 
27
27
  protected:
28
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
28
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
29
29
  bool root_expression = false) override;
30
30
 
31
31
  BindResult BindCheckColumn(ColumnRefExpression &expr);
@@ -21,7 +21,7 @@ public:
21
21
  string clause;
22
22
 
23
23
  protected:
24
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr, idx_t depth, bool root_expression = false) override;
24
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr, idx_t depth, bool root_expression = false) override;
25
25
 
26
26
  string UnsupportedAggregateMessage() override;
27
27
  };
@@ -27,7 +27,7 @@ public:
27
27
  idx_t bind_index;
28
28
 
29
29
  protected:
30
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression) override;
30
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth, bool root_expression) override;
31
31
 
32
32
  string UnsupportedAggregateMessage() override;
33
33
 
@@ -21,11 +21,11 @@ public:
21
21
  case_insensitive_map_t<idx_t> &alias_map, AggregateHandling aggregate_handling);
22
22
 
23
23
  protected:
24
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
24
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
25
25
  bool root_expression = false) override;
26
26
 
27
27
  private:
28
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression);
28
+ BindResult BindColumnRef(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth, bool root_expression);
29
29
 
30
30
  ColumnAliasBinder column_alias_binder;
31
31
  AggregateHandling aggregate_handling;
@@ -23,7 +23,7 @@ public:
23
23
  optional_ptr<CreateIndexInfo> info = nullptr);
24
24
 
25
25
  protected:
26
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
26
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
27
27
  bool root_expression = false) override;
28
28
  string UnsupportedAggregateMessage() override;
29
29
 
@@ -18,7 +18,7 @@ public:
18
18
  InsertBinder(Binder &binder, ClientContext &context);
19
19
 
20
20
  protected:
21
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
21
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
22
22
  bool root_expression = false) override;
23
23
 
24
24
  string UnsupportedAggregateMessage() override;
@@ -29,13 +29,13 @@ public:
29
29
  static void ReduceExpressionDepth(LogicalOperator &op, const vector<CorrelatedColumnInfo> &info);
30
30
 
31
31
  protected:
32
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
32
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
33
33
  bool root_expression = false) override;
34
34
 
35
35
  string UnsupportedAggregateMessage() override;
36
36
 
37
37
  private:
38
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression);
38
+ BindResult BindColumnRef(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth, bool root_expression);
39
39
  void ExtractCorrelatedColumns(Expression &expr);
40
40
 
41
41
  private:
@@ -20,11 +20,11 @@ public:
20
20
  case_insensitive_map_t<idx_t> &alias_map);
21
21
 
22
22
  protected:
23
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
23
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
24
24
  bool root_expression = false) override;
25
25
 
26
26
  private:
27
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression);
27
+ BindResult BindColumnRef(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth, bool root_expression);
28
28
 
29
29
  ColumnAliasBinder column_alias_binder;
30
30
  };
@@ -20,7 +20,7 @@ public:
20
20
  string op;
21
21
 
22
22
  protected:
23
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
23
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
24
24
  bool root_expression = false) override;
25
25
 
26
26
  string UnsupportedAggregateMessage() override;
@@ -18,7 +18,7 @@ public:
18
18
  ReturningBinder(Binder &binder, ClientContext &context);
19
19
 
20
20
  protected:
21
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
21
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
22
22
  bool root_expression = false) override;
23
23
  };
24
24
 
@@ -19,7 +19,7 @@ public:
19
19
 
20
20
  protected:
21
21
  BindResult BindColumnReference(ColumnRefExpression &expr, idx_t depth, bool root_expression);
22
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr, idx_t depth, bool root_expression = false) override;
22
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr, idx_t depth, bool root_expression = false) override;
23
23
 
24
24
  string UnsupportedAggregateMessage() override;
25
25
  };
@@ -18,7 +18,7 @@ public:
18
18
  UpdateBinder(Binder &binder, ClientContext &context);
19
19
 
20
20
  protected:
21
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
21
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
22
22
  bool root_expression = false) override;
23
23
 
24
24
  string UnsupportedAggregateMessage() override;
@@ -20,13 +20,13 @@ public:
20
20
  WhereBinder(Binder &binder, ClientContext &context, optional_ptr<ColumnAliasBinder> column_alias_binder = nullptr);
21
21
 
22
22
  protected:
23
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
23
+ BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
24
24
  bool root_expression = false) override;
25
25
 
26
26
  string UnsupportedAggregateMessage() override;
27
27
 
28
28
  private:
29
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression);
29
+ BindResult BindColumnRef(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth, bool root_expression);
30
30
 
31
31
  optional_ptr<ColumnAliasBinder> column_alias_binder;
32
32
  };
@@ -63,7 +63,7 @@ public:
63
63
  optional_ptr<vector<DummyBinding>> lambda_bindings;
64
64
 
65
65
  public:
66
- unique_ptr<Expression> Bind(unique_ptr<ParsedExpression> &expr, LogicalType *result_type = nullptr,
66
+ unique_ptr<Expression> Bind(unique_ptr<ParsedExpression> &expr, optional_ptr<LogicalType> result_type = nullptr,
67
67
  bool root_expression = true);
68
68
 
69
69
  //! Returns whether or not any columns have been bound by the expression binder
@@ -74,7 +74,7 @@ public:
74
74
  return bound_columns;
75
75
  }
76
76
 
77
- string Bind(unique_ptr<ParsedExpression> *expr, idx_t depth, bool root_expression = false);
77
+ string Bind(unique_ptr<ParsedExpression> &expr, idx_t depth, bool root_expression = false);
78
78
 
79
79
  unique_ptr<ParsedExpression> CreateStructExtract(unique_ptr<ParsedExpression> base, string field_name);
80
80
  unique_ptr<ParsedExpression> CreateStructPack(ColumnRefExpression &colref);
@@ -103,7 +103,7 @@ public:
103
103
 
104
104
  //! Bind the given expresion. Unlike Bind(), this does *not* mute the given ParsedExpression.
105
105
  //! Exposed to be used from sub-binders that aren't subclasses of ExpressionBinder.
106
- virtual BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
106
+ virtual BindResult BindExpression(unique_ptr<ParsedExpression> &expr_ptr, idx_t depth,
107
107
  bool root_expression = false);
108
108
 
109
109
  void ReplaceMacroParametersRecursive(unique_ptr<ParsedExpression> &expr);
@@ -117,7 +117,7 @@ protected:
117
117
  BindResult BindExpression(ComparisonExpression &expr, idx_t depth);
118
118
  BindResult BindExpression(ConjunctionExpression &expr, idx_t depth);
119
119
  BindResult BindExpression(ConstantExpression &expr, idx_t depth);
120
- BindResult BindExpression(FunctionExpression &expr, idx_t depth, unique_ptr<ParsedExpression> *expr_ptr);
120
+ BindResult BindExpression(FunctionExpression &expr, idx_t depth, unique_ptr<ParsedExpression> &expr_ptr);
121
121
  BindResult BindExpression(LambdaExpression &expr, idx_t depth, const bool is_lambda,
122
122
  const LogicalType &list_child_type);
123
123
  BindResult BindExpression(OperatorExpression &expr, idx_t depth);
@@ -134,12 +134,15 @@ protected:
134
134
 
135
135
  protected:
136
136
  virtual BindResult BindGroupingFunction(OperatorExpression &op, idx_t depth);
137
- virtual BindResult BindFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
138
- virtual BindResult BindLambdaFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
139
- virtual BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth);
137
+ virtual BindResult BindFunction(FunctionExpression &expr, optional_ptr<ScalarFunctionCatalogEntry> function,
138
+ idx_t depth);
139
+ virtual BindResult BindLambdaFunction(FunctionExpression &expr, optional_ptr<ScalarFunctionCatalogEntry> function,
140
+ idx_t depth);
141
+ virtual BindResult BindAggregate(FunctionExpression &expr, optional_ptr<AggregateFunctionCatalogEntry> function,
142
+ idx_t depth);
140
143
  virtual BindResult BindUnnest(FunctionExpression &expr, idx_t depth, bool root_expression);
141
- virtual BindResult BindMacro(FunctionExpression &expr, ScalarMacroCatalogEntry *macro, idx_t depth,
142
- unique_ptr<ParsedExpression> *expr_ptr);
144
+ virtual BindResult BindMacro(FunctionExpression &expr, optional_ptr<ScalarMacroCatalogEntry> macro, idx_t depth,
145
+ unique_ptr<ParsedExpression> &expr_ptr);
143
146
 
144
147
  virtual string UnsupportedAggregateMessage();
145
148
  virtual string UnsupportedUnnestMessage();