duckdb 0.7.2-dev0.0 → 0.7.2-dev1034.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 (590) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  13. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  15. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  16. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  17. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  18. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  19. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  20. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  21. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  22. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  24. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  25. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  26. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  27. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  28. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  29. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  30. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  31. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  32. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  33. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  34. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  35. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  36. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  37. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  38. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  39. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  40. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  41. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  42. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  43. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  44. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  45. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  46. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  47. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  48. package/src/duckdb/src/common/exception.cpp +15 -1
  49. package/src/duckdb/src/common/field_writer.cpp +1 -0
  50. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  51. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  52. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  53. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  54. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  55. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  56. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  57. package/src/duckdb/src/common/string_util.cpp +4 -1
  58. package/src/duckdb/src/common/types/bit.cpp +166 -87
  59. package/src/duckdb/src/common/types/blob.cpp +1 -1
  60. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  61. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  62. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  63. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  64. package/src/duckdb/src/common/types/time.cpp +13 -0
  65. package/src/duckdb/src/common/types/value.cpp +320 -154
  66. package/src/duckdb/src/common/types/vector.cpp +155 -127
  67. package/src/duckdb/src/common/types.cpp +313 -153
  68. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  69. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  70. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  71. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  72. package/src/duckdb/src/execution/index/art/art.cpp +6 -5
  73. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  74. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  75. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  76. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  77. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  78. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  79. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
  80. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  81. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  82. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -3
  83. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
  84. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  85. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  86. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  87. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  88. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  89. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -16
  90. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  91. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  92. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  93. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  94. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  95. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  96. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  97. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  98. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  99. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  100. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  101. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  102. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  103. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  104. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  105. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  106. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  107. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  108. package/src/duckdb/src/function/aggregate/nested/list.cpp +8 -8
  109. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  110. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  111. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  112. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  113. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  114. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  115. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  116. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  117. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  118. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  119. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  120. package/src/duckdb/src/function/function_binder.cpp +1 -8
  121. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  122. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  123. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  124. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  125. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  126. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  127. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  128. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  129. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  130. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  131. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  132. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  133. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  134. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  135. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  136. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  137. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  138. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  139. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  140. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  141. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  142. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  143. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  144. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  145. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  146. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  147. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  148. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  149. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  150. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  151. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  152. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  153. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  154. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  155. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  156. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  157. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  158. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  159. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  160. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  161. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  162. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  163. package/src/duckdb/src/function/table/read_csv.cpp +55 -0
  164. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  165. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  166. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  167. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  168. package/src/duckdb/src/function/table_function.cpp +30 -11
  169. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  170. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  171. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  172. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  173. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  175. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  176. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  178. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  179. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  180. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  182. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  183. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  185. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  186. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  187. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  188. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  189. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  190. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  191. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  192. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  193. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  194. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  195. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  196. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  198. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  199. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  201. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  202. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  203. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  204. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  205. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  206. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +6 -0
  211. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  212. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  213. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  214. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  215. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  216. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  217. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  218. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  219. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  220. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  221. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  222. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  223. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  224. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  225. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  226. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  227. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  228. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  229. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  230. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  231. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  233. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  234. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  236. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  237. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  238. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  239. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  240. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  243. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  244. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  246. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  249. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  250. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  251. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  252. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  253. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  254. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  255. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  256. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  257. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  258. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  259. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  260. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  262. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  263. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  264. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  265. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  266. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  267. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  268. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  269. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  270. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  271. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  272. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  273. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  274. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  276. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  277. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  278. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  282. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  283. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  286. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  288. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  290. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  293. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  294. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  295. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  296. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  297. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  300. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  301. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  302. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  304. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  305. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  306. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  307. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  312. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
  315. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
  316. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
  317. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  318. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  319. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  320. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  321. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  322. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  323. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  324. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  325. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  326. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  327. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  328. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  329. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  330. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  331. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  332. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +7 -5
  333. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -2
  335. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
  336. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
  337. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  338. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
  339. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  340. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  341. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  342. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  343. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb.h +50 -2
  346. package/src/duckdb/src/include/duckdb.hpp +0 -1
  347. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  348. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  349. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  350. package/src/duckdb/src/main/client_context.cpp +38 -34
  351. package/src/duckdb/src/main/client_data.cpp +7 -6
  352. package/src/duckdb/src/main/config.cpp +70 -1
  353. package/src/duckdb/src/main/database.cpp +19 -2
  354. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  355. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  356. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  357. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  358. package/src/duckdb/src/main/relation.cpp +3 -2
  359. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  360. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  361. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  362. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  363. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  364. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +105 -71
  365. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -12
  366. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  367. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  368. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  369. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  370. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  371. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  372. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  374. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  375. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  376. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  378. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  379. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  380. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  381. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  382. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  383. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  384. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  385. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  386. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  387. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  388. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  389. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  390. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  391. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  392. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  393. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -4
  394. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  395. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  396. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  397. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  398. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  399. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  400. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  401. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  402. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  403. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  404. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  405. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  406. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  407. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  408. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  409. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  410. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  411. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  412. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  413. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  414. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  415. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  416. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  417. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  418. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  419. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  420. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  421. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  422. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  423. package/src/duckdb/src/parser/query_node.cpp +51 -1
  424. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  425. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  426. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  427. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  428. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  429. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  430. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  431. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  432. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  433. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  434. package/src/duckdb/src/parser/tableref.cpp +49 -0
  435. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  436. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  437. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  438. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +63 -42
  439. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  440. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  441. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  442. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  443. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  444. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  445. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  446. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  447. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  448. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  449. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  450. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  451. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  452. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  453. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  454. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  455. package/src/duckdb/src/parser/transformer.cpp +15 -3
  456. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  457. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  458. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  459. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  460. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  461. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  462. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  463. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  464. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  465. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  466. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  467. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  468. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  469. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  470. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -1
  471. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  472. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  473. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  474. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  475. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  476. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  477. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  478. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  479. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  480. package/src/duckdb/src/planner/binder.cpp +19 -24
  481. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  482. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  483. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  484. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  485. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  486. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  487. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  488. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  489. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  490. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  491. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  492. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  493. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  494. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  495. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  496. package/src/duckdb/src/planner/planner.cpp +2 -1
  497. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  498. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  499. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  500. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  501. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  502. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  503. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  504. package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
  505. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
  506. package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
  507. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  508. package/src/duckdb/src/storage/compression/rle.cpp +19 -15
  509. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
  510. package/src/duckdb/src/storage/data_table.cpp +20 -20
  511. package/src/duckdb/src/storage/index.cpp +12 -1
  512. package/src/duckdb/src/storage/local_storage.cpp +20 -23
  513. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  514. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  515. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  516. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  517. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  518. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  519. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  520. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  521. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  522. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  523. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  524. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  525. package/src/duckdb/src/storage/table/column_data.cpp +45 -46
  526. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
  527. package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
  528. package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
  529. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  530. package/src/duckdb/src/storage/table/row_group.cpp +38 -32
  531. package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
  532. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  533. package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
  534. package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
  535. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  536. package/src/duckdb/src/storage/table/update_segment.cpp +20 -18
  537. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  538. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  539. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  540. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  541. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  542. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  543. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  544. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  545. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  546. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  547. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  548. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  549. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  550. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  551. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  552. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  553. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  554. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  555. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  556. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  557. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  558. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  559. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  560. package/src/duckdb/ub_src_parser.cpp +2 -0
  561. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  562. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  563. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  564. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  565. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  566. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  567. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  568. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  569. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  570. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  571. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  572. package/src/duckdb_node.hpp +2 -1
  573. package/src/statement.cpp +5 -5
  574. package/src/utils.cpp +27 -2
  575. package/test/extension.test.ts +44 -26
  576. package/test/syntax_error.test.ts +3 -1
  577. package/filelist.cache +0 -0
  578. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  579. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  580. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  581. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  582. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  583. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  584. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  585. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  586. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  587. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  588. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  589. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  590. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -19,7 +19,7 @@ BoundOrderByNode::BoundOrderByNode(OrderType type, OrderByNullType null_order, u
19
19
 
20
20
  BoundOrderByNode BoundOrderByNode::Copy() const {
21
21
  if (stats) {
22
- return BoundOrderByNode(type, null_order, expression->Copy(), stats->Copy());
22
+ return BoundOrderByNode(type, null_order, expression->Copy(), stats->ToUnique());
23
23
  } else {
24
24
  return BoundOrderByNode(type, null_order, expression->Copy());
25
25
  }
@@ -80,6 +80,32 @@ BoundOrderByNode BoundOrderByNode::Deserialize(Deserializer &source, PlanDeseria
80
80
  return BoundOrderByNode(type, null_order, std::move(expression));
81
81
  }
82
82
 
83
+ unique_ptr<BoundOrderModifier> BoundOrderModifier::Copy() const {
84
+ auto result = make_unique<BoundOrderModifier>();
85
+ for (auto &order : orders) {
86
+ result->orders.push_back(order.Copy());
87
+ }
88
+ return result;
89
+ }
90
+
91
+ bool BoundOrderModifier::Equals(const BoundOrderModifier *left, const BoundOrderModifier *right) {
92
+ if (left == right) {
93
+ return true;
94
+ }
95
+ if (!left || !right) {
96
+ return false;
97
+ }
98
+ if (left->orders.size() != right->orders.size()) {
99
+ return false;
100
+ }
101
+ for (idx_t i = 0; i < left->orders.size(); i++) {
102
+ if (!left->orders[i].Equals(right->orders[i])) {
103
+ return false;
104
+ }
105
+ }
106
+ return true;
107
+ }
108
+
83
109
  BoundLimitModifier::BoundLimitModifier() : BoundResultModifier(ResultModifierType::LIMIT_MODIFIER) {
84
110
  }
85
111
 
@@ -19,8 +19,8 @@ BoundAggregateExpression::BoundAggregateExpression(AggregateFunction function, v
19
19
  }
20
20
 
21
21
  string BoundAggregateExpression::ToString() const {
22
- return FunctionExpression::ToString<BoundAggregateExpression, Expression>(*this, string(), function.name, false,
23
- IsDistinct(), filter.get());
22
+ return FunctionExpression::ToString<BoundAggregateExpression, Expression, BoundOrderModifier>(
23
+ *this, string(), function.name, false, IsDistinct(), filter.get(), order_bys.get());
24
24
  }
25
25
 
26
26
  hash_t BoundAggregateExpression::Hash() const {
@@ -55,6 +55,9 @@ bool BoundAggregateExpression::Equals(const BaseExpression *other_p) const {
55
55
  if (!FunctionData::Equals(bind_info.get(), other->bind_info.get())) {
56
56
  return false;
57
57
  }
58
+ if (!BoundOrderModifier::Equals(order_bys.get(), other->order_bys.get())) {
59
+ return false;
60
+ }
58
61
  return true;
59
62
  }
60
63
 
@@ -74,12 +77,16 @@ unique_ptr<Expression> BoundAggregateExpression::Copy() {
74
77
  auto copy = make_unique<BoundAggregateExpression>(function, std::move(new_children), std::move(new_filter),
75
78
  std::move(new_bind_info), aggr_type);
76
79
  copy->CopyProperties(*this);
80
+ copy->order_bys = order_bys ? order_bys->Copy() : nullptr;
77
81
  return std::move(copy);
78
82
  }
79
83
 
80
84
  void BoundAggregateExpression::Serialize(FieldWriter &writer) const {
81
85
  writer.WriteField(IsDistinct());
82
86
  writer.WriteOptional(filter);
87
+ if (order_bys) {
88
+ throw NotImplementedException("Serialization of ORDER BY aggregate not yet supported");
89
+ }
83
90
  FunctionSerializer::Serialize<AggregateFunction>(writer, function, return_type, children, bind_info.get());
84
91
  }
85
92
 
@@ -28,4 +28,8 @@ void BoundExpression::Serialize(FieldWriter &writer) const {
28
28
  throw SerializationException("Cannot copy or serialize bound expression");
29
29
  }
30
30
 
31
+ void BoundExpression::FormatSerialize(FormatSerializer &serializer) const {
32
+ throw SerializationException("Cannot copy or serialize bound expression");
33
+ }
34
+
31
35
  } // namespace duckdb
@@ -102,7 +102,7 @@ unique_ptr<Expression> BoundWindowExpression::Copy() {
102
102
  }
103
103
  for (auto &ps : partitions_stats) {
104
104
  if (ps) {
105
- new_window->partitions_stats.push_back(ps->Copy());
105
+ new_window->partitions_stats.push_back(ps->ToUnique());
106
106
  } else {
107
107
  new_window->partitions_stats.push_back(nullptr);
108
108
  }
@@ -0,0 +1,146 @@
1
+ #include "duckdb/planner/expression_binder/base_select_binder.hpp"
2
+
3
+ #include "duckdb/parser/expression/columnref_expression.hpp"
4
+ #include "duckdb/parser/expression/window_expression.hpp"
5
+ #include "duckdb/parser/parsed_expression_iterator.hpp"
6
+ #include "duckdb/planner/expression/bound_columnref_expression.hpp"
7
+ #include "duckdb/planner/expression/bound_window_expression.hpp"
8
+ #include "duckdb/planner/expression_binder/aggregate_binder.hpp"
9
+ #include "duckdb/planner/query_node/bound_select_node.hpp"
10
+ #include "duckdb/parser/expression/operator_expression.hpp"
11
+ #include "duckdb/common/string_util.hpp"
12
+ #include "duckdb/planner/binder.hpp"
13
+
14
+ namespace duckdb {
15
+
16
+ BaseSelectBinder::BaseSelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node,
17
+ BoundGroupInformation &info, case_insensitive_map_t<idx_t> alias_map)
18
+ : ExpressionBinder(binder, context), inside_window(false), node(node), info(info), alias_map(std::move(alias_map)) {
19
+ }
20
+
21
+ BaseSelectBinder::BaseSelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node,
22
+ BoundGroupInformation &info)
23
+ : BaseSelectBinder(binder, context, node, info, case_insensitive_map_t<idx_t>()) {
24
+ }
25
+
26
+ BindResult BaseSelectBinder::BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression) {
27
+ auto &expr = **expr_ptr;
28
+ // check if the expression binds to one of the groups
29
+ auto group_index = TryBindGroup(expr, depth);
30
+ if (group_index != DConstants::INVALID_INDEX) {
31
+ return BindGroup(expr, depth, group_index);
32
+ }
33
+ switch (expr.expression_class) {
34
+ case ExpressionClass::COLUMN_REF:
35
+ return BindColumnRef(expr_ptr, depth);
36
+ case ExpressionClass::DEFAULT:
37
+ return BindResult("SELECT clause cannot contain DEFAULT clause");
38
+ case ExpressionClass::WINDOW:
39
+ return BindWindow((WindowExpression &)expr, depth);
40
+ default:
41
+ return ExpressionBinder::BindExpression(expr_ptr, depth, root_expression);
42
+ }
43
+ }
44
+
45
+ idx_t BaseSelectBinder::TryBindGroup(ParsedExpression &expr, idx_t depth) {
46
+ // first check the group alias map, if expr is a ColumnRefExpression
47
+ if (expr.type == ExpressionType::COLUMN_REF) {
48
+ auto &colref = (ColumnRefExpression &)expr;
49
+ if (!colref.IsQualified()) {
50
+ auto alias_entry = info.alias_map.find(colref.column_names[0]);
51
+ if (alias_entry != info.alias_map.end()) {
52
+ // found entry!
53
+ return alias_entry->second;
54
+ }
55
+ }
56
+ }
57
+ // no alias reference found
58
+ // check the list of group columns for a match
59
+ auto entry = info.map.find(&expr);
60
+ if (entry != info.map.end()) {
61
+ return entry->second;
62
+ }
63
+ #ifdef DEBUG
64
+ for (auto entry : info.map) {
65
+ D_ASSERT(!entry.first->Equals(&expr));
66
+ D_ASSERT(!expr.Equals(entry.first));
67
+ }
68
+ #endif
69
+ return DConstants::INVALID_INDEX;
70
+ }
71
+
72
+ BindResult BaseSelectBinder::BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth) {
73
+ // first try to bind the column reference regularly
74
+ auto result = ExpressionBinder::BindExpression(expr_ptr, depth);
75
+ if (!result.HasError()) {
76
+ return result;
77
+ }
78
+ // binding failed
79
+ // check in the alias map
80
+ auto &colref = (ColumnRefExpression &)**expr_ptr;
81
+ if (!colref.IsQualified()) {
82
+ auto alias_entry = alias_map.find(colref.column_names[0]);
83
+ if (alias_entry != alias_map.end()) {
84
+ // found entry!
85
+ auto index = alias_entry->second;
86
+ if (index >= node.select_list.size()) {
87
+ throw BinderException("Column \"%s\" referenced that exists in the SELECT clause - but this column "
88
+ "cannot be referenced before it is defined",
89
+ colref.column_names[0]);
90
+ }
91
+ if (node.select_list[index]->HasSideEffects()) {
92
+ throw BinderException("Alias \"%s\" referenced in a SELECT clause - but the expression has side "
93
+ "effects. This is not yet supported.",
94
+ colref.column_names[0]);
95
+ }
96
+ if (node.select_list[index]->HasSubquery()) {
97
+ throw BinderException("Alias \"%s\" referenced in a SELECT clause - but the expression has a subquery."
98
+ " This is not yet supported.",
99
+ colref.column_names[0]);
100
+ }
101
+ auto result = BindResult(node.select_list[index]->Copy());
102
+ if (result.expression->type == ExpressionType::BOUND_COLUMN_REF) {
103
+ auto &result_expr = (BoundColumnRefExpression &)*result.expression;
104
+ result_expr.depth = depth;
105
+ }
106
+ return result;
107
+ }
108
+ }
109
+ // entry was not found in the alias map: return the original error
110
+ return result;
111
+ }
112
+
113
+ BindResult BaseSelectBinder::BindGroupingFunction(OperatorExpression &op, idx_t depth) {
114
+ if (op.children.empty()) {
115
+ throw InternalException("GROUPING requires at least one child");
116
+ }
117
+ if (node.groups.group_expressions.empty()) {
118
+ return BindResult(binder.FormatError(op, "GROUPING statement cannot be used without groups"));
119
+ }
120
+ if (op.children.size() >= 64) {
121
+ return BindResult(binder.FormatError(op, "GROUPING statement cannot have more than 64 groups"));
122
+ }
123
+ vector<idx_t> group_indexes;
124
+ group_indexes.reserve(op.children.size());
125
+ for (auto &child : op.children) {
126
+ ExpressionBinder::QualifyColumnNames(binder, child);
127
+ auto idx = TryBindGroup(*child, depth);
128
+ if (idx == DConstants::INVALID_INDEX) {
129
+ return BindResult(binder.FormatError(
130
+ op, StringUtil::Format("GROUPING child \"%s\" must be a grouping column", child->GetName())));
131
+ }
132
+ group_indexes.push_back(idx);
133
+ }
134
+ auto col_idx = node.grouping_functions.size();
135
+ node.grouping_functions.push_back(std::move(group_indexes));
136
+ return BindResult(make_unique<BoundColumnRefExpression>(op.GetName(), LogicalType::BIGINT,
137
+ ColumnBinding(node.groupings_index, col_idx), depth));
138
+ }
139
+
140
+ BindResult BaseSelectBinder::BindGroup(ParsedExpression &expr, idx_t depth, idx_t group_index) {
141
+ auto &group = node.groups.group_expressions[group_index];
142
+ return BindResult(make_unique<BoundColumnRefExpression>(expr.GetName(), group->return_type,
143
+ ColumnBinding(node.group_index, group_index), depth));
144
+ }
145
+
146
+ } // namespace duckdb
@@ -10,7 +10,7 @@ namespace duckdb {
10
10
 
11
11
  HavingBinder::HavingBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
12
12
  case_insensitive_map_t<idx_t> &alias_map, AggregateHandling aggregate_handling)
