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
package/binding.gyp CHANGED
@@ -57,6 +57,7 @@
57
57
  "src/duckdb/ub_src_function.cpp",
58
58
  "src/duckdb/ub_src_function_cast.cpp",
59
59
  "src/duckdb/ub_src_function_pragma.cpp",
60
+ "src/duckdb/ub_src_function_scalar_bit.cpp",
60
61
  "src/duckdb/ub_src_function_scalar_blob.cpp",
61
62
  "src/duckdb/ub_src_function_scalar_date.cpp",
62
63
  "src/duckdb/ub_src_function_scalar.cpp",
@@ -68,6 +69,7 @@
68
69
  "src/duckdb/ub_src_function_scalar_operators.cpp",
69
70
  "src/duckdb/ub_src_function_scalar_sequence.cpp",
70
71
  "src/duckdb/ub_src_function_scalar_string.cpp",
72
+ "src/duckdb/ub_src_function_scalar_string_regexp.cpp",
71
73
  "src/duckdb/ub_src_function_scalar_struct.cpp",
72
74
  "src/duckdb/ub_src_function_scalar_system.cpp",
73
75
  "src/duckdb/ub_src_function_scalar_union.cpp",
@@ -222,16 +224,18 @@
222
224
  "src/duckdb/third_party/zstd/compress/zstd_lazy.cpp",
223
225
  "src/duckdb/third_party/zstd/compress/zstd_ldm.cpp",
224
226
  "src/duckdb/third_party/zstd/compress/zstd_opt.cpp",
225
- "src/duckdb/extension/icu/./icu-dateadd.cpp",
226
- "src/duckdb/extension/icu/./icu-datetrunc.cpp",
227
- "src/duckdb/extension/icu/./icu-strptime.cpp",
227
+ "src/duckdb/extension/icu/./icu-list-range.cpp",
228
+ "src/duckdb/extension/icu/./icu-datepart.cpp",
229
+ "src/duckdb/extension/icu/./icu-timebucket.cpp",
230
+ "src/duckdb/extension/icu/./icu-timezone.cpp",
228
231
  "src/duckdb/extension/icu/./icu-datefunc.cpp",
229
- "src/duckdb/extension/icu/./icu-extension.cpp",
230
232
  "src/duckdb/extension/icu/./icu-makedate.cpp",
231
- "src/duckdb/extension/icu/./icu-timezone.cpp",
233
+ "src/duckdb/extension/icu/./icu-datetrunc.cpp",
234
+ "src/duckdb/extension/icu/./icu-table-range.cpp",
235
+ "src/duckdb/extension/icu/./icu-extension.cpp",
236
+ "src/duckdb/extension/icu/./icu-dateadd.cpp",
232
237
  "src/duckdb/extension/icu/./icu-datesub.cpp",
233
- "src/duckdb/extension/icu/./icu-timebucket.cpp",
234
- "src/duckdb/extension/icu/./icu-datepart.cpp",
238
+ "src/duckdb/extension/icu/./icu-strptime.cpp",
235
239
  "src/duckdb/ub_extension_icu_third_party_icu_common.cpp",
236
240
  "src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp",
237
241
  "src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp",
@@ -240,6 +244,7 @@
240
244
  "src/duckdb/extension/json/json_common.cpp",
241
245
  "src/duckdb/extension/json/json_functions.cpp",
242
246
  "src/duckdb/extension/json/json_scan.cpp",
247
+ "src/duckdb/extension/json/json_serializer.cpp",
243
248
  "src/duckdb/ub_extension_json_json_functions.cpp",
244
249
  "src/duckdb/extension/json/yyjson/yyjson.cpp"
245
250
  ],
package/lib/duckdb.d.ts CHANGED
@@ -4,14 +4,67 @@
4
4
  * on Node.JS API
5
5
  */
6
6
 
