duckdb 0.8.1-dev51.0 → 0.8.1-dev96.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 (538) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  3. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  4. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  5. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  6. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  7. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  8. package/src/duckdb/extension/parquet/column_reader.cpp +52 -51
  9. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  10. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  11. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  12. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  13. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  14. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  15. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  16. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  17. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  18. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  19. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  20. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  22. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  23. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  24. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  25. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  26. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  27. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  28. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  29. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  30. package/src/duckdb/src/common/checksum.cpp +1 -1
  31. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  32. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  33. package/src/duckdb/src/common/field_writer.cpp +1 -1
  34. package/src/duckdb/src/common/file_system.cpp +15 -2
  35. package/src/duckdb/src/common/fsst.cpp +11 -6
  36. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  37. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  38. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  39. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  40. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  41. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  42. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  43. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  44. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  45. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  46. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  47. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  48. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  49. package/src/duckdb/src/common/serializer.cpp +1 -1
  50. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  51. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  52. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  53. package/src/duckdb/src/common/types/bit.cpp +5 -5
  54. package/src/duckdb/src/common/types/blob.cpp +8 -8
  55. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  56. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  57. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  58. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  59. package/src/duckdb/src/common/types/hash.cpp +2 -2
  60. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  61. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  62. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  63. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  64. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
  65. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  66. package/src/duckdb/src/common/types/value.cpp +2 -2
  67. package/src/duckdb/src/common/types/vector.cpp +98 -101
  68. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  69. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  70. package/src/duckdb/src/common/types.cpp +44 -33
  71. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  72. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  73. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  74. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  75. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +3 -3
  76. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +3 -3
  77. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +4 -4
  78. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +12 -11
  79. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +3 -3
  80. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +3 -3
  81. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +2 -2
  82. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +7 -7
  83. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +2 -2
  84. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +2 -2
  85. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -2
  86. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +14 -14
  87. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +2 -2
  88. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +21 -21
  89. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +18 -19
  90. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +3 -4
  91. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +4 -4
  92. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  93. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +1 -1
  94. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +1 -1
  95. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +2 -2
  96. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +1 -1
  97. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  98. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  99. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  100. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  101. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  102. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  103. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  104. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  105. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  106. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  107. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  108. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  109. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  110. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +1 -1
  111. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  112. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  113. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  114. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  115. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  116. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  117. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  118. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  119. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  120. package/src/duckdb/src/execution/expression_executor.cpp +28 -28
  121. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  122. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  123. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  124. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  125. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  126. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  127. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  128. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  129. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  130. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  131. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  132. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  133. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  134. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  135. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  136. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  137. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  138. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  139. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  140. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  141. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  142. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  143. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  144. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  145. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  146. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  147. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  148. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  149. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  150. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  151. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  152. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  153. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  154. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  155. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  156. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  157. package/src/duckdb/src/function/aggregate/distributive/count.cpp +2 -2
  158. package/src/duckdb/src/function/aggregate/distributive/first.cpp +5 -5
  159. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +8 -8
  160. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  161. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  162. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  163. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  164. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  165. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  166. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  167. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  168. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  169. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  170. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  171. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  172. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  173. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  174. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  175. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  176. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  177. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  178. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  179. package/src/duckdb/src/function/table/arrow.cpp +4 -4
  180. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  181. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  182. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  183. package/src/duckdb/src/function/table/glob.cpp +1 -1
  184. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  185. package/src/duckdb/src/function/table/range.cpp +4 -4
  186. package/src/duckdb/src/function/table/read_csv.cpp +4 -4
  187. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  188. package/src/duckdb/src/function/table/repeat_row.cpp +2 -2
  189. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  190. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  191. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  192. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  193. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  194. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -2
  195. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  196. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  197. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  198. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  199. package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -2
  200. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  201. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  202. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  203. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  204. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  205. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  206. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  207. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  208. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  209. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  210. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  211. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  212. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  213. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  214. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  215. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  216. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +20 -19
  217. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  218. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  219. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  220. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  221. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +1 -1
  222. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +1 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +1 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -1
  225. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +1 -1
  226. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +2 -2
  227. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  228. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  229. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  230. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  232. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  233. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  234. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  235. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  236. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  237. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  238. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  239. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  240. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  242. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  244. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  246. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  247. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  248. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  249. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  250. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  251. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  252. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  253. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  255. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  257. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  259. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  260. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  262. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  263. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  266. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  267. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  268. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  269. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  270. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  271. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  272. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  273. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  274. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  275. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  276. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  280. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  282. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  283. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  284. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
  285. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  286. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  287. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  288. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  289. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  307. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  308. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  309. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  310. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  311. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  312. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  313. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  314. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  317. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  318. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  319. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  320. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  321. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  322. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  323. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  324. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  325. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  326. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  327. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  328. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  329. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  330. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  331. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  332. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  333. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  334. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  335. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  336. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  337. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  338. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  339. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  340. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  341. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  342. package/src/duckdb/src/main/client_context.cpp +3 -3
  343. package/src/duckdb/src/main/database_manager.cpp +1 -1
  344. package/src/duckdb/src/main/error_manager.cpp +1 -1
  345. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  346. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  347. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  348. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  349. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  350. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  351. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  352. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  353. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  354. package/src/duckdb/src/main/relation.cpp +1 -1
  355. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  356. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  357. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  358. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  359. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  360. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  361. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  362. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  363. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  364. package/src/duckdb/src/parallel/executor.cpp +1 -1
  365. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  366. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  367. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  368. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  369. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  370. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  371. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  372. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  373. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  374. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  375. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  376. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  377. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  378. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  379. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  380. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  381. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  382. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  383. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  384. package/src/duckdb/src/parser/parser.cpp +3 -3
  385. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  386. package/src/duckdb/src/parser/query_node.cpp +7 -6
  387. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  388. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  389. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  390. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  391. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  392. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  393. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  394. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  395. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  396. package/src/duckdb/src/parser/tableref.cpp +12 -3
  397. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  398. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  399. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  400. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  401. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  402. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  403. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  404. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  405. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  406. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +69 -75
  407. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  408. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  409. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  410. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  411. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  412. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  413. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  414. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  415. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  416. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  417. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  418. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  419. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  420. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  421. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  422. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  423. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  424. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  425. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  426. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  427. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  428. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  429. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  430. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  431. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  432. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  433. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  434. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  435. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  436. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  437. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  438. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  439. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  440. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  441. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  442. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  443. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  444. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  445. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  446. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  447. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  448. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  449. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  450. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  451. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  452. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  453. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  454. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  455. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  456. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  457. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  458. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  459. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +27 -27
  460. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  461. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  462. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  463. package/src/duckdb/src/parser/transformer.cpp +46 -46
  464. package/src/duckdb/src/planner/bind_context.cpp +6 -6
  465. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  466. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  467. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  468. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  469. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  470. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  471. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -1
  472. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  473. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
  474. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
  475. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +2 -2
  476. package/src/duckdb/src/planner/binder.cpp +1 -1
  477. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  478. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  479. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  480. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  481. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  482. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  483. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  484. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  485. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  486. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  487. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  488. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  489. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  490. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  491. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  492. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  493. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  494. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  495. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  496. package/src/duckdb/src/planner/expression.cpp +15 -0
  497. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  498. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  499. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  500. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  501. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  502. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  503. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  504. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  505. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  506. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  507. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  508. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  509. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  510. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  511. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  512. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  513. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  514. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  515. package/src/duckdb/src/storage/data_table.cpp +2 -2
  516. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  517. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  518. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  519. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  520. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  521. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  522. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  523. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  524. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  525. package/src/duckdb/src/storage/table/list_column_data.cpp +3 -3
  526. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  527. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  528. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  529. package/src/duckdb/src/storage/wal_replay.cpp +1 -1
  530. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  531. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  532. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  533. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  534. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  535. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  536. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  537. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  538. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -3,13 +3,13 @@