13
- : SelectBinder(binder, context, node, info), column_alias_binder(node, alias_map),
13
+ : BaseSelectBinder(binder, context, node, info), column_alias_binder(node, alias_map),
14
14
  aggregate_handling(aggregate_handling) {
15
15
  target_type = LogicalType(LogicalTypeId::BOOLEAN);
16
16
  }
@@ -19,13 +19,16 @@ BindResult HavingBinder::BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, i
19
19
  auto &expr = (ColumnRefExpression &)**expr_ptr;
20
20
  auto alias_result = column_alias_binder.BindAlias(*this, expr, depth, root_expression);
21
21
  if (!alias_result.HasError()) {
22
+ if (depth > 0) {
23
+ throw BinderException("Having clause cannot reference alias in correlated subquery");
24
+ }
22
25
  return alias_result;
23
26
  }
24
27
  if (aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
25
28
  if (depth > 0) {
26
29
  throw BinderException("Having clause cannot reference column in correlated subquery and group by all");
27
30
  }
28
- auto expr = duckdb::SelectBinder::BindExpression(expr_ptr, depth);
31
+ auto expr = duckdb::BaseSelectBinder::BindExpression(expr_ptr, depth);
29
32
  if (expr.HasError()) {
30
33
  return expr;
31
34
  }
@@ -51,7 +54,7 @@ BindResult HavingBinder::BindExpression(unique_ptr<ParsedExpression> *expr_ptr,
51
54
  case ExpressionClass::COLUMN_REF:
52
55
  return BindColumnRef(expr_ptr, depth, root_expression);
53
56
  default:
54
- return duckdb::SelectBinder::BindExpression(expr_ptr, depth);
57
+ return duckdb::BaseSelectBinder::BindExpression(expr_ptr, depth);
55
58
  }
56
59
  }
