duckdb 0.8.2-dev150.0 → 0.8.2-dev1549.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 (489) 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_structure.cpp +1 -1
  23. package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
  24. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  25. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  26. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  27. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  28. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  29. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  30. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  31. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  32. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  33. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  34. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  35. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  36. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  37. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  38. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  39. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  40. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  41. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  42. package/src/duckdb/extension/parquet/parquet_extension.cpp +192 -20
  43. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
  44. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  45. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  46. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  47. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  48. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  49. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  50. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  51. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  52. package/src/duckdb/src/common/allocator.cpp +14 -2
  53. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -11
  54. package/src/duckdb/src/common/assert.cpp +3 -0
  55. package/src/duckdb/src/common/enum_util.cpp +4619 -4446
  56. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  57. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  58. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/exception.cpp +2 -2
  60. package/src/duckdb/src/common/extra_type_info.cpp +506 -0
  61. package/src/duckdb/src/common/file_system.cpp +19 -0
  62. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  63. package/src/duckdb/src/common/local_file_system.cpp +14 -14
  64. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  65. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  66. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  67. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  69. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  70. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  71. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  72. package/src/duckdb/src/common/types/bit.cpp +51 -0
  73. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  74. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  75. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  76. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  77. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  78. package/src/duckdb/src/common/types/date.cpp +9 -0
  79. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  80. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  81. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  82. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  83. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  84. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  85. package/src/duckdb/src/common/types.cpp +8 -655
  86. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  87. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  88. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  89. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  90. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  91. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  92. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  93. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  94. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  95. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  96. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  97. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  98. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  99. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  100. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  101. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  102. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  103. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  104. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  105. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  106. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  107. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  108. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  109. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  110. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  111. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  112. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  113. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  114. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  115. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  116. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  117. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  118. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +414 -283
  119. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  120. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  121. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
  122. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  123. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
  124. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  125. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  126. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  127. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  128. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  129. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  130. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  131. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  132. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  133. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  134. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  135. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  136. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  137. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  138. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  139. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  140. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  141. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +13 -22
  142. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
  143. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  144. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  145. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  146. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  147. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  148. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  149. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  150. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  151. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  152. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  153. package/src/duckdb/src/function/function.cpp +3 -1
  154. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  155. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  156. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  157. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  158. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  159. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  160. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  161. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  162. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  163. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  164. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  165. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  166. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  167. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  168. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  169. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
  170. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  171. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  172. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  173. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  174. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  175. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  176. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
  177. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  178. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  179. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  180. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  181. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  182. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  183. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  184. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  185. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  186. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  187. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  188. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  189. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  190. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  191. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  192. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  193. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  194. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  195. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  196. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  197. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  198. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  199. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  201. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
  202. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  203. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  204. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  205. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  206. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  207. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  208. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  209. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  211. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  212. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  213. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  214. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  215. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  218. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  219. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  220. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  221. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  222. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  225. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  226. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  227. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  228. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  229. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  230. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  231. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  232. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  233. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  234. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  235. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  236. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +2 -10
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  238. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  239. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  240. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  242. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  247. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  248. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  249. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  250. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  251. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  252. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  253. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  255. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  257. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
  261. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  262. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  263. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  264. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  265. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  266. package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
  267. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  268. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  269. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  270. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  271. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  272. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  273. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  275. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  276. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  277. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  278. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  279. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  280. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  283. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  295. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  296. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  297. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  298. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  301. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  302. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  303. package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -5
  304. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  305. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  306. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  307. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  308. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  309. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  310. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  311. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  312. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  313. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  315. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  316. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  317. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  318. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  319. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  320. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  321. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  322. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  323. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  324. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  325. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  326. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  327. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  328. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  329. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  330. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  331. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  332. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  333. package/src/duckdb/src/include/duckdb.h +28 -0
  334. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  335. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  336. package/src/duckdb/src/main/config.cpp +4 -0
  337. package/src/duckdb/src/main/database.cpp +1 -1
  338. package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
  339. package/src/duckdb/src/main/extension/extension_install.cpp +6 -0
  340. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  341. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  342. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  343. package/src/duckdb/src/main/relation.cpp +6 -5
  344. package/src/duckdb/src/main/settings/settings.cpp +79 -18
  345. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  346. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  347. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  348. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  349. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  350. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  351. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  352. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  353. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  354. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  355. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  356. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  357. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  358. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  359. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  360. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  361. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  362. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  363. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  364. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  365. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  366. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  367. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  368. package/src/duckdb/src/parallel/executor.cpp +15 -0
  369. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  370. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  371. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  372. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  373. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  374. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  375. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  376. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  377. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  378. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  379. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  380. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  381. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  382. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  383. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  384. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  385. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  386. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  387. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  388. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  389. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  390. package/src/duckdb/src/parser/parser.cpp +8 -2
  391. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  392. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  393. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  394. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  395. package/src/duckdb/src/parser/query_node.cpp +15 -37
  396. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  397. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  398. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  399. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  400. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  401. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  402. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  403. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  404. package/src/duckdb/src/parser/tableref.cpp +0 -44
  405. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  406. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  407. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  408. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  409. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  410. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  411. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  412. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  413. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  414. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  415. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  416. package/src/duckdb/src/parser/transformer.cpp +15 -0
  417. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  418. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  419. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  420. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  421. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  422. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  423. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  424. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  425. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  426. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  427. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -26
  428. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  429. package/src/duckdb/src/planner/binder.cpp +5 -0
  430. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  431. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  432. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  433. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  434. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  435. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  436. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  437. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  438. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  439. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  440. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  441. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  442. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  443. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  444. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  445. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  446. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  447. package/src/duckdb/src/storage/data_table.cpp +1 -1
  448. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  449. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  450. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  451. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  452. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  453. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  454. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  455. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  456. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  457. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  458. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  459. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  460. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  461. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  462. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  463. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  464. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  465. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  466. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  467. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  468. package/src/duckdb/ub_src_common.cpp +2 -0
  469. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  470. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  471. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  472. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  473. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  474. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  475. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  476. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  477. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  478. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  479. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  480. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  481. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  482. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  483. package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
  484. package/src/statement.cpp +10 -3
  485. package/test/test_all_types.test.ts +233 -0
  486. package/tsconfig.json +1 -0
  487. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  488. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  489. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -1,8 +1,6 @@