7
+ export type ExceptionType =
8
+ | "Invalid" // invalid type
9
+ | "Out of Range" // value out of range error
10
+ | "Conversion" // conversion/casting error
11
+ | "Unknown Type" // unknown type
12
+ | "Decimal" // decimal related
13
+ | "Mismatch Type" // type mismatch
14
+ | "Divide by Zero" // divide by 0
15
+ | "Object Size" // object size exceeded
16
+ | "Invalid type" // incompatible for operation
17
+ | "Serialization" // serialization
18
+ | "TransactionContext" // transaction management
19
+ | "Not implemented" // method not implemented
20
+ | "Expression" // expression parsing
21
+ | "Catalog" // catalog related
22
+ | "Parser" // parser related
23
+ | "Binder" // binder related
24
+ | "Planner" // planner related
25
+ | "Scheduler" // scheduler related
26
+ | "Executor" // executor related
27
+ | "Constraint" // constraint related
28
+ | "Index" // index related
29
+ | "Stat" // stat related
30
+ | "Connection" // connection related
31
+ | "Syntax" // syntax related
32
+ | "Settings" // settings related
33
+ | "Optimizer" // optimizer related
34
+ | "NullPointer" // nullptr exception
35
+ | "IO" // IO exception
36
+ | "INTERRUPT" // interrupt
37
+ | "FATAL" // Fatal exceptions are non-recoverable and render the entire DB in an unusable state
38
+ | "INTERNAL" // Internal exceptions indicate something went wrong internally (i.e. bug in the code base)
39
+ | "Invalid Input" // Input or arguments error
40
+ | "Out of Memory" // out of memory
41
+ | "Permission" // insufficient permissions
42
+ | "Parameter Not Resolved" // parameter types could not be resolved
43
+ | "Parameter Not Allowed" // parameter types not allowed
44
+ | "Dependency" // dependency
45
+ | "Unknown"
46
+ | "HTTP"
47
+ ;
48
+
7
49
  /**
8
50
  * Standard error shape for DuckDB errors
9
51
  */
