duckdb 0.7.2-dev16.0 → 0.7.2-dev314.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 (242) hide show
  1. package/binding.gyp +2 -0
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-extension.cpp +2 -0
  4. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  5. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  6. package/src/duckdb/extension/parquet/column_reader.cpp +5 -6
  7. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  8. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  9. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  10. package/src/duckdb/extension/parquet/parquet-extension.cpp +11 -2
  11. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  12. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  13. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  14. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  15. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  16. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  17. package/src/duckdb/src/common/types/bit.cpp +95 -58
  18. package/src/duckdb/src/common/types/value.cpp +149 -53
  19. package/src/duckdb/src/common/types/vector.cpp +13 -10
  20. package/src/duckdb/src/execution/column_binding_resolver.cpp +6 -0
  21. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  22. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +1 -1
  23. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +2 -3
  24. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +32 -6
  25. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +1 -1
  26. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +15 -15
  27. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +18 -12
  28. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  29. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  30. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +254 -0
  31. package/src/duckdb/src/function/aggregate/distributive/count.cpp +2 -4
  32. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +11 -16
  33. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  34. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +16 -5
  35. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  36. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  37. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +99 -0
  38. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  39. package/src/duckdb/src/function/scalar/date/date_part.cpp +17 -25
  40. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  41. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  42. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  43. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  44. package/src/duckdb/src/function/scalar/list/list_concat.cpp +3 -8
  45. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  46. package/src/duckdb/src/function/scalar/list/list_value.cpp +5 -9
  47. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  48. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  49. package/src/duckdb/src/function/scalar/math/numeric.cpp +14 -17
  50. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  51. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  52. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  53. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  54. package/src/duckdb/src/function/scalar/operators/multiply.cpp +0 -6
  55. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  56. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  57. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  58. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  59. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  60. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  61. package/src/duckdb/src/function/scalar/string_functions.cpp +1 -0
  62. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +4 -9
  63. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +10 -13
  64. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +5 -6
  65. package/src/duckdb/src/function/table/read_csv.cpp +9 -0
  66. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  67. package/src/duckdb/src/function/table_function.cpp +19 -0
  68. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  69. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  70. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  71. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  72. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +5 -1
  73. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -8
  74. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -2
  75. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  76. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  77. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +12 -3
  78. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  79. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +12 -0
  80. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  81. package/src/duckdb/src/include/duckdb/function/table_function.hpp +2 -0
  82. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  83. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  84. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  85. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  86. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  87. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
  88. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  89. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  90. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  91. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  92. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  93. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  94. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +76 -0
  95. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  96. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +28 -0
  97. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  98. package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -0
  99. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  100. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  101. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  102. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  103. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  104. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
  105. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  106. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  107. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
  108. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
  109. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  110. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  111. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  112. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +6 -6
  113. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  114. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  115. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +157 -0
  116. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  117. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  118. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  119. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  120. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +2 -2
  121. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  122. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +2 -1
  123. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -3
  124. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +3 -2
  125. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +2 -0
  126. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  127. package/src/duckdb/src/include/duckdb.h +49 -1
  128. package/src/duckdb/src/include/duckdb.hpp +0 -1
  129. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  130. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  131. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  132. package/src/duckdb/src/main/client_context.cpp +8 -1
  133. package/src/duckdb/src/main/config.cpp +66 -1
  134. package/src/duckdb/src/main/database.cpp +10 -2
  135. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +98 -67
  136. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +16 -3
  137. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  138. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  139. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  140. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  141. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  142. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  143. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  144. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  145. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  146. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  147. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +28 -31
  148. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +4 -5
  149. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  150. package/src/duckdb/src/optimizer/statistics_propagator.cpp +1 -1
  151. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  152. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  153. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  154. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  155. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  156. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +8 -0
  157. package/src/duckdb/src/parser/query_node.cpp +1 -1
  158. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  159. package/src/duckdb/src/parser/tableref/pivotref.cpp +296 -0
  160. package/src/duckdb/src/parser/tableref.cpp +3 -0
  161. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  162. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  163. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  164. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  165. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +150 -0
  166. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  167. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +1 -1
  168. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +4 -0
  169. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +105 -0
  170. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  171. package/src/duckdb/src/parser/transformer.cpp +15 -3
  172. package/src/duckdb/src/planner/bind_context.cpp +16 -0
  173. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +11 -3
  174. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +0 -1
  175. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -1
  176. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  177. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +9 -0
  178. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +365 -0
  179. package/src/duckdb/src/planner/binder.cpp +7 -1
  180. package/src/duckdb/src/planner/bound_result_modifier.cpp +1 -1
  181. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  182. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  183. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  184. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  185. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  186. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +1 -4
  187. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +4 -4
  188. package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
  189. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
  190. package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
  191. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  192. package/src/duckdb/src/storage/compression/rle.cpp +19 -15
  193. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
  194. package/src/duckdb/src/storage/data_table.cpp +4 -6
  195. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  196. package/src/duckdb/src/storage/statistics/column_statistics.cpp +58 -3
  197. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +4 -9
  198. package/src/duckdb/src/storage/statistics/list_stats.cpp +117 -0
  199. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +529 -0
  200. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  201. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  202. package/src/duckdb/src/storage/statistics/struct_stats.cpp +131 -0
  203. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  204. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -4
  205. package/src/duckdb/src/storage/table/column_data.cpp +16 -11
  206. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +2 -3
  207. package/src/duckdb/src/storage/table/column_segment.cpp +6 -8
  208. package/src/duckdb/src/storage/table/list_column_data.cpp +39 -58
  209. package/src/duckdb/src/storage/table/row_group.cpp +24 -23
  210. package/src/duckdb/src/storage/table/row_group_collection.cpp +12 -12
  211. package/src/duckdb/src/storage/table/standard_column_data.cpp +6 -6
  212. package/src/duckdb/src/storage/table/struct_column_data.cpp +15 -16
  213. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  214. package/src/duckdb/src/storage/table/update_segment.cpp +10 -12
  215. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +3 -0
  216. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +34 -1
  217. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1020 -530
  218. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +7 -0
  219. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +23560 -22737
  220. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  221. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  222. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  223. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  224. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  225. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  226. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  227. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  228. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  229. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  230. package/src/duckdb/ub_src_storage_statistics.cpp +4 -6
  231. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  232. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  233. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  234. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  235. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  236. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  237. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  238. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  239. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  240. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  241. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  242. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