1
1
  #include "duckdb/common/types.hpp"
2
2
 
3
3
  #include "duckdb/catalog/catalog.hpp"
4
- #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp"
5
- #include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
6
4
  #include "duckdb/catalog/catalog_search_path.hpp"
7
5
  #include "duckdb/catalog/default/default_types.hpp"
8
6
  #include "duckdb/common/exception.hpp"
@@ -10,7 +8,6 @@
10
8
  #include "duckdb/common/limits.hpp"
11
9
  #include "duckdb/common/operator/comparison_operators.hpp"
12
10
  #include "duckdb/common/serializer.hpp"
13
- #include "duckdb/common/string_map_set.hpp"
14
11
  #include "duckdb/common/string_util.hpp"
15
12
  #include "duckdb/common/types/decimal.hpp"
16
13
  #include "duckdb/common/types/hash.hpp"
@@ -26,11 +23,11 @@
26
23
  #include "duckdb/main/database_manager.hpp"
27
24
  #include "duckdb/parser/keyword_helper.hpp"
28
25
  #include "duckdb/parser/parser.hpp"
29
-
26
+ #include "duckdb/common/extra_type_info.hpp"
30
27
  #include "duckdb/common/serializer/format_deserializer.hpp"
31
28
  #include "duckdb/common/enum_util.hpp"
32
29
  #include "duckdb/common/serializer/format_serializer.hpp"
33
-
30
+ #include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
34
31
  #include <cmath>
35
32
 