10
- export interface DuckDbError extends Error {
52
+ export interface _DuckDbError extends Error {
11
53
  errno: -1; // value of ERROR
12
54
  code: 'DUCKDB_NODEJS_ERROR';
55
+ errorType: ExceptionType;
56
+ }
57
+
58
+ export interface HttpError extends _DuckDbError {
59
+ errorType: 'HTTP';
60
+ statusCode: number;
61
+ response: string;
62
+ reason: string;
63
+ headers: Record<string, string>;
13
64
  }
14
65
 
66
+ export type DuckDbError = HttpError | _DuckDbError;
67
+
15
68
  type Callback<T> = (err: DuckDbError | null, res: T) => void;
16
69
 
17
70
  export type RowData = {
@@ -47,7 +100,7 @@ export class Connection {
47
100
  unregister_udf(name: string, callback: Callback<any>): void;
48
101
 
49
102
  stream(sql: any, ...args: any[]): QueryResult;
50
- arrowIPCStream(sql: any, ...args: any[]): IpcResultStreamIterator;
103
+ arrowIPCStream(sql: any, ...args: any[]): Promise<IpcResultStreamIterator>;
51
104
 
52
105
  register_buffer(name: string, array: ArrowIterable, force: boolean, callback?: Callback<void>): void;
53
106
  unregister_buffer(name: string, callback?: Callback<void>): void;
package/lib/duckdb.js CHANGED
@@ -189,7 +189,7 @@ Connection.prototype.arrowIPCAll = function (sql) {
189
189
  * @arg sql
190
190
  * @param {...*} params
191
191
  * @param callback
192
- * @return IpcResultStreamIterator
192
+ * @return Promise<IpcResultStreamIterator>
193
193
  */
194
194
  Connection.prototype.arrowIPCStream = async function (sql) {
195
195
  const query = "SELECT * FROM to_arrow_ipc((" + sql + "));";
@@ -688,3 +688,22 @@ Statement.prototype.stream;
688
688
  * @returns sql contained in statement
689
689
  */
690
690
  Statement.prototype.sql;
691
+
692
+ /**
693
+ * @typedef DuckDbError
694
+ * @type {object}
695
+ * @property {number} errno - -1 for DuckDB errors
696
+ * @property {string} message - Error message
697
+ * @property {string} code - 'DUCKDB_NODEJS_ERROR' for DuckDB errors
698
+ * @property {string} errorType - DuckDB error type code (eg, HTTP, IO, Catalog)
699
+ */
700
+
701
+ /**
702
+ * @typedef HTTPError
703
+ * @type {object}
704
+ * @extends {DuckDbError}
705
+ * @property {number} statusCode - HTTP response status code
706
+ * @property {string} reason - HTTP response reason
707
+ * @property {string} response - HTTP response body
708
+ * @property {object} headers - HTTP headers
709
+ */
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
4
  "types": "./lib/duckdb.d.ts",
5
- "version": "0.7.2-dev0.0",
5
+ "version": "0.7.2-dev1034.0",
6
6
  "description": "DuckDB node.js API",
7
7
  "gypfile": true,
8
8
  "dependencies": {
@@ -388,8 +388,7 @@ struct ExecTask : public Task {
388
388
  void Callback() override {
389
389
  auto env = object.Env();
390
390
  Napi::HandleScope scope(env);
391
- callback.Value().MakeCallback(object.Value(),
392
- {success ? env.Null() : Utils::CreateError(env, error.Message())});
391
+ callback.Value().MakeCallback(object.Value(), {success ? env.Null() : Utils::CreateError(env, error)});
393
392
  };
394
393
 
395
394
  std::string sql;
package/src/database.cpp CHANGED
@@ -73,7 +73,7 @@ struct OpenTask : public Task {
73
73
 
74
74
  std::vector<napi_value> args;
75
75
  if (!success) {
76
- args.push_back(Utils::CreateError(env, error.Message()));
76
+ args.push_back(Utils::CreateError(env, error));
77
77
  } else {
78
78
  args.push_back(env.Null());
79
79
  }
@@ -13,6 +13,8 @@
13
13
  #include "include/icu-datesub.hpp"
14
14
  #include "include/icu-datetrunc.hpp"
15
15
  #include "include/icu-makedate.hpp"
16
+ #include "include/icu-list-range.hpp"
17
+ #include "include/icu-table-range.hpp"
16
18
  #include "include/icu-strptime.hpp"
17
19
  #include "include/icu-timebucket.hpp"
18
20
  #include "include/icu-timezone.hpp"
@@ -266,6 +268,8 @@ void ICUExtension::Load(DuckDB &db) {
266
268
  RegisterICUDateSubFunctions(*con.context);
267
269
  RegisterICUDateTruncFunctions(*con.context);
268
270
  RegisterICUMakeDateFunctions(*con.context);
271
+ RegisterICUTableRangeFunctions(*con.context);
272
+ RegisterICUListRangeFunctions(*con.context);
269
273
  RegisterICUStrptimeFunctions(*con.context);
270
274
  RegisterICUTimeBucketFunctions(*con.context);
271
275
  RegisterICUTimeZoneFunctions(*con.context);
@@ -0,0 +1,207 @@
1
+ #include "duckdb/common/exception.hpp"
2
+ #include "duckdb/common/types/interval.hpp"
3
+ #include "duckdb/common/types/timestamp.hpp"
4
+ #include "duckdb/common/types/vector.hpp"
5
+ #include "duckdb/function/function_set.hpp"
6
+ #include "duckdb/function/scalar_function.hpp"
7
+ #include "duckdb/main/client_context.hpp"
8
+ #include "duckdb/parser/parsed_data/create_scalar_function_info.hpp"
9
+ #include "include/icu-datefunc.hpp"
10
+
11
+ namespace duckdb {
12
+
13
+ struct ICUListRange : public ICUDateFunc {
14
+ template <bool INCLUSIVE_BOUND>
15
+ class RangeInfoStruct {
16
+ public:
17
+ explicit RangeInfoStruct(DataChunk &args_p) : args(args_p) {
18
+ if (args.ColumnCount() == 3) {
19
+ args.data[0].ToUnifiedFormat(args.size(), vdata[0]);
20
+ args.data[1].ToUnifiedFormat(args.size(), vdata[1]);
21
+ args.data[2].ToUnifiedFormat(args.size(), vdata[2]);
22
+ } else {
23
+ throw InternalException("Unsupported number of parameters for range");
24
+ }
25
+ }
26
+
27
+ bool RowIsValid(idx_t row_idx) {
28
+ for (idx_t i = 0; i < args.ColumnCount(); i++) {
29
+ auto idx = vdata[i].sel->get_index(row_idx);
30
+ if (!vdata[i].validity.RowIsValid(idx)) {
31
+ return false;
32
+ }
33
+ }
34
+ return true;
35
+ }
36
+
37
+ timestamp_t StartListValue(idx_t row_idx) {
38
+ auto data = (timestamp_t *)vdata[0].data;
39
+ auto idx = vdata[0].sel->get_index(row_idx);
40
+ return data[idx];
41
+ }
42
+
43
+ timestamp_t EndListValue(idx_t row_idx) {
44
+ auto data = (timestamp_t *)vdata[1].data;
45
+ auto idx = vdata[1].sel->get_index(row_idx);
46
+ return data[idx];
47
+ }
48
+
49
+ interval_t ListIncrementValue(idx_t row_idx) {
50
+ auto data = (interval_t *)vdata[2].data;
51
+ auto idx = vdata[2].sel->get_index(row_idx);
52
+ return data[idx];
53
+ }
54
+
55
+ void GetListValues(idx_t row_idx, timestamp_t &start_value, timestamp_t &end_value,
56
+ interval_t &increment_value) {
57
+ start_value = StartListValue(row_idx);
58
+ end_value = EndListValue(row_idx);
59
+ increment_value = ListIncrementValue(row_idx);
60
+ }
61
+
62
+ uint64_t ListLength(idx_t row_idx, icu::Calendar *calendar) {
63
+ timestamp_t start_value;
64
+ timestamp_t end_value;
65
+ interval_t increment_value;
66
+ GetListValues(row_idx, start_value, end_value, increment_value);
67
+ return ListLength(start_value, end_value, increment_value, INCLUSIVE_BOUND, calendar);
68
+ }
69
+
70
+ void Increment(timestamp_t &input, interval_t increment, icu::Calendar *calendar) {
71
+ input = Add(calendar, input, increment);
72
+ }
73
+
74
+ private:
75
+ DataChunk &args;
76
+ UnifiedVectorFormat vdata[3];
77
+
78
+ uint64_t ListLength(timestamp_t start_value, timestamp_t end_value, interval_t increment_value,
79
+ bool inclusive_bound, icu::Calendar *calendar) {
80
+ bool is_positive = increment_value.months > 0 || increment_value.days > 0 || increment_value.micros > 0;
81
+ bool is_negative = increment_value.months < 0 || increment_value.days < 0 || increment_value.micros < 0;
82
+ if (!is_negative && !is_positive) {
83
+ // interval is 0: no result
84
+ return 0;
85
+ }
86
+ // We don't allow infinite bounds because they generate errors or infinite loops
87
+ if (!Timestamp::IsFinite(start_value) || !Timestamp::IsFinite(end_value)) {
88
+ throw InvalidInputException("Interval infinite bounds not supported");
89
+ }
90
+
91
+ if (is_negative && is_positive) {
92
+ // we don't allow a mix of
93
+ throw InvalidInputException("Interval with mix of negative/positive entries not supported");
94
+ }
95
+ if (start_value > end_value && is_positive) {
96
+ return 0;
97
+ }
98
+ if (start_value < end_value && is_negative) {
99
+ return 0;
100
+ }
101
+ int64_t total_values = 0;
102
+ if (is_negative) {
103
+ // negative interval, start_value is going down
104
+ while (inclusive_bound ? start_value >= end_value : start_value > end_value) {
105
+ start_value = Add(calendar, start_value, increment_value);
106
+ total_values++;
107
+ if (total_values > NumericLimits<uint32_t>::Maximum()) {
108
+ throw InvalidInputException("Lists larger than 2^32 elements are not supported");
109
+ }
110
+ }
111
+ } else {
112
+ // positive interval, start_value is going up
113
+ while (inclusive_bound ? start_value <= end_value : start_value < end_value) {
114
+ start_value = Add(calendar, start_value, increment_value);
115
+ total_values++;
116
+ if (total_values > NumericLimits<uint32_t>::Maximum()) {
117
+ throw InvalidInputException("Lists larger than 2^32 elements are not supported");
118
+ }
119
+ }
120
+ }
121
+ return total_values;
122
+ }
123
+ };
124
+
125
+ template <bool INCLUSIVE_BOUND>
126
+ static void ICUListRangeFunction(DataChunk &args, ExpressionState &state, Vector &result) {
127
+ D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
128
+ D_ASSERT(args.ColumnCount() == 3);
129
+
130
+ auto &func_expr = (BoundFunctionExpression &)state.expr;
131
+ auto &bind_info = (BindData &)*func_expr.bind_info;
132
+ CalendarPtr calendar_ptr(bind_info.calendar->clone());
133
+ auto calendar = calendar_ptr.get();
134
+
135
+ RangeInfoStruct<INCLUSIVE_BOUND> info(args);
136
+ idx_t args_size = 1;
137
+ auto result_type = VectorType::CONSTANT_VECTOR;
138
+ for (idx_t i = 0; i < args.ColumnCount(); i++) {
139
+ if (args.data[i].GetVectorType() != VectorType::CONSTANT_VECTOR) {
140
+ args_size = args.size();
141
+ result_type = VectorType::FLAT_VECTOR;
142
+ break;
143
+ }
144
+ }
145
+ auto list_data = FlatVector::GetData<list_entry_t>(result);
146
+ auto &result_validity = FlatVector::Validity(result);
147
+ int64_t total_size = 0;
148
+ for (idx_t i = 0; i < args_size; i++) {
149
+ if (!info.RowIsValid(i)) {
150
+ result_validity.SetInvalid(i);
151
+ list_data[i].offset = total_size;
152
+ list_data[i].length = 0;
153
+ } else {
154
+ list_data[i].offset = total_size;
155
+ list_data[i].length = info.ListLength(i, calendar);
156
+ total_size += list_data[i].length;
157
+ }
158
+ }
159
+
160
+ // now construct the child vector of the list
161
+ ListVector::Reserve(result, total_size);
162
+ auto range_data = FlatVector::GetData<timestamp_t>(ListVector::GetEntry(result));
163
+ idx_t total_idx = 0;
164
+ for (idx_t i = 0; i < args_size; i++) {
165
+ timestamp_t start_value = info.StartListValue(i);
166
+ interval_t increment = info.ListIncrementValue(i);
167
+
168
+ timestamp_t range_value = start_value;
169
+ for (idx_t range_idx = 0; range_idx < list_data[i].length; range_idx++) {
170
+ if (range_idx > 0) {
171
+ info.Increment(range_value, increment, calendar);
172
+ }
173
+ range_data[total_idx++] = range_value;
174
+ }
175
+ }
176
+
177
+ ListVector::SetListSize(result, total_size);
178
+ result.SetVectorType(result_type);
179
+
180
+ result.Verify(args.size());
181
+ }
182
+
183
+ static void AddICUListRangeFunction(ClientContext &context) {
184
+ auto &catalog = Catalog::GetSystemCatalog(context);
185
+
186
+ ScalarFunctionSet range("range");
187
+ range.AddFunction(ScalarFunction({LogicalType::TIMESTAMP_TZ, LogicalType::TIMESTAMP_TZ, LogicalType::INTERVAL},
188
+ LogicalType::LIST(LogicalType::TIMESTAMP_TZ), ICUListRangeFunction<false>,
189
+ Bind));
190
+ CreateScalarFunctionInfo range_func_info(range);
191
+ catalog.AddFunction(context, &range_func_info);
192
+
193
+ // generate_series: similar to range, but inclusive instead of exclusive bounds on the RHS
194
+ ScalarFunctionSet generate_series("generate_series");
195
+ generate_series.AddFunction(
196
+ ScalarFunction({LogicalType::TIMESTAMP_TZ, LogicalType::TIMESTAMP_TZ, LogicalType::INTERVAL},
197
+ LogicalType::LIST(LogicalType::TIMESTAMP_TZ), ICUListRangeFunction<true>, Bind));
198
+ CreateScalarFunctionInfo generate_series_func_info(generate_series);
199
+ catalog.AddFunction(context, &generate_series_func_info);
200
+ }
201
+ };
202
+
203
+ void RegisterICUListRangeFunctions(ClientContext &context) {
204
+ ICUListRange::AddICUListRangeFunction(context);
205
+ }
206
+
207
+ } // namespace duckdb
@@ -0,0 +1,194 @@
1
+ #include "duckdb/common/exception.hpp"
2
+ #include "duckdb/common/types/interval.hpp"
3
+ #include "duckdb/common/types/timestamp.hpp"
4
+ #include "duckdb/function/function_set.hpp"
5
+ #include "duckdb/function/table_function.hpp"
6
+ #include "duckdb/parser/parsed_data/create_table_function_info.hpp"
7
+ #include "include/icu-datefunc.hpp"
8
+ #include "unicode/calendar.h"
9
+
10
+ namespace duckdb {
11
+
12
+ struct ICUTableRange {
13
+ using CalendarPtr = unique_ptr<icu::Calendar>;
14
+
15
+ struct BindData : public TableFunctionData {
16
+ BindData(const BindData &other)
17
+ : TableFunctionData(other), tz_setting(other.tz_setting), cal_setting(other.cal_setting),
18
+ calendar(other.calendar->clone()), start(other.start), end(other.end), increment(other.increment),
19
+ inclusive_bound(other.inclusive_bound), greater_than_check(other.greater_than_check) {
20
+ }
21
+
22
+ explicit BindData(ClientContext &context) {
23
+ Value tz_value;
24
+ if (context.TryGetCurrentSetting("TimeZone", tz_value)) {
25
+ tz_setting = tz_value.ToString();
26
+ }
27
+ auto tz = icu::TimeZone::createTimeZone(icu::UnicodeString::fromUTF8(icu::StringPiece(tz_setting)));
28
+
29
+ string cal_id("@calendar=");
30
+ Value cal_value;
31
+ if (context.TryGetCurrentSetting("Calendar", cal_value)) {
32
+ cal_setting = cal_value.ToString();
33
+ cal_id += cal_setting;
34
+ } else {
35
+ cal_id += "gregorian";
36
+ }
37
+
38
+ icu::Locale locale(cal_id.c_str());
39
+
40
+ UErrorCode success = U_ZERO_ERROR;
41
+ calendar.reset(icu::Calendar::createInstance(tz, locale, success));
42
+ if (U_FAILURE(success)) {
43
+ throw Exception("Unable to create ICU calendar.");
44
+ }
45
+ }
46
+
47
+ string tz_setting;
48
+ string cal_setting;
49
+ CalendarPtr calendar;
50
+
51
+ timestamp_t start;
52
+ timestamp_t end;
53
+ interval_t increment;
54
+ bool inclusive_bound;
55
+ bool greater_than_check;
56
+
57
+ bool Equals(const FunctionData &other_p) const override {
58
+ auto &other = (const BindData &)other_p;
59
+ return other.start == start && other.end == end && other.increment == increment &&
60
+ other.inclusive_bound == inclusive_bound && other.greater_than_check == greater_than_check &&
61
+ *calendar == *other.calendar;
62
+ }
63
+
64
+ unique_ptr<FunctionData> Copy() const override {
65
+ return make_unique<BindData>(*this);
66
+ }
67
+
68
+ bool Finished(timestamp_t current_value) {
69
+ if (greater_than_check) {
70
+ if (inclusive_bound) {
71
+ return current_value > end;
72
+ } else {
73
+ return current_value >= end;
74
+ }
75
+ } else {
76
+ if (inclusive_bound) {
77
+ return current_value < end;
78
+ } else {
79
+ return current_value <= end;
80
+ }
81
+ }
82
+ }
83
+ };
84
+
85
+ template <bool GENERATE_SERIES>
86
+ static unique_ptr<FunctionData> Bind(ClientContext &context, TableFunctionBindInput &input,
87
+ vector<LogicalType> &return_types, vector<string> &names) {
88
+ auto result = make_unique<BindData>(context);
89
+
90
+ auto &inputs = input.inputs;
91
+ D_ASSERT(inputs.size() == 3);
92
+ result->start = inputs[0].GetValue<timestamp_t>();
93
+ result->end = inputs[1].GetValue<timestamp_t>();
94
+ result->increment = inputs[2].GetValue<interval_t>();
95
+
96
+ // Infinities either cause errors or infinite loops, so just ban them
97
+ if (!Timestamp::IsFinite(result->start) || !Timestamp::IsFinite(result->end)) {
98
+ throw BinderException("RANGE with infinite bounds is not supported");
99
+ }
100
+
101
+ if (result->increment.months == 0 && result->increment.days == 0 && result->increment.micros == 0) {
102
+ throw BinderException("interval cannot be 0!");
103
+ }
104
+ // all elements should point in the same direction
105
+ if (result->increment.months > 0 || result->increment.days > 0 || result->increment.micros > 0) {
106
+ if (result->increment.months < 0 || result->increment.days < 0 || result->increment.micros < 0) {
107
+ throw BinderException("RANGE with composite interval that has mixed signs is not supported");
108
+ }
109
+ result->greater_than_check = true;
110
+ if (result->start > result->end) {
111
+ throw BinderException(
112
+ "start is bigger than end, but increment is positive: cannot generate infinite series");
113
+ }
114
+ } else {
115
+ result->greater_than_check = false;
116
+ if (result->start < result->end) {
117
+ throw BinderException(
118
+ "start is smaller than end, but increment is negative: cannot generate infinite series");
119
+ }
120
+ }
121
+ return_types.push_back(inputs[0].type());
122
+ if (GENERATE_SERIES) {
123
+ // generate_series has inclusive bounds on the RHS
124
+ result->inclusive_bound = true;
125
+ names.emplace_back("generate_series");
126
+ } else {
127
+ result->inclusive_bound = false;
128
+ names.emplace_back("range");
129
+ }
130
+ return std::move(result);
131
+ }
132
+
133
+ struct State : public GlobalTableFunctionState {
134
+ explicit State(timestamp_t start_p) : current_state(start_p) {
135
+ }
136
+
137
+ timestamp_t current_state;
138
+ bool finished = false;
139
+ };
140
+
141
+ static unique_ptr<GlobalTableFunctionState> Init(ClientContext &context, TableFunctionInitInput &input) {
142
+ auto &bind_data = (BindData &)*input.bind_data;
143
+ return make_unique<State>(bind_data.start);
144
+ }
145
+
146
+ static void ICUTableRangeFunction(ClientContext &context, TableFunctionInput &data_p, DataChunk &output) {
147
+ auto &bind_data = (BindData &)*data_p.bind_data;
148
+ CalendarPtr calendar_ptr(bind_data.calendar->clone());
149
+ auto calendar = calendar_ptr.get();
150
+ auto &state = (State &)*data_p.global_state;
151
+ if (state.finished) {
152
+ return;
153
+ }
154
+
155
+ idx_t size = 0;
156
+ auto data = FlatVector::GetData<timestamp_t>(output.data[0]);
157
+ while (true) {
158
+ data[size++] = state.current_state;
159
+ state.current_state = ICUDateFunc::Add(calendar, state.current_state, bind_data.increment);
160
+ if (bind_data.Finished(state.current_state)) {
161
+ state.finished = true;
162
+ break;
163
+ }
164
+ if (size >= STANDARD_VECTOR_SIZE) {
165
+ break;
166
+ }
167
+ }
168
+ output.SetCardinality(size);
169
+ }
170
+
171
+ static void AddICUTableRangeFunction(ClientContext &context) {
172
+ auto &catalog = Catalog::GetSystemCatalog(context);
173
+
174
+ TableFunctionSet range("range");
175
+ range.AddFunction(TableFunction({LogicalType::TIMESTAMP_TZ, LogicalType::TIMESTAMP_TZ, LogicalType::INTERVAL},
176
+ ICUTableRangeFunction, Bind<false>, Init));
177
+ CreateTableFunctionInfo range_func_info(range);
178
+ catalog.AddFunction(context, &range_func_info);
179
+
180
+ // generate_series: similar to range, but inclusive instead of exclusive bounds on the RHS
181
+ TableFunctionSet generate_series("generate_series");
182
+ generate_series.AddFunction(
183
+ TableFunction({LogicalType::TIMESTAMP_TZ, LogicalType::TIMESTAMP_TZ, LogicalType::INTERVAL},
184
+ ICUTableRangeFunction, Bind<true>, Init));
185
+ CreateTableFunctionInfo generate_series_func_info(generate_series);
186
+ catalog.AddFunction(context, &generate_series_func_info);
187
+ }
188
+ };
189
+
190
+ void RegisterICUTableRangeFunctions(ClientContext &context) {
191
+ ICUTableRange::AddICUTableRangeFunction(context);
192
+ }
193
+
194
+ } // namespace duckdb
@@ -0,0 +1,17 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // icu-list-range.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ void RegisterICUListRangeFunctions(ClientContext &context);
16
+
17
+ } // namespace duckdb
@@ -0,0 +1,17 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // icu-table-range.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ void RegisterICUTableRangeFunctions(ClientContext &context);
16
+
17
+ } // namespace duckdb
@@ -100,6 +100,7 @@ public:
100
100
  static constexpr auto READ_FLAG = YYJSON_READ_ALLOW_INF_AND_NAN | YYJSON_READ_ALLOW_TRAILING_COMMAS;
101
101
  static constexpr auto STOP_READ_FLAG = READ_FLAG | YYJSON_READ_STOP_WHEN_DONE | YYJSON_READ_INSITU;
102
102
  static constexpr auto WRITE_FLAG = YYJSON_WRITE_ALLOW_INF_AND_NAN;
103
+ static constexpr auto WRITE_PRETTY_FLAG = YYJSON_WRITE_ALLOW_INF_AND_NAN | YYJSON_WRITE_PRETTY;
103
104
 
104
105
  public:
105
106
  //! Constant JSON type strings
@@ -54,6 +54,7 @@ public:
54
54
 
55
55
  struct JSONFunctionLocalState : public FunctionLocalState {
56
56
  public:
57
+ explicit JSONFunctionLocalState(Allocator &allocator);
57
58
  explicit JSONFunctionLocalState(ClientContext &context);
58
59
  static unique_ptr<FunctionLocalState> Init(ExpressionState &state, const BoundFunctionExpression &expr,
59
60
  FunctionData *bind_data);
@@ -94,6 +95,7 @@ private:
94
95
  static CreateScalarFunctionInfo GetKeysFunction();
95
96
  static CreateScalarFunctionInfo GetTypeFunction();
96
97
  static CreateScalarFunctionInfo GetValidFunction();
98
+ static CreateScalarFunctionInfo GetSerializeSqlFunction();
97
99
 
98
100
  template <class FUNCTION_INFO>
99
101
  static void AddAliases(const vector<string> &names, FUNCTION_INFO fun, vector<FUNCTION_INFO> &functions) {