57
60
 
@@ -10,13 +10,13 @@ namespace duckdb {
10
10
 
11
11
  QualifyBinder::QualifyBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
12
12
  case_insensitive_map_t<idx_t> &alias_map)
13
- : SelectBinder(binder, context, node, info), column_alias_binder(node, alias_map) {
13
+ : BaseSelectBinder(binder, context, node, info), column_alias_binder(node, alias_map) {
14
14
  target_type = LogicalType(LogicalTypeId::BOOLEAN);
15
15
  }
16
16
 
17
17
  BindResult QualifyBinder::BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression) {
18
18
  auto &expr = (ColumnRefExpression &)**expr_ptr;
19
- auto result = duckdb::SelectBinder::BindExpression(expr_ptr, depth);
19
+ auto result = duckdb::BaseSelectBinder::BindExpression(expr_ptr, depth);
20
20
  if (!result.HasError()) {
21
21
  return result;
22
22
  }
@@ -43,7 +43,7 @@ BindResult QualifyBinder::BindExpression(unique_ptr<ParsedExpression> *expr_ptr,
43
43
  case ExpressionClass::COLUMN_REF:
44
44
  return BindColumnRef(expr_ptr, depth, root_expression);
45
45
  default:
46
- return duckdb::SelectBinder::BindExpression(expr_ptr, depth);
46
+ return duckdb::BaseSelectBinder::BindExpression(expr_ptr, depth);
47
47
  }
48
48
  }
