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
@@ -30,11 +30,102 @@
30
30
  #include "duckdb/function/cast/cast_function_set.hpp"
31
31
  #include "duckdb/main/error_manager.hpp"
32
32
 
33
+ #include "duckdb/common/serializer/format_serializer.hpp"
34
+ #include "duckdb/common/serializer/format_deserializer.hpp"
35
+
33
36
  #include <utility>
34
37
  #include <cmath>
35
38
 
36
39
  namespace duckdb {
37
40
 
41
+ //===--------------------------------------------------------------------===//
42
+ // Extra Value Info
43
+ //===--------------------------------------------------------------------===//
44
+ enum class ExtraValueInfoType : uint8_t { INVALID_TYPE_INFO = 0, STRING_VALUE_INFO = 1, NESTED_VALUE_INFO = 2 };
45
+
46
+ struct ExtraValueInfo {
47
+ explicit ExtraValueInfo(ExtraValueInfoType type) : type(type) {
48
+ }
49
+ virtual ~ExtraValueInfo() {
50
+ }
51
+
52
+ ExtraValueInfoType type;
53
+
54
+ public:
55
+ bool Equals(ExtraValueInfo *other_p) const {
56
+ if (!other_p) {
57
+ return false;
58
+ }
59
+ if (type != other_p->type) {
60
+ return false;
61
+ }
62
+ return EqualsInternal(other_p);
63
+ }
64
+
65
+ template <class T>
66
+ T &Get() {
67
+ if (type != T::TYPE) {
68
+ throw InternalException("ExtraValueInfo type mismatch");
69
+ }
70
+ return (T &)*this;
71
+ }
72
+
73
+ protected:
74
+ virtual bool EqualsInternal(ExtraValueInfo *other_p) const {
75
+ return true;
76
+ }
77
+ };
78
+
79
+ //===--------------------------------------------------------------------===//
80
+ // String Value Info
81
+ //===--------------------------------------------------------------------===//
82
+ struct StringValueInfo : public ExtraValueInfo {
83
+ static constexpr const ExtraValueInfoType TYPE = ExtraValueInfoType::STRING_VALUE_INFO;
84
+
85
+ public:
86
+ explicit StringValueInfo(string str_p)
87
+ : ExtraValueInfo(ExtraValueInfoType::STRING_VALUE_INFO), str(std::move(str_p)) {
88
+ }
89
+
90
+ const string &GetString() {
91
+ return str;
92
+ }
93
+
94
+ protected:
95
+ bool EqualsInternal(ExtraValueInfo *other_p) const override {
96
+ return other_p->Get<StringValueInfo>().str == str;
97
+ }
98
+
99
+ string str;
100
+ };
101
+
102
+ //===--------------------------------------------------------------------===//
103
+ // Nested Value Info
104
+ //===--------------------------------------------------------------------===//
105
+ struct NestedValueInfo : public ExtraValueInfo {
106
+ static constexpr const ExtraValueInfoType TYPE = ExtraValueInfoType::NESTED_VALUE_INFO;
107
+
108
+ public:
109
+ NestedValueInfo() : ExtraValueInfo(ExtraValueInfoType::NESTED_VALUE_INFO) {
110
+ }
111
+ explicit NestedValueInfo(vector<Value> values_p)
112
+ : ExtraValueInfo(ExtraValueInfoType::NESTED_VALUE_INFO), values(std::move(values_p)) {
113
+ }
114
+
115
+ const vector<Value> &GetValues() {
116
+ return values;
117
+ }
118
+
119
+ protected:
120
+ bool EqualsInternal(ExtraValueInfo *other_p) const override {
121
+ return other_p->Get<NestedValueInfo>().values == values;
122
+ }
123
+
124
+ vector<Value> values;
125
+ };
126
+ //===--------------------------------------------------------------------===//
127
+ // Value
128
+ //===--------------------------------------------------------------------===//
38
129
  Value::Value(LogicalType type) : type_(std::move(type)), is_null(true) {
39
130
  }
40
131
 
@@ -60,36 +151,36 @@ Value::Value(const char *val) : Value(val ? string(val) : string()) {
60
151
  Value::Value(std::nullptr_t val) : Value(LogicalType::VARCHAR) {
61
152
  }
62
153
 
63
- Value::Value(string_t val) : Value(string(val.GetDataUnsafe(), val.GetSize())) {
154
+ Value::Value(string_t val) : Value(val.GetString()) {
64
155
  }
65
156
 
66
- Value::Value(string val) : type_(LogicalType::VARCHAR), is_null(false), str_value(std::move(val)) {
67
- if (!Value::StringIsValid(str_value.c_str(), str_value.size())) {
68
- throw Exception(ErrorManager::InvalidUnicodeError(str_value, "value construction"));
157
+ Value::Value(string val) : type_(LogicalType::VARCHAR), is_null(false) {
158
+ if (!Value::StringIsValid(val.c_str(), val.size())) {
159
+ throw Exception(ErrorManager::InvalidUnicodeError(val, "value construction"));
69
160
  }
161
+ value_info_ = make_shared<StringValueInfo>(std::move(val));
70
162
  }
71
163
 
72
164
  Value::~Value() {
73
165
  }
74
166
 
75
167
  Value::Value(const Value &other)
76
- : type_(other.type_), is_null(other.is_null), value_(other.value_), str_value(other.str_value),
77
- struct_value(other.struct_value), list_value(other.list_value) {
168
+ : type_(other.type_), is_null(other.is_null), value_(other.value_), value_info_(other.value_info_) {
78
169
  }
79
170
 
80
171
  Value::Value(Value &&other) noexcept
81
172
  : type_(std::move(other.type_)), is_null(other.is_null), value_(other.value_),
82
- str_value(std::move(other.str_value)), struct_value(std::move(other.struct_value)),
83
- list_value(std::move(other.list_value)) {
173
+ value_info_(std::move(other.value_info_)) {
84
174
  }
85
175
 
86
176
  Value &Value::operator=(const Value &other) {
177
+ if (this == &other) {
178
+ return *this;
179
+ }
87
180
  type_ = other.type_;
88
181
  is_null = other.is_null;
89
182
  value_ = other.value_;
90
- str_value = other.str_value;
91
- struct_value = other.struct_value;
92
- list_value = other.list_value;
183
+ value_info_ = other.value_info_;
93
184
  return *this;
94
185
  }
95
186
 
@@ -97,9 +188,7 @@ Value &Value::operator=(Value &&other) noexcept {
97
188
  type_ = std::move(other.type_);
98
189
  is_null = other.is_null;
99
190
  value_ = other.value_;
100
- str_value = std::move(other.str_value);
101
- struct_value = std::move(other.struct_value);
102
- list_value = std::move(other.list_value);
191
+ value_info_ = std::move(other.value_info_);
103
192
  return *this;
104
193
  }
105
194
 
@@ -241,9 +330,55 @@ Value Value::MaximumValue(const LogicalType &type) {
241
330
  }
242
331
  }
243
332
 
333
+ Value Value::Infinity(const LogicalType &type) {
334
+ switch (type.id()) {
335
+ case LogicalTypeId::DATE:
336
+ return Value::DATE(date_t::infinity());
337
+ case LogicalTypeId::TIMESTAMP:
338
+ return Value::TIMESTAMP(timestamp_t::infinity());
339
+ case LogicalTypeId::TIMESTAMP_MS:
340
+ return Value::TIMESTAMPMS(timestamp_t::infinity());
341
+ case LogicalTypeId::TIMESTAMP_NS:
342
+ return Value::TIMESTAMPNS(timestamp_t::infinity());
343
+ case LogicalTypeId::TIMESTAMP_SEC:
344
+ return Value::TIMESTAMPSEC(timestamp_t::infinity());
345
+ case LogicalTypeId::TIMESTAMP_TZ:
346
+ return Value::TIMESTAMPTZ(timestamp_t::infinity());
347
+ case LogicalTypeId::FLOAT:
348
+ return Value::FLOAT(std::numeric_limits<float>::infinity());
349
+ case LogicalTypeId::DOUBLE:
350
+ return Value::DOUBLE(std::numeric_limits<double>::infinity());
351
+ default:
352
+ throw InvalidTypeException(type, "Infinity requires numeric type");
353
+ }
354
+ }
355
+
356
+ Value Value::NegativeInfinity(const LogicalType &type) {
357
+ switch (type.id()) {
358
+ case LogicalTypeId::DATE:
359
+ return Value::DATE(date_t::ninfinity());
360
+ case LogicalTypeId::TIMESTAMP:
361
+ return Value::TIMESTAMP(timestamp_t::ninfinity());
362
+ case LogicalTypeId::TIMESTAMP_MS:
363
+ return Value::TIMESTAMPMS(timestamp_t::ninfinity());
364
+ case LogicalTypeId::TIMESTAMP_NS:
365
+ return Value::TIMESTAMPNS(timestamp_t::ninfinity());
366
+ case LogicalTypeId::TIMESTAMP_SEC:
367
+ return Value::TIMESTAMPSEC(timestamp_t::ninfinity());
368
+ case LogicalTypeId::TIMESTAMP_TZ:
369
+ return Value::TIMESTAMPTZ(timestamp_t::ninfinity());
370
+ case LogicalTypeId::FLOAT:
371
+ return Value::FLOAT(-std::numeric_limits<float>::infinity());
372
+ case LogicalTypeId::DOUBLE:
373
+ return Value::DOUBLE(-std::numeric_limits<double>::infinity());
374
+ default:
375
+ throw InvalidTypeException(type, "NegativeInfinity requires numeric type");
376
+ }
377
+ }
378
+
244
379
  Value Value::BOOLEAN(int8_t value) {
245
380
  Value result(LogicalType::BOOLEAN);
246
- result.value_.boolean = value ? true : false;
381
+ result.value_.boolean = bool(value);
247
382
  result.is_null = false;
248
383
  return result;
249
384
  }
@@ -512,30 +647,28 @@ Value Value::TIMESTAMP(int32_t year, int32_t month, int32_t day, int32_t hour, i
512
647
  Value Value::STRUCT(child_list_t<Value> values) {
513
648
  Value result;
514
649
  child_list_t<LogicalType> child_types;
650
+ vector<Value> struct_values;
515
651
  for (auto &child : values) {
516
652
  child_types.push_back(make_pair(std::move(child.first), child.second.type()));
517
- result.struct_value.push_back(std::move(child.second));
653
+ struct_values.push_back(std::move(child.second));
518
654
  }
519
- result.type_ = LogicalType::STRUCT(std::move(child_types));
520
-
655
+ result.value_info_ = make_shared<NestedValueInfo>(std::move(struct_values));
656
+ result.type_ = LogicalType::STRUCT(child_types);
521
657
  result.is_null = false;
522
658
  return result;
523
659
  }
524
660
 
525
- Value Value::MAP(LogicalType child_type, vector<Value> values) {
661
+ Value Value::MAP(const LogicalType &child_type, vector<Value> values) {
526
662
  Value result;
527
663
 
528
- result.type_ = LogicalType::MAP(std::move(child_type));
664
+ result.type_ = LogicalType::MAP(child_type);
529
665
  result.is_null = false;
530
- if (values.empty()) {
531
- return result;
532
- }
533
- result.list_value = std::move(values);
666
+ result.value_info_ = make_shared<NestedValueInfo>(std::move(values));
534
667
  return result;
535
668
  }
536
669
 
537
670
  Value Value::UNION(child_list_t<LogicalType> members, uint8_t tag, Value value) {
538
- D_ASSERT(members.size() > 0);
671
+ D_ASSERT(!members.empty());
539
672
  D_ASSERT(members.size() <= UnionType::MAX_UNION_MEMBERS);
540
673
  D_ASSERT(members.size() > tag);
541
674
 
@@ -544,16 +677,17 @@ Value Value::UNION(child_list_t<LogicalType> members, uint8_t tag, Value value)
544
677
  Value result;
545
678
  result.is_null = false;
546
679
  // add the tag to the front of the struct
547
- result.struct_value.emplace_back(Value::TINYINT(tag));
680
+ vector<Value> union_values;
681
+ union_values.emplace_back(Value::TINYINT(tag));
548
682
  for (idx_t i = 0; i < members.size(); i++) {
549
683
  if (i != tag) {
550
- result.struct_value.emplace_back(members[i].second);
684
+ union_values.emplace_back(members[i].second);
551
685
  } else {
552
- result.struct_value.emplace_back(nullptr);
686
+ union_values.emplace_back(nullptr);
553
687
  }
554
688
  }
555
- result.struct_value[tag + 1] = std::move(value);
556
-
689
+ union_values[tag + 1] = std::move(value);
690
+ result.value_info_ = make_shared<NestedValueInfo>(std::move(union_values));
557
691
  result.type_ = LogicalType::UNION(std::move(members));
558
692
  return result;
559
693
  }
@@ -570,14 +704,14 @@ Value Value::LIST(vector<Value> values) {
570
704
  #endif
571
705
  Value result;
572
706
  result.type_ = LogicalType::LIST(values[0].type());
573
- result.list_value = std::move(values);
707
+ result.value_info_ = make_shared<NestedValueInfo>(std::move(values));
574
708
  result.is_null = false;
575
709
  return result;
576
710
  }
577
711
 
578
- Value Value::LIST(LogicalType child_type, vector<Value> values) {
712
+ Value Value::LIST(const LogicalType &child_type, vector<Value> values) {
579
713
  if (values.empty()) {
580
- return Value::EMPTYLIST(std::move(child_type));
714
+ return Value::EMPTYLIST(child_type);
581
715
  }
582
716
  for (auto &val : values) {
583
717
  val = val.DefaultCastAs(child_type);
@@ -585,9 +719,10 @@ Value Value::LIST(LogicalType child_type, vector<Value> values) {
585
719
  return Value::LIST(std::move(values));
586
720
  }
587
721
 
588
- Value Value::EMPTYLIST(LogicalType child_type) {
722
+ Value Value::EMPTYLIST(const LogicalType &child_type) {
589
723
  Value result;
590
- result.type_ = LogicalType::LIST(std::move(child_type));
724
+ result.type_ = LogicalType::LIST(child_type);
725
+ result.value_info_ = make_shared<NestedValueInfo>();
591
726
  result.is_null = false;
592
727
  return result;
593
728
  }
@@ -595,28 +730,28 @@ Value Value::EMPTYLIST(LogicalType child_type) {
595
730
  Value Value::BLOB(const_data_ptr_t data, idx_t len) {
596
731
  Value result(LogicalType::BLOB);
597
732
  result.is_null = false;
598
- result.str_value = string((const char *)data, len);
733
+ result.value_info_ = make_shared<StringValueInfo>(string((const char *)data, len));
599
734
  return result;
600
735
  }
601
736
 
602
737
  Value Value::BLOB(const string &data) {
603
738
  Value result(LogicalType::BLOB);
604
739
  result.is_null = false;
605
- result.str_value = Blob::ToBlob(string_t(data));
740
+ result.value_info_ = make_shared<StringValueInfo>(Blob::ToBlob(string_t(data)));
606
741
  return result;
607
742
  }
608
743
 
609
744
  Value Value::BIT(const_data_ptr_t data, idx_t len) {
610
745
  Value result(LogicalType::BIT);
611
746
  result.is_null = false;
612
- result.str_value = string((const char *)data, len);
747
+ result.value_info_ = make_shared<StringValueInfo>(string((const char *)data, len));
613
748
  return result;
614
749
  }
615
750
 
616
751
  Value Value::BIT(const string &data) {
617
752
  Value result(LogicalType::BIT);
618
753
  result.is_null = false;
619
- result.str_value = Bit::ToBit(string_t(data));
754
+ result.value_info_ = make_shared<StringValueInfo>(Bit::ToBit(string_t(data)));
620
755
  return result;
621
756
  }
622
757
 
@@ -827,7 +962,7 @@ T Value::GetValueInternal() const {
827
962
  case LogicalTypeId::DOUBLE:
828
963
  return Cast::Operation<double, T>(value_.double_);
829
964
  case LogicalTypeId::VARCHAR:
830
- return Cast::Operation<string_t, T>(str_value.c_str());
965
+ return Cast::Operation<string_t, T>(StringValue::Get(*this).c_str());
831
966
  case LogicalTypeId::INTERVAL:
832
967
  return Cast::Operation<interval_t, T>(value_.interval);
833
968
  case LogicalTypeId::DECIMAL:
@@ -1100,14 +1235,12 @@ uint64_t Value::GetValueUnsafe() const {
1100
1235
 
1101
1236
  template <>
1102
1237
  string Value::GetValueUnsafe() const {
1103
- D_ASSERT(type_.InternalType() == PhysicalType::VARCHAR);
1104
- return str_value;
1238
+ return StringValue::Get(*this);
1105
1239
  }
1106
1240
 
1107
1241
  template <>
1108
1242
  DUCKDB_API string_t Value::GetValueUnsafe() const {
1109
- D_ASSERT(type_.InternalType() == PhysicalType::VARCHAR);
1110
- return string_t(str_value);
1243
+ return string_t(StringValue::Get(*this));
1111
1244
  }
1112
1245
 
1113
1246
  template <>
@@ -1146,99 +1279,6 @@ interval_t Value::GetValueUnsafe() const {
1146
1279
  return value_.interval;
1147
1280
  }
1148
1281
 
1149
- //===--------------------------------------------------------------------===//
1150
- // GetReferenceUnsafe
1151
- //===--------------------------------------------------------------------===//
1152
- template <>
1153
- int8_t &Value::GetReferenceUnsafe() {
1154
- D_ASSERT(type_.InternalType() == PhysicalType::INT8 || type_.InternalType() == PhysicalType::BOOL);
1155
- return value_.tinyint;
1156
- }
1157
-
1158
- template <>
1159
- int16_t &Value::GetReferenceUnsafe() {
1160
- D_ASSERT(type_.InternalType() == PhysicalType::INT16);
1161
- return value_.smallint;
1162
- }
1163
-
1164
- template <>
1165
- int32_t &Value::GetReferenceUnsafe() {
1166
- D_ASSERT(type_.InternalType() == PhysicalType::INT32);
1167
- return value_.integer;
1168
- }
1169
-
1170
- template <>
1171
- int64_t &Value::GetReferenceUnsafe() {
1172
- D_ASSERT(type_.InternalType() == PhysicalType::INT64);
1173
- return value_.bigint;
1174
- }
1175
-
1176
- template <>
1177
- hugeint_t &Value::GetReferenceUnsafe() {
1178
- D_ASSERT(type_.InternalType() == PhysicalType::INT128);
1179
- return value_.hugeint;
1180
- }
1181
-
1182
- template <>
1183
- uint8_t &Value::GetReferenceUnsafe() {
1184
- D_ASSERT(type_.InternalType() == PhysicalType::UINT8);
1185
- return value_.utinyint;
1186
- }
1187
-
1188
- template <>
1189
- uint16_t &Value::GetReferenceUnsafe() {
1190
- D_ASSERT(type_.InternalType() == PhysicalType::UINT16);
1191
- return value_.usmallint;
1192
- }
1193
-
1194
- template <>
1195
- uint32_t &Value::GetReferenceUnsafe() {
1196
- D_ASSERT(type_.InternalType() == PhysicalType::UINT32);
1197
- return value_.uinteger;
1198
- }
1199
-
1200
- template <>
1201
- uint64_t &Value::GetReferenceUnsafe() {
1202
- D_ASSERT(type_.InternalType() == PhysicalType::UINT64);
1203
- return value_.ubigint;
1204
- }
1205
-
1206
- template <>
1207
- float &Value::GetReferenceUnsafe() {
1208
- D_ASSERT(type_.InternalType() == PhysicalType::FLOAT);
1209
- return value_.float_;
1210
- }
1211
-
1212
- template <>
1213
- double &Value::GetReferenceUnsafe() {
1214
- D_ASSERT(type_.InternalType() == PhysicalType::DOUBLE);
1215
- return value_.double_;
1216
- }
1217
-
1218
- template <>
1219
- date_t &Value::GetReferenceUnsafe() {
1220
- D_ASSERT(type_.InternalType() == PhysicalType::INT32);
1221
- return value_.date;
1222
- }
1223
-
1224
- template <>
1225
- dtime_t &Value::GetReferenceUnsafe() {
1226
- D_ASSERT(type_.InternalType() == PhysicalType::INT64);
1227
- return value_.time;
1228
- }
1229
-
1230
- template <>
1231
- timestamp_t &Value::GetReferenceUnsafe() {
1232
- D_ASSERT(type_.InternalType() == PhysicalType::INT64);
1233
- return value_.timestamp;
1234
- }
1235
-
1236
- template <>
1237
- interval_t &Value::GetReferenceUnsafe() {
1238
- D_ASSERT(type_.InternalType() == PhysicalType::INTERVAL);
1239
- return value_.interval;
1240
- }
1241
-
1242
1282
  //===--------------------------------------------------------------------===//
1243
1283
  // Hash
1244
1284
  //===--------------------------------------------------------------------===//
@@ -1258,7 +1298,7 @@ string Value::ToString() const {
1258
1298
  if (IsNull()) {
1259
1299
  return "NULL";
1260
1300
  }
1261
- return DefaultCastAs(LogicalType::VARCHAR).str_value;
1301
+ return StringValue::Get(DefaultCastAs(LogicalType::VARCHAR));
1262
1302
  }
1263
1303
 
1264
1304
  string Value::ToSQLString() const {
@@ -1283,11 +1323,12 @@ string Value::ToSQLString() const {
1283
1323
  case LogicalTypeId::STRUCT: {
1284
1324
  string ret = "{";
1285
1325
  auto &child_types = StructType::GetChildTypes(type_);
1286
- for (size_t i = 0; i < struct_value.size(); i++) {
1326
+ auto &struct_values = StructValue::GetChildren(*this);
1327
+ for (size_t i = 0; i < struct_values.size(); i++) {
1287
1328
  auto &name = child_types[i].first;
1288
- auto &child = struct_value[i];
1329
+ auto &child = struct_values[i];
1289
1330
  ret += "'" + name + "': " + child.ToSQLString();
1290
- if (i < struct_value.size() - 1) {
1331
+ if (i < struct_values.size() - 1) {
1291
1332
  ret += ", ";
1292
1333
  }
1293
1334
  }
@@ -1312,10 +1353,11 @@ string Value::ToSQLString() const {
1312
1353
  }
1313
1354
  case LogicalTypeId::LIST: {
1314
1355
  string ret = "[";
1315
- for (size_t i = 0; i < list_value.size(); i++) {
1316
- auto &child = list_value[i];
1356
+ auto &list_values = ListValue::GetChildren(*this);
1357
+ for (size_t i = 0; i < list_values.size(); i++) {
1358
+ auto &child = list_values[i];
1317
1359
  ret += child.ToSQLString();
1318
- if (i < list_value.size() - 1) {
1360
+ if (i < list_values.size() - 1) {
1319
1361
  ret += ", ";
1320
1362
  }
1321
1363
  }
@@ -1379,8 +1421,12 @@ double DoubleValue::Get(const Value &value) {
1379
1421
  }
1380
1422
 
1381
1423
  const string &StringValue::Get(const Value &value) {
1424
+ if (value.is_null) {
1425
+ throw InternalException("Calling StringValue::Get on a NULL value");
1426
+ }
1382
1427
  D_ASSERT(value.type().InternalType() == PhysicalType::VARCHAR);
1383
- return value.str_value;
1428
+ D_ASSERT(value.value_info_);
1429
+ return value.value_info_->Get<StringValueInfo>().GetString();
1384
1430
  }
1385
1431
 
1386
1432
  date_t DateValue::Get(const Value &value) {
@@ -1400,13 +1446,21 @@ interval_t IntervalValue::Get(const Value &value) {
1400
1446
  }
1401
1447
 
1402
1448
  const vector<Value> &StructValue::GetChildren(const Value &value) {
1449
+ if (value.is_null) {
1450
+ throw InternalException("Calling StructValue::GetChildren on a NULL value");
1451
+ }
1403
1452
  D_ASSERT(value.type().InternalType() == PhysicalType::STRUCT);
1404
- return value.struct_value;
1453
+ D_ASSERT(value.value_info_);
1454
+ return value.value_info_->Get<NestedValueInfo>().GetValues();
1405
1455
  }
1406
1456
 
1407
1457
  const vector<Value> &ListValue::GetChildren(const Value &value) {
1458
+ if (value.is_null) {
1459
+ throw InternalException("Calling ListValue::GetChildren on a NULL value");
1460
+ }
1408
1461
  D_ASSERT(value.type().InternalType() == PhysicalType::LIST);
1409
- return value.list_value;
1462
+ D_ASSERT(value.value_info_);
1463
+ return value.value_info_->Get<NestedValueInfo>().GetValues();
1410
1464
  }
1411
1465
 
1412
1466
  const Value &UnionValue::GetValue(const Value &value) {
@@ -1559,9 +1613,7 @@ bool Value::TryCastAs(CastFunctionSet &set, GetCastFunctionInput &get_input, con
1559
1613
  type_ = target_type;
1560
1614
  is_null = new_value.is_null;
1561
1615
  value_ = new_value.value_;
1562
- str_value = new_value.str_value;
1563
- struct_value = new_value.struct_value;
1564
- list_value = new_value.list_value;
1616
+ value_info_ = std::move(new_value.value_info_);
1565
1617
  return true;
1566
1618
  }
1567
1619
 
@@ -1627,7 +1679,7 @@ void Value::Serialize(Serializer &main_serializer) const {
1627
1679
  serializer.Write<interval_t>(value_.interval);
1628
1680
  break;
1629
1681
  case PhysicalType::VARCHAR:
1630
- serializer.WriteString(str_value);
1682
+ serializer.WriteString(StringValue::Get(*this));
1631
1683
  break;
1632
1684
  default: {
1633
1685
  Vector v(*this);
@@ -1691,7 +1743,7 @@ Value Value::Deserialize(Deserializer &main_source) {
1691
1743
  new_value.value_.interval = source.Read<interval_t>();
1692
1744
  break;
1693
1745
  case PhysicalType::VARCHAR:
1694
- new_value.str_value = source.Read<string>();
1746
+ new_value.value_info_ = make_shared<StringValueInfo>(source.Read<string>());
1695
1747
  break;
1696
1748
  default: {
1697
1749
  Vector v(type);
@@ -1704,6 +1756,120 @@ Value Value::Deserialize(Deserializer &main_source) {
1704
1756
  return new_value;
1705
1757
  }
1706
1758
 
1759
+ void Value::FormatSerialize(FormatSerializer &serializer) const {
1760
+ serializer.WriteProperty("type", type_);
1761
+ serializer.WriteProperty("is_null", is_null);
1762
+ if (!IsNull()) {
1763
+ switch (type_.InternalType()) {
1764
+ case PhysicalType::BOOL:
1765
+ serializer.WriteProperty("value", value_.boolean);
1766
+ break;
1767
+ case PhysicalType::INT8:
1768
+ serializer.WriteProperty("value", value_.tinyint);
1769
+ break;
1770
+ case PhysicalType::INT16:
1771
+ serializer.WriteProperty("value", value_.smallint);
1772
+ break;
1773
+ case PhysicalType::INT32:
1774
+ serializer.WriteProperty("value", value_.integer);
1775
+ break;
1776
+ case PhysicalType::INT64:
1777
+ serializer.WriteProperty("value", value_.bigint);
1778
+ break;
1779
+ case PhysicalType::UINT8:
1780
+ serializer.WriteProperty("value", value_.utinyint);
1781
+ break;
1782
+ case PhysicalType::UINT16:
1783
+ serializer.WriteProperty("value", value_.usmallint);
1784
+ break;
1785
+ case PhysicalType::UINT32:
1786
+ serializer.WriteProperty("value", value_.uinteger);
1787
+ break;
1788
+ case PhysicalType::UINT64:
1789
+ serializer.WriteProperty("value", value_.ubigint);
1790
+ break;
1791
+ case PhysicalType::INT128:
1792
+ serializer.WriteProperty("value", value_.hugeint);
1793
+ break;
1794
+ case PhysicalType::FLOAT:
1795
+ serializer.WriteProperty("value", value_.float_);
1796
+ break;
1797
+ case PhysicalType::DOUBLE:
1798
+ serializer.WriteProperty("value", value_.double_);
1799
+ break;
1800
+ case PhysicalType::INTERVAL:
1801
+ serializer.WriteProperty("value", value_.interval);
1802
+ break;
1803
+ case PhysicalType::VARCHAR:
1804
+ serializer.WriteProperty("value", StringValue::Get(*this));
1805
+ break;
1806
+ default: {
1807
+ Vector v(*this);
1808
+ v.FormatSerialize(serializer, 1);
1809
+ break;
1810
+ }
1811
+ }
1812
+ }
1813
+ }
1814
+
1815
+ Value Value::FormatDeserialize(FormatDeserializer &deserializer) {
1816
+ auto type = deserializer.ReadProperty<LogicalType>("type");
1817
+ auto is_null = deserializer.ReadProperty<bool>("is_null");
1818
+ Value new_value = Value(type);
1819
+ if (is_null) {
1820
+ return new_value;
1821
+ }
1822
+ new_value.is_null = false;
1823
+ switch (type.InternalType()) {
1824
+ case PhysicalType::BOOL:
1825
+ new_value.value_.boolean = deserializer.ReadProperty<bool>("value");
1826
+ break;
1827
+ case PhysicalType::UINT8:
1828
+ new_value.value_.utinyint = deserializer.ReadProperty<uint8_t>("value");
1829
+ break;
1830
+ case PhysicalType::INT8:
1831
+ new_value.value_.tinyint = deserializer.ReadProperty<int8_t>("value");
1832
+ break;
1833
+ case PhysicalType::UINT16:
1834
+ new_value.value_.usmallint = deserializer.ReadProperty<uint16_t>("value");
1835
+ break;
1836
+ case PhysicalType::INT16:
1837
+ new_value.value_.smallint = deserializer.ReadProperty<int16_t>("value");
1838
+ break;
1839
+ case PhysicalType::UINT32:
1840
+ new_value.value_.uinteger = deserializer.ReadProperty<uint32_t>("value");
1841
+ break;
1842
+ case PhysicalType::INT32:
1843
+ new_value.value_.integer = deserializer.ReadProperty<int32_t>("value");
1844
+ break;
1845
+ case PhysicalType::UINT64:
1846
+ new_value.value_.ubigint = deserializer.ReadProperty<uint64_t>("value");
1847
+ break;
1848
+ case PhysicalType::INT64:
1849
+ new_value.value_.bigint = deserializer.ReadProperty<int64_t>("value");
1850
+ break;
1851
+ case PhysicalType::FLOAT:
1852
+ new_value.value_.float_ = deserializer.ReadProperty<float>("value");
1853
+ break;
1854
+ case PhysicalType::DOUBLE:
1855
+ new_value.value_.double_ = deserializer.ReadProperty<double>("value");
1856
+ break;
1857
+ case PhysicalType::INTERVAL:
1858
+ new_value.value_.interval = deserializer.ReadProperty<interval_t>("value");
1859
+ break;
1860
+ case PhysicalType::VARCHAR:
1861
+ new_value.value_info_ = make_shared<StringValueInfo>(deserializer.ReadProperty<string>("value"));
1862
+ break;
1863
+ default: {
1864
+ Vector v(type);
1865
+ v.FormatDeserialize(deserializer, 1);
1866
+ new_value = v.GetValue(0);
1867
+ break;
1868
+ }
1869
+ }
1870
+ return new_value;
1871
+ }
1872
+
1707
1873
  void Value::Print() const {
1708
1874
  Printer::Print(ToString());
1709
1875
  }
@@ -1747,8 +1913,8 @@ bool Value::ValuesAreEqual(CastFunctionSet &set, GetCastFunctionInput &get_input
1747
1913
  }
1748
1914
  case LogicalTypeId::VARCHAR: {
1749
1915
  auto other = result_value.CastAs(set, get_input, LogicalType::VARCHAR);
1750
- string left = SanitizeValue(other.str_value);
1751
- string right = SanitizeValue(value.str_value);
1916
+ string left = SanitizeValue(StringValue::Get(other));
1917
+ string right = SanitizeValue(StringValue::Get(value));
1752
1918
  return left == right;
1753
1919
  }
1754
1920
  default: