duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 (625) 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/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  13. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  14. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  15. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  17. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  18. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  19. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  20. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  21. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  22. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  23. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  24. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  25. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  26. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  27. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  30. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  31. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  32. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  33. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  34. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  35. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  36. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  37. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  38. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  39. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  40. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  42. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  43. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  44. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  45. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  46. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  47. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  48. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  49. package/src/duckdb/src/common/exception.cpp +15 -1
  50. package/src/duckdb/src/common/field_writer.cpp +1 -0
  51. package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  54. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  55. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  56. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  57. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  58. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  59. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  60. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  61. package/src/duckdb/src/common/string_util.cpp +4 -1
  62. package/src/duckdb/src/common/types/bit.cpp +166 -87
  63. package/src/duckdb/src/common/types/blob.cpp +1 -1
  64. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  65. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  66. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  67. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  68. package/src/duckdb/src/common/types/interval.cpp +0 -41
  69. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  70. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  71. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  72. package/src/duckdb/src/common/types/time.cpp +13 -0
  73. package/src/duckdb/src/common/types/value.cpp +320 -154
  74. package/src/duckdb/src/common/types/vector.cpp +156 -128
  75. package/src/duckdb/src/common/types.cpp +313 -153
  76. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  77. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  78. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  79. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  80. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  81. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  82. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  83. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  84. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  85. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  86. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  87. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  88. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  89. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  90. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  91. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  92. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  93. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  94. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  95. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  96. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  97. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  98. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  99. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  100. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  101. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  102. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  103. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  104. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  105. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  106. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  107. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +0 -4
  108. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  109. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  110. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  111. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  112. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  113. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  114. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  115. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  116. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -0
  117. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  118. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  119. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  120. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  121. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  122. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  123. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  124. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  126. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  128. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  129. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  130. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  131. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  132. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  133. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  134. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  135. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  136. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  137. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  138. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  139. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  140. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  141. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  142. package/src/duckdb/src/function/function_binder.cpp +1 -8
  143. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  144. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  145. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  146. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  147. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  148. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  149. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  150. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  151. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  152. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  153. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  154. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  155. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  156. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  157. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  158. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  159. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  160. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  161. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  162. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  163. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  164. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  165. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  166. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  167. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  168. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  169. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  170. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  171. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  172. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  173. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  174. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  175. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  176. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  177. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  178. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  180. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  181. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  182. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  183. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  184. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  185. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  186. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  187. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  188. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  189. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  190. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  191. package/src/duckdb/src/function/table_function.cpp +30 -11
  192. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  193. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  195. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  196. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  197. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  198. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  199. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  200. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  201. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  202. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  203. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  204. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  205. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  206. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  207. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  208. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  209. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  210. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  211. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  212. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  213. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  214. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  215. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  216. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  217. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  218. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  219. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  220. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  222. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  223. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  224. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  225. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  226. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  227. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  228. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  230. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  233. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  234. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  236. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  238. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  239. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  240. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  241. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  243. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  244. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  246. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  249. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  250. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  251. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  252. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  253. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  254. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  255. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  257. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  258. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  259. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  263. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  264. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  265. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  268. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  269. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  271. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  272. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  273. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  285. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  290. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  292. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  293. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  294. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  295. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  296. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  297. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  299. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  301. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  303. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  304. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  305. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  306. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  307. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  308. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  309. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  310. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  311. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  312. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  316. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  318. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  319. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  320. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  322. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  323. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  325. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  327. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  330. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  331. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  332. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  333. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  334. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  335. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  336. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  337. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  341. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  342. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  344. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  345. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  346. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  347. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  348. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  349. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  350. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  351. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  352. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  353. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  355. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  356. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  357. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  358. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  359. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  360. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  361. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  363. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  364. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  366. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  367. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  368. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  369. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  370. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  371. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  372. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  373. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  374. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  375. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  377. package/src/duckdb/src/include/duckdb.h +71 -2
  378. package/src/duckdb/src/include/duckdb.hpp +0 -1
  379. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  380. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  381. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  382. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  383. package/src/duckdb/src/main/client_context.cpp +38 -34
  384. package/src/duckdb/src/main/client_data.cpp +7 -6
  385. package/src/duckdb/src/main/config.cpp +70 -1
  386. package/src/duckdb/src/main/database.cpp +19 -2
  387. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  388. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  389. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  390. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  391. package/src/duckdb/src/main/relation.cpp +3 -2
  392. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  393. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  394. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  395. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  396. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  397. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  400. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  401. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  402. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  403. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  404. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  405. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  406. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  407. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  408. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  409. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  410. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  411. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  412. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  413. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  414. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  415. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  416. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  417. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  421. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  422. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  423. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  424. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  425. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  426. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  427. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  428. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  429. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  430. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  431. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  432. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  433. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  434. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  435. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  437. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  438. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  439. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  440. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  441. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  442. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  444. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  445. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  446. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  447. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  448. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  449. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  450. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  451. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  452. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  453. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  454. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  455. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  456. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  457. package/src/duckdb/src/parser/query_node.cpp +51 -1
  458. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  459. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  460. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  461. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  462. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  463. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  464. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  465. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  466. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  467. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  468. package/src/duckdb/src/parser/tableref.cpp +49 -0
  469. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  470. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  471. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  472. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  473. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  474. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  475. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  476. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  477. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  478. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  479. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  480. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  481. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  482. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  483. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  484. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  485. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  486. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  487. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  488. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  489. package/src/duckdb/src/parser/transformer.cpp +15 -3
  490. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  491. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  492. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  493. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  494. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  495. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  496. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  497. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  498. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  500. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  501. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  502. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  503. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  504. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  505. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  506. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  507. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  508. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  509. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  510. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  511. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  512. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  513. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  514. package/src/duckdb/src/planner/binder.cpp +19 -24
  515. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  516. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  517. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  518. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  519. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  520. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  521. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  522. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  523. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  524. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  525. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  526. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  527. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  528. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  529. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  530. package/src/duckdb/src/planner/planner.cpp +2 -1
  531. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  532. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  533. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  534. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  535. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  536. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  537. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  538. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  539. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  540. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  541. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  542. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  543. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  544. package/src/duckdb/src/storage/data_table.cpp +23 -23
  545. package/src/duckdb/src/storage/index.cpp +12 -1
  546. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  547. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  548. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  549. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  550. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  551. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  552. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  553. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  554. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  555. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  556. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  557. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  558. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  559. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  560. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  561. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  562. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  563. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  564. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  565. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  566. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  567. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  568. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  569. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  570. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  571. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  572. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  573. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  574. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  575. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  576. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  577. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  578. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  579. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  580. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  581. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  582. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  583. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  584. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  585. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  586. package/src/duckdb/ub_src_common_types.cpp +2 -0
  587. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  588. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  589. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  590. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  591. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  592. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  593. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  594. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  595. package/src/duckdb/ub_src_parser.cpp +2 -0
  596. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  597. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  598. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  599. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  600. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  601. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  602. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  603. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  604. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  605. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  606. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  607. package/src/duckdb_node.hpp +2 -1
  608. package/src/statement.cpp +5 -5
  609. package/src/utils.cpp +27 -2
  610. package/test/extension.test.ts +44 -26
  611. package/test/syntax_error.test.ts +3 -1
  612. package/filelist.cache +0 -0
  613. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  614. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  615. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  616. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  617. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  618. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  619. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  620. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  621. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  622. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  623. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  624. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  625. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -34,10 +34,69 @@ using duckdb_parquet::format::Encoding;
