duckdb 0.8.2-dev161.0 → 0.8.2-dev1724.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 (504) hide show
  1. package/binding.gyp +15 -12
  2. package/binding.gyp.in +1 -1
  3. package/configure.py +1 -1
  4. package/duckdb_extension_config.cmake +10 -0
  5. package/package.json +1 -1
  6. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  7. package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
  8. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  9. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  10. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  11. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  12. package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
  13. package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
  14. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
  15. package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
  16. package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
  17. package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
  18. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  19. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  20. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  21. package/src/duckdb/extension/json/json_common.cpp +272 -40
  22. package/src/duckdb/extension/json/json_functions/json_create.cpp +21 -2
  23. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  24. package/src/duckdb/extension/json/json_functions/json_transform.cpp +91 -38
  25. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  26. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  27. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  28. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  29. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  30. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  31. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  32. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  33. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  34. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  35. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  36. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  37. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  38. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  39. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  40. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  41. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  42. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  43. package/src/duckdb/extension/parquet/parquet_extension.cpp +194 -20
  44. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
  45. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  46. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  47. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  48. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  49. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  50. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  51. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  52. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  53. package/src/duckdb/src/common/allocator.cpp +14 -2
  54. package/src/duckdb/src/common/arrow/arrow_appender.cpp +79 -12
  55. package/src/duckdb/src/common/arrow/arrow_converter.cpp +44 -19
  56. package/src/duckdb/src/common/assert.cpp +3 -0
  57. package/src/duckdb/src/common/enum_util.cpp +4619 -4446
  58. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  60. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  61. package/src/duckdb/src/common/exception.cpp +2 -2
  62. package/src/duckdb/src/common/extra_type_info.cpp +506 -0
  63. package/src/duckdb/src/common/file_system.cpp +19 -0
  64. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  65. package/src/duckdb/src/common/local_file_system.cpp +14 -14
  66. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  67. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  68. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  69. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  70. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  71. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  72. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  73. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  74. package/src/duckdb/src/common/types/bit.cpp +51 -0
  75. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  76. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  77. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  78. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  79. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  80. package/src/duckdb/src/common/types/date.cpp +9 -0
  81. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  82. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  83. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  84. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  85. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  86. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  87. package/src/duckdb/src/common/types/value.cpp +11 -6
  88. package/src/duckdb/src/common/types.cpp +9 -656
  89. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  90. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  91. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  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 +4 -4
  94. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  95. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  96. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  97. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  98. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  99. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  100. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  101. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  102. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  103. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  104. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  105. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  106. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  107. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  108. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  109. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  110. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  111. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  112. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  113. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  114. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  115. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  116. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  117. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  118. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  119. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  120. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  121. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +444 -284
  122. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  123. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  124. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
  125. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  126. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
  127. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  128. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  129. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  130. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  131. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  132. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  133. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  134. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  135. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  136. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  137. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  138. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  139. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  140. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  141. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  142. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  143. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  144. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +56 -33
  145. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
  146. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  147. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  148. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  149. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  150. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  151. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  152. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  153. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  154. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  155. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  156. package/src/duckdb/src/function/function.cpp +3 -1
  157. package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
  158. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  159. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  160. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  161. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  162. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  163. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  164. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  165. package/src/duckdb/src/function/table/arrow.cpp +19 -0
  166. package/src/duckdb/src/function/table/arrow_conversion.cpp +35 -1
  167. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  168. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  169. package/src/duckdb/src/function/table/system/test_all_types.cpp +7 -0
  170. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  171. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  172. package/src/duckdb/src/function/table/version/pragma_version.cpp +46 -2
  173. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  174. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  175. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  176. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  177. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
  178. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  179. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  180. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  182. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  183. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  184. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
  185. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  186. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  187. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  188. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  189. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  190. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +2 -2
  191. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  192. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  193. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  194. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  195. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  196. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
  198. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  199. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  200. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  201. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  202. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  204. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  205. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  206. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  207. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  208. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  209. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  211. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -0
  212. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
  213. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  214. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  215. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  218. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  219. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  220. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  221. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  222. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  225. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  226. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  227. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  228. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  229. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  230. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  231. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  233. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  234. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  235. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  236. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  237. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  238. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  239. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  240. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  241. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  242. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  243. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  244. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  245. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  246. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  247. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +3 -10
  248. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  249. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  250. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  251. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  252. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  253. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  254. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  255. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  257. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  258. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  259. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  260. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  261. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  262. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  263. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  264. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  266. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  267. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  268. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  269. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  270. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  271. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  272. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
  273. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  274. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  275. package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +22 -0
  276. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  277. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  278. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  279. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  280. package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
  281. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  282. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  283. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  284. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  287. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  291. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  293. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  294. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  295. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  296. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  297. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  299. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  301. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  304. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  305. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  307. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  309. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  310. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  311. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  312. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  316. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  317. package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
  318. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  319. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  320. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  321. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  322. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  323. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  324. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  325. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  326. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  327. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  328. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  330. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  331. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  332. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  333. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  334. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  335. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  336. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  337. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  339. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  341. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  342. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  343. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  344. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  345. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  346. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  347. package/src/duckdb/src/include/duckdb.h +28 -0
  348. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  349. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  350. package/src/duckdb/src/main/config.cpp +4 -0
  351. package/src/duckdb/src/main/database.cpp +1 -1
  352. package/src/duckdb/src/main/extension/extension_helper.cpp +93 -88
  353. package/src/duckdb/src/main/extension/extension_install.cpp +9 -0
  354. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  355. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  356. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  357. package/src/duckdb/src/main/relation.cpp +6 -5
  358. package/src/duckdb/src/main/settings/settings.cpp +79 -18
  359. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  360. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  361. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  362. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  363. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  364. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  365. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  366. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  367. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  368. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  369. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  370. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  371. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  372. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  374. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  375. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  376. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  378. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  379. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  380. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  381. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  382. package/src/duckdb/src/parallel/executor.cpp +15 -0
  383. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  384. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  385. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  386. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  387. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  388. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  389. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  390. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  391. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  392. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  393. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  394. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  395. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  396. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  397. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  398. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  399. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  400. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  401. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  402. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  403. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  404. package/src/duckdb/src/parser/parser.cpp +8 -2
  405. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  406. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  407. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  408. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  409. package/src/duckdb/src/parser/query_node.cpp +15 -37
  410. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  411. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  412. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  413. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  414. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  415. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  416. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  417. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  418. package/src/duckdb/src/parser/tableref.cpp +0 -44
  419. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  420. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  421. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  422. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  423. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  424. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  425. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  426. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  427. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  428. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  429. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  430. package/src/duckdb/src/parser/transformer.cpp +15 -0
  431. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  432. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  433. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  434. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  435. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  436. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  437. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  438. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  439. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  440. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  441. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +64 -26
  442. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  443. package/src/duckdb/src/planner/binder.cpp +44 -31
  444. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  445. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  446. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  447. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  448. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  449. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  450. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  451. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  452. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  453. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  454. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  455. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  456. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  457. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  458. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  459. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  460. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  461. package/src/duckdb/src/storage/data_table.cpp +1 -1
  462. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  463. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  464. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  465. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  466. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  467. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  468. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  469. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  470. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  471. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  472. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  473. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  474. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  475. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  476. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  477. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  478. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  479. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  480. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  481. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  482. package/src/duckdb/ub_src_common.cpp +2 -0
  483. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  484. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  485. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  486. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  487. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  488. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  489. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  490. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  491. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  492. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  493. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  494. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  495. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  496. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  497. package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
  498. package/src/statement.cpp +10 -3
  499. package/test/columns.test.ts +24 -1
  500. package/test/test_all_types.test.ts +234 -0
  501. package/tsconfig.json +1 -0
  502. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  503. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  504. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -22,6 +22,8 @@ string LogicalOperatorToString(LogicalOperatorType type) {
22
22
  return "ANY_JOIN";
23
23
  case LogicalOperatorType::LOGICAL_ASOF_JOIN:
24
24
  return "ASOF_JOIN";
25
+ case LogicalOperatorType::LOGICAL_DEPENDENT_JOIN:
26
+ return "DEPENDENT_JOIN";
25
27
  case LogicalOperatorType::LOGICAL_COMPARISON_JOIN:
26
28
  return "COMPARISON_JOIN";
27
29
  case LogicalOperatorType::LOGICAL_DELIM_JOIN:
@@ -86,6 +88,8 @@ string LogicalOperatorToString(LogicalOperatorType type) {
86
88
  return "VACUUM";
87
89
  case LogicalOperatorType::LOGICAL_RECURSIVE_CTE:
88
90
  return "REC_CTE";
91
+ case LogicalOperatorType::LOGICAL_MATERIALIZED_CTE:
92
+ return "CTE";
89
93
  case LogicalOperatorType::LOGICAL_CTE_REF:
90
94
  return "CTE_SCAN";
91
95
  case LogicalOperatorType::LOGICAL_SHOW:
@@ -25,6 +25,8 @@ static DefaultOptimizerType internal_optimizer_types[] = {
25
25
  {"common_aggregate", OptimizerType::COMMON_AGGREGATE},
26
26
  {"column_lifetime", OptimizerType::COLUMN_LIFETIME},
27
27
  {"top_n", OptimizerType::TOP_N},
28
+ {"compressed_materialization", OptimizerType::COMPRESSED_MATERIALIZATION},
29
+ {"duplicate_groups", OptimizerType::DUPLICATE_GROUPS},
28
30
  {"reorder_filter", OptimizerType::REORDER_FILTER},
29
31
  {"extension", OptimizerType::EXTENSION},
30
32
  {nullptr, OptimizerType::INVALID}};
@@ -103,8 +103,12 @@ string PhysicalOperatorToString(PhysicalOperatorType type) {
103
103
  return "VACUUM";
104
104
  case PhysicalOperatorType::RECURSIVE_CTE:
105
105
  return "REC_CTE";
106
+ case PhysicalOperatorType::CTE:
107
+ return "CTE";
106
108
  case PhysicalOperatorType::RECURSIVE_CTE_SCAN:
107
109
  return "REC_CTE_SCAN";
110
+ case PhysicalOperatorType::CTE_SCAN:
111
+ return "CTE_SCAN";
108
112
  case PhysicalOperatorType::EXPRESSION_SCAN:
109
113
  return "EXPRESSION_SCAN";
110
114
  case PhysicalOperatorType::ALTER:
@@ -62,11 +62,11 @@ string Exception::ConstructMessageRecursive(const string &msg, std::vector<Excep
62
62
  #ifdef DEBUG
63
63
  // Verify that we have the required amount of values for the message
64
64
  idx_t parameter_count = 0;
65
- for (idx_t i = 0; i < msg.size(); i++) {
65
+ for (idx_t i = 0; i + 1 < msg.size(); i++) {
66
66
  if (msg[i] != '%') {
67
67
  continue;
68
68
  }
69
- if (i < msg.size() && msg[i + 1] == '%') {
69
+ if (msg[i + 1] == '%') {
70
70
  i++;
71
71
  continue;
72
72
  }
@@ -0,0 +1,506 @@
1
+ #include "duckdb/common/extra_type_info.hpp"
2
+ #include "duckdb/common/serializer/format_deserializer.hpp"
3
+ #include "duckdb/common/enum_util.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp"
6
+ #include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
7
+ #include "duckdb/common/string_map_set.hpp"
8
+
9
+ namespace duckdb {
10
+
11
+ //===--------------------------------------------------------------------===//
12
+ // Extra Type Info
13
+ //===--------------------------------------------------------------------===//
14
+ ExtraTypeInfo::ExtraTypeInfo(ExtraTypeInfoType type) : type(type) {
15
+ }
16
+ ExtraTypeInfo::ExtraTypeInfo(ExtraTypeInfoType type, string alias) : type(type), alias(std::move(alias)) {
17
+ }
18
+ ExtraTypeInfo::~ExtraTypeInfo() {
19
+ }
20
+
21
+ bool ExtraTypeInfo::Equals(ExtraTypeInfo *other_p) const {
22
+ if (type == ExtraTypeInfoType::INVALID_TYPE_INFO || type == ExtraTypeInfoType::STRING_TYPE_INFO ||
23
+ type == ExtraTypeInfoType::GENERIC_TYPE_INFO) {
24
+ if (!other_p) {
25
+ if (!alias.empty()) {
26
+ return false;
27
+ }
28
+ //! We only need to compare aliases when both types have them in this case
29
+ return true;
30
+ }
31
+ if (alias != other_p->alias) {
32
+ return false;
33
+ }
34
+ return true;
35
+ }
36
+ if (!other_p) {
37
+ return false;
38
+ }
39
+ if (type != other_p->type) {
40
+ return false;
41
+ }
42
+ return alias == other_p->alias && EqualsInternal(other_p);
43
+ }
44
+
45
+ void ExtraTypeInfo::Serialize(FieldWriter &writer) const {
46
+ }
47
+
48
+ void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
49
+ if (!info) {
50
+ writer.WriteField<ExtraTypeInfoType>(ExtraTypeInfoType::INVALID_TYPE_INFO);
51
+ writer.WriteString(string());
52
+ } else {
53
+ writer.WriteField<ExtraTypeInfoType>(info->type);
54
+ info->Serialize(writer);
55
+ writer.WriteString(info->alias);
56
+ }
57
+ }
58
+
59
+ shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
60
+ auto type = reader.ReadRequired<ExtraTypeInfoType>();
61
+ shared_ptr<ExtraTypeInfo> extra_info;
62
+ switch (type) {
63
+ case ExtraTypeInfoType::INVALID_TYPE_INFO: {
64
+ auto alias = reader.ReadField<string>(string());
65
+ if (!alias.empty()) {
66
+ return make_shared<ExtraTypeInfo>(type, alias);
67
+ }
68
+ return nullptr;
69
+ }
70
+ case ExtraTypeInfoType::GENERIC_TYPE_INFO: {
71
+ extra_info = make_shared<ExtraTypeInfo>(type);
72
+ } break;
73
+ case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
74
+ extra_info = DecimalTypeInfo::Deserialize(reader);
75
+ break;
76
+ case ExtraTypeInfoType::STRING_TYPE_INFO:
77
+ extra_info = StringTypeInfo::Deserialize(reader);
78
+ break;
79
+ case ExtraTypeInfoType::LIST_TYPE_INFO:
80
+ extra_info = ListTypeInfo::Deserialize(reader);
81
+ break;
82
+ case ExtraTypeInfoType::STRUCT_TYPE_INFO:
83
+ extra_info = StructTypeInfo::Deserialize(reader);
84
+ break;
85
+ case ExtraTypeInfoType::USER_TYPE_INFO:
86
+ extra_info = UserTypeInfo::Deserialize(reader);
87
+ break;
88
+ case ExtraTypeInfoType::ENUM_TYPE_INFO:
89
+ extra_info = EnumTypeInfo::Deserialize(reader);
90
+ break;
91
+ case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
92
+ extra_info = AggregateStateTypeInfo::Deserialize(reader);
93
+ break;
94
+ default:
95
+ throw InternalException("Unimplemented type info in ExtraTypeInfo::Deserialize");
96
+ }
97
+ auto alias = reader.ReadField<string>(string());
98
+ extra_info->alias = alias;
99
+ return extra_info;
100
+ }
101
+
102
+ bool ExtraTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
103
+ // Do nothing
104
+ return true;
105
+ }
106
+
107
+ //===--------------------------------------------------------------------===//
108
+ // Decimal Type Info
109
+ //===--------------------------------------------------------------------===//
110
+ DecimalTypeInfo::DecimalTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::DECIMAL_TYPE_INFO) {
111
+ }
112
+
113
+ DecimalTypeInfo::DecimalTypeInfo(uint8_t width_p, uint8_t scale_p)
114
+ : ExtraTypeInfo(ExtraTypeInfoType::DECIMAL_TYPE_INFO), width(width_p), scale(scale_p) {
115
+ D_ASSERT(width_p >= scale_p);
116
+ }
117
+
118
+ void DecimalTypeInfo::Serialize(FieldWriter &writer) const {
119
+ writer.WriteField<uint8_t>(width);
120
+ writer.WriteField<uint8_t>(scale);
121
+ }
122
+
123
+ shared_ptr<ExtraTypeInfo> DecimalTypeInfo::Deserialize(FieldReader &reader) {
124
+ auto width = reader.ReadRequired<uint8_t>();
125
+ auto scale = reader.ReadRequired<uint8_t>();
126
+ return make_shared<DecimalTypeInfo>(width, scale);
127
+ }
128
+
129
+ bool DecimalTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
130
+ auto &other = other_p->Cast<DecimalTypeInfo>();
131
+ return width == other.width && scale == other.scale;
132
+ }
133
+
134
+ //===--------------------------------------------------------------------===//
135
+ // String Type Info
136
+ //===--------------------------------------------------------------------===//
137
+ StringTypeInfo::StringTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::STRING_TYPE_INFO) {
138
+ }
139
+
140
+ StringTypeInfo::StringTypeInfo(string collation_p)
141
+ : ExtraTypeInfo(ExtraTypeInfoType::STRING_TYPE_INFO), collation(std::move(collation_p)) {
142
+ }
143
+
144
+ void StringTypeInfo::Serialize(FieldWriter &writer) const {
145
+ writer.WriteString(collation);
146
+ }
147
+
148
+ shared_ptr<ExtraTypeInfo> StringTypeInfo::Deserialize(FieldReader &reader) {
149
+ auto collation = reader.ReadRequired<string>();
150
+ return make_shared<StringTypeInfo>(std::move(collation));
151
+ }
152
+
153
+ bool StringTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
154
+ // collation info has no impact on equality
155
+ return true;
156
+ }
157
+
158
+ //===--------------------------------------------------------------------===//
159
+ // List Type Info
160
+ //===--------------------------------------------------------------------===//
161
+ ListTypeInfo::ListTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::LIST_TYPE_INFO) {
162
+ }
163
+
164
+ ListTypeInfo::ListTypeInfo(LogicalType child_type_p)
165
+ : ExtraTypeInfo(ExtraTypeInfoType::LIST_TYPE_INFO), child_type(std::move(child_type_p)) {
166
+ }
167
+
168
+ void ListTypeInfo::Serialize(FieldWriter &writer) const {
169
+ writer.WriteSerializable(child_type);
170
+ }
171
+
172
+ shared_ptr<ExtraTypeInfo> ListTypeInfo::Deserialize(FieldReader &reader) {
173
+ auto child_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
174
+ return make_shared<ListTypeInfo>(std::move(child_type));
175
+ }
176
+
177
+ bool ListTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
178
+ auto &other = other_p->Cast<ListTypeInfo>();
179
+ return child_type == other.child_type;
180
+ }
181
+
182
+ //===--------------------------------------------------------------------===//
183
+ // Struct Type Info
184
+ //===--------------------------------------------------------------------===//
185
+ StructTypeInfo::StructTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::STRUCT_TYPE_INFO) {
186
+ }
187
+
188
+ StructTypeInfo::StructTypeInfo(child_list_t<LogicalType> child_types_p)
189
+ : ExtraTypeInfo(ExtraTypeInfoType::STRUCT_TYPE_INFO), child_types(std::move(child_types_p)) {
190
+ }
191
+
192
+ void StructTypeInfo::Serialize(FieldWriter &writer) const {
193
+ writer.WriteField<uint32_t>(child_types.size());
194
+ auto &serializer = writer.GetSerializer();
195
+ for (idx_t i = 0; i < child_types.size(); i++) {
196
+ serializer.WriteString(child_types[i].first);
197
+ child_types[i].second.Serialize(serializer);
198
+ }
199
+ }
200
+
201
+ shared_ptr<ExtraTypeInfo> StructTypeInfo::Deserialize(FieldReader &reader) {
202
+ child_list_t<LogicalType> child_list;
203
+ auto child_types_size = reader.ReadRequired<uint32_t>();
204
+ auto &source = reader.GetSource();
205
+ for (uint32_t i = 0; i < child_types_size; i++) {
206
+ auto name = source.Read<string>();
207
+ auto type = LogicalType::Deserialize(source);
208
+ child_list.emplace_back(std::move(name), std::move(type));
209
+ }
210
+ return make_shared<StructTypeInfo>(std::move(child_list));
211
+ }
212
+
213
+ bool StructTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
214
+ auto &other = other_p->Cast<StructTypeInfo>();
215
+ return child_types == other.child_types;
216
+ }
217
+
218
+ //===--------------------------------------------------------------------===//
219
+ // Aggregate State Type Info
220
+ //===--------------------------------------------------------------------===//
221
+ AggregateStateTypeInfo::AggregateStateTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO) {
222
+ }
223
+
224
+ AggregateStateTypeInfo::AggregateStateTypeInfo(aggregate_state_t state_type_p)
225
+ : ExtraTypeInfo(ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO), state_type(std::move(state_type_p)) {
226
+ }
227
+
228
+ void AggregateStateTypeInfo::Serialize(FieldWriter &writer) const {
229
+ auto &serializer = writer.GetSerializer();
230
+ writer.WriteString(state_type.function_name);
231
+ state_type.return_type.Serialize(serializer);
232
+ writer.WriteField<uint32_t>(state_type.bound_argument_types.size());
233
+ for (idx_t i = 0; i < state_type.bound_argument_types.size(); i++) {
234
+ state_type.bound_argument_types[i].Serialize(serializer);
235
+ }
236
+ }
237
+
238
+ shared_ptr<ExtraTypeInfo> AggregateStateTypeInfo::Deserialize(FieldReader &reader) {
239
+ auto &source = reader.GetSource();
240
+
241
+ auto function_name = reader.ReadRequired<string>();
242
+ auto return_type = LogicalType::Deserialize(source);
243
+ auto bound_argument_types_size = reader.ReadRequired<uint32_t>();
244
+ vector<LogicalType> bound_argument_types;
245
+
246
+ for (uint32_t i = 0; i < bound_argument_types_size; i++) {
247
+ auto type = LogicalType::Deserialize(source);
248
+ bound_argument_types.push_back(std::move(type));
249
+ }
250
+ return make_shared<AggregateStateTypeInfo>(
251
+ aggregate_state_t(std::move(function_name), std::move(return_type), std::move(bound_argument_types)));
252
+ }
253
+
254
+ bool AggregateStateTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
255
+ auto &other = other_p->Cast<AggregateStateTypeInfo>();
256
+ return state_type.function_name == other.state_type.function_name &&
257
+ state_type.return_type == other.state_type.return_type &&
258
+ state_type.bound_argument_types == other.state_type.bound_argument_types;
259
+ }
260
+
261
+ //===--------------------------------------------------------------------===//
262
+ // User Type Info
263
+ //===--------------------------------------------------------------------===//
264
+ UserTypeInfo::UserTypeInfo() : ExtraTypeInfo(ExtraTypeInfoType::USER_TYPE_INFO) {
265
+ }
266
+
267
+ UserTypeInfo::UserTypeInfo(string name_p)
268
+ : ExtraTypeInfo(ExtraTypeInfoType::USER_TYPE_INFO), user_type_name(std::move(name_p)) {
269
+ }
270
+
271
+ void UserTypeInfo::Serialize(FieldWriter &writer) const {
272
+ writer.WriteString(user_type_name);
273
+ }
274
+
275
+ shared_ptr<ExtraTypeInfo> UserTypeInfo::Deserialize(FieldReader &reader) {
276
+ auto enum_name = reader.ReadRequired<string>();
277
+ return make_shared<UserTypeInfo>(std::move(enum_name));
278
+ }
279
+
280
+ bool UserTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
281
+ auto &other = other_p->Cast<UserTypeInfo>();
282
+ return other.user_type_name == user_type_name;
283
+ }
284
+
285
+ //===--------------------------------------------------------------------===//
286
+ // Enum Type Info
287
+ //===--------------------------------------------------------------------===//
288
+ PhysicalType EnumTypeInfo::DictType(idx_t size) {
289
+ if (size <= NumericLimits<uint8_t>::Maximum()) {
290
+ return PhysicalType::UINT8;
291
+ } else if (size <= NumericLimits<uint16_t>::Maximum()) {
292
+ return PhysicalType::UINT16;
293
+ } else if (size <= NumericLimits<uint32_t>::Maximum()) {
294
+ return PhysicalType::UINT32;
295
+ } else {
296
+ throw InternalException("Enum size must be lower than " + std::to_string(NumericLimits<uint32_t>::Maximum()));
297
+ }
298
+ }
299
+
300
+ template <class T>
301
+ struct EnumTypeInfoTemplated : public EnumTypeInfo {
302
+ explicit EnumTypeInfoTemplated(const string &enum_name_p, Vector &values_insert_order_p, idx_t size_p)
303
+ : EnumTypeInfo(enum_name_p, values_insert_order_p, size_p) {
304
+ D_ASSERT(values_insert_order_p.GetType().InternalType() == PhysicalType::VARCHAR);
305
+
306
+ UnifiedVectorFormat vdata;
307
+ values_insert_order.ToUnifiedFormat(size_p, vdata);
308
+
309
+ auto data = UnifiedVectorFormat::GetData<string_t>(vdata);
310
+ for (idx_t i = 0; i < size_p; i++) {
311
+ auto idx = vdata.sel->get_index(i);
312
+ if (!vdata.validity.RowIsValid(idx)) {
313
+ throw InternalException("Attempted to create ENUM type with NULL value");
314
+ }
315
+ if (values.count(data[idx]) > 0) {
316
+ throw InvalidInputException("Attempted to create ENUM type with duplicate value %s",
317
+ data[idx].GetString());
318
+ }
319
+ values[data[idx]] = i;
320
+ }
321
+ }
322
+
323
+ static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size, string enum_name) {
324
+
325
+ Vector values_insert_order(LogicalType::VARCHAR, size);
326
+ values_insert_order.Deserialize(size, reader.GetSource());
327
+ return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
328
+ }
329
+
330
+ static shared_ptr<EnumTypeInfoTemplated> FormatDeserialize(FormatDeserializer &source, uint32_t size) {
331
+ auto enum_name = source.ReadProperty<string>("enum_name");
332
+ Vector values_insert_order(LogicalType::VARCHAR, size);
333
+ values_insert_order.FormatDeserialize(source, size);
334
+ return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
335
+ }
336
+
337
+ const string_map_t<T> &GetValues() const {
338
+ return values;
339
+ }
340
+
341
+ EnumTypeInfoTemplated(const EnumTypeInfoTemplated &) = delete;
342
+ EnumTypeInfoTemplated &operator=(const EnumTypeInfoTemplated &) = delete;
343
+
344
+ private:
345
+ string_map_t<T> values;
346
+ };
347
+
348
+ EnumTypeInfo::EnumTypeInfo(string enum_name_p, Vector &values_insert_order_p, idx_t dict_size_p)
349
+ : ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO), values_insert_order(values_insert_order_p),
350
+ dict_type(EnumDictType::VECTOR_DICT), enum_name(std::move(enum_name_p)), dict_size(dict_size_p) {
351
+ }
352
+
353
+ const EnumDictType &EnumTypeInfo::GetEnumDictType() const {
354
+ return dict_type;
355
+ }
356
+
357
+ const string &EnumTypeInfo::GetEnumName() const {
358
+ return enum_name;
359
+ }
360
+
361
+ const string EnumTypeInfo::GetSchemaName() const {
362
+ return catalog_entry ? catalog_entry->schema.name : "";
363
+ }
364
+
365
+ const Vector &EnumTypeInfo::GetValuesInsertOrder() const {
366
+ return values_insert_order;
367
+ }
368
+
369
+ const idx_t &EnumTypeInfo::GetDictSize() const {
370
+ return dict_size;
371
+ }
372
+
373
+ LogicalType EnumTypeInfo::CreateType(const string &enum_name, Vector &ordered_data, idx_t size) {
374
+ // Generate EnumTypeInfo
375
+ shared_ptr<ExtraTypeInfo> info;
376
+ auto enum_internal_type = EnumTypeInfo::DictType(size);
377
+ switch (enum_internal_type) {
378
+ case PhysicalType::UINT8:
379
+ info = make_shared<EnumTypeInfoTemplated<uint8_t>>(enum_name, ordered_data, size);
380
+ break;
381
+ case PhysicalType::UINT16:
382
+ info = make_shared<EnumTypeInfoTemplated<uint16_t>>(enum_name, ordered_data, size);
383
+ break;
384
+ case PhysicalType::UINT32:
385
+ info = make_shared<EnumTypeInfoTemplated<uint32_t>>(enum_name, ordered_data, size);
386
+ break;
387
+ default:
388
+ throw InternalException("Invalid Physical Type for ENUMs");
389
+ }
390
+ // Generate Actual Enum Type
391
+ return LogicalType(LogicalTypeId::ENUM, info);
392
+ }
393
+
394
+ template <class T>
395
+ int64_t TemplatedGetPos(const string_map_t<T> &map, const string_t &key) {
396
+ auto it = map.find(key);
397
+ if (it == map.end()) {
398
+ return -1;
399
+ }
400
+ return it->second;
401
+ }
402
+
403
+ int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
404
+ auto info = type.AuxInfo();
405
+ switch (type.InternalType()) {
406
+ case PhysicalType::UINT8:
407
+ return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint8_t>>().GetValues(), key);
408
+ case PhysicalType::UINT16:
409
+ return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint16_t>>().GetValues(), key);
410
+ case PhysicalType::UINT32:
411
+ return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint32_t>>().GetValues(), key);
412
+ default:
413
+ throw InternalException("ENUM can only have unsigned integers (except UINT64) as physical types");
414
+ }
415
+ }
416
+
417
+ shared_ptr<ExtraTypeInfo> EnumTypeInfo::Deserialize(FieldReader &reader) {
418
+ auto schema_name = reader.ReadRequired<string>();
419
+ auto enum_name = reader.ReadRequired<string>();
420
+ auto deserialize_internals = reader.ReadRequired<bool>();
421
+ if (!deserialize_internals) {
422
+ // this means the enum should already be in the catalog.
423
+ auto &client_context = reader.GetSource().GetContext();
424
+ // See if the serializer has a catalog
425
+ auto catalog = reader.GetSource().GetCatalog();
426
+ shared_ptr<ExtraTypeInfo> extra_info;
427
+ if (catalog) {
428
+ auto enum_type = catalog->GetType(client_context, schema_name, enum_name, OnEntryNotFound::RETURN_NULL);
429
+ if (enum_type != LogicalType::INVALID) {
430
+ extra_info = enum_type.GetAuxInfoShrPtr();
431
+ }
432
+ }
433
+ if (!extra_info) {
434
+ throw InternalException("Could not find ENUM in the Catalog to deserialize");
435
+ }
436
+ return extra_info;
437
+ }
438
+ // deserialize the enum data
439
+ auto enum_size = reader.ReadRequired<uint32_t>();
440
+ auto enum_internal_type = EnumTypeInfo::DictType(enum_size);
441
+ switch (enum_internal_type) {
442
+ case PhysicalType::UINT8:
443
+ return EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size, enum_name);
444
+ case PhysicalType::UINT16:
445
+ return EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size, enum_name);
446
+ case PhysicalType::UINT32:
447
+ return EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size, enum_name);
448
+ default:
449
+ throw InternalException("Invalid Physical Type for ENUMs");
450
+ }
451
+ }
452
+
453
+ shared_ptr<ExtraTypeInfo> EnumTypeInfo::FormatDeserialize(FormatDeserializer &deserializer) {
454
+ auto enum_size = deserializer.ReadProperty<uint32_t>("enum_size");
455
+ auto enum_internal_type = EnumTypeInfo::DictType(enum_size);
456
+ switch (enum_internal_type) {
457
+ case PhysicalType::UINT8:
458
+ return EnumTypeInfoTemplated<uint8_t>::FormatDeserialize(deserializer, enum_size);
459
+ case PhysicalType::UINT16:
460
+ return EnumTypeInfoTemplated<uint16_t>::FormatDeserialize(deserializer, enum_size);
461
+ case PhysicalType::UINT32:
462
+ return EnumTypeInfoTemplated<uint32_t>::FormatDeserialize(deserializer, enum_size);
463
+ default:
464
+ throw InternalException("Invalid Physical Type for ENUMs");
465
+ }
466
+ }
467
+
468
+ // Equalities are only used in enums with different catalog entries
469
+ bool EnumTypeInfo::EqualsInternal(ExtraTypeInfo *other_p) const {
470
+ auto &other = other_p->Cast<EnumTypeInfo>();
471
+ if (dict_type != other.dict_type) {
472
+ return false;
473
+ }
474
+ D_ASSERT(dict_type == EnumDictType::VECTOR_DICT);
475
+ // We must check if both enums have the same size
476
+ if (other.dict_size != dict_size) {
477
+ return false;
478
+ }
479
+ auto other_vector_ptr = FlatVector::GetData<string_t>(other.values_insert_order);
480
+ auto this_vector_ptr = FlatVector::GetData<string_t>(values_insert_order);
481
+
482
+ // Now we must check if all strings are the same
483
+ for (idx_t i = 0; i < dict_size; i++) {
484
+ if (!Equals::Operation(other_vector_ptr[i], this_vector_ptr[i])) {
485
+ return false;
486
+ }
487
+ }
488
+ return true;
489
+ }
490
+
491
+ void EnumTypeInfo::Serialize(FieldWriter &writer) const {
492
+ if (dict_type != EnumDictType::VECTOR_DICT) {
493
+ throw InternalException("Cannot serialize non-vector dictionary ENUM types");
494
+ }
495
+ bool serialize_internals = GetSchemaName().empty() || writer.GetSerializer().is_query_plan;
496
+ EnumType::Serialize(writer, *this, serialize_internals);
497
+ }
498
+
499
+ void EnumTypeInfo::FormatSerialize(FormatSerializer &serializer) const {
500
+ ExtraTypeInfo::FormatSerialize(serializer);
501
+ serializer.WriteProperty("dict_size", dict_size);
502
+ serializer.WriteProperty("enum_name", enum_name);
503
+ ((Vector &)values_insert_order).FormatSerialize(serializer, dict_size); // NOLINT - FIXME
504
+ }
505
+
506
+ } // namespace duckdb
@@ -23,6 +23,14 @@
23
23
  #include <sys/stat.h>