49
49
 
@@ -1,145 +1,14 @@
1
1
  #include "duckdb/planner/expression_binder/select_binder.hpp"
2
2
 
3
- #include "duckdb/parser/expression/columnref_expression.hpp"
4
- #include "duckdb/parser/expression/window_expression.hpp"
5
- #include "duckdb/parser/parsed_expression_iterator.hpp"
6
- #include "duckdb/planner/expression/bound_columnref_expression.hpp"
7
- #include "duckdb/planner/expression/bound_window_expression.hpp"
8
- #include "duckdb/planner/expression_binder/aggregate_binder.hpp"
9
- #include "duckdb/planner/query_node/bound_select_node.hpp"
10
- #include "duckdb/parser/expression/operator_expression.hpp"
11
- #include "duckdb/common/string_util.hpp"
12
- #include "duckdb/planner/binder.hpp"
13
-
14
3
  namespace duckdb {
15
4
 
16
5
  SelectBinder::SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
17
6
  case_insensitive_map_t<idx_t> alias_map)
18
- : ExpressionBinder(binder, context), inside_window(false), node(node), info(info), alias_map(std::move(alias_map)) {
7
+ : BaseSelectBinder(binder, context, node, info, std::move(alias_map)) {
19
8
  }
20
9
 
21
10
  SelectBinder::SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info)