34
34
  using duckdb_parquet::format::PageType;
35
35
  using duckdb_parquet::format::Type;
36
36
 
37
- const uint32_t ParquetDecodeUtils::BITPACK_MASKS[] = {
38
- 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023,
39
- 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151,
40
- 4194303, 8388607, 16777215, 33554431, 67108863, 134217727, 268435455, 536870911, 1073741823, 2147483647};
37
+ const uint64_t ParquetDecodeUtils::BITPACK_MASKS[] = {0,
38
+ 1,
39
+ 3,
40
+ 7,
41
+ 15,
42
+ 31,
43
+ 63,
44
+ 127,
45
+ 255,
46
+ 511,
47
+ 1023,
48
+ 2047,
49
+ 4095,
50
+ 8191,
51
+ 16383,
52
+ 32767,
53
+ 65535,
54
+ 131071,
55
+ 262143,
56
+ 524287,
57
+ 1048575,
58
+ 2097151,
59
+ 4194303,
60
+ 8388607,
61
+ 16777215,
62
+ 33554431,
63
+ 67108863,
64
+ 134217727,
65
+ 268435455,
66
+ 536870911,
67
+ 1073741823,
68
+ 2147483647,
69
+ 4294967295,
70
+ 8589934591,
71
+ 17179869183,
72
+ 34359738367,
73
+ 68719476735,
74
+ 137438953471,
75
+ 274877906943,
76
+ 549755813887,
77
+ 1099511627775,
78
+ 2199023255551,
79
+ 4398046511103,
80
+ 8796093022207,
81
+ 17592186044415,
82
+ 35184372088831,
83
+ 70368744177663,
84
+ 140737488355327,
85
+ 281474976710655,
86
+ 562949953421311,
87
+ 1125899906842623,
88
+ 2251799813685247,
89
+ 4503599627370495,
90
+ 9007199254740991,
91
+ 18014398509481983,
92
+ 36028797018963967,
93
+ 72057594037927935,
94
+ 144115188075855871,
95
+ 288230376151711743,
96
+ 576460752303423487,
97
+ 1152921504606846975,
98
+ 2305843009213693951,
99
+ 4611686018427387903};
41
100
 
42
101
  const uint8_t ParquetDecodeUtils::BITPACK_DLEN = 8;
43
102
 