24
24
  #include <sys/types.h>
25
25
  #include <unistd.h>
26
+
27
+ #ifdef __MVS__
28
+ #define _XOPEN_SOURCE_EXTENDED 1
29
+ #include <sys/resource.h>
30
+ // enjoy - https://reviews.llvm.org/D92110
31
+ #define PATH_MAX _XOPEN_PATH_MAX
32
+ #endif
33
+
26
34
  #else
27
35
  #include <string>
28
36
  #include <sysinfoapi.h>
@@ -79,7 +87,14 @@ void FileSystem::SetWorkingDirectory(const string &path) {
79
87
 
80
88
  idx_t FileSystem::GetAvailableMemory() {
81
89
  errno = 0;
90
+
91
+ #ifdef __MVS__
92
+ struct rlimit limit;
93
+ int rlim_rc = getrlimit(RLIMIT_AS, &limit);
94
+ idx_t max_memory = MinValue<idx_t>(limit.rlim_max, UINTPTR_MAX);
95
+ #else
82
96
  idx_t max_memory = MinValue<idx_t>((idx_t)sysconf(_SC_PHYS_PAGES) * (idx_t)sysconf(_SC_PAGESIZE), UINTPTR_MAX);
97
+ #endif
83
98
  if (errno != 0) {
84
99
  return DConstants::INVALID_INDEX;
85
100
  }
@@ -370,6 +385,10 @@ void FileSystem::UnregisterSubSystem(const string &name) {
370
385
  throw NotImplementedException("%s: Can't unregister a sub system on a non-virtual file system", GetName());
371
386
  }
372
387
 
388
+ void FileSystem::SetDisabledFileSystems(const vector<string> &names) {
389
+ throw NotImplementedException("%s: Can't disable file systems on a non-virtual file system", GetName());
390
+ }
391
+
373
392
  vector<string> FileSystem::ListSubSystems() {
374
393
  throw NotImplementedException("%s: Can't list sub systems on a non-virtual file system", GetName());
375
394
  }
@@ -6,6 +6,7 @@
6
6
  #include "duckdb/planner/expression/bound_constant_expression.hpp"
7
7
  #include "duckdb/planner/expression/bound_reference_expression.hpp"
8
8
  #include "duckdb/planner/expression_iterator.hpp"
9
+ #include "duckdb/planner/operator/logical_get.hpp"
9
10
  #include "duckdb/planner/table_filter.hpp"
10
11
  #include "re2/re2.h"
11
12
 
@@ -86,12 +87,15 @@ std::map<string, string> HivePartitioning::Parse(const string &filename) {
86
87
  // currently, only expressions that cannot be evaluated during pushdown are removed.
87
88
  void HivePartitioning::ApplyFiltersToFileList(ClientContext &context, vector<string> &files,
88
89
  vector<unique_ptr<Expression>> &filters,
89
- unordered_map<string, column_t> &column_map, idx_t table_index,
90
+ unordered_map<string, column_t> &column_map, LogicalGet &get,
90
91
  bool hive_enabled, bool filename_enabled) {
92
+
91
93
  vector<string> pruned_files;
92
94
  vector<bool> have_preserved_filter(filters.size(), false);
93
95
  vector<unique_ptr<Expression>> pruned_filters;
96
+ unordered_set<idx_t> filters_applied_to_files;
94
97
  duckdb_re2::RE2 regex(REGEX_STRING);
98
+ auto table_index = get.table_index;
95
99
 
96
100
  if ((!filename_enabled && !hive_enabled) || filters.empty()) {
97
101
  return;
@@ -121,11 +125,11 @@ void HivePartitioning::ApplyFiltersToFileList(ClientContext &context, vector<str
121
125
  } else if (!result_value.GetValue<bool>()) {
122
126
  // filter evaluates to false
123
127
  should_prune_file = true;
124
- }
125
-
126
- // Use filter combiner to determine that this filter makes
127
- if (!should_prune_file && combiner.AddFilter(std::move(filter_copy)) == FilterResult::UNSATISFIABLE) {
128
- should_prune_file = true;
128
+ // convert the filter to a table filter.
129
+ if (filters_applied_to_files.find(j) == filters_applied_to_files.end()) {
130
+ get.extra_info.file_filters += filter->ToString();
131
+ filters_applied_to_files.insert(j);
132
+ }
129
133
  }
130
134
  }
131
135