22
11
  : SelectBinder(binder, context, node, info, case_insensitive_map_t<idx_t>()) {
23
12
  }
24
13
 
25
- BindResult SelectBinder::BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth, bool root_expression) {
26
- auto &expr = **expr_ptr;
27
- // check if the expression binds to one of the groups
28
- auto group_index = TryBindGroup(expr, depth);
29
- if (group_index != DConstants::INVALID_INDEX) {
30
- return BindGroup(expr, depth, group_index);
31
- }
32
- switch (expr.expression_class) {
33
- case ExpressionClass::COLUMN_REF:
34
- return BindColumnRef(expr_ptr, depth);
35
- case ExpressionClass::DEFAULT:
36
- return BindResult("SELECT clause cannot contain DEFAULT clause");
37
- case ExpressionClass::WINDOW:
38
- return BindWindow((WindowExpression &)expr, depth);
39
- default:
40
- return ExpressionBinder::BindExpression(expr_ptr, depth);
41
- }
42
- }
43
-
44
- idx_t SelectBinder::TryBindGroup(ParsedExpression &expr, idx_t depth) {
45
- // first check the group alias map, if expr is a ColumnRefExpression
46
- if (expr.type == ExpressionType::COLUMN_REF) {
47
- auto &colref = (ColumnRefExpression &)expr;
48
- if (!colref.IsQualified()) {
49
- auto alias_entry = info.alias_map.find(colref.column_names[0]);
50
- if (alias_entry != info.alias_map.end()) {
51
- // found entry!
52
- return alias_entry->second;
53
- }
54
- }
55
- }
56
- // no alias reference found
57
- // check the list of group columns for a match
58
- auto entry = info.map.find(&expr);
59
- if (entry != info.map.end()) {
60
- return entry->second;
61
- }
62
- #ifdef DEBUG
63
- for (auto entry : info.map) {
64
- D_ASSERT(!entry.first->Equals(&expr));
65
- D_ASSERT(!expr.Equals(entry.first));
66
- }
67
- #endif
68
- return DConstants::INVALID_INDEX;
69
- }
70
-
71
- BindResult SelectBinder::BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth) {
72
- // first try to bind the column reference regularly
73
- auto result = ExpressionBinder::BindExpression(expr_ptr, depth);
74
- if (!result.HasError()) {
75
- return result;
76
- }
77
- // binding failed
78
- // check in the alias map
79
- auto &colref = (ColumnRefExpression &)**expr_ptr;
80
- if (!colref.IsQualified()) {
81
- auto alias_entry = alias_map.find(colref.column_names[0]);
82
- if (alias_entry != alias_map.end()) {
83
- // found entry!
84
- auto index = alias_entry->second;
85
- if (index >= node.select_list.size()) {
86
- throw BinderException("Column \"%s\" referenced that exists in the SELECT clause - but this column "
87
- "cannot be referenced before it is defined",
88
- colref.column_names[0]);
89
- }
90
- if (node.select_list[index]->HasSideEffects()) {
91
- throw BinderException("Alias \"%s\" referenced in a SELECT clause - but the expression has side "
92
- "effects. This is not yet supported.",
93
- colref.column_names[0]);
94
- }
95
- if (node.select_list[index]->HasSubquery()) {
96
- throw BinderException("Alias \"%s\" referenced in a SELECT clause - but the expression has a subquery."
97
- " This is not yet supported.",
98
- colref.column_names[0]);
99
- }
100
- auto result = BindResult(node.select_list[index]->Copy());
101
- if (result.expression->type == ExpressionType::BOUND_COLUMN_REF) {
102
- auto &result_expr = (BoundColumnRefExpression &)*result.expression;
103
- result_expr.depth = depth;
104
- }
105
- return result;
106
- }
107
- }
108
- // entry was not found in the alias map: return the original error
109
- return result;
110
- }
111
-
112
- BindResult SelectBinder::BindGroupingFunction(OperatorExpression &op, idx_t depth) {
113
- if (op.children.empty()) {
114
- throw InternalException("GROUPING requires at least one child");
115
- }
116
- if (node.groups.group_expressions.empty()) {
117
- return BindResult(binder.FormatError(op, "GROUPING statement cannot be used without groups"));
118
- }
119
- if (op.children.size() >= 64) {
120
- return BindResult(binder.FormatError(op, "GROUPING statement cannot have more than 64 groups"));
121
- }
122
- vector<idx_t> group_indexes;
123
- group_indexes.reserve(op.children.size());
124
- for (auto &child : op.children) {
125
- ExpressionBinder::QualifyColumnNames(binder, child);
126
- auto idx = TryBindGroup(*child, depth);
127
- if (idx == DConstants::INVALID_INDEX) {
128
- return BindResult(binder.FormatError(
129
- op, StringUtil::Format("GROUPING child \"%s\" must be a grouping column", child->GetName())));
130
- }
131
- group_indexes.push_back(idx);
132
- }
133
- auto col_idx = node.grouping_functions.size();
134
- node.grouping_functions.push_back(std::move(group_indexes));
135
- return BindResult(make_unique<BoundColumnRefExpression>(op.GetName(), LogicalType::BIGINT,
136
- ColumnBinding(node.groupings_index, col_idx), depth));
137
- }
138
-
139
- BindResult SelectBinder::BindGroup(ParsedExpression &expr, idx_t depth, idx_t group_index) {
140
- auto &group = node.groups.group_expressions[group_index];
141
- return BindResult(make_unique<BoundColumnRefExpression>(expr.GetName(), group->return_type,
142
- ColumnBinding(node.group_index, group_index), depth));
143
- }
144
-
145
14
  } // namespace duckdb