@@ -449,13 +508,13 @@ idx_t ColumnReader::Read(uint64_t num_values, parquet_filter_t &filter, uint8_t
449
508
  // TODO keep this in the state
450
509
  auto read_buf = make_shared<ResizeableBuffer>();
451
510
 
452
- switch (type.id()) {
453
- case LogicalTypeId::INTEGER:
511
+ switch (type.InternalType()) {
512
+ case PhysicalType::INT32:
454
513
  read_buf->resize(reader.allocator, sizeof(int32_t) * (read_now - null_count));
455
514
  dbp_decoder->GetBatch<int32_t>(read_buf->ptr, read_now - null_count);
456
515
 
457
516
  break;
458
- case LogicalTypeId::BIGINT:
517
+ case PhysicalType::INT64:
459
518
  read_buf->resize(reader.allocator, sizeof(int64_t) * (read_now - null_count));
460
519
  dbp_decoder->GetBatch<int64_t>(read_buf->ptr, read_now - null_count);
461
520
  break;
@@ -865,7 +924,7 @@ RowNumberColumnReader::RowNumberColumnReader(ParquetReader &reader, LogicalType
865
924
 
866
925
  unique_ptr<BaseStatistics> RowNumberColumnReader::Stats(idx_t row_group_idx_p,
867
926
  const std::vector<ColumnChunk> &columns) {
868
- auto stats = make_unique<NumericStatistics>(type, StatisticsType::LOCAL_STATS);
927
+ auto stats = NumericStats::CreateUnknown(type);
869
928
  auto &row_groups = reader.GetFileMetadata()->row_groups;
870
929
  D_ASSERT(row_group_idx_p < row_groups.size());
871
930
  idx_t row_group_offset_min = 0;
@@ -873,11 +932,10 @@ unique_ptr<BaseStatistics> RowNumberColumnReader::Stats(idx_t row_group_idx_p,
873
932
  row_group_offset_min += row_groups[i].num_rows;
874
933
  }
875
934
 
876
- stats->min = Value::BIGINT(row_group_offset_min);
877
- stats->max = Value::BIGINT(row_group_offset_min + row_groups[row_group_idx_p].num_rows);
878
-
879
- D_ASSERT(!stats->CanHaveNull() && stats->CanHaveNoNull());
880
- return std::move(stats);
935
+ NumericStats::SetMin(stats, Value::BIGINT(row_group_offset_min));
936
+ NumericStats::SetMax(stats, Value::BIGINT(row_group_offset_min + row_groups[row_group_idx_p].num_rows));
937
+ stats.Set(StatsInfo::CANNOT_HAVE_NULL_VALUES);
938
+ return stats.ToUnique();
881
939
  }
882
940
 
883
941
  void RowNumberColumnReader::InitializeRead(idx_t row_group_idx_p, const std::vector<ColumnChunk> &columns,
@@ -1341,8 +1399,29 @@ unique_ptr<ColumnReader> ColumnReader::CreateReader(ParquetReader &reader, const
1341
1399
  file_idx_p, max_define, max_repeat);
1342
1400
  case LogicalTypeId::TIME:
1343
1401
  case LogicalTypeId::TIME_TZ:
1344
- return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTime>>(
1345
- reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1402
+ if (schema_p.__isset.logicalType && schema_p.logicalType.__isset.TIME) {
1403
+ if (schema_p.logicalType.TIME.unit.__isset.MILLIS) {
1404
+ return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTimeMs>>(
1405
+ reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1406
+ } else if (schema_p.logicalType.TIME.unit.__isset.MICROS) {
1407
+ return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTime>>(
1408
+ reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1409
+ } else if (schema_p.logicalType.TIME.unit.__isset.NANOS) {
1410
+ return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTimeNs>>(
1411
+ reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1412
+ }
1413
+ } else if (schema_p.__isset.converted_type) {
1414
+ switch (schema_p.converted_type) {
1415
+ case ConvertedType::TIME_MICROS:
1416
+ return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTime>>(
1417
+ reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1418
+ case ConvertedType::TIME_MILLIS:
1419
+ return make_unique<CallbackColumnReader<int64_t, dtime_t, ParquetIntToTimeMs>>(
1420
+ reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
1421
+ default:
1422
+ break;
1423
+ }
1424
+ }
1346
1425
  case LogicalTypeId::BLOB:
1347
1426
  case LogicalTypeId::VARCHAR:
1348
1427
  return make_unique<StringColumnReader>(reader, type_p, schema_p, file_idx_p, max_define, max_repeat);
@@ -1994,7 +1994,6 @@ unique_ptr<ColumnWriter> ColumnWriter::CreateWriterRecursive(vector<duckdb_parqu
1994
1994
  max_define, can_have_nulls);
1995
1995
  }
1996
1996
  case LogicalTypeId::BLOB:
1997
- case LogicalTypeId::BIT:
1998
1997
  case LogicalTypeId::VARCHAR:
1999
1998
  return make_unique<StringColumnWriter>(writer, schema_idx, std::move(schema_path), max_repeat, max_define,
2000
1999
  can_have_nulls);
@@ -18,8 +18,7 @@
18
18
 
19
19
  #include "duckdb.hpp"
20
20
  #ifndef DUCKDB_AMALGAMATION
21
- #include "duckdb/storage/statistics/string_statistics.hpp"
22
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
21
+
23
22
  #include "duckdb/common/types/vector.hpp"
24
23
  #include "duckdb/common/types/string_type.hpp"
25
24
  #include "duckdb/common/types/chunk_collection.hpp"
@@ -11,7 +11,7 @@ public:
11
11
  return (n >> 1) ^ -(n & 1);
12
12
  }
13
13
 
14
- static const uint32_t BITPACK_MASKS[];
14
+ static const uint64_t BITPACK_MASKS[];
15
15
  static const uint8_t BITPACK_DLEN;
16
16
 
17
17
  template <typename T>
@@ -23,7 +23,7 @@ public:
23
23
  bitpack_pos += width;
24
24
  while (bitpack_pos > BITPACK_DLEN) {
25
25
  buffer.inc(1);
26
- val |= (buffer.get<uint8_t>() << (BITPACK_DLEN - (bitpack_pos - width))) & mask;
26
+ val |= (T(buffer.get<uint8_t>()) << T(BITPACK_DLEN - (bitpack_pos - width))) & mask;
27
27
  bitpack_pos -= BITPACK_DLEN;
28
28
  }
29
29
  dest[i] = val;
@@ -37,9 +37,10 @@ public:
37
37
  uint8_t shift = 0;
38
38
  while (true) {
39
39
  auto byte = buf.read<uint8_t>();
40
- result |= (byte & 127) << shift;
41
- if ((byte & 128) == 0)
40
+ result |= T(byte & 127) << shift;
41
+ if ((byte & 128) == 0) {
42
42
  break;
43
+ }
43
44
  shift += 7;
44
45
  if (shift > sizeof(T) * 8) {
45
46
  throw std::runtime_error("Varint-decoding found too large number");
@@ -29,17 +29,7 @@ public:
29
29
  Vector &result) override;
30
30
 
31
31
  unique_ptr<BaseStatistics> Stats(idx_t row_group_idx_p, const std::vector<ColumnChunk> &columns) override {
32
- switch (type.id()) {
33
- case LogicalTypeId::VARCHAR: {
34
- auto string_stats = make_unique<StringStatistics>(type, StatisticsType::LOCAL_STATS);
35
- string string = constant.ToString();
36
- string_stats->Update(string);
37
- string_stats->max_string_length = string.length();
38
- return std::move(string_stats);
39
- }
40
- default:
41
- return nullptr;
42
- }
32
+ return BaseStatistics::FromConstant(constant).ToUnique();
43
33
  };
44
34
 
45
35
  void InitializeRead(idx_t row_group_idx_p, const std::vector<ColumnChunk> &columns,
@@ -16,13 +16,14 @@ struct Int96 {
16
16
  uint32_t value[3];
17
17
  };
18
18
 
19
- int64_t ImpalaTimestampToNanoseconds(const Int96 &impala_timestamp);
20
19
  timestamp_t ImpalaTimestampToTimestamp(const Int96 &raw_ts);
21
20
  Int96 TimestampToImpalaTimestamp(timestamp_t &ts);
22
21
  timestamp_t ParquetTimestampMicrosToTimestamp(const int64_t &raw_ts);
23
22
  timestamp_t ParquetTimestampMsToTimestamp(const int64_t &raw_ts);
24
23
  timestamp_t ParquetTimestampNsToTimestamp(const int64_t &raw_ts);
25
24
  date_t ParquetIntToDate(const int32_t &raw_date);
25
+ dtime_t ParquetIntToTimeMs(const int64_t &raw_time);
26
26
  dtime_t ParquetIntToTime(const int64_t &raw_time);
27
+ dtime_t ParquetIntToTimeNs(const int64_t &raw_time);
27
28
 
28
29
  } // namespace duckdb
@@ -354,6 +354,7 @@ public:
354
354
  return_types.assign(union_col_types.begin(), union_col_types.end());
355
355
  result->SetInitialReader(result->union_readers[0]);
356
356
  D_ASSERT(names.size() == return_types.size());
357
+ result->types = union_col_types;
357
358
 
358
359
  return std::move(result);
359
360
  }
@@ -368,7 +369,10 @@ public:
368
369
  if (!config.options.enable_external_access) {
369
370
  throw PermissionException("Scanning Parquet files is disabled through configuration");
370
371
  }
371
- auto file_name = input.inputs[0].GetValue<string>();
372
+ if (input.inputs[0].IsNull()) {
373
+ throw ParserException("Parquet reader cannot take NULL list as parameter");
374
+ }
375
+ auto file_name = StringValue::Get(input.inputs[0]);
372
376
  ParquetOptions parquet_options(context);
373
377
  for (auto &kv : input.named_parameters) {
374
378
  auto loption = StringUtil::Lower(kv.first);
@@ -395,10 +399,16 @@ public:
395
399
  if (!config.options.enable_external_access) {
396
400
  throw PermissionException("Scanning Parquet files is disabled through configuration");
397
401
  }
402
+ if (input.inputs[0].IsNull()) {
403
+ throw ParserException("Parquet reader cannot take NULL list as parameter");
404
+ }
398
405
  FileSystem &fs = FileSystem::GetFileSystem(context);
399
406
  vector<string> files;
400
407
  for (auto &val : ListValue::GetChildren(input.inputs[0])) {
401
- auto glob_files = ParquetGlob(fs, val.ToString(), context);
408
+ if (val.IsNull()) {
409
+ throw ParserException("Parquet reader cannot take NULL input as parameter");
410
+ }
411
+ auto glob_files = ParquetGlob(fs, StringValue::Get(val), context);
402
412
  files.insert(files.end(), glob_files.begin(), glob_files.end());
403
413
  }
404
414
  if (files.empty()) {
@@ -320,7 +320,7 @@ unique_ptr<ColumnReader> ParquetReader::CreateReaderRecursive(const FileMetaData
320
320
  std::move(struct_reader));
321
321
  }
322
322
  if (child_types.size() > 1 || (!is_list && !is_map && !is_repeated)) {
323
- result_type = LogicalType::STRUCT(std::move(child_types));
323
+ result_type = LogicalType::STRUCT(child_types);
324
324
  result = make_unique<StructColumnReader>(*this, result_type, s_ele, this_idx, max_define, max_repeat,
325
325
  std::move(child_readers));
326
326
  } else {
@@ -6,8 +6,7 @@
6
6
  #ifndef DUCKDB_AMALGAMATION
7
7
  #include "duckdb/common/types/blob.hpp"
8
8
  #include "duckdb/common/types/value.hpp"
9
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
10
- #include "duckdb/storage/statistics/string_statistics.hpp"
9
+
11
10
  #endif
12
11
 
13
12
  namespace duckdb {
@@ -18,27 +17,29 @@ using duckdb_parquet::format::Type;
18
17
  static unique_ptr<BaseStatistics> CreateNumericStats(const LogicalType &type,
19
18
  const duckdb_parquet::format::SchemaElement &schema_ele,
20
19
  const duckdb_parquet::format::Statistics &parquet_stats) {
21
- auto stats = make_unique<NumericStatistics>(type, StatisticsType::LOCAL_STATS);
20
+ auto stats = NumericStats::CreateUnknown(type);
22
21
 
23
22
  // for reasons unknown to science, Parquet defines *both* `min` and `min_value` as well as `max` and
24
23
  // `max_value`. All are optional. such elegance.
24
+ Value min;
25
+ Value max;
25
26
  if (parquet_stats.__isset.min) {
26
- stats->min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min).DefaultCastAs(type);
27
+ min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min).DefaultCastAs(type);
27
28
  } else if (parquet_stats.__isset.min_value) {
28
- stats->min =
29
- ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min_value).DefaultCastAs(type);
29
+ min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min_value).DefaultCastAs(type);
30
30
  } else {
31
- stats->min = Value(type);
31
+ min = Value(type);
32
32
  }
33
33
  if (parquet_stats.__isset.max) {
34
- stats->max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max).DefaultCastAs(type);
34
+ max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max).DefaultCastAs(type);
35
35
  } else if (parquet_stats.__isset.max_value) {
36
- stats->max =
37
- ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max_value).DefaultCastAs(type);
36
+ max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max_value).DefaultCastAs(type);
38
37
  } else {
39
- stats->max = Value(type);
38
+ max = Value(type);
40
39
  }
41
- return std::move(stats);
40
+ NumericStats::SetMin(stats, min);
41
+ NumericStats::SetMax(stats, max);
42
+ return stats.ToUnique();
42
43
  }
43
44
 
44
45
  Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
@@ -228,24 +229,24 @@ unique_ptr<BaseStatistics> ParquetStatisticsUtils::TransformColumnStatistics(con
228
229
  row_group_stats = CreateNumericStats(type, s_ele, parquet_stats);
229
230
  break;
230
231
  case LogicalTypeId::VARCHAR: {
231
- auto string_stats = make_unique<StringStatistics>(type, StatisticsType::LOCAL_STATS);
232
+ auto string_stats = StringStats::CreateEmpty(type);
232
233
  if (parquet_stats.__isset.min) {
233
- string_stats->Update(parquet_stats.min);
234
+ StringStats::Update(string_stats, parquet_stats.min);
234
235
  } else if (parquet_stats.__isset.min_value) {
235
- string_stats->Update(parquet_stats.min_value);
236
+ StringStats::Update(string_stats, parquet_stats.min_value);
236
237
  } else {
237
238
  return nullptr;
238
239
  }
239
240
  if (parquet_stats.__isset.max) {
240
- string_stats->Update(parquet_stats.max);
241
+ StringStats::Update(string_stats, parquet_stats.max);
241
242
  } else if (parquet_stats.__isset.max_value) {
242
- string_stats->Update(parquet_stats.max_value);
243
+ StringStats::Update(string_stats, parquet_stats.max_value);
243
244
  } else {
244
245
  return nullptr;
245
246
  }
246
- string_stats->has_unicode = true; // we dont know better
247
- string_stats->max_string_length = NumericLimits<uint32_t>::Maximum();
248
- row_group_stats = std::move(string_stats);
247
+ StringStats::SetContainsUnicode(string_stats);
248
+ StringStats::ResetMaxStringLength(string_stats);
249
+ row_group_stats = string_stats.ToUnique();
249
250
  break;
250
251
  }
251
252
  default:
@@ -254,21 +255,14 @@ unique_ptr<BaseStatistics> ParquetStatisticsUtils::TransformColumnStatistics(con
254
255
  } // end of type switch
255
256
 
256
257
  // null count is generic
257
- if (row_group_stats) {
258
- if (column_chunk.meta_data.type == duckdb_parquet::format::Type::FLOAT ||
259
- column_chunk.meta_data.type == duckdb_parquet::format::Type::DOUBLE) {
260
- // floats/doubles can have infinity, which can become NULL
261
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(true);
262
- } else if (parquet_stats.__isset.null_count) {
263
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(parquet_stats.null_count != 0);
264
- } else {
265
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(true);
266
- }
267
- } else {
258
+ if (!row_group_stats) {
268
259
  // if stats are missing from any row group we know squat
269
260
  return nullptr;
270
261
  }
271
-
262
+ row_group_stats->Set(StatsInfo::CAN_HAVE_NULL_AND_VALID_VALUES);
263
+ if (parquet_stats.__isset.null_count && parquet_stats.null_count == 0) {
264
+ row_group_stats->Set(StatsInfo::CANNOT_HAVE_NULL_VALUES);
265
+ }
272
266
  return row_group_stats;
273
267
  }
274
268
 
@@ -12,24 +12,26 @@ namespace duckdb {
12
12
  // surely they are joking
13
13
  static constexpr int64_t JULIAN_TO_UNIX_EPOCH_DAYS = 2440588LL;
14
14
  static constexpr int64_t MILLISECONDS_PER_DAY = 86400000LL;
15
- static constexpr int64_t NANOSECONDS_PER_DAY = MILLISECONDS_PER_DAY * 1000LL * 1000LL;
15
+ static constexpr int64_t MICROSECONDS_PER_DAY = MILLISECONDS_PER_DAY * 1000LL;
16
+ static constexpr int64_t NANOSECONDS_PER_MICRO = 1000LL;
16
17
 
17
- int64_t ImpalaTimestampToNanoseconds(const Int96 &impala_timestamp) {
18
+ static int64_t ImpalaTimestampToMicroseconds(const Int96 &impala_timestamp) {
18
19
  int64_t days_since_epoch = impala_timestamp.value[2] - JULIAN_TO_UNIX_EPOCH_DAYS;
19
20
  auto nanoseconds = Load<int64_t>((data_ptr_t)impala_timestamp.value);
20
- return days_since_epoch * NANOSECONDS_PER_DAY + nanoseconds;
21
+ auto microseconds = nanoseconds / NANOSECONDS_PER_MICRO;
22
+ return days_since_epoch * MICROSECONDS_PER_DAY + microseconds;
21
23
  }
22
24
 
23
25
  timestamp_t ImpalaTimestampToTimestamp(const Int96 &raw_ts) {
24
- auto impala_ns = ImpalaTimestampToNanoseconds(raw_ts);
25
- return Timestamp::FromEpochNanoSeconds(impala_ns);
26
+ auto impala_us = ImpalaTimestampToMicroseconds(raw_ts);
27
+ return Timestamp::FromEpochMicroSeconds(impala_us);
26
28
  }
27
29
 
28
30
  Int96 TimestampToImpalaTimestamp(timestamp_t &ts) {
29
31
  int32_t hour, min, sec, msec;
30
32
  Time::Convert(Timestamp::GetTime(ts), hour, min, sec, msec);
31
33
  uint64_t ms_since_midnight = hour * 60 * 60 * 1000 + min * 60 * 1000 + sec * 1000 + msec;
32
- auto days_since_epoch = Date::Epoch(Timestamp::GetDate(ts)) / (24 * 60 * 60);
34
+ auto days_since_epoch = Date::Epoch(Timestamp::GetDate(ts)) / int64_t(24 * 60 * 60);
33
35
  // first two uint32 in Int96 are nanoseconds since midnights
34
36
  // last uint32 is number of days since year 4713 BC ("Julian date")
35
37
  Int96 impala_ts;
@@ -52,8 +54,16 @@ date_t ParquetIntToDate(const int32_t &raw_date) {
52
54
  return date_t(raw_date);
53
55
  }
54
56
 
57
+ dtime_t ParquetIntToTimeMs(const int64_t &raw_time) {
58
+ return Time::FromTimeMs(raw_time);
59
+ }
60
+
55
61
  dtime_t ParquetIntToTime(const int64_t &raw_time) {
56
62
  return dtime_t(raw_time);
57
63
  }
58
64
 
65
+ dtime_t ParquetIntToTimeNs(const int64_t &raw_time) {
66
+ return Time::FromTimeNs(raw_time);
67
+ }
68
+
59
69
  } // namespace duckdb
@@ -63,20 +63,28 @@ Catalog &Catalog::GetSystemCatalog(ClientContext &context) {
63
63
  return Catalog::GetSystemCatalog(*context.db);
64
64
  }
65
65
 
66
- Catalog &Catalog::GetCatalog(ClientContext &context, const string &catalog_name) {
66
+ optional_ptr<Catalog> Catalog::GetCatalogEntry(ClientContext &context, const string &catalog_name) {
67
67
  auto &db_manager = DatabaseManager::Get(context);
68
68
  if (catalog_name == TEMP_CATALOG) {
69
- return ClientData::Get(context).temporary_objects->GetCatalog();
69
+ return &ClientData::Get(context).temporary_objects->GetCatalog();
70
70
  }
71
71
  if (catalog_name == SYSTEM_CATALOG) {
72
- return GetSystemCatalog(context);
72
+ return &GetSystemCatalog(context);
73
73
  }
74
74
  auto entry = db_manager.GetDatabase(
75
75
  context, IsInvalidCatalog(catalog_name) ? DatabaseManager::GetDefaultDatabase(context) : catalog_name);
76
76
  if (!entry) {
77
+ return nullptr;
78
+ }
79
+ return &entry->GetCatalog();
80
+ }
81
+
82
+ Catalog &Catalog::GetCatalog(ClientContext &context, const string &catalog_name) {
83
+ auto catalog = Catalog::GetCatalogEntry(context, catalog_name);
84
+ if (!catalog) {
77
85
  throw BinderException("Catalog \"%s\" does not exist!", catalog_name);
78
86
  }
79
- return entry->GetCatalog();
87
+ return *catalog;
80
88
  }
81
89
 
82
90
  //===--------------------------------------------------------------------===//
@@ -576,7 +584,15 @@ CatalogEntry *Catalog::GetEntry(ClientContext &context, CatalogType type, const
576
584
  vector<CatalogLookup> lookups;
577
585
  lookups.reserve(entries.size());
578
586
  for (auto &entry : entries) {
579
- lookups.emplace_back(Catalog::GetCatalog(context, entry.catalog), entry.schema);
587
+ if (if_exists_p) {
588
+ auto catalog_entry = Catalog::GetCatalogEntry(context, entry.catalog);
589
+ if (!catalog_entry) {
590
+ return nullptr;
591
+ }
592
+ lookups.emplace_back(*catalog_entry, entry.schema);
593
+ } else {
594
+ lookups.emplace_back(Catalog::GetCatalog(context, entry.catalog), entry.schema);
595
+ }
580
596
  }
581
597
  auto result = LookupEntry(context, lookups, type, name, if_exists_p, error_context);
582
598
  if (!result.Found()) {
@@ -625,6 +641,19 @@ vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context) {
625
641
  return schemas;
626
642
  }
627
643
 
644
+ bool Catalog::TypeExists(ClientContext &context, const string &catalog_name, const string &schema, const string &name) {
645
+ CatalogEntry *entry;
646
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, catalog_name, schema, name, true);
647
+ if (!entry) {
648
+ // look in the system catalog
649
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, SYSTEM_CATALOG, schema, name, true);
650
+ if (!entry) {
651
+ return false;
652
+ }
653
+ }
654
+ return true;
655
+ }
656
+
628
657
  vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context, const string &catalog_name) {
629
658
  vector<Catalog *> catalogs;
630
659
  if (IsInvalidCatalog(catalog_name)) {
@@ -145,6 +145,10 @@ CatalogEntry *DuckSchemaEntry::CreateFunction(CatalogTransaction transaction, Cr
145
145
  function = make_unique_base<StandardEntry, ScalarFunctionCatalogEntry>(catalog, this,
146
146
  (CreateScalarFunctionInfo *)info);
147
147
  break;
148
+ case CatalogType::TABLE_FUNCTION_ENTRY:
149
+ function =
150
+ make_unique_base<StandardEntry, TableFunctionCatalogEntry>(catalog, this, (CreateTableFunctionInfo *)info);
151
+ break;
148
152
  case CatalogType::MACRO_ENTRY:
149
153
  // create a macro function
150
154
  function = make_unique_base<StandardEntry, ScalarMacroCatalogEntry>(catalog, this, (CreateMacroInfo *)info);
@@ -682,27 +682,8 @@ void DuckTableEntry::SetAsRoot() {
682
682
  storage->info->table = name;
683
683
  }
684
684
 
685
- void DuckTableEntry::CommitAlter(AlterInfo &info) {
686
- D_ASSERT(info.type == AlterType::ALTER_TABLE);
687
- auto &alter_table = (AlterTableInfo &)info;
688
- string column_name;
689
- switch (alter_table.alter_table_type) {
690
- case AlterTableType::REMOVE_COLUMN: {
691
- auto &remove_info = (RemoveColumnInfo &)alter_table;
692
- column_name = remove_info.removed_column;
693
- break;
694
- }
695
- case AlterTableType::ALTER_COLUMN_TYPE: {
696
- auto &change_info = (ChangeColumnTypeInfo &)alter_table;
697
- column_name = change_info.column_name;
698
- break;
699
- }
700
- default:
701
- break;
702
- }
703
- if (column_name.empty()) {
704
- return;
705
- }
685
+ void DuckTableEntry::CommitAlter(string &column_name) {
686
+ D_ASSERT(!column_name.empty());
706
687
  idx_t removed_index = DConstants::INVALID_INDEX;
707
688
  for (auto &col : columns.Logical()) {
708
689
  if (col.Name() == column_name) {
@@ -1,5 +1,5 @@
1
1
  #include "duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp"
2
- #include "duckdb/parser/parsed_data/alter_function_info.hpp"
2
+ #include "duckdb/parser/parsed_data/alter_scalar_function_info.hpp"
3
3
 
4
4
  namespace duckdb {
5
5
 
@@ -9,14 +9,15 @@ ScalarFunctionCatalogEntry::ScalarFunctionCatalogEntry(Catalog *catalog, SchemaC
9
9
  }
10
10
 
11
11
  unique_ptr<CatalogEntry> ScalarFunctionCatalogEntry::AlterEntry(ClientContext &context, AlterInfo *info) {
12
- if (info->type != AlterType::ALTER_FUNCTION) {
12
+ if (info->type != AlterType::ALTER_SCALAR_FUNCTION) {
13
13
  throw InternalException("Attempting to alter ScalarFunctionCatalogEntry with unsupported alter type");
14
14
  }
15
- auto &function_info = (AlterFunctionInfo &)*info;
16
- if (function_info.alter_function_type != AlterFunctionType::ADD_FUNCTION_OVERLOADS) {
17
- throw InternalException("Attempting to alter ScalarFunctionCatalogEntry with unsupported alter function type");
15
+ auto &function_info = (AlterScalarFunctionInfo &)*info;
16
+ if (function_info.alter_scalar_function_type != AlterScalarFunctionType::ADD_FUNCTION_OVERLOADS) {
17
+ throw InternalException(
18
+ "Attempting to alter ScalarFunctionCatalogEntry with unsupported alter scalar function type");
18
19
  }
19
- auto &add_overloads = (AddFunctionOverloadInfo &)function_info;
20
+ auto &add_overloads = (AddScalarFunctionOverloadInfo &)function_info;
20
21
 
21
22
  ScalarFunctionSet new_set = functions;
22
23
  if (!new_set.MergeFunctionSet(add_overloads.new_overloads)) {
@@ -193,14 +193,14 @@ const vector<unique_ptr<Constraint>> &TableCatalogEntry::GetConstraints() {
193
193
  }
194
194
 
195
195
  DataTable &TableCatalogEntry::GetStorage() {
196
- throw InternalException("Calling GetStorage on a TableCatalogEntry that is not a DTableCatalogEntry");
196
+ throw InternalException("Calling GetStorage on a TableCatalogEntry that is not a DuckTableEntry");
197
197
  }
198
198
 
199
199
  DataTable *TableCatalogEntry::GetStoragePtr() {
200
- throw InternalException("Calling GetStoragePtr on a TableCatalogEntry that is not a DTableCatalogEntry");
200
+ throw InternalException("Calling GetStoragePtr on a TableCatalogEntry that is not a DuckTableEntry");
201
201
  }
202
202
 
203
203
  const vector<unique_ptr<BoundConstraint>> &TableCatalogEntry::GetBoundConstraints() {
204
- throw InternalException("Calling GetBoundConstraints on a TableCatalogEntry that is not a DTableCatalogEntry");
204
+ throw InternalException("Calling GetBoundConstraints on a TableCatalogEntry that is not a DuckTableEntry");
205
205
  }
206
206
  } // namespace duckdb
@@ -1,5 +1,5 @@
1
1
  #include "duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp"
2
- #include "duckdb/parser/parsed_data/create_table_function_info.hpp"
2
+ #include "duckdb/parser/parsed_data/alter_table_function_info.hpp"
3
3
 
4
4
  namespace duckdb {
5
5
 
@@ -10,4 +10,23 @@ TableFunctionCatalogEntry::TableFunctionCatalogEntry(Catalog *catalog, SchemaCat
10
10
  D_ASSERT(this->functions.Size() > 0);
11
11
  }
12
12
 
13
+ unique_ptr<CatalogEntry> TableFunctionCatalogEntry::AlterEntry(ClientContext &context, AlterInfo *info) {
14
+ if (info->type != AlterType::ALTER_TABLE_FUNCTION) {
15
+ throw InternalException("Attempting to alter TableFunctionCatalogEntry with unsupported alter type");
16
+ }
17
+ auto &function_info = (AlterTableFunctionInfo &)*info;
18
+ if (function_info.alter_table_function_type != AlterTableFunctionType::ADD_FUNCTION_OVERLOADS) {
19
+ throw InternalException(
20
+ "Attempting to alter TableFunctionCatalogEntry with unsupported alter table function type");
21
+ }
22
+ auto &add_overloads = (AddTableFunctionOverloadInfo &)function_info;
23
+
24
+ TableFunctionSet new_set = functions;
25
+ if (!new_set.MergeFunctionSet(add_overloads.new_overloads)) {
26
+ throw BinderException("Failed to add new function overloads to function \"%s\": function already exists", name);
27
+ }
28
+ CreateTableFunctionInfo new_info(std::move(new_set));
29
+ return make_unique<TableFunctionCatalogEntry>(catalog, schema, &new_info);
30
+ }
31
+
13
32
  } // namespace duckdb