duckdb 0.8.2-dev161.0 → 0.8.2-dev1764.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.
- package/binding.gyp +15 -12
- package/binding.gyp.in +1 -1
- package/configure.py +1 -1
- package/duckdb_extension_config.cmake +10 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
- package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
- package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
- package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
- package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
- package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
- package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
- package/src/duckdb/extension/json/include/json_common.hpp +47 -231
- package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
- package/src/duckdb/extension/json/json_common.cpp +272 -40
- package/src/duckdb/extension/json/json_functions/json_create.cpp +21 -2
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +91 -38
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +24 -24
- package/src/duckdb/extension/json/json_scan.cpp +3 -6
- package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
- package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
- package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
- package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
- package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
- package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
- package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
- package/src/duckdb/extension/parquet/parquet_extension.cpp +194 -20
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
- package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
- package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
- package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
- package/src/duckdb/src/common/allocator.cpp +14 -2
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +79 -12
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +44 -19
- package/src/duckdb/src/common/assert.cpp +3 -0
- package/src/duckdb/src/common/enum_util.cpp +4619 -4446
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/exception.cpp +2 -2
- package/src/duckdb/src/common/extra_type_info.cpp +506 -0
- package/src/duckdb/src/common/file_system.cpp +19 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
- package/src/duckdb/src/common/local_file_system.cpp +14 -14
- package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
- package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
- package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
- package/src/duckdb/src/common/re2_regex.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
- package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
- package/src/duckdb/src/common/sort/partition_state.cpp +70 -50
- package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
- package/src/duckdb/src/common/types/bit.cpp +51 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
- package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
- package/src/duckdb/src/common/types/date.cpp +9 -0
- package/src/duckdb/src/common/types/list_segment.cpp +24 -74
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
- package/src/duckdb/src/common/types/uuid.cpp +2 -2
- package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
- package/src/duckdb/src/common/types/value.cpp +11 -6
- package/src/duckdb/src/common/types.cpp +9 -656
- package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
- package/src/duckdb/src/core_functions/function_list.cpp +4 -2
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
- package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
- package/src/duckdb/src/execution/expression_executor.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +149 -139
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
- package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
- package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
- package/src/duckdb/src/execution/index/art/node.cpp +113 -120
- package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
- package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
- package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
- package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
- package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
- package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
- package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +444 -284
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
- package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
- package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
- package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +56 -33
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
- package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
- package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
- package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
- package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
- package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
- package/src/duckdb/src/function/function.cpp +3 -1
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
- package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
- package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
- package/src/duckdb/src/function/table/arrow.cpp +19 -0
- package/src/duckdb/src/function/table/arrow_conversion.cpp +35 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
- package/src/duckdb/src/function/table/read_csv.cpp +100 -17
- package/src/duckdb/src/function/table/system/test_all_types.cpp +7 -0
- package/src/duckdb/src/function/table/system_functions.cpp +1 -0
- package/src/duckdb/src/function/table/table_scan.cpp +9 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +46 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
- package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
- package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
- package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
- package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +23 -8
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +5 -2
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
- package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
- package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
- package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
- package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
- package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
- package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +3 -10
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
- package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +22 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
- package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
- package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
- package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
- package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
- package/src/duckdb/src/include/duckdb.h +28 -0
- package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
- package/src/duckdb/src/main/config.cpp +4 -0
- package/src/duckdb/src/main/database.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_helper.cpp +93 -88
- package/src/duckdb/src/main/extension/extension_install.cpp +9 -0
- package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
- package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
- package/src/duckdb/src/main/relation.cpp +6 -5
- package/src/duckdb/src/main/settings/settings.cpp +79 -18
- package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
- package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
- package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
- package/src/duckdb/src/optimizer/optimizer.cpp +49 -14
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
- package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
- package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
- package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
- package/src/duckdb/src/parallel/executor.cpp +15 -0
- package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
- package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
- package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
- package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
- package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
- package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
- package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
- package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
- package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
- package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
- package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
- package/src/duckdb/src/parser/parser.cpp +8 -2
- package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
- package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
- package/src/duckdb/src/parser/query_node.cpp +15 -37
- package/src/duckdb/src/parser/result_modifier.cpp +0 -74
- package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
- package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
- package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
- package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
- package/src/duckdb/src/parser/tableref.cpp +0 -44
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
- package/src/duckdb/src/parser/transformer.cpp +15 -0
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +64 -26
- package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
- package/src/duckdb/src/planner/binder.cpp +44 -31
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
- package/src/duckdb/src/planner/expression_binder.cpp +3 -0
- package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
- package/src/duckdb/src/planner/logical_operator.cpp +5 -0
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
- package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
- package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
- package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
- package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
- package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
- package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
- package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
- package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
- package/src/duckdb/src/storage/compression/rle.cpp +0 -1
- package/src/duckdb/src/storage/data_table.cpp +1 -1
- package/src/duckdb/src/storage/local_storage.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
- package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
- package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
- package/src/duckdb/src/storage/table/row_group.cpp +25 -9
- package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
- package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
- package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
- package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
- package/src/duckdb/ub_src_common.cpp +2 -0
- package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
- package/src/duckdb/ub_src_optimizer.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
- package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
- package/src/duckdb/ub_src_planner_operator.cpp +4 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
- package/src/statement.cpp +10 -3
- package/test/columns.test.ts +24 -1
- package/test/test_all_types.test.ts +234 -0
- package/tsconfig.json +1 -0
- package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
- 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
|
-
//
|
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,12 +944,11 @@ 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);
|
1233
950
|
// union types always have a hidden "tag" field in front
|
1234
|
-
members.insert(members.begin(), {"", LogicalType::
|
951
|
+
members.insert(members.begin(), {"", LogicalType::UTINYINT});
|
1235
952
|
auto info = make_shared<StructTypeInfo>(std::move(members));
|
1236
953
|
return LogicalType(LogicalTypeId::UNION, std::move(info));
|
1237
954
|
}
|
@@ -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
|
-
|
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
|
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
|
//===--------------------------------------------------------------------===//
|