duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.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 +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +18 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -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 +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -1,7 +1,9 @@
|
|
|
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"
|
|
4
5
|
#include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
|
|
6
|
+
#include "duckdb/catalog/catalog_search_path.hpp"
|
|
5
7
|
#include "duckdb/catalog/default/default_types.hpp"
|
|
6
8
|
#include "duckdb/common/exception.hpp"
|
|
7
9
|
#include "duckdb/common/field_writer.hpp"
|
|
@@ -17,9 +19,18 @@
|
|
|
17
19
|
#include "duckdb/common/types/vector.hpp"
|
|
18
20
|
#include "duckdb/common/unordered_map.hpp"
|
|
19
21
|
#include "duckdb/function/cast_rules.hpp"
|
|
22
|
+
#include "duckdb/main/attached_database.hpp"
|
|
23
|
+
#include "duckdb/main/client_context.hpp"
|
|
24
|
+
#include "duckdb/main/client_data.hpp"
|
|
25
|
+
#include "duckdb/main/database.hpp"
|
|
26
|
+
#include "duckdb/main/database_manager.hpp"
|
|
20
27
|
#include "duckdb/parser/keyword_helper.hpp"
|
|
21
28
|
#include "duckdb/parser/parser.hpp"
|
|
22
29
|
|
|
30
|
+
#include "duckdb/common/serializer/format_deserializer.hpp"
|
|
31
|
+
#include "duckdb/common/serializer/enum_serializer.hpp"
|
|
32
|
+
#include "duckdb/common/serializer/format_serializer.hpp"
|
|
33
|
+
|
|
23
34
|
#include <cmath>
|
|
24
35
|
|
|
25
36
|
namespace duckdb {
|
|
@@ -320,95 +331,8 @@ bool TypeIsInteger(PhysicalType type) {
|
|
|
320
331
|
return (type >= PhysicalType::UINT8 && type <= PhysicalType::INT64) || type == PhysicalType::INT128;
|
|
321
332
|
}
|
|
322
333
|
|
|
323
|
-
// LCOV_EXCL_START
|
|
324
334
|
string LogicalTypeIdToString(LogicalTypeId id) {
|
|
325
|
-
|
|
326
|
-
case LogicalTypeId::BOOLEAN:
|
|
327
|
-
return "BOOLEAN";
|
|
328
|
-
case LogicalTypeId::TINYINT:
|
|
329
|
-
return "TINYINT";
|
|
330
|
-
case LogicalTypeId::SMALLINT:
|
|
331
|
-
return "SMALLINT";
|
|
332
|
-
case LogicalTypeId::INTEGER:
|
|
333
|
-
return "INTEGER";
|
|
334
|
-
case LogicalTypeId::BIGINT:
|
|
335
|
-
return "BIGINT";
|
|
336
|
-
case LogicalTypeId::HUGEINT:
|
|
337
|
-
return "HUGEINT";
|
|
338
|
-
case LogicalTypeId::UUID:
|
|
339
|
-
return "UUID";
|
|
340
|
-
case LogicalTypeId::UTINYINT:
|
|
341
|
-
return "UTINYINT";
|
|
342
|
-
case LogicalTypeId::USMALLINT:
|
|
343
|
-
return "USMALLINT";
|
|
344
|
-
case LogicalTypeId::UINTEGER:
|
|
345
|
-
return "UINTEGER";
|
|
346
|
-
case LogicalTypeId::UBIGINT:
|
|
347
|
-
return "UBIGINT";
|
|
348
|
-
case LogicalTypeId::DATE:
|
|
349
|
-
return "DATE";
|
|
350
|
-
case LogicalTypeId::TIME:
|
|
351
|
-
return "TIME";
|
|
352
|
-
case LogicalTypeId::TIMESTAMP:
|
|
353
|
-
return "TIMESTAMP";
|
|
354
|
-
case LogicalTypeId::TIMESTAMP_MS:
|
|
355
|
-
return "TIMESTAMP_MS";
|
|
356
|
-
case LogicalTypeId::TIMESTAMP_NS:
|
|
357
|
-
return "TIMESTAMP_NS";
|
|
358
|
-
case LogicalTypeId::TIMESTAMP_SEC:
|
|
359
|
-
return "TIMESTAMP_S";
|
|
360
|
-
case LogicalTypeId::TIMESTAMP_TZ:
|
|
361
|
-
return "TIMESTAMP WITH TIME ZONE";
|
|
362
|
-
case LogicalTypeId::TIME_TZ:
|
|
363
|
-
return "TIME WITH TIME ZONE";
|
|
364
|
-
case LogicalTypeId::FLOAT:
|
|
365
|
-
return "FLOAT";
|
|
366
|
-
case LogicalTypeId::DOUBLE:
|
|
367
|
-
return "DOUBLE";
|
|
368
|
-
case LogicalTypeId::DECIMAL:
|
|
369
|
-
return "DECIMAL";
|
|
370
|
-
case LogicalTypeId::VARCHAR:
|
|
371
|
-
return "VARCHAR";
|
|
372
|
-
case LogicalTypeId::BLOB:
|
|
373
|
-
return "BLOB";
|
|
374
|
-
case LogicalTypeId::CHAR:
|
|
375
|
-
return "CHAR";
|
|
376
|
-
case LogicalTypeId::INTERVAL:
|
|
377
|
-
return "INTERVAL";
|
|
378
|
-
case LogicalTypeId::SQLNULL:
|
|
379
|
-
return "NULL";
|
|
380
|
-
case LogicalTypeId::ANY:
|
|
381
|
-
return "ANY";
|
|
382
|
-
case LogicalTypeId::VALIDITY:
|
|
383
|
-
return "VALIDITY";
|
|
384
|
-
case LogicalTypeId::STRUCT:
|
|
385
|
-
return "STRUCT";
|
|
386
|
-
case LogicalTypeId::LIST:
|
|
387
|
-
return "LIST";
|
|
388
|
-
case LogicalTypeId::MAP:
|
|
389
|
-
return "MAP";
|
|
390
|
-
case LogicalTypeId::POINTER:
|
|
391
|
-
return "POINTER";
|
|
392
|
-
case LogicalTypeId::TABLE:
|
|
393
|
-
return "TABLE";
|
|
394
|
-
case LogicalTypeId::LAMBDA:
|
|
395
|
-
return "LAMBDA";
|
|
396
|
-
case LogicalTypeId::INVALID:
|
|
397
|
-
return "INVALID";
|
|
398
|
-
case LogicalTypeId::UNION:
|
|
399
|
-
return "UNION";
|
|
400
|
-
case LogicalTypeId::UNKNOWN:
|
|
401
|
-
return "UNKNOWN";
|
|
402
|
-
case LogicalTypeId::ENUM:
|
|
403
|
-
return "ENUM";
|
|
404
|
-
case LogicalTypeId::AGGREGATE_STATE:
|
|
405
|
-
return "AGGREGATE_STATE";
|
|
406
|
-
case LogicalTypeId::USER:
|
|
407
|
-
return "USER";
|
|
408
|
-
case LogicalTypeId::BIT:
|
|
409
|
-
return "BIT";
|
|
410
|
-
}
|
|
411
|
-
return "UNDEFINED";
|
|
335
|
+
return EnumSerializer::EnumToString(id);
|
|
412
336
|
}
|
|
413
337
|
|
|
414
338
|
string LogicalType::ToString() const {
|
|
@@ -515,7 +439,7 @@ LogicalType GetUserTypeRecursive(const LogicalType &type, ClientContext &context
|
|
|
515
439
|
for (auto &child : StructType::GetChildTypes(type)) {
|
|
516
440
|
children.emplace_back(child.first, GetUserTypeRecursive(child.second, context));
|
|
517
441
|
}
|
|
518
|
-
return LogicalType::STRUCT(
|
|
442
|
+
return LogicalType::STRUCT(children);
|
|
519
443
|
}
|
|
520
444
|
if (type.id() == LogicalTypeId::LIST) {
|
|
521
445
|
return LogicalType::LIST(GetUserTypeRecursive(ListType::GetChildType(type), context));
|
|
@@ -766,12 +690,12 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
|
|
|
766
690
|
if (type_id == LogicalTypeId::LIST) {
|
|
767
691
|
// list: perform max recursively on child type
|
|
768
692
|
auto new_child = MaxLogicalType(ListType::GetChildType(left), ListType::GetChildType(right));
|
|
769
|
-
return LogicalType::LIST(
|
|
693
|
+
return LogicalType::LIST(new_child);
|
|
770
694
|
}
|
|
771
695
|
if (type_id == LogicalTypeId::MAP) {
|
|
772
696
|
// list: perform max recursively on child type
|
|
773
697
|
auto new_child = MaxLogicalType(ListType::GetChildType(left), ListType::GetChildType(right));
|
|
774
|
-
return LogicalType::MAP(
|
|
698
|
+
return LogicalType::MAP(new_child);
|
|
775
699
|
}
|
|
776
700
|
if (type_id == LogicalTypeId::STRUCT) {
|
|
777
701
|
// struct: perform recursively
|
|
@@ -785,10 +709,10 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
|
|
|
785
709
|
child_list_t<LogicalType> child_types;
|
|
786
710
|
for (idx_t i = 0; i < left_child_types.size(); i++) {
|
|
787
711
|
auto child_type = MaxLogicalType(left_child_types[i].second, right_child_types[i].second);
|
|
788
|
-
child_types.
|
|
712
|
+
child_types.emplace_back(left_child_types[i].first, std::move(child_type));
|
|
789
713
|
}
|
|
790
714
|
|
|
791
|
-
return LogicalType::STRUCT(
|
|
715
|
+
return LogicalType::STRUCT(child_types);
|
|
792
716
|
}
|
|
793
717
|
if (type_id == LogicalTypeId::UNION) {
|
|
794
718
|
auto left_member_count = UnionType::GetMemberCount(left);
|
|
@@ -797,7 +721,7 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
|
|
|
797
721
|
// return the "larger" type, with the most members
|
|
798
722
|
return left_member_count > right_member_count ? left : right;
|
|
799
723
|
}
|
|
800
|
-
// otherwise, keep left,
|
|
724
|
+
// otherwise, keep left, don't try to meld the two together.
|
|
801
725
|
return left;
|
|
802
726
|
}
|
|
803
727
|
// types are equal but no extra specifier: just return the type
|
|
@@ -838,17 +762,6 @@ bool ApproxEqual(double ldecimal, double rdecimal) {
|
|
|
838
762
|
//===--------------------------------------------------------------------===//
|
|
839
763
|
// Extra Type Info
|
|
840
764
|
//===--------------------------------------------------------------------===//
|
|
841
|
-
enum class ExtraTypeInfoType : uint8_t {
|
|
842
|
-
INVALID_TYPE_INFO = 0,
|
|
843
|
-
GENERIC_TYPE_INFO = 1,
|
|
844
|
-
DECIMAL_TYPE_INFO = 2,
|
|
845
|
-
STRING_TYPE_INFO = 3,
|
|
846
|
-
LIST_TYPE_INFO = 4,
|
|
847
|
-
STRUCT_TYPE_INFO = 5,
|
|
848
|
-
ENUM_TYPE_INFO = 6,
|
|
849
|
-
USER_TYPE_INFO = 7,
|
|
850
|
-
AGGREGATE_STATE_TYPE_INFO = 8
|
|
851
|
-
};
|
|
852
765
|
|
|
853
766
|
struct ExtraTypeInfo {
|
|
854
767
|
explicit ExtraTypeInfo(ExtraTypeInfoType type) : type(type) {
|
|
@@ -887,12 +800,16 @@ public:
|
|
|
887
800
|
return alias == other_p->alias && EqualsInternal(other_p);
|
|
888
801
|
}
|
|
889
802
|
//! Serializes a ExtraTypeInfo to a stand-alone binary blob
|
|
890
|
-
virtual void Serialize(FieldWriter &writer) const {
|
|
803
|
+
virtual void Serialize(FieldWriter &writer) const {
|
|
804
|
+
}
|
|
891
805
|
//! Serializes a ExtraTypeInfo to a stand-alone binary blob
|
|
892
806
|
static void Serialize(ExtraTypeInfo *info, FieldWriter &writer);
|
|
893
807
|
//! Deserializes a blob back into an ExtraTypeInfo
|
|
894
808
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader);
|
|
895
809
|
|
|
810
|
+
virtual void FormatSerialize(FormatSerializer &serializer) const;
|
|
811
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source);
|
|
812
|
+
|
|
896
813
|
protected:
|
|
897
814
|
virtual bool EqualsInternal(ExtraTypeInfo *other_p) const {
|
|
898
815
|
// Do nothing
|
|
@@ -941,6 +858,10 @@ TypeCatalogEntry *LogicalType::GetCatalog(const LogicalType &type) {
|
|
|
941
858
|
return ((ExtraTypeInfo &)*info).catalog_entry;
|
|
942
859
|
}
|
|
943
860
|
|
|
861
|
+
ExtraTypeInfoType LogicalType::GetExtraTypeInfoType(const ExtraTypeInfo &type) {
|
|
862
|
+
return type.type;
|
|
863
|
+
}
|
|
864
|
+
|
|
944
865
|
//===--------------------------------------------------------------------===//
|
|
945
866
|
// Decimal Type
|
|
946
867
|
//===--------------------------------------------------------------------===//
|
|
@@ -959,6 +880,18 @@ public:
|
|
|
959
880
|
writer.WriteField<uint8_t>(scale);
|
|
960
881
|
}
|
|
961
882
|
|
|
883
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
884
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
885
|
+
serializer.WriteProperty("width", width);
|
|
886
|
+
serializer.WriteProperty("scale", scale);
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
|
|
890
|
+
auto width = source.ReadProperty<uint8_t>("width");
|
|
891
|
+
auto scale = source.ReadProperty<uint8_t>("scale");
|
|
892
|
+
return make_shared<DecimalTypeInfo>(width, scale);
|
|
893
|
+
}
|
|
894
|
+
|
|
962
895
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
963
896
|
auto width = reader.ReadRequired<uint8_t>();
|
|
964
897
|
auto scale = reader.ReadRequired<uint8_t>();
|
|
@@ -1016,6 +949,16 @@ public:
|
|
|
1016
949
|
return make_shared<StringTypeInfo>(std::move(collation));
|
|
1017
950
|
}
|
|
1018
951
|
|
|
952
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
953
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
954
|
+
serializer.WriteProperty("collation", collation);
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
|
|
958
|
+
auto collation = source.ReadProperty<string>("collation");
|
|
959
|
+
return make_shared<StringTypeInfo>(std::move(collation));
|
|
960
|
+
}
|
|
961
|
+
|
|
1019
962
|
protected:
|
|
1020
963
|
bool EqualsInternal(ExtraTypeInfo *other_p) const override {
|
|
1021
964
|
// collation info has no impact on equality
|
|
@@ -1057,11 +1000,21 @@ public:
|
|
|
1057
1000
|
writer.WriteSerializable(child_type);
|
|
1058
1001
|
}
|
|
1059
1002
|
|
|
1003
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
1004
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
1005
|
+
serializer.WriteProperty("child_type", child_type);
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1060
1008
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
1061
1009
|
auto child_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
|
|
1062
1010
|
return make_shared<ListTypeInfo>(std::move(child_type));
|
|
1063
1011
|
}
|
|
1064
1012
|
|
|
1013
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
|
|
1014
|
+
auto child_type = source.ReadProperty<LogicalType>("child_type");
|
|
1015
|
+
return make_shared<ListTypeInfo>(std::move(child_type));
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1065
1018
|
protected:
|
|
1066
1019
|
bool EqualsInternal(ExtraTypeInfo *other_p) const override {
|
|
1067
1020
|
auto &other = (ListTypeInfo &)*other_p;
|
|
@@ -1076,8 +1029,8 @@ const LogicalType &ListType::GetChildType(const LogicalType &type) {
|
|
|
1076
1029
|
return ((ListTypeInfo &)*info).child_type;
|
|
1077
1030
|
}
|
|
1078
1031
|
|
|
1079
|
-
LogicalType LogicalType::LIST(LogicalType child) {
|
|
1080
|
-
auto info = make_shared<ListTypeInfo>(
|
|
1032
|
+
LogicalType LogicalType::LIST(const LogicalType &child) {
|
|
1033
|
+
auto info = make_shared<ListTypeInfo>(child);
|
|
1081
1034
|
return LogicalType(LogicalTypeId::LIST, std::move(info));
|
|
1082
1035
|
}
|
|
1083
1036
|
|
|
@@ -1101,6 +1054,11 @@ public:
|
|
|
1101
1054
|
}
|
|
1102
1055
|
}
|
|
1103
1056
|
|
|
1057
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
1058
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
1059
|
+
serializer.WriteProperty("child_types", child_types);
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1104
1062
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
1105
1063
|
child_list_t<LogicalType> child_list;
|
|
1106
1064
|
auto child_types_size = reader.ReadRequired<uint32_t>();
|
|
@@ -1108,11 +1066,16 @@ public:
|
|
|
1108
1066
|
for (uint32_t i = 0; i < child_types_size; i++) {
|
|
1109
1067
|
auto name = source.Read<string>();
|
|
1110
1068
|
auto type = LogicalType::Deserialize(source);
|
|
1111
|
-
child_list.
|
|
1069
|
+
child_list.emplace_back(std::move(name), std::move(type));
|
|
1112
1070
|
}
|
|
1113
1071
|
return make_shared<StructTypeInfo>(std::move(child_list));
|
|
1114
1072
|
}
|
|
1115
1073
|
|
|
1074
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &deserializer) {
|
|
1075
|
+
auto child_types = deserializer.ReadProperty<child_list_t<LogicalType>>("child_types");
|
|
1076
|
+
return make_shared<StructTypeInfo>(std::move(child_types));
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1116
1079
|
protected:
|
|
1117
1080
|
bool EqualsInternal(ExtraTypeInfo *other_p) const override {
|
|
1118
1081
|
auto &other = (StructTypeInfo &)*other_p;
|
|
@@ -1138,6 +1101,21 @@ public:
|
|
|
1138
1101
|
}
|
|
1139
1102
|
}
|
|
1140
1103
|
|
|
1104
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
1105
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
1106
|
+
serializer.WriteProperty("function_name", state_type.function_name);
|
|
1107
|
+
serializer.WriteProperty("return_type", state_type.return_type);
|
|
1108
|
+
serializer.WriteProperty("bound_argument_types", state_type.bound_argument_types);
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
|
|
1112
|
+
auto function_name = source.ReadProperty<string>("function_name");
|
|
1113
|
+
auto return_type = source.ReadProperty<LogicalType>("return_type");
|
|
1114
|
+
auto bound_argument_types = source.ReadProperty<vector<LogicalType>>("bound_argument_types");
|
|
1115
|
+
return make_shared<AggregateStateTypeInfo>(
|
|
1116
|
+
aggregate_state_t(std::move(function_name), std::move(return_type), std::move(bound_argument_types)));
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1141
1119
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
1142
1120
|
auto &source = reader.GetSource();
|
|
1143
1121
|
|
|
@@ -1207,8 +1185,8 @@ idx_t StructType::GetChildCount(const LogicalType &type) {
|
|
|
1207
1185
|
return StructType::GetChildTypes(type).size();
|
|
1208
1186
|
}
|
|
1209
1187
|
|
|
1210
|
-
LogicalType LogicalType::STRUCT(child_list_t<LogicalType> children) {
|
|
1211
|
-
auto info = make_shared<StructTypeInfo>(
|
|
1188
|
+
LogicalType LogicalType::STRUCT(const child_list_t<LogicalType> &children) {
|
|
1189
|
+
auto info = make_shared<StructTypeInfo>(children);
|
|
1212
1190
|
return LogicalType(LogicalTypeId::STRUCT, std::move(info));
|
|
1213
1191
|
}
|
|
1214
1192
|
|
|
@@ -1220,16 +1198,16 @@ LogicalType LogicalType::AGGREGATE_STATE(aggregate_state_t state_type) { // NOLI
|
|
|
1220
1198
|
//===--------------------------------------------------------------------===//
|
|
1221
1199
|
// Map Type
|
|
1222
1200
|
//===--------------------------------------------------------------------===//
|
|
1223
|
-
LogicalType LogicalType::MAP(LogicalType child) {
|
|
1224
|
-
auto info = make_shared<ListTypeInfo>(
|
|
1201
|
+
LogicalType LogicalType::MAP(const LogicalType &child) {
|
|
1202
|
+
auto info = make_shared<ListTypeInfo>(child);
|
|
1225
1203
|
return LogicalType(LogicalTypeId::MAP, std::move(info));
|
|
1226
1204
|
}
|
|
1227
1205
|
|
|
1228
1206
|
LogicalType LogicalType::MAP(LogicalType key, LogicalType value) {
|
|
1229
1207
|
child_list_t<LogicalType> child_types;
|
|
1230
|
-
child_types.
|
|
1231
|
-
child_types.
|
|
1232
|
-
return LogicalType::MAP(LogicalType::STRUCT(
|
|
1208
|
+
child_types.emplace_back("key", std::move(key));
|
|
1209
|
+
child_types.emplace_back("value", std::move(value));
|
|
1210
|
+
return LogicalType::MAP(LogicalType::STRUCT(child_types));
|
|
1233
1211
|
}
|
|
1234
1212
|
|
|
1235
1213
|
const LogicalType &MapType::KeyType(const LogicalType &type) {
|
|
@@ -1247,7 +1225,7 @@ const LogicalType &MapType::ValueType(const LogicalType &type) {
|
|
|
1247
1225
|
//===--------------------------------------------------------------------===//
|
|
1248
1226
|
|
|
1249
1227
|
LogicalType LogicalType::UNION(child_list_t<LogicalType> members) {
|
|
1250
|
-
D_ASSERT(members.
|
|
1228
|
+
D_ASSERT(!members.empty());
|
|
1251
1229
|
D_ASSERT(members.size() <= UnionType::MAX_UNION_MEMBERS);
|
|
1252
1230
|
// union types always have a hidden "tag" field in front
|
|
1253
1231
|
members.insert(members.begin(), {"", LogicalType::TINYINT});
|
|
@@ -1270,7 +1248,7 @@ const string &UnionType::GetMemberName(const LogicalType &type, idx_t index) {
|
|
|
1270
1248
|
}
|
|
1271
1249
|
|
|
1272
1250
|
idx_t UnionType::GetMemberCount(const LogicalType &type) {
|
|
1273
|
-
//
|
|
1251
|
+
// don't count the "tag" field
|
|
1274
1252
|
return StructType::GetChildTypes(type).size() - 1;
|
|
1275
1253
|
}
|
|
1276
1254
|
const child_list_t<LogicalType> UnionType::CopyMemberTypes(const LogicalType &type) {
|
|
@@ -1294,11 +1272,21 @@ public:
|
|
|
1294
1272
|
writer.WriteString(user_type_name);
|
|
1295
1273
|
}
|
|
1296
1274
|
|
|
1275
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
1276
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
1277
|
+
serializer.WriteProperty("user_type_name", user_type_name);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1297
1280
|
static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
|
|
1298
1281
|
auto enum_name = reader.ReadRequired<string>();
|
|
1299
1282
|
return make_shared<UserTypeInfo>(std::move(enum_name));
|
|
1300
1283
|
}
|
|
1301
1284
|
|
|
1285
|
+
static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
|
|
1286
|
+
auto enum_name = source.ReadProperty<string>("user_type_name");
|
|
1287
|
+
return make_shared<UserTypeInfo>(std::move(enum_name));
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1302
1290
|
protected:
|
|
1303
1291
|
bool EqualsInternal(ExtraTypeInfo *other_p) const override {
|
|
1304
1292
|
auto &other = (UserTypeInfo &)*other_p;
|
|
@@ -1326,13 +1314,27 @@ enum EnumDictType : uint8_t { INVALID = 0, VECTOR_DICT = 1 };
|
|
|
1326
1314
|
|
|
1327
1315
|
struct EnumTypeInfo : public ExtraTypeInfo {
|
|
1328
1316
|
explicit EnumTypeInfo(string enum_name_p, Vector &values_insert_order_p, idx_t dict_size_p)
|
|
1329
|
-
: ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO),
|
|
1330
|
-
enum_name(std::move(enum_name_p)),
|
|
1331
|
-
}
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1317
|
+
: ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO), values_insert_order(values_insert_order_p),
|
|
1318
|
+
dict_type(EnumDictType::VECTOR_DICT), enum_name(std::move(enum_name_p)), dict_size(dict_size_p) {
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
const EnumDictType &GetEnumDictType() {
|
|
1322
|
+
return dict_type;
|
|
1323
|
+
};
|
|
1324
|
+
const string &GetEnumName() {
|
|
1325
|
+
return enum_name;
|
|
1326
|
+
};
|
|
1327
|
+
const string GetSchemaName() const {
|
|
1328
|
+
return catalog_entry ? catalog_entry->schema->name : "";
|
|
1329
|
+
};
|
|
1330
|
+
const Vector &GetValuesInsertOrder() {
|
|
1331
|
+
return values_insert_order;
|
|
1332
|
+
};
|
|
1333
|
+
const idx_t &GetDictSize() {
|
|
1334
|
+
return dict_size;
|
|
1335
|
+
};
|
|
1336
|
+
EnumTypeInfo(const EnumTypeInfo &) = delete;
|
|
1337
|
+
EnumTypeInfo &operator=(const EnumTypeInfo &) = delete;
|
|
1336
1338
|
|
|
1337
1339
|
protected:
|
|
1338
1340
|
// Equalities are only used in enums with different catalog entries
|
|
@@ -1362,12 +1364,45 @@ protected:
|
|
|
1362
1364
|
if (dict_type != EnumDictType::VECTOR_DICT) {
|
|
1363
1365
|
throw InternalException("Cannot serialize non-vector dictionary ENUM types");
|
|
1364
1366
|
}
|
|
1365
|
-
writer.
|
|
1366
|
-
writer
|
|
1367
|
-
|
|
1367
|
+
bool serialize_internals = GetSchemaName().empty() || writer.GetSerializer().is_query_plan;
|
|
1368
|
+
EnumType::Serialize(writer, *this, serialize_internals);
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
void FormatSerialize(FormatSerializer &serializer) const override {
|
|
1372
|
+
ExtraTypeInfo::FormatSerialize(serializer);
|
|
1373
|
+
serializer.WriteProperty("dict_size", dict_size);
|
|
1374
|
+
serializer.WriteProperty("enum_name", enum_name);
|
|
1375
|
+
((Vector &)values_insert_order).FormatSerialize(serializer, dict_size);
|
|
1368
1376
|
}
|
|
1377
|
+
Vector values_insert_order;
|
|
1378
|
+
|
|
1379
|
+
private:
|
|
1380
|
+
EnumDictType dict_type;
|
|
1381
|
+
string enum_name;
|
|
1382
|
+
idx_t dict_size;
|
|
1369
1383
|
};
|
|
1370
1384
|
|
|
1385
|
+
// If this type is primarily stored in the catalog or not. Enums from Pandas/Factors are not in the catalog.
|
|
1386
|
+
|
|
1387
|
+
void EnumType::Serialize(FieldWriter &writer, const ExtraTypeInfo &type_info, bool serialize_internals) {
|
|
1388
|
+
D_ASSERT(type_info.type == ExtraTypeInfoType::ENUM_TYPE_INFO);
|
|
1389
|
+
auto &enum_info = (EnumTypeInfo &)type_info;
|
|
1390
|
+
// Store Schema Name
|
|
1391
|
+
writer.WriteString(enum_info.GetSchemaName());
|
|
1392
|
+
// Store Enum Name
|
|
1393
|
+
writer.WriteString(enum_info.GetEnumName());
|
|
1394
|
+
// Store If we are serializing the internals
|
|
1395
|
+
writer.WriteField<bool>(serialize_internals);
|
|
1396
|
+
if (serialize_internals) {
|
|
1397
|
+
// We must serialize the internals
|
|
1398
|
+
auto dict_size = enum_info.GetDictSize();
|
|
1399
|
+
// Store Dictionary Size
|
|
1400
|
+
writer.WriteField<uint32_t>(dict_size);
|
|
1401
|
+
// Store Vector Order By Insertion
|
|
1402
|
+
((Vector &)enum_info.GetValuesInsertOrder()).Serialize(dict_size, writer.GetSerializer());
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1371
1406
|
template <class T>
|
|
1372
1407
|
struct EnumTypeInfoTemplated : public EnumTypeInfo {
|
|
1373
1408
|
explicit EnumTypeInfoTemplated(const string &enum_name_p, Vector &values_insert_order_p, idx_t size_p)
|
|
@@ -1391,13 +1426,28 @@ struct EnumTypeInfoTemplated : public EnumTypeInfo {
|
|
|
1391
1426
|
}
|
|
1392
1427
|
}
|
|
1393
1428
|
|
|
1394
|
-
static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size) {
|
|
1395
|
-
|
|
1429
|
+
static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size, string enum_name) {
|
|
1430
|
+
|
|
1396
1431
|
Vector values_insert_order(LogicalType::VARCHAR, size);
|
|
1397
1432
|
values_insert_order.Deserialize(size, reader.GetSource());
|
|
1398
1433
|
return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
|
|
1399
1434
|
}
|
|
1400
1435
|
|
|
1436
|
+
static shared_ptr<EnumTypeInfoTemplated> FormatDeserialize(FormatDeserializer &source, uint32_t size) {
|
|
1437
|
+
auto enum_name = source.ReadProperty<string>("enum_name");
|
|
1438
|
+
Vector values_insert_order(LogicalType::VARCHAR, size);
|
|
1439
|
+
values_insert_order.FormatDeserialize(source, size);
|
|
1440
|
+
return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
string_map_t<T> &GetValues() {
|
|
1444
|
+
return values;
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
EnumTypeInfoTemplated(const EnumTypeInfoTemplated &) = delete;
|
|
1448
|
+
EnumTypeInfoTemplated &operator=(const EnumTypeInfoTemplated &) = delete;
|
|
1449
|
+
|
|
1450
|
+
private:
|
|
1401
1451
|
string_map_t<T> values;
|
|
1402
1452
|
};
|
|
1403
1453
|
|
|
@@ -1405,7 +1455,7 @@ const string &EnumType::GetTypeName(const LogicalType &type) {
|
|
|
1405
1455
|
D_ASSERT(type.id() == LogicalTypeId::ENUM);
|
|
1406
1456
|
auto info = type.AuxInfo();
|
|
1407
1457
|
D_ASSERT(info);
|
|
1408
|
-
return ((EnumTypeInfo &)*info).
|
|
1458
|
+
return ((EnumTypeInfo &)*info).GetEnumName();
|
|
1409
1459
|
}
|
|
1410
1460
|
|
|
1411
1461
|
static PhysicalType EnumVectorDictType(idx_t size) {
|
|
@@ -1454,11 +1504,11 @@ int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
|
|
|
1454
1504
|
auto info = type.AuxInfo();
|
|
1455
1505
|
switch (type.InternalType()) {
|
|
1456
1506
|
case PhysicalType::UINT8:
|
|
1457
|
-
return TemplatedGetPos(((EnumTypeInfoTemplated<uint8_t> &)*info).
|
|
1507
|
+
return TemplatedGetPos(((EnumTypeInfoTemplated<uint8_t> &)*info).GetValues(), key);
|
|
1458
1508
|
case PhysicalType::UINT16:
|
|
1459
|
-
return TemplatedGetPos(((EnumTypeInfoTemplated<uint16_t> &)*info).
|
|
1509
|
+
return TemplatedGetPos(((EnumTypeInfoTemplated<uint16_t> &)*info).GetValues(), key);
|
|
1460
1510
|
case PhysicalType::UINT32:
|
|
1461
|
-
return TemplatedGetPos(((EnumTypeInfoTemplated<uint32_t> &)*info).
|
|
1511
|
+
return TemplatedGetPos(((EnumTypeInfoTemplated<uint32_t> &)*info).GetValues(), key);
|
|
1462
1512
|
default:
|
|
1463
1513
|
throw InternalException("ENUM can only have unsigned integers (except UINT64) as physical types");
|
|
1464
1514
|
}
|
|
@@ -1466,22 +1516,22 @@ int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
|
|
|
1466
1516
|
|
|
1467
1517
|
const string EnumType::GetValue(const Value &val) {
|
|
1468
1518
|
auto info = val.type().AuxInfo();
|
|
1469
|
-
auto &values_insert_order = ((EnumTypeInfo &)*info).
|
|
1519
|
+
auto &values_insert_order = ((EnumTypeInfo &)*info).GetValuesInsertOrder();
|
|
1470
1520
|
return StringValue::Get(values_insert_order.GetValue(val.GetValue<uint32_t>()));
|
|
1471
1521
|
}
|
|
1472
1522
|
|
|
1473
|
-
Vector &EnumType::GetValuesInsertOrder(const LogicalType &type) {
|
|
1523
|
+
const Vector &EnumType::GetValuesInsertOrder(const LogicalType &type) {
|
|
1474
1524
|
D_ASSERT(type.id() == LogicalTypeId::ENUM);
|
|
1475
1525
|
auto info = type.AuxInfo();
|
|
1476
1526
|
D_ASSERT(info);
|
|
1477
|
-
return ((EnumTypeInfo &)*info).
|
|
1527
|
+
return ((EnumTypeInfo &)*info).GetValuesInsertOrder();
|
|
1478
1528
|
}
|
|
1479
1529
|
|
|
1480
1530
|
idx_t EnumType::GetSize(const LogicalType &type) {
|
|
1481
1531
|
D_ASSERT(type.id() == LogicalTypeId::ENUM);
|
|
1482
1532
|
auto info = type.AuxInfo();
|
|
1483
1533
|
D_ASSERT(info);
|
|
1484
|
-
return ((EnumTypeInfo &)*info).
|
|
1534
|
+
return ((EnumTypeInfo &)*info).GetDictSize();
|
|
1485
1535
|
}
|
|
1486
1536
|
|
|
1487
1537
|
void EnumType::SetCatalog(LogicalType &type, TypeCatalogEntry *catalog_entry) {
|
|
@@ -1497,13 +1547,18 @@ TypeCatalogEntry *EnumType::GetCatalog(const LogicalType &type) {
|
|
|
1497
1547
|
return ((EnumTypeInfo &)*info).catalog_entry;
|
|
1498
1548
|
}
|
|
1499
1549
|
|
|
1550
|
+
string EnumType::GetSchemaName(const LogicalType &type) {
|
|
1551
|
+
auto catalog_entry = EnumType::GetCatalog(type);
|
|
1552
|
+
return catalog_entry ? catalog_entry->schema->name : "";
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1500
1555
|
PhysicalType EnumType::GetPhysicalType(const LogicalType &type) {
|
|
1501
1556
|
D_ASSERT(type.id() == LogicalTypeId::ENUM);
|
|
1502
1557
|
auto aux_info = type.AuxInfo();
|
|
1503
1558
|
D_ASSERT(aux_info);
|
|
1504
1559
|
auto &info = (EnumTypeInfo &)*aux_info;
|
|
1505
|
-
D_ASSERT(info.
|
|
1506
|
-
return EnumVectorDictType(info.
|
|
1560
|
+
D_ASSERT(info.GetEnumDictType() == EnumDictType::VECTOR_DICT);
|
|
1561
|
+
return EnumVectorDictType(info.GetDictSize());
|
|
1507
1562
|
}
|
|
1508
1563
|
|
|
1509
1564
|
//===--------------------------------------------------------------------===//
|
|
@@ -1519,6 +1574,70 @@ void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
|
|
|
1519
1574
|
writer.WriteString(info->alias);
|
|
1520
1575
|
}
|
|
1521
1576
|
}
|
|
1577
|
+
void ExtraTypeInfo::FormatSerialize(FormatSerializer &serializer) const {
|
|
1578
|
+
serializer.WriteProperty("type", type);
|
|
1579
|
+
serializer.WriteProperty("alias", alias);
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
shared_ptr<ExtraTypeInfo> ExtraTypeInfo::FormatDeserialize(FormatDeserializer &deserializer) {
|
|
1583
|
+
auto type = deserializer.ReadProperty<ExtraTypeInfoType>("type");
|
|
1584
|
+
|
|
1585
|
+
shared_ptr<ExtraTypeInfo> result;
|
|
1586
|
+
switch (type) {
|
|
1587
|
+
case ExtraTypeInfoType::INVALID_TYPE_INFO: {
|
|
1588
|
+
string alias;
|
|
1589
|
+
deserializer.ReadOptionalProperty("alias", alias);
|
|
1590
|
+
if (!alias.empty()) {
|
|
1591
|
+
return make_shared<ExtraTypeInfo>(type, alias);
|
|
1592
|
+
}
|
|
1593
|
+
return nullptr;
|
|
1594
|
+
}
|
|
1595
|
+
case ExtraTypeInfoType::GENERIC_TYPE_INFO: {
|
|
1596
|
+
result = make_shared<ExtraTypeInfo>(type);
|
|
1597
|
+
} break;
|
|
1598
|
+
case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
|
|
1599
|
+
result = DecimalTypeInfo::FormatDeserialize(deserializer);
|
|
1600
|
+
break;
|
|
1601
|
+
case ExtraTypeInfoType::STRING_TYPE_INFO:
|
|
1602
|
+
result = StringTypeInfo::FormatDeserialize(deserializer);
|
|
1603
|
+
break;
|
|
1604
|
+
case ExtraTypeInfoType::LIST_TYPE_INFO:
|
|
1605
|
+
result = ListTypeInfo::FormatDeserialize(deserializer);
|
|
1606
|
+
break;
|
|
1607
|
+
case ExtraTypeInfoType::STRUCT_TYPE_INFO:
|
|
1608
|
+
result = StructTypeInfo::FormatDeserialize(deserializer);
|
|
1609
|
+
break;
|
|
1610
|
+
case ExtraTypeInfoType::USER_TYPE_INFO:
|
|
1611
|
+
result = UserTypeInfo::FormatDeserialize(deserializer);
|
|
1612
|
+
break;
|
|
1613
|
+
case ExtraTypeInfoType::ENUM_TYPE_INFO: {
|
|
1614
|
+
auto enum_size = deserializer.ReadProperty<uint32_t>("enum_size");
|
|
1615
|
+
auto enum_internal_type = EnumVectorDictType(enum_size);
|
|
1616
|
+
switch (enum_internal_type) {
|
|
1617
|
+
case PhysicalType::UINT8:
|
|
1618
|
+
result = EnumTypeInfoTemplated<uint8_t>::FormatDeserialize(deserializer, enum_size);
|
|
1619
|
+
break;
|
|
1620
|
+
case PhysicalType::UINT16:
|
|
1621
|
+
result = EnumTypeInfoTemplated<uint16_t>::FormatDeserialize(deserializer, enum_size);
|
|
1622
|
+
break;
|
|
1623
|
+
case PhysicalType::UINT32:
|
|
1624
|
+
result = EnumTypeInfoTemplated<uint32_t>::FormatDeserialize(deserializer, enum_size);
|
|
1625
|
+
break;
|
|
1626
|
+
default:
|
|
1627
|
+
throw InternalException("Invalid Physical Type for ENUMs");
|
|
1628
|
+
}
|
|
1629
|
+
} break;
|
|
1630
|
+
case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
|
|
1631
|
+
result = AggregateStateTypeInfo::FormatDeserialize(deserializer);
|
|
1632
|
+
break;
|
|
1633
|
+
|
|
1634
|
+
default:
|
|
1635
|
+
throw InternalException("Unimplemented type info in ExtraTypeInfo::Deserialize");
|
|
1636
|
+
}
|
|
1637
|
+
deserializer.ReadOptionalPropertyOrDefault("alias", result->alias, string());
|
|
1638
|
+
return result;
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1522
1641
|
shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
|
|
1523
1642
|
auto type = reader.ReadRequired<ExtraTypeInfoType>();
|
|
1524
1643
|
shared_ptr<ExtraTypeInfo> extra_info;
|
|
@@ -1549,20 +1668,40 @@ shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
|
|
|
1549
1668
|
extra_info = UserTypeInfo::Deserialize(reader);
|
|
1550
1669
|
break;
|
|
1551
1670
|
case ExtraTypeInfoType::ENUM_TYPE_INFO: {
|
|
1552
|
-
auto
|
|
1553
|
-
auto
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1671
|
+
auto schema_name = reader.ReadRequired<string>();
|
|
1672
|
+
auto enum_name = reader.ReadRequired<string>();
|
|
1673
|
+
auto deserialize_internals = reader.ReadRequired<bool>();
|
|
1674
|
+
if (!deserialize_internals) {
|
|
1675
|
+
// this means the enum should already be in the catalog.
|
|
1676
|
+
auto &client_context = reader.GetSource().GetContext();
|
|
1677
|
+
// See if the serializer has a catalog
|
|
1678
|
+
auto catalog = reader.GetSource().GetCatalog();
|
|
1679
|
+
if (catalog) {
|
|
1680
|
+
auto enum_type = catalog->GetType(client_context, schema_name, enum_name, true);
|
|
1681
|
+
if (enum_type != LogicalType::INVALID) {
|
|
1682
|
+
extra_info = enum_type.GetAuxInfoShrPtr();
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
if (!extra_info) {
|
|
1686
|
+
throw InternalException("Could not find ENUM in the Catalog to deserialize");
|
|
1687
|
+
}
|
|
1563
1688
|
break;
|
|
1564
|
-
|
|
1565
|
-
|
|
1689
|
+
} else {
|
|
1690
|
+
auto enum_size = reader.ReadRequired<uint32_t>();
|
|
1691
|
+
auto enum_internal_type = EnumVectorDictType(enum_size);
|
|
1692
|
+
switch (enum_internal_type) {
|
|
1693
|
+
case PhysicalType::UINT8:
|
|
1694
|
+
extra_info = EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size, enum_name);
|
|
1695
|
+
break;
|
|
1696
|
+
case PhysicalType::UINT16:
|
|
1697
|
+
extra_info = EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size, enum_name);
|
|
1698
|
+
break;
|
|
1699
|
+
case PhysicalType::UINT32:
|
|
1700
|
+
extra_info = EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size, enum_name);
|
|
1701
|
+
break;
|
|
1702
|
+
default:
|
|
1703
|
+
throw InternalException("Invalid Physical Type for ENUMs");
|
|
1704
|
+
}
|
|
1566
1705
|
}
|
|
1567
1706
|
} break;
|
|
1568
1707
|
case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
|
|
@@ -1592,6 +1731,15 @@ void LogicalType::Serialize(Serializer &serializer) const {
|
|
|
1592
1731
|
writer.Finalize();
|
|
1593
1732
|
}
|
|
1594
1733
|
|
|
1734
|
+
void LogicalType::SerializeEnumType(Serializer &serializer) const {
|
|
1735
|
+
FieldWriter writer(serializer);
|
|
1736
|
+
writer.WriteField<LogicalTypeId>(id_);
|
|
1737
|
+
writer.WriteField<ExtraTypeInfoType>(type_info_->type);
|
|
1738
|
+
EnumType::Serialize(writer, *type_info_, true);
|
|
1739
|
+
writer.WriteString(type_info_->alias);
|
|
1740
|
+
writer.Finalize();
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1595
1743
|
LogicalType LogicalType::Deserialize(Deserializer &source) {
|
|
1596
1744
|
FieldReader reader(source);
|
|
1597
1745
|
auto id = reader.ReadRequired<LogicalTypeId>();
|
|
@@ -1601,6 +1749,18 @@ LogicalType LogicalType::Deserialize(Deserializer &source) {
|
|
|
1601
1749
|
return LogicalType(id, std::move(info));
|
|
1602
1750
|
}
|
|
1603
1751
|
|
|
1752
|
+
void LogicalType::FormatSerialize(FormatSerializer &serializer) const {
|
|
1753
|
+
serializer.WriteProperty("id", id_);
|
|
1754
|
+
serializer.WriteOptionalProperty("type_info", type_info_.get());
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
LogicalType LogicalType::FormatDeserialize(FormatDeserializer &deserializer) {
|
|
1758
|
+
auto id = deserializer.ReadProperty<LogicalTypeId>("id");
|
|
1759
|
+
auto info = deserializer.ReadOptionalProperty<shared_ptr<ExtraTypeInfo>>("type_info");
|
|
1760
|
+
|
|
1761
|
+
return LogicalType(id, std::move(info));
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1604
1764
|
bool LogicalType::EqualTypeInfo(const LogicalType &rhs) const {
|
|
1605
1765
|
if (type_info_.get() == rhs.type_info_.get()) {
|
|
1606
1766
|
return true;
|