36
33
  namespace duckdb {
@@ -767,72 +764,6 @@ bool ApproxEqual(double ldecimal, double rdecimal) {
767
764
  //===--------------------------------------------------------------------===//
768
765
  // Extra Type Info
769
766
  //===--------------------------------------------------------------------===//
770
-
771
- struct ExtraTypeInfo {
772
- explicit ExtraTypeInfo(ExtraTypeInfoType type) : type(type) {
773
- }
774
- explicit ExtraTypeInfo(ExtraTypeInfoType type, string alias) : type(type), alias(std::move(alias)) {
775
- }
776
- virtual ~ExtraTypeInfo() {
777
- }
778
-
779
- ExtraTypeInfoType type;
780
- string alias;
781
- optional_ptr<TypeCatalogEntry> catalog_entry;
782
-
783
- public:
784
- bool Equals(ExtraTypeInfo *other_p) const {
785
- if (type == ExtraTypeInfoType::INVALID_TYPE_INFO || type == ExtraTypeInfoType::STRING_TYPE_INFO ||
786
- type == ExtraTypeInfoType::GENERIC_TYPE_INFO) {
787
- if (!other_p) {
788
- if (!alias.empty()) {
789
- return false;
790
- }
791
- //! We only need to compare aliases when both types have them in this case
792
- return true;
793
- }
794
- if (alias != other_p->alias) {
795
- return false;
796
- }
797
- return true;
798
- }
799
- if (!other_p) {
800
- return false;
801
- }
802
- if (type != other_p->type) {
803
- return false;
804
- }
805
- return alias == other_p->alias && EqualsInternal(other_p);
806
- }
807
- //! Serializes a ExtraTypeInfo to a stand-alone binary blob
808
- virtual void Serialize(FieldWriter &writer) const {
809
- }
810
- //! Serializes a ExtraTypeInfo to a stand-alone binary blob
811
- static void Serialize(ExtraTypeInfo *info, FieldWriter &writer);
812
- //! Deserializes a blob back into an ExtraTypeInfo
813
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader);
814
-
815
- virtual void FormatSerialize(FormatSerializer &serializer) const;
816
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source);
817
-
818
- template <class TARGET>
819
- TARGET &Cast() {
820
- D_ASSERT(dynamic_cast<TARGET *>(this));
821
- return reinterpret_cast<TARGET &>(*this);
822
- }
823
- template <class TARGET>
824
- const TARGET &Cast() const {
825
- D_ASSERT(dynamic_cast<const TARGET *>(this));
826
- return reinterpret_cast<const TARGET &>(*this);
827
- }
828
-
829
- protected:
830
- virtual bool EqualsInternal(ExtraTypeInfo *other_p) const {
831
- // Do nothing
832
- return true;
833
- }
834
- };
835
-
836
767
  void LogicalType::SetAlias(string alias) {
837
768
  if (!type_info_) {
838
769
  type_info_ = make_shared<ExtraTypeInfo>(ExtraTypeInfoType::GENERIC_TYPE_INFO, std::move(alias));
@@ -861,53 +792,9 @@ bool LogicalType::HasAlias() const {
861
792
  return false;
862
793
  }
863
794
 
864
- ExtraTypeInfoType LogicalType::GetExtraTypeInfoType(const ExtraTypeInfo &type) {
865
- return type.type;
866
- }
867
-
868
795
  //===--------------------------------------------------------------------===//
869
796
  // Decimal Type
870
797
  //===--------------------------------------------------------------------===//
871
- struct DecimalTypeInfo : public ExtraTypeInfo {
872
- DecimalTypeInfo(uint8_t width_p, uint8_t scale_p)
873
- : ExtraTypeInfo(ExtraTypeInfoType::DECIMAL_TYPE_INFO), width(width_p), scale(scale_p) {
874
- D_ASSERT(width_p >= scale_p);
875
- }
876
-
877
- uint8_t width;
878
- uint8_t scale;
879
-
880
- public:
881
- void Serialize(FieldWriter &writer) const override {
882
- writer.WriteField<uint8_t>(width);
883
- writer.WriteField<uint8_t>(scale);
884
- }
885
-
886
- void FormatSerialize(FormatSerializer &serializer) const override {
887
- ExtraTypeInfo::FormatSerialize(serializer);
888
- serializer.WriteProperty("width", width);
889
- serializer.WriteProperty("scale", scale);
890
- }
891
-
892
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
893
- auto width = source.ReadProperty<uint8_t>("width");
894
- auto scale = source.ReadProperty<uint8_t>("scale");
895
- return make_shared<DecimalTypeInfo>(width, scale);
896
- }
897
-
898
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
899
- auto width = reader.ReadRequired<uint8_t>();
900
- auto scale = reader.ReadRequired<uint8_t>();
901
- return make_shared<DecimalTypeInfo>(width, scale);
902
- }
903
-
904
- protected:
905
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
906
- auto &other = other_p->Cast<DecimalTypeInfo>();
907
- return width == other.width && scale == other.scale;
908
- }
909
- };
910
-
911
798
  uint8_t DecimalType::GetWidth(const LogicalType &type) {
912
799
  D_ASSERT(type.id() == LogicalTypeId::DECIMAL);
913
800
  auto info = type.AuxInfo();
@@ -935,40 +822,6 @@ LogicalType LogicalType::DECIMAL(int width, int scale) {
935
822
  //===--------------------------------------------------------------------===//
936
823
  // String Type
937
824
  //===--------------------------------------------------------------------===//
938
- struct StringTypeInfo : public ExtraTypeInfo {
939
- explicit StringTypeInfo(string collation_p)
940
- : ExtraTypeInfo(ExtraTypeInfoType::STRING_TYPE_INFO), collation(std::move(collation_p)) {
941
- }
942
-
943
- string collation;
944
-
945
- public:
946
- void Serialize(FieldWriter &writer) const override {
947
- writer.WriteString(collation);
948
- }
949
-
950
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
951
- auto collation = reader.ReadRequired<string>();
952
- return make_shared<StringTypeInfo>(std::move(collation));
953
- }
954
-
955
- void FormatSerialize(FormatSerializer &serializer) const override {
956
- ExtraTypeInfo::FormatSerialize(serializer);
957
- serializer.WriteProperty("collation", collation);
958
- }
959
-
960
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
961
- auto collation = source.ReadProperty<string>("collation");
962
- return make_shared<StringTypeInfo>(std::move(collation));
963
- }
964
-
965
- protected:
966
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
967
- // collation info has no impact on equality
968
- return true;
969
- }
970
- };
971
-
972
825
  string StringType::GetCollation(const LogicalType &type) {
973
826
  if (type.id() != LogicalTypeId::VARCHAR) {
974
827
  return string();
@@ -991,40 +844,6 @@ LogicalType LogicalType::VARCHAR_COLLATION(string collation) { // NOLINT
991
844
  //===--------------------------------------------------------------------===//
992
845
  // List Type
993
846
  //===--------------------------------------------------------------------===//
994
- struct ListTypeInfo : public ExtraTypeInfo {
995
- explicit ListTypeInfo(LogicalType child_type_p)
996
- : ExtraTypeInfo(ExtraTypeInfoType::LIST_TYPE_INFO), child_type(std::move(child_type_p)) {
997
- }
998
-
999
- LogicalType child_type;
1000
-
1001
- public:
1002
- void Serialize(FieldWriter &writer) const override {
1003
- writer.WriteSerializable(child_type);
1004
- }
1005
-
1006
- void FormatSerialize(FormatSerializer &serializer) const override {
1007
- ExtraTypeInfo::FormatSerialize(serializer);
1008
- serializer.WriteProperty("child_type", child_type);
1009
- }
1010
-
1011
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1012
- auto child_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
1013
- return make_shared<ListTypeInfo>(std::move(child_type));
1014
- }
1015
-
1016
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1017
- auto child_type = source.ReadProperty<LogicalType>("child_type");
1018
- return make_shared<ListTypeInfo>(std::move(child_type));
1019
- }
1020
-
1021
- protected:
1022
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1023
- auto &other = other_p->Cast<ListTypeInfo>();
1024
- return child_type == other.child_type;
1025
- }
1026
- };
1027
-
1028
847
  const LogicalType &ListType::GetChildType(const LogicalType &type) {
1029
848
  D_ASSERT(type.id() == LogicalTypeId::LIST || type.id() == LogicalTypeId::MAP);
1030
849
  auto info = type.AuxInfo();
@@ -1038,112 +857,8 @@ LogicalType LogicalType::LIST(const LogicalType &child) {
1038
857
  }
1039
858
 
1040
859
  //===--------------------------------------------------------------------===//
1041
- // Struct Type
860
+ // Aggregate State Type
1042
861
  //===--------------------------------------------------------------------===//
1043
- struct StructTypeInfo : public ExtraTypeInfo {
1044
- explicit StructTypeInfo(child_list_t<LogicalType> child_types_p)
1045
- : ExtraTypeInfo(ExtraTypeInfoType::STRUCT_TYPE_INFO), child_types(std::move(child_types_p)) {
1046
- }
1047
-
1048
- child_list_t<LogicalType> child_types;
1049
-
1050
- public:
1051
- void Serialize(FieldWriter &writer) const override {
1052
- writer.WriteField<uint32_t>(child_types.size());
1053
- auto &serializer = writer.GetSerializer();
1054
- for (idx_t i = 0; i < child_types.size(); i++) {
1055
- serializer.WriteString(child_types[i].first);
1056
- child_types[i].second.Serialize(serializer);
1057
- }
1058
- }
1059
-
1060
- void FormatSerialize(FormatSerializer &serializer) const override {
1061
- ExtraTypeInfo::FormatSerialize(serializer);
1062
- serializer.WriteProperty("child_types", child_types);
1063
- }
1064
-
1065
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1066
- child_list_t<LogicalType> child_list;
1067
- auto child_types_size = reader.ReadRequired<uint32_t>();
1068
- auto &source = reader.GetSource();
1069
- for (uint32_t i = 0; i < child_types_size; i++) {
1070
- auto name = source.Read<string>();
1071
- auto type = LogicalType::Deserialize(source);
1072
- child_list.emplace_back(std::move(name), std::move(type));
1073
- }
1074
- return make_shared<StructTypeInfo>(std::move(child_list));
1075
- }
1076
-
1077
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &deserializer) {
1078
- auto child_types = deserializer.ReadProperty<child_list_t<LogicalType>>("child_types");
1079
- return make_shared<StructTypeInfo>(std::move(child_types));
1080
- }
1081
-
1082
- protected:
1083
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1084
- auto &other = other_p->Cast<StructTypeInfo>();
1085
- return child_types == other.child_types;
1086
- }
1087
- };
1088
-
1089
- struct AggregateStateTypeInfo : public ExtraTypeInfo {
1090
- explicit AggregateStateTypeInfo(aggregate_state_t state_type_p)
1091
- : ExtraTypeInfo(ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO), state_type(std::move(state_type_p)) {
1092
- }
1093
-
1094
- aggregate_state_t state_type;
1095
-
1096
- public:
1097
- void Serialize(FieldWriter &writer) const override {
1098
- auto &serializer = writer.GetSerializer();
1099
- writer.WriteString(state_type.function_name);
1100
- state_type.return_type.Serialize(serializer);
1101
- writer.WriteField<uint32_t>(state_type.bound_argument_types.size());
1102
- for (idx_t i = 0; i < state_type.bound_argument_types.size(); i++) {
1103
- state_type.bound_argument_types[i].Serialize(serializer);
1104
- }
1105
- }
1106
-
1107
- void FormatSerialize(FormatSerializer &serializer) const override {
1108
- ExtraTypeInfo::FormatSerialize(serializer);
1109
- serializer.WriteProperty("function_name", state_type.function_name);
1110
- serializer.WriteProperty("return_type", state_type.return_type);
1111
- serializer.WriteProperty("bound_argument_types", state_type.bound_argument_types);
1112
- }
1113
-
1114
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1115
- auto function_name = source.ReadProperty<string>("function_name");
1116
- auto return_type = source.ReadProperty<LogicalType>("return_type");
1117
- auto bound_argument_types = source.ReadProperty<vector<LogicalType>>("bound_argument_types");
1118
- return make_shared<AggregateStateTypeInfo>(
1119
- aggregate_state_t(std::move(function_name), std::move(return_type), std::move(bound_argument_types)));
1120
- }
1121
-
1122
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1123
- auto &source = reader.GetSource();
1124
-
1125
- auto function_name = reader.ReadRequired<string>();
1126
- auto return_type = LogicalType::Deserialize(source);
1127
- auto bound_argument_types_size = reader.ReadRequired<uint32_t>();
1128
- vector<LogicalType> bound_argument_types;
1129
-
1130
- for (uint32_t i = 0; i < bound_argument_types_size; i++) {
1131
- auto type = LogicalType::Deserialize(source);
1132
- bound_argument_types.push_back(std::move(type));
1133
- }
1134
- return make_shared<AggregateStateTypeInfo>(
1135
- aggregate_state_t(std::move(function_name), std::move(return_type), std::move(bound_argument_types)));
1136
- }
1137
-
1138
- protected:
1139
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1140
- auto &other = other_p->Cast<AggregateStateTypeInfo>();
1141
- return state_type.function_name == other.state_type.function_name &&
1142
- state_type.return_type == other.state_type.return_type &&
1143
- state_type.bound_argument_types == other.state_type.bound_argument_types;
1144
- }
1145
- };
1146
-
1147
862
  const aggregate_state_t &AggregateStateType::GetStateType(const LogicalType &type) {
1148
863
  D_ASSERT(type.id() == LogicalTypeId::AGGREGATE_STATE);
1149
864
  auto info = type.AuxInfo();
@@ -1164,6 +879,9 @@ const string AggregateStateType::GetTypeName(const LogicalType &type) {
1164
879
  ")" + "::" + aggr_state.return_type.ToString() + ">";
1165
880
  }
1166
881
 
882
+ //===--------------------------------------------------------------------===//
883
+ // Struct Type
884
+ //===--------------------------------------------------------------------===//
1167
885
  const child_list_t<LogicalType> &StructType::GetChildTypes(const LogicalType &type) {
1168
886
  D_ASSERT(type.id() == LogicalTypeId::STRUCT || type.id() == LogicalTypeId::UNION);
1169
887
 
@@ -1226,7 +944,6 @@ const LogicalType &MapType::ValueType(const LogicalType &type) {
1226
944
  //===--------------------------------------------------------------------===//
1227
945
  // Union Type
1228
946
  //===--------------------------------------------------------------------===//
1229
-
1230
947
  LogicalType LogicalType::UNION(child_list_t<LogicalType> members) {
1231
948
  D_ASSERT(!members.empty());
1232
949
  D_ASSERT(members.size() <= UnionType::MAX_UNION_MEMBERS);
@@ -1263,40 +980,6 @@ const child_list_t<LogicalType> UnionType::CopyMemberTypes(const LogicalType &ty
1263
980
  //===--------------------------------------------------------------------===//
1264
981
  // User Type
1265
982
  //===--------------------------------------------------------------------===//
1266
- struct UserTypeInfo : public ExtraTypeInfo {
1267
- explicit UserTypeInfo(string name_p)
1268
- : ExtraTypeInfo(ExtraTypeInfoType::USER_TYPE_INFO), user_type_name(std::move(name_p)) {
1269
- }
1270
-
1271
- string user_type_name;
1272
-
1273
- public:
1274
- void Serialize(FieldWriter &writer) const override {
1275
- writer.WriteString(user_type_name);
1276
- }
1277
-
1278
- void FormatSerialize(FormatSerializer &serializer) const override {
1279
- ExtraTypeInfo::FormatSerialize(serializer);
1280
- serializer.WriteProperty("user_type_name", user_type_name);
1281
- }
1282
-
1283
- static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1284
- auto enum_name = reader.ReadRequired<string>();
1285
- return make_shared<UserTypeInfo>(std::move(enum_name));
1286
- }
1287
-
1288
- static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1289
- auto enum_name = source.ReadProperty<string>("user_type_name");
1290
- return make_shared<UserTypeInfo>(std::move(enum_name));
1291
- }
1292
-
1293
- protected:
1294
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1295
- auto &other = other_p->Cast<UserTypeInfo>();
1296
- return other.user_type_name == user_type_name;
1297
- }
1298
- };
1299
-
1300
983
  const string &UserType::GetTypeName(const LogicalType &type) {
1301
984
  D_ASSERT(type.id() == LogicalTypeId::USER);
1302
985
  auto info = type.AuxInfo();
@@ -1312,81 +995,6 @@ LogicalType LogicalType::USER(const string &user_type_name) {
1312
995
  //===--------------------------------------------------------------------===//
1313
996
  // Enum Type
1314
997
  //===--------------------------------------------------------------------===//
1315
-
1316
- enum EnumDictType : uint8_t { INVALID = 0, VECTOR_DICT = 1 };
1317
-
1318
- struct EnumTypeInfo : public ExtraTypeInfo {
1319
- explicit EnumTypeInfo(string enum_name_p, Vector &values_insert_order_p, idx_t dict_size_p)
1320
- : ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO), values_insert_order(values_insert_order_p),
1321
- dict_type(EnumDictType::VECTOR_DICT), enum_name(std::move(enum_name_p)), dict_size(dict_size_p) {
1322
- }
1323
-
1324
- const EnumDictType &GetEnumDictType() const {
1325
- return dict_type;
1326
- };
1327
- const string &GetEnumName() const {
1328
- return enum_name;
1329
- };
1330
- const string GetSchemaName() const {
1331
- return catalog_entry ? catalog_entry->schema.name : "";
1332
- };
1333
- const Vector &GetValuesInsertOrder() const {
1334
- return values_insert_order;
1335
- };
1336
- const idx_t &GetDictSize() const {
1337
- return dict_size;
1338
- };
1339
- EnumTypeInfo(const EnumTypeInfo &) = delete;
1340
- EnumTypeInfo &operator=(const EnumTypeInfo &) = delete;
1341
-
1342
- protected:
1343
- // Equalities are only used in enums with different catalog entries
1344
- bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1345
- auto &other = other_p->Cast<EnumTypeInfo>();
1346
- if (dict_type != other.dict_type) {
1347
- return false;
1348
- }
1349
- D_ASSERT(dict_type == EnumDictType::VECTOR_DICT);
1350
- // We must check if both enums have the same size
1351
- if (other.dict_size != dict_size) {
1352
- return false;
1353
- }
1354
- auto other_vector_ptr = FlatVector::GetData<string_t>(other.values_insert_order);
1355
- auto this_vector_ptr = FlatVector::GetData<string_t>(values_insert_order);
1356
-
1357
- // Now we must check if all strings are the same
1358
- for (idx_t i = 0; i < dict_size; i++) {
1359
- if (!Equals::Operation(other_vector_ptr[i], this_vector_ptr[i])) {
1360
- return false;
1361
- }
1362
- }
1363
- return true;
1364
- }
1365
-
1366
- void Serialize(FieldWriter &writer) const override {
1367
- if (dict_type != EnumDictType::VECTOR_DICT) {
1368
- throw InternalException("Cannot serialize non-vector dictionary ENUM types");
1369
- }
1370
- bool serialize_internals = GetSchemaName().empty() || writer.GetSerializer().is_query_plan;
1371
- EnumType::Serialize(writer, *this, serialize_internals);
1372
- }
1373
-
1374
- void FormatSerialize(FormatSerializer &serializer) const override {
1375
- ExtraTypeInfo::FormatSerialize(serializer);
1376
- serializer.WriteProperty("dict_size", dict_size);
1377
- serializer.WriteProperty("enum_name", enum_name);
1378
- ((Vector &)values_insert_order).FormatSerialize(serializer, dict_size); // NOLINT - FIXME
1379
- }
1380
- Vector values_insert_order;
1381
-
1382
- private:
1383
- EnumDictType dict_type;
1384
- string enum_name;
1385
- idx_t dict_size;
1386
- };
1387
-
1388
- // If this type is primarily stored in the catalog or not. Enums from Pandas/Factors are not in the catalog.
1389
-
1390
998
  void EnumType::Serialize(FieldWriter &writer, const ExtraTypeInfo &type_info, bool serialize_internals) {
1391
999
  D_ASSERT(type_info.type == ExtraTypeInfoType::ENUM_TYPE_INFO);
1392
1000
  auto &enum_info = type_info.Cast<EnumTypeInfo>();
@@ -1406,54 +1014,6 @@ void EnumType::Serialize(FieldWriter &writer, const ExtraTypeInfo &type_info, bo
1406
1014
  }
1407
1015
  }
1408
1016
 
1409
- template <class T>
1410
- struct EnumTypeInfoTemplated : public EnumTypeInfo {
1411
- explicit EnumTypeInfoTemplated(const string &enum_name_p, Vector &values_insert_order_p, idx_t size_p)
1412
- : EnumTypeInfo(enum_name_p, values_insert_order_p, size_p) {
1413
- D_ASSERT(values_insert_order_p.GetType().InternalType() == PhysicalType::VARCHAR);
1414
-
1415
- UnifiedVectorFormat vdata;
1416
- values_insert_order.ToUnifiedFormat(size_p, vdata);
1417
-
1418
- auto data = UnifiedVectorFormat::GetData<string_t>(vdata);
1419
- for (idx_t i = 0; i < size_p; i++) {
1420
- auto idx = vdata.sel->get_index(i);
1421
- if (!vdata.validity.RowIsValid(idx)) {
1422
- throw InternalException("Attempted to create ENUM type with NULL value");
1423
- }
1424
- if (values.count(data[idx]) > 0) {
1425
- throw InvalidInputException("Attempted to create ENUM type with duplicate value %s",
1426
- data[idx].GetString());
1427
- }
1428
- values[data[idx]] = i;
1429
- }
1430
- }
1431
-
1432
- static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size, string enum_name) {
1433
-
1434
- Vector values_insert_order(LogicalType::VARCHAR, size);
1435
- values_insert_order.Deserialize(size, reader.GetSource());
1436
- return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
1437
- }
1438
-
1439
- static shared_ptr<EnumTypeInfoTemplated> FormatDeserialize(FormatDeserializer &source, uint32_t size) {
1440
- auto enum_name = source.ReadProperty<string>("enum_name");
1441
- Vector values_insert_order(LogicalType::VARCHAR, size);
1442
- values_insert_order.FormatDeserialize(source, size);
1443
- return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
1444
- }
1445
-
1446
- const string_map_t<T> &GetValues() const {
1447
- return values;
1448
- }
1449
-
1450
- EnumTypeInfoTemplated(const EnumTypeInfoTemplated &) = delete;
1451
- EnumTypeInfoTemplated &operator=(const EnumTypeInfoTemplated &) = delete;
1452
-
1453
- private:
1454
- string_map_t<T> values;
1455
- };
1456
-
1457
1017
  const string &EnumType::GetTypeName(const LogicalType &type) {
1458
1018
  D_ASSERT(type.id() == LogicalTypeId::ENUM);
1459
1019
  auto info = type.AuxInfo();
@@ -1461,60 +1021,8 @@ const string &EnumType::GetTypeName(const LogicalType &type) {
1461
1021
  return info->Cast<EnumTypeInfo>().GetEnumName();
1462
1022
  }
1463
1023
 
1464
- static PhysicalType EnumVectorDictType(idx_t size) {
1465
- if (size <= NumericLimits<uint8_t>::Maximum()) {
1466
- return PhysicalType::UINT8;
1467
- } else if (size <= NumericLimits<uint16_t>::Maximum()) {
1468
- return PhysicalType::UINT16;
1469
- } else if (size <= NumericLimits<uint32_t>::Maximum()) {
1470
- return PhysicalType::UINT32;
1471
- } else {
1472
- throw InternalException("Enum size must be lower than " + std::to_string(NumericLimits<uint32_t>::Maximum()));
1473
- }
1474
- }
1475
-
1476
1024
  LogicalType LogicalType::ENUM(const string &enum_name, Vector &ordered_data, idx_t size) {
1477
- // Generate EnumTypeInfo
1478
- shared_ptr<ExtraTypeInfo> info;
1479
- auto enum_internal_type = EnumVectorDictType(size);
1480
- switch (enum_internal_type) {
1481
- case PhysicalType::UINT8:
1482
- info = make_shared<EnumTypeInfoTemplated<uint8_t>>(enum_name, ordered_data, size);
1483
- break;
1484
- case PhysicalType::UINT16:
1485
- info = make_shared<EnumTypeInfoTemplated<uint16_t>>(enum_name, ordered_data, size);
1486
- break;
1487
- case PhysicalType::UINT32:
1488
- info = make_shared<EnumTypeInfoTemplated<uint32_t>>(enum_name, ordered_data, size);
1489
- break;
1490
- default:
1491
- throw InternalException("Invalid Physical Type for ENUMs");
1492
- }
1493
- // Generate Actual Enum Type
1494
- return LogicalType(LogicalTypeId::ENUM, info);
1495
- }
1496
-
1497
- template <class T>
1498
- int64_t TemplatedGetPos(const string_map_t<T> &map, const string_t &key) {
1499
- auto it = map.find(key);
1500
- if (it == map.end()) {
1501
- return -1;
1502
- }
1503
- return it->second;
1504
- }
1505
-
1506
- int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
1507
- auto info = type.AuxInfo();
1508
- switch (type.InternalType()) {
1509
- case PhysicalType::UINT8:
1510
- return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint8_t>>().GetValues(), key);
1511
- case PhysicalType::UINT16:
1512
- return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint16_t>>().GetValues(), key);
1513
- case PhysicalType::UINT32:
1514
- return TemplatedGetPos(info->Cast<EnumTypeInfoTemplated<uint32_t>>().GetValues(), key);
1515
- default:
1516
- throw InternalException("ENUM can only have unsigned integers (except UINT64) as physical types");
1517
- }
1025
+ return EnumTypeInfo::CreateType(enum_name, ordered_data, size);
1518
1026
  }