3
3
 
4
4
  namespace duckdb {
5
5
 
6
- unique_ptr<ParsedExpression> Transformer::TransformGroupingFunction(duckdb_libpgquery::PGGroupingFunc *n) {
6
+ unique_ptr<ParsedExpression> Transformer::TransformGroupingFunction(duckdb_libpgquery::PGGroupingFunc &grouping) {
7
7
  auto op = make_uniq<OperatorExpression>(ExpressionType::GROUPING_FUNCTION);
8
- for (auto node = n->args->head; node; node = node->next) {
9
- auto n = (duckdb_libpgquery::PGNode *)node->data.ptr_value;
8
+ for (auto node = grouping.args->head; node; node = node->next) {
9
+ auto n = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
10
10
  op->children.push_back(TransformExpression(n));
11
11
  }
12
- op->query_location = n->location;
12
+ op->query_location = grouping.location;
13
13
  return std::move(op);
14
14
  }
15
15
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  namespace duckdb {
8
8
 
9
- unique_ptr<ParsedExpression> Transformer::TransformInterval(duckdb_libpgquery::PGIntervalConstant *node) {
9
+ unique_ptr<ParsedExpression> Transformer::TransformInterval(duckdb_libpgquery::PGIntervalConstant &node) {
10
10
  // handle post-fix notation of INTERVAL
11
11
 
12
12
  // three scenarios
@@ -14,25 +14,25 @@ unique_ptr<ParsedExpression> Transformer::TransformInterval(duckdb_libpgquery::P
14
14
  // interval 'string' year
15
15
  // interval int year
16
16
  unique_ptr<ParsedExpression> expr;
17
- switch (node->val_type) {
17
+ switch (node.val_type) {
18
18
  case duckdb_libpgquery::T_PGAExpr:
19
- expr = TransformExpression(node->eval);
19
+ expr = TransformExpression(node.eval);
20
20
  break;
21
21
  case duckdb_libpgquery::T_PGString:
22
- expr = make_uniq<ConstantExpression>(Value(node->sval));
22
+ expr = make_uniq<ConstantExpression>(Value(node.sval));
23
23
  break;
24
24
  case duckdb_libpgquery::T_PGInteger:
25
- expr = make_uniq<ConstantExpression>(Value(node->ival));
25
+ expr = make_uniq<ConstantExpression>(Value(node.ival));
26
26
  break;
27
27
  default:
28
28
  throw InternalException("Unsupported interval transformation");
29
29
  }
30
30
 
31
- if (!node->typmods) {
31
+ if (!node.typmods) {
32
32
  return make_uniq<CastExpression>(LogicalType::INTERVAL, std::move(expr));
33
33
  }
34
34
 
35
- int32_t mask = ((duckdb_libpgquery::PGAConst *)node->typmods->head->data.ptr_value)->val.val.ival;
35
+ int32_t mask = PGPointerCast<duckdb_libpgquery::PGAConst>(node.typmods->head->data.ptr_value)->val.val.ival;
36
36
  // these seemingly random constants are from datetime.hpp
37
37
  // they are copied here to avoid having to include this header
38
38
  // the bitshift is from the function INTERVAL_MASK in the parser
@@ -4,13 +4,12 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- unique_ptr<ParsedExpression> Transformer::TransformNullTest(duckdb_libpgquery::PGNullTest *root) {
8
- D_ASSERT(root);
9
- auto arg = TransformExpression(reinterpret_cast<duckdb_libpgquery::PGNode *>(root->arg));
10
- if (root->argisrow) {
7
+ unique_ptr<ParsedExpression> Transformer::TransformNullTest(duckdb_libpgquery::PGNullTest &root) {
8
+ auto arg = TransformExpression(PGPointerCast<duckdb_libpgquery::PGNode>(root.arg));
9
+ if (root.argisrow) {
11
10
  throw NotImplementedException("IS NULL argisrow");
12
11
  }
13
- ExpressionType expr_type = (root->nulltesttype == duckdb_libpgquery::PG_IS_NULL)
12
+ ExpressionType expr_type = (root.nulltesttype == duckdb_libpgquery::PG_IS_NULL)
14
13
  ? ExpressionType::OPERATOR_IS_NULL
15
14
  : ExpressionType::OPERATOR_IS_NOT_NULL;
16
15
 
@@ -4,13 +4,12 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- unique_ptr<ParsedExpression> Transformer::TransformLambda(duckdb_libpgquery::PGLambdaFunction *node) {
7
+ unique_ptr<ParsedExpression> Transformer::TransformLambda(duckdb_libpgquery::PGLambdaFunction &node) {
8
+ D_ASSERT(node.lhs);
9
+ D_ASSERT(node.rhs);
8
10
 
9
- D_ASSERT(node->lhs);
10
- D_ASSERT(node->rhs);
11
-
12
- auto lhs = TransformExpression(node->lhs);
13
- auto rhs = TransformExpression(node->rhs);
11
+ auto lhs = TransformExpression(node.lhs);
12
+ auto rhs = TransformExpression(node.rhs);
14
13
  D_ASSERT(lhs);
15
14
  D_ASSERT(rhs);
16
15
  return make_uniq<LambdaExpression>(std::move(lhs), std::move(rhs));
@@ -57,17 +57,16 @@ unique_ptr<ParsedExpression> Transformer::TransformBinaryOperator(string op, uni
57
57
  }
58
58
  }
59
59
 
60
- unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgquery::PGAExpr *root) {
61
- D_ASSERT(root);
62
- auto name = string((reinterpret_cast<duckdb_libpgquery::PGValue *>(root->name->head->data.ptr_value))->val.str);
60
+ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgquery::PGAExpr &root) {
61
+ auto name = string(PGPointerCast<duckdb_libpgquery::PGValue>(root.name->head->data.ptr_value)->val.str);
63
62
 
64
- switch (root->kind) {
63
+ switch (root.kind) {
65
64
  case duckdb_libpgquery::PG_AEXPR_OP_ALL:
66
65
  case duckdb_libpgquery::PG_AEXPR_OP_ANY: {
67
66
  // left=ANY(right)
68
67
  // we turn this into left=ANY((SELECT UNNEST(right)))
69
- auto left_expr = TransformExpression(root->lexpr);
70
- auto right_expr = TransformExpression(root->rexpr);
68
+ auto left_expr = TransformExpression(root.lexpr);
69
+ auto right_expr = TransformExpression(root.rexpr);
71
70
 
72
71
  auto subquery_expr = make_uniq<SubqueryExpression>();
73
72
  auto select_statement = make_uniq<SelectStatement>();
@@ -82,9 +81,9 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
82
81
  subquery_expr->subquery_type = SubqueryType::ANY;
83
82
  subquery_expr->child = std::move(left_expr);
84
83
  subquery_expr->comparison_type = OperatorToExpressionType(name);
85
- subquery_expr->query_location = root->location;
84
+ subquery_expr->query_location = root.location;
86
85
 
87
- if (root->kind == duckdb_libpgquery::PG_AEXPR_OP_ALL) {
86
+ if (root.kind == duckdb_libpgquery::PG_AEXPR_OP_ALL) {
88
87
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
89
88
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
90
89
  // first invert the comparison type
@@ -94,7 +93,7 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
94
93
  return std::move(subquery_expr);
95
94
  }
96
95
  case duckdb_libpgquery::PG_AEXPR_IN: {
97
- auto left_expr = TransformExpression(root->lexpr);
96
+ auto left_expr = TransformExpression(root.lexpr);
98
97
  ExpressionType operator_type;
99
98
  // this looks very odd, but seems to be the way to find out its NOT IN
100
99
  if (name == "<>") {
@@ -105,35 +104,35 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
105
104
  operator_type = ExpressionType::COMPARE_IN;
106
105
  }
107
106
  auto result = make_uniq<OperatorExpression>(operator_type, std::move(left_expr));
108
- result->query_location = root->location;
109
- TransformExpressionList(*((duckdb_libpgquery::PGList *)root->rexpr), result->children);
107
+ result->query_location = root.location;
108
+ TransformExpressionList(*PGPointerCast<duckdb_libpgquery::PGList>(root.rexpr), result->children);
110
109
  return std::move(result);
111
110
  }
112
111
  // rewrite NULLIF(a, b) into CASE WHEN a=b THEN NULL ELSE a END
113
112
  case duckdb_libpgquery::PG_AEXPR_NULLIF: {
114
113
  vector<unique_ptr<ParsedExpression>> children;
115
- children.push_back(TransformExpression(root->lexpr));
116
- children.push_back(TransformExpression(root->rexpr));
114
+ children.push_back(TransformExpression(root.lexpr));
115
+ children.push_back(TransformExpression(root.rexpr));
117
116
  return make_uniq<FunctionExpression>("nullif", std::move(children));
118
117
  }
119
118
  // rewrite (NOT) X BETWEEN A AND B into (NOT) AND(GREATERTHANOREQUALTO(X,
120
119
  // A), LESSTHANOREQUALTO(X, B))
121
120
  case duckdb_libpgquery::PG_AEXPR_BETWEEN:
122
121
  case duckdb_libpgquery::PG_AEXPR_NOT_BETWEEN: {
123
- auto between_args = reinterpret_cast<duckdb_libpgquery::PGList *>(root->rexpr);
122
+ auto between_args = PGPointerCast<duckdb_libpgquery::PGList>(root.rexpr);
124
123
  if (between_args->length != 2 || !between_args->head->data.ptr_value || !between_args->tail->data.ptr_value) {
125
124
  throw InternalException("(NOT) BETWEEN needs two args");
126
125
  }
127
126
 
128
- auto input = TransformExpression(root->lexpr);
127
+ auto input = TransformExpression(root.lexpr);
129
128
  auto between_left =
130
- TransformExpression(reinterpret_cast<duckdb_libpgquery::PGNode *>(between_args->head->data.ptr_value));
129
+ TransformExpression(PGPointerCast<duckdb_libpgquery::PGNode>(between_args->head->data.ptr_value));
131
130
  auto between_right =
132
- TransformExpression(reinterpret_cast<duckdb_libpgquery::PGNode *>(between_args->tail->data.ptr_value));
131
+ TransformExpression(PGPointerCast<duckdb_libpgquery::PGNode>(between_args->tail->data.ptr_value));
133
132
 
134
133
  auto compare_between =
135
134
  make_uniq<BetweenExpression>(std::move(input), std::move(between_left), std::move(between_right));
136
- if (root->kind == duckdb_libpgquery::PG_AEXPR_BETWEEN) {
135
+ if (root.kind == duckdb_libpgquery::PG_AEXPR_BETWEEN) {
137
136
  return std::move(compare_between);
138
137
  } else {
139
138
  return make_uniq<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(compare_between));
@@ -141,13 +140,13 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
141
140
  }
142
141
  // rewrite SIMILAR TO into regexp_full_match('asdf', '.*sd.*')
143
142
  case duckdb_libpgquery::PG_AEXPR_SIMILAR: {
144
- auto left_expr = TransformExpression(root->lexpr);
145
- auto right_expr = TransformExpression(root->rexpr);
143
+ auto left_expr = TransformExpression(root.lexpr);
144
+ auto right_expr = TransformExpression(root.rexpr);
146
145
 
147
146
  vector<unique_ptr<ParsedExpression>> children;
148
147
  children.push_back(std::move(left_expr));
149
148
 
150
- auto &similar_func = reinterpret_cast<FunctionExpression &>(*right_expr);
149
+ auto &similar_func = right_expr->Cast<FunctionExpression>();
151
150
  D_ASSERT(similar_func.function_name == "similar_escape");
152
151
  D_ASSERT(similar_func.children.size() == 2);
153
152
  if (similar_func.children[1]->type != ExpressionType::VALUE_CONSTANT) {
@@ -176,14 +175,14 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
176
175
  }
177
176
  }
178
177
  case duckdb_libpgquery::PG_AEXPR_NOT_DISTINCT: {
179
- auto left_expr = TransformExpression(root->lexpr);
180
- auto right_expr = TransformExpression(root->rexpr);
178
+ auto left_expr = TransformExpression(root.lexpr);
179
+ auto right_expr = TransformExpression(root.rexpr);
181
180
  return make_uniq<ComparisonExpression>(ExpressionType::COMPARE_NOT_DISTINCT_FROM, std::move(left_expr),
182
181
  std::move(right_expr));
183
182
  }
184
183
  case duckdb_libpgquery::PG_AEXPR_DISTINCT: {
185
- auto left_expr = TransformExpression(root->lexpr);
186
- auto right_expr = TransformExpression(root->rexpr);
184
+ auto left_expr = TransformExpression(root.lexpr);
185
+ auto right_expr = TransformExpression(root.rexpr);
187
186
  return make_uniq<ComparisonExpression>(ExpressionType::COMPARE_DISTINCT_FROM, std::move(left_expr),
188
187
  std::move(right_expr));
189
188
  }
@@ -191,8 +190,8 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
191
190
  default:
192
191
  break;
193
192
  }
194
- auto left_expr = TransformExpression(root->lexpr);
195
- auto right_expr = TransformExpression(root->rexpr);
193
+ auto left_expr = TransformExpression(root.lexpr);
194
+ auto right_expr = TransformExpression(root.rexpr);
196
195
 
197
196
  if (!left_expr) {
198
197
  // prefix operator
@@ -205,10 +204,10 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
205
204
  }
206
205
  }
207
206
 
208
- unique_ptr<ParsedExpression> Transformer::TransformAExpr(duckdb_libpgquery::PGAExpr *root) {
207
+ unique_ptr<ParsedExpression> Transformer::TransformAExpr(duckdb_libpgquery::PGAExpr &root) {
209
208
  auto result = TransformAExprInternal(root);
210
209
  if (result) {
211
- result->query_location = root->location;
210
+ result->query_location = root.location;
212
211
  }
213
212
  return result;
214
213
  }
@@ -4,39 +4,38 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- unique_ptr<ParsedExpression> Transformer::TransformParamRef(duckdb_libpgquery::PGParamRef *node) {
8
- D_ASSERT(node);
7
+ unique_ptr<ParsedExpression> Transformer::TransformParamRef(duckdb_libpgquery::PGParamRef &node) {
9
8
  auto expr = make_uniq<ParameterExpression>();
10
- if (node->number < 0) {
9
+ if (node.number < 0) {
11
10
  throw ParserException("Parameter numbers cannot be negative");
12
11
  }
13
12
 
14
- if (node->name) {
13
+ if (node.name) {
15
14
  // This is a named parameter, try to find an entry for it
16
- D_ASSERT(node->number == 0);
15
+ D_ASSERT(node.number == 0);
17
16
  int32_t index;
18
- if (GetNamedParam(node->name, index)) {
17
+ if (GetNamedParam(node.name, index)) {
19
18
  // We've seen this named parameter before and assigned it an index!
20
- node->number = index;
19
+ node.number = index;
21
20
  }
22
21
  }
23
- if (node->number == 0) {
22
+ if (node.number == 0) {
24
23
  expr->parameter_nr = ParamCount() + 1;
25
- if (node->name && !HasNamedParameters() && ParamCount() != 0) {
24
+ if (node.name && !HasNamedParameters() && ParamCount() != 0) {
26
25
  // This parameter is named, but there were other parameter before it, and they were not named
27
26
  throw NotImplementedException("Mixing positional and named parameters is not supported yet");
28
27
  }
29
- if (node->name) {
30
- D_ASSERT(!named_param_map.count(node->name));
28
+ if (node.name) {
29
+ D_ASSERT(!named_param_map.count(node.name));
31
30
  // Add it to the named parameter map so we can find it next time it's referenced
32
- SetNamedParam(node->name, expr->parameter_nr);
31
+ SetNamedParam(node.name, expr->parameter_nr);
33
32
  }
34
33
  } else {
35
- if (!node->name && HasNamedParameters()) {
34
+ if (!node.name && HasNamedParameters()) {
36
35
  // This parameter does not have a name, but the named param map is not empty
37
36
  throw NotImplementedException("Mixing positional and named parameters is not supported yet");
38
37
  }
39
- expr->parameter_nr = node->number;
38
+ expr->parameter_nr = node.number;
40
39
  }
41
40
  SetParamCount(MaxValue<idx_t>(ParamCount(), expr->parameter_nr));
42
41
  return std::move(expr);
@@ -4,12 +4,12 @@
4
4
 
5
5
  namespace duckdb {
6
6
 
7
- unique_ptr<ParsedExpression> Transformer::TransformPositionalReference(duckdb_libpgquery::PGPositionalReference *node) {
8
- if (node->position <= 0) {
7
+ unique_ptr<ParsedExpression> Transformer::TransformPositionalReference(duckdb_libpgquery::PGPositionalReference &node) {
8
+ if (node.position <= 0) {
9
9
  throw ParserException("Positional reference node needs to be >= 1");
10
10
  }
11
- auto result = make_uniq<PositionalReferenceExpression>(node->position);
12
- result->query_location = node->location;
11
+ auto result = make_uniq<PositionalReferenceExpression>(node.position);
12
+ result->query_location = node.location;
13
13
  return std::move(result);
14
14
  }
15
15
 
@@ -5,15 +5,14 @@
5
5
 
6
6
  namespace duckdb {
7
7
 
8
- unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::PGSubLink *root) {
9
- D_ASSERT(root);
8
+ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::PGSubLink &root) {
10
9
  auto subquery_expr = make_uniq<SubqueryExpression>();
11
10
 
12
- subquery_expr->subquery = TransformSelect(root->subselect);
11
+ subquery_expr->subquery = TransformSelect(root.subselect);
13
12
  D_ASSERT(subquery_expr->subquery);
14
13
  D_ASSERT(subquery_expr->subquery->node->GetSelectList().size() > 0);
15
14
 
16
- switch (root->subLinkType) {
15
+ switch (root.subLinkType) {
17
16
  case duckdb_libpgquery::PG_EXISTS_SUBLINK: {
18
17
  subquery_expr->subquery_type = SubqueryType::EXISTS;
19
18
  break;
@@ -22,14 +21,14 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
22
21
  case duckdb_libpgquery::PG_ALL_SUBLINK: {
23
22
  // comparison with ANY() or ALL()
24
23
  subquery_expr->subquery_type = SubqueryType::ANY;
25
- subquery_expr->child = TransformExpression(root->testexpr);
24
+ subquery_expr->child = TransformExpression(root.testexpr);
26
25
  // get the operator name
27
- if (!root->operName) {
26
+ if (!root.operName) {
28
27
  // simple IN
29
28
  subquery_expr->comparison_type = ExpressionType::COMPARE_EQUAL;
30
29
  } else {
31
30
  auto operator_name =
32
- string((reinterpret_cast<duckdb_libpgquery::PGValue *>(root->operName->head->data.ptr_value))->val.str);
31
+ string((PGPointerCast<duckdb_libpgquery::PGValue>(root.operName->head->data.ptr_value))->val.str);
33
32
  subquery_expr->comparison_type = OperatorToExpressionType(operator_name);
34
33
  }
35
34
  if (subquery_expr->comparison_type != ExpressionType::COMPARE_EQUAL &&
@@ -40,7 +39,7 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
40
39
  subquery_expr->comparison_type != ExpressionType::COMPARE_LESSTHANOREQUALTO) {
41
40
  throw ParserException("ANY and ALL operators require one of =,<>,>,<,>=,<= comparisons!");
42
41
  }
43
- if (root->subLinkType == duckdb_libpgquery::PG_ALL_SUBLINK) {
42
+ if (root.subLinkType == duckdb_libpgquery::PG_ALL_SUBLINK) {
44
43
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
45
44
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
46
45
  // first invert the comparison type
@@ -96,9 +95,9 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
96
95
  break;
97
96
  }
98
97
  default:
99
- throw NotImplementedException("Subquery of type %d not implemented\n", (int)root->subLinkType);
98
+ throw NotImplementedException("Subquery of type %d not implemented\n", (int)root.subLinkType);
100
99
  }
101
- subquery_expr->query_location = root->location;
100
+ subquery_expr->query_location = root.location;
102
101
  return std::move(subquery_expr);
103
102
  }
104
103
 
@@ -29,50 +29,50 @@ void Transformer::ExtractCTEsRecursive(CommonTableExpressionMap &cte_map) {
29
29
  }
30
30
  }
31
31
 
32
- void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause, CommonTableExpressionMap &cte_map) {
32
+ void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map) {
33
33
  // TODO: might need to update in case of future lawsuit
34
- D_ASSERT(de_with_clause);
35
34
  stored_cte_map.push_back(&cte_map);
36
35
 
37
- D_ASSERT(de_with_clause->ctes);
38
- for (auto cte_ele = de_with_clause->ctes->head; cte_ele != nullptr; cte_ele = cte_ele->next) {
36
+ D_ASSERT(de_with_clause.ctes);
37
+ for (auto cte_ele = de_with_clause.ctes->head; cte_ele != nullptr; cte_ele = cte_ele->next) {
39
38
  auto info = make_uniq<CommonTableExpressionInfo>();
40
39
 
41
- auto cte = reinterpret_cast<duckdb_libpgquery::PGCommonTableExpr *>(cte_ele->data.ptr_value);
42
- if (cte->aliascolnames) {
43
- for (auto node = cte->aliascolnames->head; node != nullptr; node = node->next) {
40
+ auto &cte = *PGPointerCast<duckdb_libpgquery::PGCommonTableExpr>(cte_ele->data.ptr_value);
41
+ if (cte.aliascolnames) {
42
+ for (auto node = cte.aliascolnames->head; node != nullptr; node = node->next) {
44
43
  info->aliases.emplace_back(
45
44
  reinterpret_cast<duckdb_libpgquery::PGValue *>(node->data.ptr_value)->val.str);
46
45
  }
47
46
  }
48
47
  // lets throw some errors on unsupported features early
49
- if (cte->ctecolnames) {
48
+ if (cte.ctecolnames) {
50
49
  throw NotImplementedException("Column name setting not supported in CTEs");
51
50
  }
52
- if (cte->ctecoltypes) {
51
+ if (cte.ctecoltypes) {
53
52
  throw NotImplementedException("Column type setting not supported in CTEs");
54
53
  }
55
- if (cte->ctecoltypmods) {
54
+ if (cte.ctecoltypmods) {
56
55
  throw NotImplementedException("Column type modification not supported in CTEs");
57
56
  }
58
- if (cte->ctecolcollations) {
57
+ if (cte.ctecolcollations) {
59
58
  throw NotImplementedException("CTE collations not supported");
60
59
  }
61
60
  // we need a query
62
- if (!cte->ctequery || cte->ctequery->type != duckdb_libpgquery::T_PGSelectStmt) {
61
+ if (!cte.ctequery || cte.ctequery->type != duckdb_libpgquery::T_PGSelectStmt) {
63
62
  throw NotImplementedException("A CTE needs a SELECT");
64
63
  }
65
64
 
66
65
  // CTE transformation can either result in inlining for non recursive CTEs, or in recursive CTE bindings
67
66
  // otherwise.
68
- if (cte->cterecursive || de_with_clause->recursive) {
67
+ if (cte.cterecursive || de_with_clause.recursive) {
69
68
  info->query = TransformRecursiveCTE(cte, *info);
70
69
  } else {
71
70
  Transformer cte_transformer(*this);
72
- info->query = cte_transformer.TransformSelect(cte->ctequery);
71
+ info->query =
72
+ cte_transformer.TransformSelect(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery));
73
73
  }
74
74
  D_ASSERT(info->query);
75
- auto cte_name = string(cte->ctename);
75
+ auto cte_name = string(cte.ctename);
76
76
 
77
77
  auto it = cte_map.map.find(cte_name);
78
78
  if (it != cte_map.map.end()) {
@@ -83,41 +83,37 @@ void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause,
83
83
  }
84
84
  }
85
85
 
86
- unique_ptr<SelectStatement> Transformer::TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr *cte,
86
+ unique_ptr<SelectStatement> Transformer::TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr &cte,
87
87
  CommonTableExpressionInfo &info) {
88
- auto stmt = (duckdb_libpgquery::PGSelectStmt *)cte->ctequery;
88
+ auto &stmt = *PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery);
89
89
 
90
90
  unique_ptr<SelectStatement> select;
91
- switch (stmt->op) {
91
+ switch (stmt.op) {
92
92
  case duckdb_libpgquery::PG_SETOP_UNION:
93
93
  case duckdb_libpgquery::PG_SETOP_EXCEPT:
94
94
  case duckdb_libpgquery::PG_SETOP_INTERSECT: {
95
95
  select = make_uniq<SelectStatement>();
96
96
  select->node = make_uniq_base<QueryNode, RecursiveCTENode>();
97
- auto result = (RecursiveCTENode *)select->node.get();
98
- result->ctename = string(cte->ctename);
99
- result->union_all = stmt->all;
100
- result->left = TransformSelectNode(stmt->larg);
101
- result->right = TransformSelectNode(stmt->rarg);
102
- result->aliases = info.aliases;
103
-
104
- D_ASSERT(result->left);
105
- D_ASSERT(result->right);
106
-
107
- if (stmt->op != duckdb_libpgquery::PG_SETOP_UNION) {
97
+ auto &result = select->node->Cast<RecursiveCTENode>();
98
+ result.ctename = string(cte.ctename);
99
+ result.union_all = stmt.all;
100
+ result.left = TransformSelectNode(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(stmt.larg));
101
+ result.right = TransformSelectNode(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(stmt.rarg));
102
+ result.aliases = info.aliases;
103
+ if (stmt.op != duckdb_libpgquery::PG_SETOP_UNION) {
108
104
  throw ParserException("Unsupported setop type for recursive CTE: only UNION or UNION ALL are supported");
109
105
  }
110
106
  break;
111
107
  }
112
108
  default:
113
109
  // This CTE is not recursive. Fallback to regular query transformation.
114
- return TransformSelect(cte->ctequery);
110
+ return TransformSelect(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery));
115
111
  }
116
112
 
117
- if (stmt->limitCount || stmt->limitOffset) {
113
+ if (stmt.limitCount || stmt.limitOffset) {
118
114
  throw ParserException("LIMIT or OFFSET in a recursive query is not allowed");
119
115
  }
120
- if (stmt->sortClause) {
116
+ if (stmt.sortClause) {
121
117
  throw ParserException("ORDER BY in a recursive query is not allowed");
122
118
  }
123
119
  return select;
@@ -72,7 +72,7 @@ static void AddCubeSets(const GroupingSet &current_set, vector<GroupingSet> &res
72
72
  }
73
73
  }
74
74
 
75
- void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode *n, GroupingExpressionMap &map,
75
+ void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode &n, GroupingExpressionMap &map,
76
76
  GroupByNode &result, vector<idx_t> &indexes) {
77
77
  auto expression = TransformExpression(n);
78
78
  AddGroupByExpression(std::move(expression), map, result, indexes);
@@ -80,11 +80,11 @@ void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode *n, Group
80
80
 
81
81
  // If one GROUPING SETS clause is nested inside another,
82
82
  // the effect is the same as if all the elements of the inner clause had been written directly in the outer clause.
83
- void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExpressionMap &map, SelectNode &result,
83
+ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode &n, GroupingExpressionMap &map, SelectNode &result,
84
84
  vector<GroupingSet> &result_sets) {
85
- if (n->type == duckdb_libpgquery::T_PGGroupingSet) {
86
- auto grouping_set = (duckdb_libpgquery::PGGroupingSet *)n;
87
- switch (grouping_set->kind) {
85
+ if (n.type == duckdb_libpgquery::T_PGGroupingSet) {
86
+ auto &grouping_set = PGCast<duckdb_libpgquery::PGGroupingSet>(n);
87
+ switch (grouping_set.kind) {
88
88
  case duckdb_libpgquery::GROUPING_SET_EMPTY:
89
89
  result_sets.emplace_back();
90
90
  break;
@@ -93,18 +93,18 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
93
93
  break;
94
94
  }
95
95
  case duckdb_libpgquery::GROUPING_SET_SETS: {
96
- for (auto node = grouping_set->content->head; node; node = node->next) {
97
- auto pg_node = (duckdb_libpgquery::PGNode *)node->data.ptr_value;
98
- TransformGroupByNode(pg_node, map, result, result_sets);
96
+ for (auto node = grouping_set.content->head; node; node = node->next) {
97
+ auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
98
+ TransformGroupByNode(*pg_node, map, result, result_sets);
99
99
  }
100
100
  break;
101
101
  }
102
102
  case duckdb_libpgquery::GROUPING_SET_ROLLUP: {
103
103
  vector<GroupingSet> rollup_sets;
104
- for (auto node = grouping_set->content->head; node; node = node->next) {
105
- auto pg_node = (duckdb_libpgquery::PGNode *)node->data.ptr_value;
104
+ for (auto node = grouping_set.content->head; node; node = node->next) {
105
+ auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
106
106
  vector<idx_t> rollup_set;
107
- TransformGroupByExpression(pg_node, map, result.groups, rollup_set);
107
+ TransformGroupByExpression(*pg_node, map, result.groups, rollup_set);
108
108
  rollup_sets.push_back(VectorToGroupingSet(rollup_set));
109
109
  }
110
110
  // generate the subsets of the rollup set and add them to the grouping sets
@@ -118,10 +118,10 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
118
118
  }
119
119
  case duckdb_libpgquery::GROUPING_SET_CUBE: {
120
120
  vector<GroupingSet> cube_sets;
121
- for (auto node = grouping_set->content->head; node; node = node->next) {
122
- auto pg_node = (duckdb_libpgquery::PGNode *)node->data.ptr_value;
121
+ for (auto node = grouping_set.content->head; node; node = node->next) {
122
+ auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
123
123
  vector<idx_t> cube_set;
124
- TransformGroupByExpression(pg_node, map, result.groups, cube_set);
124
+ TransformGroupByExpression(*pg_node, map, result.groups, cube_set);
125
125
  cube_sets.push_back(VectorToGroupingSet(cube_set));
126
126
  }
127
127
  // generate the subsets of the rollup set and add them to the grouping sets
@@ -132,7 +132,7 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
132
132
  break;
133
133
  }
134
134
  default:
135
- throw InternalException("Unsupported GROUPING SET type %d", grouping_set->kind);
135
+ throw InternalException("Unsupported GROUPING SET type %d", grouping_set.kind);
136
136
  }
137
137
  } else {
138
138
  vector<idx_t> indexes;
@@ -143,16 +143,16 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
143
143
 
144
144
  // If multiple grouping items are specified in a single GROUP BY clause,
145
145
  // then the final list of grouping sets is the cross product of the individual items.
146
- bool Transformer::TransformGroupBy(duckdb_libpgquery::PGList *group, SelectNode &select_node) {
146
+ bool Transformer::TransformGroupBy(optional_ptr<duckdb_libpgquery::PGList> group, SelectNode &select_node) {
147
147
  if (!group) {
148
148
  return false;
149
149
  }
150
150
  auto &result = select_node.groups;
151
151
  GroupingExpressionMap map;
152
152
  for (auto node = group->head; node != nullptr; node = node->next) {
153
- auto n = reinterpret_cast<duckdb_libpgquery::PGNode *>(node->data.ptr_value);
153
+ auto n = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
154
154
  vector<GroupingSet> result_sets;
155
- TransformGroupByNode(n, map, select_node, result_sets);
155
+ TransformGroupByNode(*n, map, select_node, result_sets);
156
156
  CheckGroupingSetMax(result_sets.size());
157
157
  if (result.grouping_sets.empty()) {
158
158
  // no grouping sets yet: use the current set of grouping sets
@@ -18,13 +18,13 @@ static SampleMethod GetSampleMethod(const string &method) {
18
18
  }
19
19
  }
20
20
 
21
- unique_ptr<SampleOptions> Transformer::TransformSampleOptions(duckdb_libpgquery::PGNode *options) {
21
+ unique_ptr<SampleOptions> Transformer::TransformSampleOptions(optional_ptr<duckdb_libpgquery::PGNode> options) {
22
22
  if (!options) {
23
23
  return nullptr;
24
24
  }
25
25
  auto result = make_uniq<SampleOptions>();
26
- auto &sample_options = (duckdb_libpgquery::PGSampleOptions &)*options;
27
- auto &sample_size = (duckdb_libpgquery::PGSampleSize &)*sample_options.sample_size;
26
+ auto &sample_options = PGCast<duckdb_libpgquery::PGSampleOptions>(*options);
27
+ auto &sample_size = *PGPointerCast<duckdb_libpgquery::PGSampleSize>(sample_options.sample_size);
28
28
  auto sample_value = TransformValue(sample_size.sample_size)->value;
29
29
  result->is_percentage = sample_size.is_percentage;
30
30
  if (sample_size.is_percentage) {