@@ -1,6 +1,7 @@
1
1
  #include "duckdb/planner/expression_binder.hpp"
2
2
 
3
3
  #include "duckdb/parser/expression/columnref_expression.hpp"
4
+ #include "duckdb/parser/expression/function_expression.hpp"
4
5
  #include "duckdb/parser/expression/positional_reference_expression.hpp"
5
6
  #include "duckdb/parser/expression/subquery_expression.hpp"
6
7
  #include "duckdb/parser/parsed_expression_iterator.hpp"
@@ -52,9 +53,15 @@ BindResult ExpressionBinder::BindExpression(unique_ptr<ParsedExpression> *expr,
52
53
  return BindExpression((ConjunctionExpression &)expr_ref, depth);
53
54
  case ExpressionClass::CONSTANT:
54
55
  return BindExpression((ConstantExpression &)expr_ref, depth);
55
- case ExpressionClass::FUNCTION:
56
+ case ExpressionClass::FUNCTION: {
57
+ auto &function = (FunctionExpression &)expr_ref;
58
+ if (function.function_name == "unnest" || function.function_name == "unlist") {
59
+ // special case, not in catalog
60
+ return BindUnnest(function, depth, root_expression);
61
+ }
56
62
  // binding function expression has extra parameter needed for macro's
57
- return BindExpression((FunctionExpression &)expr_ref, depth, expr);
63
+ return BindExpression(function, depth, expr);
64
+ }
58
65
  case ExpressionClass::LAMBDA:
59
66
  return BindExpression((LambdaExpression &)expr_ref, depth, false, LogicalTypeId::INVALID);
60
67
  case ExpressionClass::OPERATOR:
@@ -157,7 +164,7 @@ LogicalType ExpressionBinder::ExchangeType(const LogicalType &type, LogicalTypeI
157
164
  for (auto &child_type : child_types) {
158
165
  child_type.second = ExchangeType(child_type.second, target, new_type);
159
166
  }
160
- return LogicalType::STRUCT(std::move(child_types));
167
+ return LogicalType::STRUCT(child_types);
161
168
  }
162
169
  case LogicalTypeId::UNION: {
163
170
  auto member_types = UnionType::CopyMemberTypes(type);
@@ -29,6 +29,11 @@ void ExpressionIterator::EnumerateChildren(Expression &expr,
29
29
  if (aggr_expr.filter) {
30
30
  callback(aggr_expr.filter);
31
31
  }
32
+ if (aggr_expr.order_bys) {
33
+ for (auto &order : aggr_expr.order_bys->orders) {
34
+ callback(order.expression);
35
+ }
36
+ }
32
37
  break;
33
38
  }
34
39
  case ExpressionClass::BOUND_BETWEEN: {
@@ -195,22 +200,24 @@ void ExpressionIterator::EnumerateQueryNodeChildren(BoundQueryNode &node,
195
200
  }
196
201
  case QueryNodeType::SELECT_NODE: {
197
202
  auto &bound_select = (BoundSelectNode &)node;
198
- for (idx_t i = 0; i < bound_select.select_list.size(); i++) {
199
- EnumerateExpression(bound_select.select_list[i], callback);
203
+ for (auto &expr : bound_select.select_list) {
204
+ EnumerateExpression(expr, callback);
200
205
  }
201
206
  EnumerateExpression(bound_select.where_clause, callback);
202
- for (idx_t i = 0; i < bound_select.groups.group_expressions.size(); i++) {
203
- EnumerateExpression(bound_select.groups.group_expressions[i], callback);
207
+ for (auto &expr : bound_select.groups.group_expressions) {
208
+ EnumerateExpression(expr, callback);
204
209
  }
205
210
  EnumerateExpression(bound_select.having, callback);
206
- for (idx_t i = 0; i < bound_select.aggregates.size(); i++) {
207
- EnumerateExpression(bound_select.aggregates[i], callback);
211
+ for (auto &expr : bound_select.aggregates) {
212
+ EnumerateExpression(expr, callback);
208
213
  }
209
- for (idx_t i = 0; i < bound_select.unnests.size(); i++) {
210
- EnumerateExpression(bound_select.unnests[i], callback);
214
+ for (auto &entry : bound_select.unnests) {
215
+ for (auto &expr : entry.second.expressions) {
216
+ EnumerateExpression(expr, callback);
217
+ }
211
218
  }
212
- for (idx_t i = 0; i < bound_select.windows.size(); i++) {
213
- EnumerateExpression(bound_select.windows[i], callback);
219
+ for (auto &expr : bound_select.windows) {
220
+ EnumerateExpression(expr, callback);
214
221
  }
215
222
  if (bound_select.from_table) {
216
223
  EnumerateTableRefChildren(*bound_select.from_table, callback);
@@ -1,8 +1,6 @@
1
1
  #include "duckdb/planner/filter/constant_filter.hpp"
2
-
2
+ #include "duckdb/storage/statistics/base_statistics.hpp"
3
3
  #include "duckdb/common/field_writer.hpp"
4
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
5
- #include "duckdb/storage/statistics/string_statistics.hpp"
6
4
 
7
5
  namespace duckdb {
8
6
 
@@ -12,7 +10,7 @@ ConstantFilter::ConstantFilter(ExpressionType comparison_type_p, Value constant_
12
10
  }
13
11
 
14
12
  FilterPropagateResult ConstantFilter::CheckStatistics(BaseStatistics &stats) {
15
- D_ASSERT(constant.type().id() == stats.type.id());
13
+ D_ASSERT(constant.type().id() == stats.GetType().id());
16
14
  switch (constant.type().InternalType()) {
17
15
  case PhysicalType::UINT8:
18
16
  case PhysicalType::UINT16:
@@ -25,9 +23,9 @@ FilterPropagateResult ConstantFilter::CheckStatistics(BaseStatistics &stats) {
25
23
  case PhysicalType::INT128:
26
24
  case PhysicalType::FLOAT:
27
25
  case PhysicalType::DOUBLE:
28
- return ((NumericStatistics &)stats).CheckZonemap(comparison_type, constant);
26
+ return NumericStats::CheckZonemap(stats, comparison_type, constant);
29
27
  case PhysicalType::VARCHAR:
30
- return ((StringStatistics &)stats).CheckZonemap(comparison_type, StringValue::Get(constant));
28
+ return StringStats::CheckZonemap(stats, comparison_type, StringValue::Get(constant));
31
29
  default:
32
30
  return FilterPropagateResult::NO_PRUNING_POSSIBLE;
33
31
  }
@@ -128,6 +128,8 @@ void LogicalOperator::Verify(ClientContext &context) {
128
128
  continue;
129
129
  }
130
130
  BufferedSerializer serializer;
131
+ // We are serializing a query plan
132
+ serializer.is_query_plan = true;
131
133
  try {
132
134
  expressions[expr_idx]->Serialize(serializer);
133
135
  } catch (NotImplementedException &ex) {
@@ -136,7 +138,7 @@ void LogicalOperator::Verify(ClientContext &context) {
136
138
  }
137
139
 
138
140
  auto data = serializer.GetData();
139
- auto deserializer = BufferedDeserializer(data.data.get(), data.size);
141
+ auto deserializer = BufferedContextDeserializer(context, data.data.get(), data.size);
140
142
 
141
143
  PlanDeserializationState state(context);
142
144
  auto deserialized_expression = Expression::Deserialize(deserializer, state);
@@ -255,6 +257,9 @@ unique_ptr<LogicalOperator> LogicalOperator::Deserialize(Deserializer &deseriali
255
257
  case LogicalOperatorType::LOGICAL_DELIM_JOIN:
256
258
  result = LogicalDelimJoin::Deserialize(state, reader);
257
259
  break;
260
+ case LogicalOperatorType::LOGICAL_ASOF_JOIN:
261
+ result = LogicalAsOfJoin::Deserialize(state, reader);
262
+ break;
258
263
  case LogicalOperatorType::LOGICAL_COMPARISON_JOIN:
259
264
  result = LogicalComparisonJoin::Deserialize(state, reader);
260
265
  break;
@@ -371,7 +376,7 @@ unique_ptr<LogicalOperator> LogicalOperator::Copy(ClientContext &context) const
371
376
  std::string(ex.what()));
372
377
  }
373
378
  auto data = logical_op_serializer.GetData();
374
- auto logical_op_deserializer = BufferedDeserializer(data.data.get(), data.size);
379
+ auto logical_op_deserializer = BufferedContextDeserializer(context, data.data.get(), data.size);
375
380
  PlanDeserializationState state(context);
376
381
  auto op_copy = LogicalOperator::Deserialize(logical_op_deserializer, state);
377
382
  return op_copy;
@@ -48,6 +48,11 @@ void LogicalOperatorVisitor::EnumerateExpressions(LogicalOperator &op,
48
48
  for (auto &target : distinct.distinct_targets) {
49
49
  callback(&target);
50
50
  }
51
+ if (distinct.order_by) {
52
+ for (auto &order : distinct.order_by->orders) {
53
+ callback(&order.expression);
54
+ }
55
+ }
51
56
  break;
52
57
  }
53
58
  case LogicalOperatorType::LOGICAL_INSERT: {
@@ -60,6 +65,7 @@ void LogicalOperatorVisitor::EnumerateExpressions(LogicalOperator &op,
60
65
  }
61
66
  break;
62
67
  }
68
+ case LogicalOperatorType::LOGICAL_ASOF_JOIN:
63
69
  case LogicalOperatorType::LOGICAL_DELIM_JOIN:
64
70
  case LogicalOperatorType::LOGICAL_COMPARISON_JOIN: {
65
71
  if (op.type == LogicalOperatorType::LOGICAL_DELIM_JOIN) {
@@ -0,0 +1,8 @@
1
+ #include "duckdb/planner/operator/logical_asof_join.hpp"
2
+
3
+ namespace duckdb {
4
+
5
+ LogicalAsOfJoin::LogicalAsOfJoin(JoinType type) : LogicalComparisonJoin(type, LogicalOperatorType::LOGICAL_ASOF_JOIN) {
6
+ }
7
+
8
+ } // namespace duckdb
@@ -15,6 +15,9 @@ string LogicalDistinct::ParamsToString() const {
15
15
  }
16
16
  void LogicalDistinct::Serialize(FieldWriter &writer) const {
17
17
  writer.WriteSerializableList(distinct_targets);
18
+ if (order_by) {
19
+ throw NotImplementedException("Serializing ORDER BY not yet supported");
20
+ }
18
21
  }
19
22
 
20
23
  unique_ptr<LogicalOperator> LogicalDistinct::Deserialize(LogicalDeserializationState &state, FieldReader &reader) {
@@ -184,6 +184,7 @@ void Planner::VerifyPlan(ClientContext &context, unique_ptr<LogicalOperator> &op
184
184
  }
185
185
 
186
186
  BufferedSerializer serializer;
187
+ serializer.is_query_plan = true;
187
188
  try {
188
189
  op->Serialize(serializer);
189
190
  } catch (NotImplementedException &ex) {
@@ -191,7 +192,7 @@ void Planner::VerifyPlan(ClientContext &context, unique_ptr<LogicalOperator> &op
191
192
  return;
192
193
  }
193
194
  auto data = serializer.GetData();
194
- auto deserializer = BufferedDeserializer(data.data.get(), data.size);
195
+ auto deserializer = BufferedContextDeserializer(context, data.data.get(), data.size);
195
196
 
196
197
  PlanDeserializationState state(context);
197
198
  auto new_plan = LogicalOperator::Deserialize(deserializer, state);