@@ -235,6 +235,8 @@ public:
235
235
  bool filter_prune;
236
236
  //! Additional function info, passed to the bind
237
237
  shared_ptr<TableFunctionInfo> function_info;
238
+
239
+ DUCKDB_API bool Equal(const TableFunction &rhs) const;
238
240
  };
239
241
 
240
242
  } // namespace duckdb
@@ -40,6 +40,7 @@ struct ExtractStatementsWrapper {
40
40
 
41
41
  struct PendingStatementWrapper {
42
42
  unique_ptr<PendingQueryResult> statement;
43
+ bool allow_streaming;
43
44
  };
44
45
 
45
46
  struct ArrowResultWrapper {
@@ -56,6 +57,7 @@ struct AppenderWrapper {
56
57
  enum class CAPIResultSetType : uint8_t {
57
58
  CAPI_RESULT_TYPE_NONE = 0,
58
59
  CAPI_RESULT_TYPE_MATERIALIZED,
60
+ CAPI_RESULT_TYPE_STREAMING,
59
61
  CAPI_RESULT_TYPE_DEPRECATED
60
62
  };
61
63
 
@@ -30,6 +30,7 @@
30
30
  #include "duckdb/planner/operator_extension.hpp"
31
31
 
32
32
  namespace duckdb {
33
+ class BufferPool;
33
34
  class CastFunctionSet;
34
35
  class ClientContext;
35
36
  class ErrorManager;
@@ -186,6 +187,8 @@ public:
186
187
  vector<std::unique_ptr<OperatorExtension>> operator_extensions;
187
188
  //! Extensions made to storage
188
189
  case_insensitive_map_t<std::unique_ptr<StorageExtension>> storage_extensions;
190
+ //! A buffer pool can be shared across multiple databases (if desired).
191
+ shared_ptr<BufferPool> buffer_pool;
189
192
 
190
193
  public:
191
194
  DUCKDB_API static DBConfig &GetConfig(ClientContext &context);
@@ -35,6 +35,7 @@ public:
35
35
  DBConfig config;
36
36
 
37
37
  public:
38
+ BufferPool &GetBufferPool();
38
39
  DUCKDB_API BufferManager &GetBufferManager();
39
40
  DUCKDB_API DatabaseManager &GetDatabaseManager();
40
41
  DUCKDB_API FileSystem &GetFileSystem();
@@ -106,7 +106,7 @@ private:
106
106
  //! If there are multiple equivalence sets, they are merged.
107
107
  void AddToEquivalenceSets(FilterInfo *filter_info, vector<idx_t> matching_equivalent_sets);
108
108
 
109
- TableFilterSet *GetTableFilters(LogicalOperator *op);
109
+ TableFilterSet *GetTableFilters(LogicalOperator *op, idx_t table_index);
110
110
 
111
111
  void AddRelationTdom(FilterInfo *filter_info);
112
112
  bool EmptyFilter(FilterInfo *filter_info);
@@ -115,7 +115,7 @@ private:
115
115
  unique_ptr<BaseStatistics> base_stats);
116
116
  idx_t InspectConjunctionOR(idx_t cardinality, idx_t column_index, ConjunctionOrFilter *fil,
117
117
  unique_ptr<BaseStatistics> base_stats);
118
- idx_t InspectTableFilters(idx_t cardinality, LogicalOperator *op, TableFilterSet *table_filters);
118
+ idx_t InspectTableFilters(idx_t cardinality, LogicalOperator *op, TableFilterSet *table_filters, idx_t table_index);
119
119
  };
120
120
 
121
121
  } // namespace duckdb
@@ -17,6 +17,8 @@ class SelectStatement;
17
17
  struct CommonTableExpressionInfo {
18
18
  vector<string> aliases;
19
19
  unique_ptr<SelectStatement> query;
20
+
21
+ unique_ptr<CommonTableExpressionInfo> Copy();
20
22
  };
21
23
 
22
24
  } // namespace duckdb