1519
1027
 
1520
1028
  const string EnumType::GetValue(const Value &val) {
@@ -1564,162 +1072,7 @@ PhysicalType EnumType::GetPhysicalType(const LogicalType &type) {
1564
1072
  D_ASSERT(aux_info);
1565
1073
  auto &info = aux_info->Cast<EnumTypeInfo>();
1566
1074
  D_ASSERT(info.GetEnumDictType() == EnumDictType::VECTOR_DICT);
1567
- return EnumVectorDictType(info.GetDictSize());
1568
- }
1569
-
1570
- //===--------------------------------------------------------------------===//
1571
- // Extra Type Info
1572
- //===--------------------------------------------------------------------===//
1573
- void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
1574
- if (!info) {
1575
- writer.WriteField<ExtraTypeInfoType>(ExtraTypeInfoType::INVALID_TYPE_INFO);
1576
- writer.WriteString(string());
1577
- } else {
1578
- writer.WriteField<ExtraTypeInfoType>(info->type);
1579
- info->Serialize(writer);
1580
- writer.WriteString(info->alias);
1581
- }
1582
- }
1583
- void ExtraTypeInfo::FormatSerialize(FormatSerializer &serializer) const {
1584
- serializer.WriteProperty("type", type);
1585
- // BREAKING: we used to write the alias last if there was additional type info, but now we write it second.
1586
- serializer.WriteProperty("alias", alias);
1587
- }
1588
-
1589
- shared_ptr<ExtraTypeInfo> ExtraTypeInfo::FormatDeserialize(FormatDeserializer &deserializer) {
1590
- auto type = deserializer.ReadProperty<ExtraTypeInfoType>("type");
1591
- auto alias = deserializer.ReadProperty<string>("alias");
1592
- // BREAKING: we used to read the alias last, but now we read it second.
1593
-
1594
- shared_ptr<ExtraTypeInfo> result;
1595
- switch (type) {
1596
- case ExtraTypeInfoType::INVALID_TYPE_INFO: {
1597
- if (!alias.empty()) {
1598
- return make_shared<ExtraTypeInfo>(type, alias);
1599
- }
1600
- return nullptr;
1601
- }
1602
- case ExtraTypeInfoType::GENERIC_TYPE_INFO: {
1603
- result = make_shared<ExtraTypeInfo>(type);
1604
- } break;
1605
- case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
1606
- result = DecimalTypeInfo::FormatDeserialize(deserializer);
1607
- break;
1608
- case ExtraTypeInfoType::STRING_TYPE_INFO:
1609
- result = StringTypeInfo::FormatDeserialize(deserializer);
1610
- break;
1611
- case ExtraTypeInfoType::LIST_TYPE_INFO:
1612
- result = ListTypeInfo::FormatDeserialize(deserializer);
1613
- break;
1614
- case ExtraTypeInfoType::STRUCT_TYPE_INFO:
1615
- result = StructTypeInfo::FormatDeserialize(deserializer);
1616
- break;
1617
- case ExtraTypeInfoType::USER_TYPE_INFO:
1618
- result = UserTypeInfo::FormatDeserialize(deserializer);
1619
- break;
1620
- case ExtraTypeInfoType::ENUM_TYPE_INFO: {
1621
- auto enum_size = deserializer.ReadProperty<uint32_t>("enum_size");
1622
- auto enum_internal_type = EnumVectorDictType(enum_size);
1623
- switch (enum_internal_type) {
1624
- case PhysicalType::UINT8:
1625
- result = EnumTypeInfoTemplated<uint8_t>::FormatDeserialize(deserializer, enum_size);
1626
- break;
1627
- case PhysicalType::UINT16:
1628
- result = EnumTypeInfoTemplated<uint16_t>::FormatDeserialize(deserializer, enum_size);
1629
- break;
1630
- case PhysicalType::UINT32:
1631
- result = EnumTypeInfoTemplated<uint32_t>::FormatDeserialize(deserializer, enum_size);
1632
- break;
1633
- default:
1634
- throw InternalException("Invalid Physical Type for ENUMs");
1635
- }
1636
- } break;
1637
- case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
1638
- result = AggregateStateTypeInfo::FormatDeserialize(deserializer);
1639
- break;
1640
- default:
1641
- throw InternalException("Unimplemented type info in ExtraTypeInfo::Deserialize");
1642
- }
1643
- result->alias = alias;
1644
- return result;
1645
- }
1646
-
1647
- shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
1648
- auto type = reader.ReadRequired<ExtraTypeInfoType>();
1649
- shared_ptr<ExtraTypeInfo> extra_info;
1650
- switch (type) {
1651
- case ExtraTypeInfoType::INVALID_TYPE_INFO: {
1652
- auto alias = reader.ReadField<string>(string());
1653
- if (!alias.empty()) {
1654
- return make_shared<ExtraTypeInfo>(type, alias);
1655
- }
1656
- return nullptr;
1657
- }
1658
- case ExtraTypeInfoType::GENERIC_TYPE_INFO: {
1659
- extra_info = make_shared<ExtraTypeInfo>(type);
1660
- } break;
1661
- case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
1662
- extra_info = DecimalTypeInfo::Deserialize(reader);
1663
- break;
1664
- case ExtraTypeInfoType::STRING_TYPE_INFO:
1665
- extra_info = StringTypeInfo::Deserialize(reader);
1666
- break;
1667
- case ExtraTypeInfoType::LIST_TYPE_INFO:
1668
- extra_info = ListTypeInfo::Deserialize(reader);
1669
- break;
1670
- case ExtraTypeInfoType::STRUCT_TYPE_INFO:
1671
- extra_info = StructTypeInfo::Deserialize(reader);
1672
- break;
1673
- case ExtraTypeInfoType::USER_TYPE_INFO:
1674
- extra_info = UserTypeInfo::Deserialize(reader);
1675
- break;
1676
- case ExtraTypeInfoType::ENUM_TYPE_INFO: {
1677
- auto schema_name = reader.ReadRequired<string>();
1678
- auto enum_name = reader.ReadRequired<string>();
1679
- auto deserialize_internals = reader.ReadRequired<bool>();
1680
- if (!deserialize_internals) {
1681
- // this means the enum should already be in the catalog.
1682
- auto &client_context = reader.GetSource().GetContext();
1683
- // See if the serializer has a catalog
1684
- auto catalog = reader.GetSource().GetCatalog();
1685
- if (catalog) {
1686
- auto enum_type = catalog->GetType(client_context, schema_name, enum_name, OnEntryNotFound::RETURN_NULL);
1687
- if (enum_type != LogicalType::INVALID) {
1688
- extra_info = enum_type.GetAuxInfoShrPtr();
1689
- }
1690
- }
1691
- if (!extra_info) {
1692
- throw InternalException("Could not find ENUM in the Catalog to deserialize");
1693
- }
1694
- break;
1695
- } else {
1696
- auto enum_size = reader.ReadRequired<uint32_t>();
1697
- auto enum_internal_type = EnumVectorDictType(enum_size);
1698
- switch (enum_internal_type) {
1699
- case PhysicalType::UINT8:
1700
- extra_info = EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size, enum_name);
1701
- break;
1702
- case PhysicalType::UINT16:
1703
- extra_info = EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size, enum_name);
1704
- break;
1705
- case PhysicalType::UINT32:
1706
- extra_info = EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size, enum_name);
1707
- break;
1708
- default:
1709
- throw InternalException("Invalid Physical Type for ENUMs");
1710
- }
1711
- }
1712
- } break;
1713
- case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
1714
- extra_info = AggregateStateTypeInfo::Deserialize(reader);
1715
- break;
1716
-
1717
- default:
1718
- throw InternalException("Unimplemented type info in ExtraTypeInfo::Deserialize");
1719
- }
1720
- auto alias = reader.ReadField<string>(string());
1721
- extra_info->alias = alias;
1722
- return extra_info;
1075
+ return EnumTypeInfo::DictType(info.GetDictSize());
1723
1076
  }
1724
1077
 
1725
1078
  //===--------------------------------------------------------------------===//