@@ -20,7 +20,8 @@ enum class AlterType : uint8_t {
20
20
  ALTER_VIEW = 2,
21
21
  ALTER_SEQUENCE = 3,
22
22
  CHANGE_OWNERSHIP = 4,
23
- ALTER_FUNCTION = 5
23
+ ALTER_SCALAR_FUNCTION = 5,
24
+ ALTER_TABLE_FUNCTION = 6
24
25
  };
25
26
 
26
27
  struct AlterEntryData {
@@ -1,29 +1,29 @@
1
1
  //===----------------------------------------------------------------------===//
2
2
  // DuckDB
3
3
  //
4
- // duckdb/parser/parsed_data/alter_function_info.hpp
4
+ // duckdb/parser/parsed_data/alter_scalar_function_info.hpp
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
8
 
9
9
  #pragma once
10
10
 
11
- #include "duckdb/parser/parsed_data/alter_info.hpp"
12
- #include "duckdb/function/scalar_function.hpp"
13
11
  #include "duckdb/function/function_set.hpp"
12
+ #include "duckdb/function/scalar_function.hpp"
13
+ #include "duckdb/parser/parsed_data/alter_info.hpp"
14
14
 
15
15
  namespace duckdb {
16
16
 
17
17
  //===--------------------------------------------------------------------===//
18
- // Alter Table
18
+ // Alter Scalar Function
19
19
  //===--------------------------------------------------------------------===//
20
- enum class AlterFunctionType : uint8_t { INVALID = 0, ADD_FUNCTION_OVERLOADS = 1 };
20
+ enum class AlterScalarFunctionType : uint8_t { INVALID = 0, ADD_FUNCTION_OVERLOADS = 1 };
21
21
 
22
- struct AlterFunctionInfo : public AlterInfo {
23
- AlterFunctionInfo(AlterFunctionType type, AlterEntryData data);
24
- virtual ~AlterFunctionInfo() override;
22
+ struct AlterScalarFunctionInfo : public AlterInfo {
23
+ AlterScalarFunctionInfo(AlterScalarFunctionType type, AlterEntryData data);
24
+ virtual ~AlterScalarFunctionInfo() override;
25
25
 
26
- AlterFunctionType alter_function_type;
26
+ AlterScalarFunctionType alter_scalar_function_type;
27
27
 
28
28
  public:
29
29
  CatalogType GetCatalogType() const override;
@@ -32,11 +32,11 @@ public:
32
32
  };
33
33
 
34
34
  //===--------------------------------------------------------------------===//
35
- // AddFunctionOverloadInfo
35
+ // AddScalarFunctionOverloadInfo
36
36
  //===--------------------------------------------------------------------===//
37
- struct AddFunctionOverloadInfo : public AlterFunctionInfo {
38
- AddFunctionOverloadInfo(AlterEntryData data, ScalarFunctionSet new_overloads);
39
- ~AddFunctionOverloadInfo() override;
37
+ struct AddScalarFunctionOverloadInfo : public AlterScalarFunctionInfo {
38
+ AddScalarFunctionOverloadInfo(AlterEntryData data, ScalarFunctionSet new_overloads);
39
+ ~AddScalarFunctionOverloadInfo() override;
40
40
 
41
41
  ScalarFunctionSet new_overloads;
42
42
 
@@ -0,0 +1,47 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/parser/parsed_data/alter_scalar_function_info.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/function/function_set.hpp"
12
+ #include "duckdb/function/table_function.hpp"
13
+ #include "duckdb/parser/parsed_data/alter_info.hpp"
14
+
15
+ namespace duckdb {
16
+
17
+ //===--------------------------------------------------------------------===//
18
+ // Alter Table Function
19
+ //===--------------------------------------------------------------------===//
20
+ enum class AlterTableFunctionType : uint8_t { INVALID = 0, ADD_FUNCTION_OVERLOADS = 1 };
21
+
22
+ struct AlterTableFunctionInfo : public AlterInfo {
23
+ AlterTableFunctionInfo(AlterTableFunctionType type, AlterEntryData data);
24
+ virtual ~AlterTableFunctionInfo() override;
25
+
26
+ AlterTableFunctionType alter_table_function_type;
27
+
28
+ public:
29
+ CatalogType GetCatalogType() const override;
30
+ void Serialize(FieldWriter &writer) const override;
31
+ static unique_ptr<AlterInfo> Deserialize(FieldReader &reader);
32
+ };
33
+
34
+ //===--------------------------------------------------------------------===//
35
+ // AddTableFunctionOverloadInfo
36
+ //===--------------------------------------------------------------------===//
37
+ struct AddTableFunctionOverloadInfo : public AlterTableFunctionInfo {
38
+ AddTableFunctionOverloadInfo(AlterEntryData data, TableFunctionSet new_overloads);
39
+ ~AddTableFunctionOverloadInfo() override;
40
+
41
+ TableFunctionSet new_overloads;
42
+
43
+ public:
44
+ unique_ptr<AlterInfo> Copy() const override;
45
+ };
46
+
47
+ } // namespace duckdb
@@ -21,7 +21,8 @@ struct CreateTableFunctionInfo : public CreateFunctionInfo {
21
21
  TableFunctionSet functions;
22
22
 
23
23
  public:
24
- DUCKDB_API unique_ptr<CreateInfo> Copy() const;
24
+ DUCKDB_API unique_ptr<CreateInfo> Copy() const override;
25
+ DUCKDB_API unique_ptr<AlterInfo> GetAlterInfo() const override;
25
26
  };
26
27
 
27
28
  } // namespace duckdb
@@ -13,6 +13,7 @@
13
13
  #include "duckdb/parser/parsed_expression.hpp"
14
14
  #include "duckdb/parser/result_modifier.hpp"
15
15
  #include "duckdb/parser/common_table_expression_info.hpp"
16
+ #include "duckdb/common/case_insensitive_map.hpp"
16
17
 
17
18
  namespace duckdb {
18
19
 
@@ -29,7 +30,7 @@ class CommonTableExpressionMap {
29
30
  public:
30
31
  CommonTableExpressionMap();
31
32
 
32
- unordered_map<string, unique_ptr<CommonTableExpressionInfo>> map;
33
+ case_insensitive_map_t<unique_ptr<CommonTableExpressionInfo>> map;
33
34
 
34
35
  public:
35
36
  string ToString() const;
@@ -0,0 +1,28 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/parser/statement/multi_statement.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/parser/sql_statement.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ class MultiStatement : public SQLStatement {
16
+ public:
17
+ MultiStatement();
18
+
19
+ vector<unique_ptr<SQLStatement>> statements;
20
+
21
+ protected:
22
+ MultiStatement(const MultiStatement &other);
23
+
24
+ public:
25
+ unique_ptr<SQLStatement> Copy() const override;
26
+ };
27
+
28
+ } // namespace duckdb
@@ -2,5 +2,6 @@
2
2
  #include "duckdb/parser/tableref/emptytableref.hpp"
3
3
  #include "duckdb/parser/tableref/expressionlistref.hpp"
4
4
  #include "duckdb/parser/tableref/joinref.hpp"
5
+ #include "duckdb/parser/tableref/pivotref.hpp"
5
6
  #include "duckdb/parser/tableref/subqueryref.hpp"
6
7
  #include "duckdb/parser/tableref/table_function_ref.hpp"
@@ -0,0 +1,76 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/parser/tableref/pivotref.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/parser/tableref.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ struct PivotColumnEntry {
16
+ //! The set of values to match on
17
+ vector<Value> values;
18
+ //! The star expression (UNPIVOT only)
19
+ unique_ptr<ParsedExpression> star_expr;
20
+ //! The alias of the pivot column entry
21
+ string alias;
22
+
23
+ bool Equals(const PivotColumnEntry &other) const;
24
+ void Serialize(Serializer &serializer) const;
25
+ PivotColumnEntry Copy() const;
26
+ static PivotColumnEntry Deserialize(Deserializer &source);
27
+ };
28
+
29
+ struct PivotColumn {
30
+ //! The column names to (un)pivot
31
+ vector<string> names;
32
+ //! The set of values to pivot on
33
+ vector<PivotColumnEntry> entries;
34
+ //! The enum to read pivot values from (if any)
35
+ string pivot_enum;
36
+
37
+ string ToString() const;
38
+ bool Equals(const PivotColumn &other) const;
39
+ void Serialize(Serializer &serializer) const;
40
+ PivotColumn Copy() const;
41
+ static PivotColumn Deserialize(Deserializer &source);
42
+ };
43
+
44
+ //! Represents a PIVOT or UNPIVOT expression
45
+ class PivotRef : public TableRef {
46
+ public:
47
+ explicit PivotRef() : TableRef(TableReferenceType::PIVOT), include_nulls(false) {
48
+ }
49
+
50
+ //! The source table of the pivot
51
+ unique_ptr<TableRef> source;
52
+ //! The aggregates to compute over the pivot (PIVOT only)
53
+ vector<unique_ptr<ParsedExpression>> aggregates;
54
+ //! The names of the unpivot expressions (UNPIVOT only)
55
+ vector<string> unpivot_names;
56
+ //! The set of pivots
57
+ vector<PivotColumn> pivots;
58
+ //! The groups to pivot over. If none are specified all columns not included in the pivots/aggregate are chosen.
59
+ vector<string> groups;
60
+ //! Aliases for the column names
61
+ vector<string> column_name_alias;
62
+ //! Whether or not to include nulls in the result (UNPIVOT only)
63
+ bool include_nulls;
64
+
65
+ public:
66
+ string ToString() const override;
67
+ bool Equals(const TableRef *other_p) const override;
68
+
69
+ unique_ptr<TableRef> Copy() override;
70
+
71
+ //! Serializes a blob into a JoinRef
72
+ void Serialize(FieldWriter &serializer) const override;
73
+ //! Deserializes a blob back into a JoinRef
74
+ static unique_ptr<TableRef> Deserialize(FieldReader &source);
75
+ };
76
+ } // namespace duckdb
@@ -41,6 +41,7 @@ class SetVariableStatement;
41
41
  class ResetVariableStatement;
42
42
  class LoadStatement;
43
43
  class LogicalPlanStatement;
44
+ class MultiStatement;
44
45
 
45
46
  //===--------------------------------------------------------------------===//
46
47
  // Query Node
@@ -94,6 +95,7 @@ class SubqueryRef;
94
95
  class TableFunctionRef;
95
96
  class EmptyTableRef;
96
97
  class ExpressionListRef;
98
+ class PivotRef;
97
99
 
98
100
  //===--------------------------------------------------------------------===//
99
101
  // Other
@@ -32,15 +32,23 @@ struct CommonTableExpressionInfo;
32
32
  struct GroupingExpressionMap;
33
33
  class OnConflictInfo;
34
34
  class UpdateSetInfo;
35
+ struct PivotColumn;
35
36
 
36
37
  //! The transformer class is responsible for transforming the internal Postgres
37
38
  //! parser representation into the DuckDB representation
38
39
  class Transformer {
39
40
  friend class StackChecker;
40
41
 
42
+ struct CreatePivotEntry {
43
+ string enum_name;
44
+ unique_ptr<SelectNode> base;
45
+ string column_name;
46
+ };
47
+
41
48
  public:
42
49
  explicit Transformer(idx_t max_expression_depth_p);
43
50
  explicit Transformer(Transformer *parent);
51
+ ~Transformer();
44
52
 
45
53
  //! Transforms a Postgres parse tree into a set of SQL Statements
46
54
  bool TransformParseTree(duckdb_libpgquery::PGList *tree, vector<unique_ptr<SQLStatement>> &statements);
@@ -59,6 +67,12 @@ private:
59
67
  case_insensitive_map_t<idx_t> named_param_map;
60
68
  //! Holds window expressions defined by name. We need those when transforming the expressions referring to them.
61
69
  unordered_map<string, duckdb_libpgquery::PGWindowDef *> window_clauses;
70
+ //! The set of pivot entries to create
71
+ vector<unique_ptr<CreatePivotEntry>> pivot_entries;
72
+ //! Sets of stored CTEs, if any
73
+ vector<CommonTableExpressionMap *> stored_cte_map;
74
+
75
+ void Clear();
62
76
 
63
77
  void SetParamCount(idx_t new_count) {
64
78
  if (parent) {
@@ -91,6 +105,12 @@ private:
91
105
  return parent ? parent->HasNamedParameters() : !named_param_map.empty();
92
106
  }
93
107
 
108
+ void AddPivotEntry(string enum_name, unique_ptr<SelectNode> source, string column_name);
109
+ unique_ptr<SQLStatement> GenerateCreateEnumStmt(unique_ptr<CreatePivotEntry> entry);
110
+ bool HasPivotEntries();
111
+ idx_t PivotEntryCount();
112
+ void ExtractCTEsRecursive(CommonTableExpressionMap &cte_map);
113
+
94
114
  private:
95
115
  //! Transforms a Postgres statement into a single SQL statement
96
116
  unique_ptr<SQLStatement> TransformStatement(duckdb_libpgquery::PGNode *stmt);
@@ -163,6 +183,10 @@ private:
163
183
  unique_ptr<ExecuteStatement> TransformExecute(duckdb_libpgquery::PGNode *node);
164
184
  unique_ptr<CallStatement> TransformCall(duckdb_libpgquery::PGNode *node);
165
185
  unique_ptr<DropStatement> TransformDeallocate(duckdb_libpgquery::PGNode *node);
186
+ unique_ptr<QueryNode> TransformPivotStatement(duckdb_libpgquery::PGSelectStmt *stmt);
187
+ unique_ptr<SQLStatement> CreatePivotStatement(unique_ptr<SQLStatement> statement);
188
+ PivotColumn TransformPivotColumn(duckdb_libpgquery::PGPivot *pivot);
189
+ vector<PivotColumn> TransformPivotList(duckdb_libpgquery::PGList *list);
166
190
 
167
191
  //===--------------------------------------------------------------------===//
168
192
  // SetStatement Transform
@@ -179,6 +203,7 @@ private:
179
203
  //===--------------------------------------------------------------------===//
180
204
  //! Transform a Postgres duckdb_libpgquery::T_PGSelectStmt node into a QueryNode
181
205
  unique_ptr<QueryNode> TransformSelectNode(duckdb_libpgquery::PGSelectStmt *node);
206
+ unique_ptr<QueryNode> TransformSelectInternal(duckdb_libpgquery::PGSelectStmt *node);
182
207
 
183
208
  //===--------------------------------------------------------------------===//
184
209
  // Expression Transform
@@ -256,6 +281,7 @@ private:
256
281
  //===--------------------------------------------------------------------===//
257
282
  OnCreateConflict TransformOnConflict(duckdb_libpgquery::PGOnCreateConflict conflict);
258
283
  string TransformAlias(duckdb_libpgquery::PGAlias *root, vector<string> &column_name_alias);
284
+ vector<string> TransformStringList(duckdb_libpgquery::PGList *list);
259
285
  void TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause, CommonTableExpressionMap &cte_map);
260
286
  unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr *node,
261
287
  CommonTableExpressionInfo &info);
@@ -276,6 +302,8 @@ private:
276
302
  unique_ptr<TableRef> TransformRangeFunction(duckdb_libpgquery::PGRangeFunction *root);
277
303
  //! Transform a Postgres join node into a TableRef
278
304
  unique_ptr<TableRef> TransformJoin(duckdb_libpgquery::PGJoinExpr *root);
305
+ //! Transform a Postgres pivot node into a TableRef
306
+ unique_ptr<TableRef> TransformPivot(duckdb_libpgquery::PGPivotExpr *root);
279
307
  //! Transform a table producing subquery into a TableRef
280
308
  unique_ptr<TableRef> TransformRangeSubselect(duckdb_libpgquery::PGRangeSubselect *root);
281
309
  //! Transform a VALUES list into a set of expressions
@@ -141,6 +141,8 @@ public:
141
141
 
142
142
  //! Add all the bindings from a BindContext to this BindContext. The other BindContext is destroyed in the process.
143
143
  void AddContext(BindContext other);
144
+ //! For semi and anti joins we remove the binding context of the right table after binding the condition.
145
+ void RemoveContext(vector<std::pair<string, duckdb::Binding *>> &other_bindings_list);
144
146
 
145
147
  //! Gets a binding of the specified name. Returns a nullptr and sets the out_error if the binding could not be
146
148
  //! found.
@@ -275,6 +275,12 @@ private:
275
275
  unique_ptr<BoundTableRef> Bind(TableFunctionRef &ref);
276
276
  unique_ptr<BoundTableRef> Bind(EmptyTableRef &ref);
277
277
  unique_ptr<BoundTableRef> Bind(ExpressionListRef &ref);
278
+ unique_ptr<BoundTableRef> Bind(PivotRef &expr);
279
+
280
+ unique_ptr<SelectNode> BindPivot(PivotRef &expr, vector<unique_ptr<ParsedExpression>> all_columns);
281
+ unique_ptr<SelectNode> BindUnpivot(Binder &child_binder, PivotRef &expr,
282
+ vector<unique_ptr<ParsedExpression>> all_columns,
283
+ unique_ptr<ParsedExpression> &where_clause);
278
284
 
279
285
  bool BindTableFunctionParameters(TableFunctionCatalogEntry &table_function,
280
286
  vector<unique_ptr<ParsedExpression>> &expressions, vector<LogicalType> &arguments,
@@ -340,6 +346,8 @@ private:
340
346
  void BindSchemaOrCatalog(string &catalog_name, string &schema_name);
341
347
  SchemaCatalogEntry *BindCreateSchema(CreateInfo &info);
342
348
 
349
+ unique_ptr<BoundQueryNode> BindSelectNode(SelectNode &statement, unique_ptr<BoundTableRef> from_table);
350
+
343
351
  public:
344
352
  // This should really be a private constructor, but make_shared does not allow it...
345
353
  // If you are thinking about calling this, you should probably call Binder::CreateBinder
@@ -17,6 +17,7 @@ namespace duckdb {
17
17
  class BlockManager;
18
18
  class BufferHandle;
19
19
  class BufferManager;
20
+ class BufferPool;
20
21
  class DatabaseInstance;
21
22
  class FileBuffer;
22
23
 
@@ -55,6 +56,7 @@ class BlockHandle {
55
56
  friend struct BufferEvictionNode;
56
57
  friend class BufferHandle;
57
58
  friend class BufferManager;
59
+ friend class BufferPool;
58
60
 
59
61
  public:
60
62
  BlockHandle(BlockManager &block_manager, block_id_t block_id);