duckdb 0.8.2-dev161.0 → 0.8.2-dev1724.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +44 -11
- 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 +13 -0
- 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 +0 -1
- 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 +51 -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,20 +1,23 @@
|
|
1
1
|
#include "duckdb/execution/window_segment_tree.hpp"
|
2
2
|
|
3
|
-
#include "duckdb/common/vector_operations/vector_operations.hpp"
|
4
3
|
#include "duckdb/common/algorithm.hpp"
|
5
4
|
#include "duckdb/common/helper.hpp"
|
5
|
+
#include "duckdb/common/vector_operations/vector_operations.hpp"
|
6
|
+
|
7
|
+
#include <utility>
|
6
8
|
|
7
9
|
namespace duckdb {
|
8
10
|
|
9
11
|
//===--------------------------------------------------------------------===//
|
10
12
|
// WindowAggregateState
|
11
13
|
//===--------------------------------------------------------------------===//
|
12
|
-
|
13
|
-
|
14
|
-
: aggr(std::move(aggr)), result_type(result_type_p),
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
WindowAggregateState::WindowAggregateState(AggregateObject aggr, const LogicalType &result_type_p,
|
15
|
+
idx_t partition_count_p)
|
16
|
+
: aggr(std::move(aggr)), result_type(result_type_p), partition_count(partition_count_p),
|
17
|
+
state_size(this->aggr.function.state_size()), state(state_size),
|
18
|
+
statef(Value::POINTER(CastPointerToValue(state.data()))), filter_pos(0),
|
19
|
+
allocator(Allocator::DefaultAllocator()) {
|
20
|
+
statef.SetVectorType(VectorType::FLAT_VECTOR); // Prevent conversion of results to constants
|
18
21
|
}
|
19
22
|
|
20
23
|
WindowAggregateState::~WindowAggregateState() {
|
@@ -25,15 +28,33 @@ void WindowAggregateState::AggregateInit() {
|
|
25
28
|
}
|
26
29
|
|
27
30
|
void WindowAggregateState::AggegateFinal(Vector &result, idx_t rid) {
|
28
|
-
AggregateInputData aggr_input_data(aggr.GetFunctionData(),
|
29
|
-
aggr.function.finalize(
|
31
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
32
|
+
aggr.function.finalize(statef, aggr_input_data, result, 1, rid);
|
30
33
|
|
31
34
|
if (aggr.function.destructor) {
|
32
|
-
aggr.function.destructor(
|
35
|
+
aggr.function.destructor(statef, aggr_input_data, 1);
|
33
36
|
}
|
34
37
|
}
|
35
38
|
|
36
39
|
void WindowAggregateState::Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered) {
|
40
|
+
if (!inputs.ColumnCount() && payload_chunk.ColumnCount()) {
|
41
|
+
inputs.Initialize(Allocator::DefaultAllocator(), payload_chunk.GetTypes());
|
42
|
+
}
|
43
|
+
if (inputs.ColumnCount()) {
|
44
|
+
inputs.Append(payload_chunk, true);
|
45
|
+
}
|
46
|
+
if (filter_sel) {
|
47
|
+
// Lazy instantiation
|
48
|
+
if (!filter_mask.IsMaskSet()) {
|
49
|
+
// Start with all invalid and set the ones that pass
|
50
|
+
filter_bits.resize(ValidityMask::ValidityMaskSize(partition_count), 0);
|
51
|
+
filter_mask.Initialize(filter_bits.data());
|
52
|
+
}
|
53
|
+
for (idx_t f = 0; f < filtered; ++f) {
|
54
|
+
filter_mask.SetValid(filter_pos + filter_sel->get_index(f));
|
55
|
+
}
|
56
|
+
filter_pos += payload_chunk.size();
|
57
|
+
}
|
37
58
|
}
|
38
59
|
|
39
60
|
void WindowAggregateState::Finalize() {
|
@@ -42,22 +63,36 @@ void WindowAggregateState::Finalize() {
|
|
42
63
|
void WindowAggregateState::Compute(Vector &result, idx_t rid, idx_t start, idx_t end) {
|
43
64
|
}
|
44
65
|
|
66
|
+
void WindowAggregateState::Evaluate(const idx_t *begins, const idx_t *ends, Vector &result, idx_t count) {
|
67
|
+
auto &rmask = FlatVector::Validity(result);
|
68
|
+
for (idx_t i = 0; i < count; ++i) {
|
69
|
+
const auto begin = begins[i];
|
70
|
+
const auto end = ends[i];
|
71
|
+
if (begin >= end) {
|
72
|
+
rmask.SetInvalid(i);
|
73
|
+
continue;
|
74
|
+
}
|
75
|
+
Compute(result, i, begin, end);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
45
79
|
//===--------------------------------------------------------------------===//
|
46
80
|
// WindowConstantAggregate
|
47
81
|
//===--------------------------------------------------------------------===//
|
48
82
|
|
49
83
|
WindowConstantAggregate::WindowConstantAggregate(AggregateObject aggr, const LogicalType &result_type,
|
50
84
|
const ValidityMask &partition_mask, const idx_t count)
|
51
|
-
: WindowAggregateState(std::move(aggr), result_type), partition(0), row(0)
|
85
|
+
: WindowAggregateState(std::move(aggr), result_type, count), partition(0), row(0),
|
86
|
+
statep(Value::POINTER(CastPointerToValue(state.data()))) {
|
87
|
+
matches.Initialize();
|
52
88
|
|
53
89
|
// Locate the partition boundaries
|
54
|
-
idx_t start = 0;
|
55
90
|
if (partition_mask.AllValid()) {
|
56
91
|
partition_offsets.emplace_back(0);
|
57
92
|
} else {
|
58
93
|
idx_t entry_idx;
|
59
94
|
idx_t shift;
|
60
|
-
|
95
|
+
for (idx_t start = 0; start < count;) {
|
61
96
|
partition_mask.GetEntryIndex(start, entry_idx, shift);
|
62
97
|
|
63
98
|
// If start is aligned with the start of a block,
|
@@ -93,7 +128,7 @@ void WindowConstantAggregate::Sink(DataChunk &payload_chunk, SelectionVector *fi
|
|
93
128
|
inputs.Initialize(Allocator::DefaultAllocator(), payload_chunk.GetTypes());
|
94
129
|
}
|
95
130
|
|
96
|
-
AggregateInputData aggr_input_data(aggr.GetFunctionData(),
|
131
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
97
132
|
idx_t begin = 0;
|
98
133
|
idx_t filter_idx = 0;
|
99
134
|
auto partition_end = partition_offsets[partition + 1];
|
@@ -165,43 +200,88 @@ void WindowConstantAggregate::Finalize() {
|
|
165
200
|
row = 0;
|
166
201
|
}
|
167
202
|
|
168
|
-
void WindowConstantAggregate::
|
169
|
-
//
|
170
|
-
|
171
|
-
|
203
|
+
void WindowConstantAggregate::Evaluate(const idx_t *begins, const idx_t *ends, Vector &target, idx_t count) {
|
204
|
+
// Chunk up the constants and copy them one at a time
|
205
|
+
idx_t matched = 0;
|
206
|
+
idx_t target_offset = 0;
|
207
|
+
for (idx_t i = 0; i < count; ++i) {
|
208
|
+
const auto begin = begins[i];
|
209
|
+
// Find the partition containing [begin, end)
|
210
|
+
while (partition_offsets[partition + 1] <= begin) {
|
211
|
+
// Flush the previous partition's data
|
212
|
+
if (matched) {
|
213
|
+
VectorOperations::Copy(*results, target, matches, matched, 0, target_offset);
|
214
|
+
target_offset += matched;
|
215
|
+
matched = 0;
|
216
|
+
}
|
217
|
+
++partition;
|
218
|
+
}
|
219
|
+
|
220
|
+
matches.set_index(matched++, partition);
|
221
|
+
}
|
222
|
+
|
223
|
+
// Flush the last partition
|
224
|
+
if (matched) {
|
225
|
+
VectorOperations::Copy(*results, target, matches, matched, 0, target_offset);
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
//===--------------------------------------------------------------------===//
|
230
|
+
// WindowCustomAggregate
|
231
|
+
//===--------------------------------------------------------------------===//
|
232
|
+
WindowCustomAggregate::WindowCustomAggregate(AggregateObject aggr, const LogicalType &result_type, idx_t count)
|
233
|
+
: WindowAggregateState(std::move(aggr), result_type, count) {
|
234
|
+
// if we have a frame-by-frame method, share the single state
|
235
|
+
AggregateInit();
|
236
|
+
}
|
237
|
+
|
238
|
+
WindowCustomAggregate::~WindowCustomAggregate() {
|
239
|
+
if (aggr.function.destructor) {
|
240
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
241
|
+
aggr.function.destructor(statef, aggr_input_data, 1);
|
172
242
|
}
|
173
|
-
|
174
|
-
|
175
|
-
|
243
|
+
}
|
244
|
+
|
245
|
+
void WindowCustomAggregate::Compute(Vector &result, idx_t rid, idx_t begin, idx_t end) {
|
246
|
+
// Frame boundaries
|
247
|
+
auto prev = frame;
|
248
|
+
frame = FrameBounds(begin, end);
|
176
249
|
|
177
|
-
//
|
178
|
-
|
250
|
+
// Extract the range
|
251
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
252
|
+
aggr.function.window(inputs.data.data(), filter_mask, aggr_input_data, inputs.ColumnCount(), state.data(), frame,
|
253
|
+
prev, result, rid, 0);
|
179
254
|
}
|
180
255
|
|
181
256
|
//===--------------------------------------------------------------------===//
|
182
257
|
// WindowSegmentTree
|
183
258
|
//===--------------------------------------------------------------------===//
|
184
|
-
WindowSegmentTree::WindowSegmentTree(AggregateObject
|
185
|
-
|
186
|
-
:
|
187
|
-
statep(Value::POINTER(CastPointerToValue(state.data()))), frame(0, 0),
|
188
|
-
|
189
|
-
|
190
|
-
statep.Flatten(
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
259
|
+
WindowSegmentTree::WindowSegmentTree(AggregateObject aggr, const LogicalType &result_type, idx_t count,
|
260
|
+
WindowAggregationMode mode_p)
|
261
|
+
: WindowAggregateState(std::move(aggr), result_type, count),
|
262
|
+
statep(Value::POINTER(CastPointerToValue(state.data()))), frame(0, 0), statel(LogicalType::POINTER),
|
263
|
+
flush_count(0), internal_nodes(0), mode(mode_p), allocator(Allocator::DefaultAllocator()) {
|
264
|
+
state.resize(state_size * STANDARD_VECTOR_SIZE);
|
265
|
+
statep.Flatten(STANDARD_VECTOR_SIZE);
|
266
|
+
|
267
|
+
// Build the finalise vector that just points to the result states
|
268
|
+
data_ptr_t state_ptr = state.data();
|
269
|
+
D_ASSERT(statef.GetVectorType() == VectorType::FLAT_VECTOR);
|
270
|
+
statef.SetVectorType(VectorType::CONSTANT_VECTOR);
|
271
|
+
statef.Flatten(STANDARD_VECTOR_SIZE);
|
272
|
+
auto fdata = FlatVector::GetData<data_ptr_t>(statef);
|
273
|
+
for (idx_t i = 0; i < STANDARD_VECTOR_SIZE; ++i) {
|
274
|
+
fdata[i] = state_ptr;
|
275
|
+
state_ptr += state_size;
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
void WindowSegmentTree::Finalize() {
|
280
|
+
if (inputs.ColumnCount() > 0) {
|
281
|
+
leaves.Initialize(Allocator::DefaultAllocator(), inputs.GetTypes());
|
282
|
+
filter_sel.Initialize();
|
283
|
+
if (aggr.function.combine && UseCombineAPI()) {
|
284
|
+
ConstructTree();
|
205
285
|
}
|
206
286
|
}
|
207
287
|
}
|
@@ -211,13 +291,13 @@ WindowSegmentTree::~WindowSegmentTree() {
|
|
211
291
|
// nothing to destroy
|
212
292
|
return;
|
213
293
|
}
|
214
|
-
AggregateInputData aggr_input_data(aggr.GetFunctionData(),
|
294
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
215
295
|
// call the destructor for all the intermediate states
|
216
296
|
data_ptr_t address_data[STANDARD_VECTOR_SIZE];
|
217
297
|
Vector addresses(LogicalType::POINTER, data_ptr_cast(address_data));
|
218
298
|
idx_t count = 0;
|
219
299
|
for (idx_t i = 0; i < internal_nodes; i++) {
|
220
|
-
address_data[count++] = data_ptr_t(levels_flat_native.get() + i *
|
300
|
+
address_data[count++] = data_ptr_t(levels_flat_native.get() + i * state_size);
|
221
301
|
if (count == STANDARD_VECTOR_SIZE) {
|
222
302
|
aggr.function.destructor(addresses, aggr_input_data, count);
|
223
303
|
count = 0;
|
@@ -226,92 +306,92 @@ WindowSegmentTree::~WindowSegmentTree() {
|
|
226
306
|
if (count > 0) {
|
227
307
|
aggr.function.destructor(addresses, aggr_input_data, count);
|
228
308
|
}
|
229
|
-
|
230
|
-
if (aggr.function.window && UseWindowAPI()) {
|
231
|
-
aggr.function.destructor(statev, aggr_input_data, 1);
|
232
|
-
}
|
233
|
-
}
|
234
|
-
|
235
|
-
void WindowSegmentTree::AggregateInit() {
|
236
|
-
aggr.function.initialize(state.data());
|
237
309
|
}
|
238
310
|
|
239
|
-
void WindowSegmentTree::
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
if (aggr.function.destructor) {
|
244
|
-
aggr.function.destructor(statev, aggr_input_data, 1);
|
311
|
+
void WindowSegmentTree::FlushStates(bool combining) {
|
312
|
+
if (!flush_count) {
|
313
|
+
return;
|
245
314
|
}
|
246
|
-
}
|
247
315
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
auto &vec = chunk.data[i];
|
257
|
-
v.Slice(vec, begin, end);
|
258
|
-
v.Verify(size);
|
316
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
317
|
+
if (combining) {
|
318
|
+
statel.Verify(flush_count);
|
319
|
+
aggr.function.combine(statel, statep, aggr_input_data, flush_count);
|
320
|
+
} else {
|
321
|
+
leaves.Reference(inputs);
|
322
|
+
leaves.Slice(filter_sel, flush_count);
|
323
|
+
aggr.function.update(&leaves.data[0], aggr_input_data, leaves.ColumnCount(), statep, flush_count);
|
259
324
|
}
|
260
325
|
|
261
|
-
|
262
|
-
|
263
|
-
|
326
|
+
flush_count = 0;
|
327
|
+
}
|
328
|
+
|
329
|
+
void WindowSegmentTree::ExtractFrame(idx_t begin, idx_t end, data_ptr_t state_ptr) {
|
330
|
+
const auto count = end - begin;
|
331
|
+
D_ASSERT(count <= TREE_FANOUT);
|
332
|
+
|
333
|
+
// If we are not filtering,
|
334
|
+
// just update the shared dictionary selection to the range
|
335
|
+
// Otherwise set it to the input rows that pass the filter
|
336
|
+
auto states = FlatVector::GetData<data_ptr_t>(statep);
|
337
|
+
if (filter_mask.AllValid()) {
|
338
|
+
for (idx_t i = 0; i < count; ++i) {
|
339
|
+
states[flush_count] = state_ptr;
|
340
|
+
filter_sel.set_index(flush_count++, begin + i);
|
341
|
+
if (flush_count >= STANDARD_VECTOR_SIZE) {
|
342
|
+
FlushStates(false);
|
343
|
+
}
|
344
|
+
}
|
345
|
+
} else {
|
264
346
|
for (idx_t i = begin; i < end; ++i) {
|
265
347
|
if (filter_mask.RowIsValid(i)) {
|
266
|
-
|
348
|
+
states[flush_count] = state_ptr;
|
349
|
+
filter_sel.set_index(flush_count++, i);
|
350
|
+
if (flush_count >= STANDARD_VECTOR_SIZE) {
|
351
|
+
FlushStates(false);
|
352
|
+
}
|
267
353
|
}
|
268
354
|
}
|
269
|
-
if (filtered != inputs.size()) {
|
270
|
-
inputs.Slice(filter_sel, filtered);
|
271
|
-
}
|
272
355
|
}
|
273
356
|
}
|
274
357
|
|
275
|
-
void WindowSegmentTree::WindowSegmentValue(idx_t l_idx, idx_t begin, idx_t end) {
|
358
|
+
void WindowSegmentTree::WindowSegmentValue(idx_t l_idx, idx_t begin, idx_t end, data_ptr_t state_ptr) {
|
276
359
|
D_ASSERT(begin <= end);
|
277
360
|
if (begin == end || inputs.ColumnCount() == 0) {
|
278
361
|
return;
|
279
362
|
}
|
280
363
|
|
281
364
|
const auto count = end - begin;
|
282
|
-
Vector s(statep, 0, count);
|
283
365
|
if (l_idx == 0) {
|
284
|
-
ExtractFrame(begin, end);
|
285
|
-
AggregateInputData aggr_input_data(aggr.GetFunctionData(), Allocator::DefaultAllocator());
|
286
|
-
D_ASSERT(!inputs.data.empty());
|
287
|
-
aggr.function.update(&inputs.data[0], aggr_input_data, input_ref->ColumnCount(), s, inputs.size());
|
366
|
+
ExtractFrame(begin, end, state_ptr);
|
288
367
|
} else {
|
289
368
|
// find out where the states begin
|
290
|
-
data_ptr_t begin_ptr = levels_flat_native.get() +
|
369
|
+
data_ptr_t begin_ptr = levels_flat_native.get() + state_size * (begin + levels_flat_start[l_idx - 1]);
|
291
370
|
// set up a vector of pointers that point towards the set of states
|
292
|
-
|
293
|
-
auto pdata = FlatVector::GetData<data_ptr_t>(
|
371
|
+
auto ldata = FlatVector::GetData<data_ptr_t>(statel);
|
372
|
+
auto pdata = FlatVector::GetData<data_ptr_t>(statep);
|
294
373
|
for (idx_t i = 0; i < count; i++) {
|
295
|
-
pdata[
|
374
|
+
pdata[flush_count] = state_ptr;
|
375
|
+
ldata[flush_count++] = begin_ptr;
|
376
|
+
begin_ptr += state_size;
|
377
|
+
if (flush_count >= STANDARD_VECTOR_SIZE) {
|
378
|
+
FlushStates(true);
|
379
|
+
}
|
296
380
|
}
|
297
|
-
v.Verify(count);
|
298
|
-
AggregateInputData aggr_input_data(aggr.GetFunctionData(), Allocator::DefaultAllocator());
|
299
|
-
aggr.function.combine(v, s, aggr_input_data, count);
|
300
381
|
}
|
301
382
|
}
|
302
383
|
|
303
384
|
void WindowSegmentTree::ConstructTree() {
|
304
|
-
D_ASSERT(input_ref);
|
305
385
|
D_ASSERT(inputs.ColumnCount() > 0);
|
306
386
|
|
307
387
|
// compute space required to store internal nodes of segment tree
|
308
388
|
internal_nodes = 0;
|
309
|
-
idx_t level_nodes =
|
389
|
+
idx_t level_nodes = inputs.size();
|
310
390
|
do {
|
311
391
|
level_nodes = (level_nodes + (TREE_FANOUT - 1)) / TREE_FANOUT;
|
312
392
|
internal_nodes += level_nodes;
|
313
393
|
} while (level_nodes > 1);
|
314
|
-
levels_flat_native = make_unsafe_uniq_array<data_t>(internal_nodes *
|
394
|
+
levels_flat_native = make_unsafe_uniq_array<data_t>(internal_nodes * state_size);
|
315
395
|
levels_flat_start.push_back(0);
|
316
396
|
|
317
397
|
idx_t levels_flat_offset = 0;
|
@@ -319,14 +399,14 @@ void WindowSegmentTree::ConstructTree() {
|
|
319
399
|
// level 0 is data itself
|
320
400
|
idx_t level_size;
|
321
401
|
// iterate over the levels of the segment tree
|
322
|
-
while ((level_size =
|
323
|
-
|
402
|
+
while ((level_size =
|
403
|
+
(level_current == 0 ? inputs.size() : levels_flat_offset - levels_flat_start[level_current - 1])) > 1) {
|
324
404
|
for (idx_t pos = 0; pos < level_size; pos += TREE_FANOUT) {
|
325
405
|
// compute the aggregate for this entry in the segment tree
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
406
|
+
data_ptr_t state_ptr = levels_flat_native.get() + (levels_flat_offset * state_size);
|
407
|
+
aggr.function.initialize(state_ptr);
|
408
|
+
WindowSegmentValue(level_current, pos, MinValue(level_size, pos + TREE_FANOUT), state_ptr);
|
409
|
+
FlushStates(level_current > 0);
|
330
410
|
|
331
411
|
levels_flat_offset++;
|
332
412
|
}
|
@@ -341,52 +421,129 @@ void WindowSegmentTree::ConstructTree() {
|
|
341
421
|
}
|
342
422
|
}
|
343
423
|
|
344
|
-
void WindowSegmentTree::
|
345
|
-
|
424
|
+
void WindowSegmentTree::Evaluate(const idx_t *begins, const idx_t *ends, Vector &result, idx_t count) {
|
425
|
+
const auto cant_combine = (!aggr.function.combine || !UseCombineAPI());
|
426
|
+
auto fdata = FlatVector::GetData<data_ptr_t>(statef);
|
427
|
+
|
428
|
+
// First pass: aggregate the segment tree nodes
|
429
|
+
// Share adjacent identical states
|
430
|
+
// We do this first because we want to share only tree aggregations
|
431
|
+
idx_t prev_begin = 1;
|
432
|
+
idx_t prev_end = 0;
|
433
|
+
auto ldata = FlatVector::GetData<data_ptr_t>(statel);
|
434
|
+
auto pdata = FlatVector::GetData<data_ptr_t>(statep);
|
435
|
+
data_ptr_t prev_state = nullptr;
|
436
|
+
for (idx_t rid = 0; rid < count; ++rid) {
|
437
|
+
auto state_ptr = fdata[rid];
|
438
|
+
aggr.function.initialize(state_ptr);
|
439
|
+
|
440
|
+
if (cant_combine) {
|
441
|
+
// Make sure we initialise all states
|
442
|
+
continue;
|
443
|
+
}
|
346
444
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
445
|
+
auto begin = begins[rid];
|
446
|
+
auto end = ends[rid];
|
447
|
+
if (begin >= end) {
|
448
|
+
continue;
|
449
|
+
}
|
352
450
|
|
353
|
-
//
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
451
|
+
// Skip level 0
|
452
|
+
idx_t l_idx = 0;
|
453
|
+
for (; l_idx < levels_flat_start.size() + 1; l_idx++) {
|
454
|
+
idx_t parent_begin = begin / TREE_FANOUT;
|
455
|
+
idx_t parent_end = end / TREE_FANOUT;
|
456
|
+
if (prev_state && l_idx == 1 && begin == prev_begin && end == prev_end) {
|
457
|
+
// Just combine the previous top level result
|
458
|
+
ldata[flush_count] = prev_state;
|
459
|
+
pdata[flush_count] = state_ptr;
|
460
|
+
if (++flush_count >= STANDARD_VECTOR_SIZE) {
|
461
|
+
FlushStates(true);
|
462
|
+
}
|
463
|
+
break;
|
464
|
+
}
|
359
465
|
|
360
|
-
|
466
|
+
if (l_idx == 1) {
|
467
|
+
prev_state = state_ptr;
|
468
|
+
prev_begin = begin;
|
469
|
+
prev_end = end;
|
470
|
+
}
|
361
471
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
472
|
+
if (parent_begin == parent_end) {
|
473
|
+
if (l_idx) {
|
474
|
+
WindowSegmentValue(l_idx, begin, end, state_ptr);
|
475
|
+
}
|
476
|
+
break;
|
477
|
+
}
|
478
|
+
idx_t group_begin = parent_begin * TREE_FANOUT;
|
479
|
+
if (begin != group_begin) {
|
480
|
+
if (l_idx) {
|
481
|
+
WindowSegmentValue(l_idx, begin, group_begin + TREE_FANOUT, state_ptr);
|
482
|
+
}
|
483
|
+
parent_begin++;
|
484
|
+
}
|
485
|
+
idx_t group_end = parent_end * TREE_FANOUT;
|
486
|
+
if (end != group_end) {
|
487
|
+
if (l_idx) {
|
488
|
+
WindowSegmentValue(l_idx, group_end, end, state_ptr);
|
489
|
+
}
|
490
|
+
}
|
491
|
+
begin = parent_begin;
|
492
|
+
end = parent_end;
|
493
|
+
}
|
367
494
|
}
|
495
|
+
FlushStates(true);
|
496
|
+
|
497
|
+
// Second pass: aggregate the ragged leaves
|
498
|
+
// (or everything if we can't combine)
|
499
|
+
for (idx_t rid = 0; rid < count; ++rid) {
|
500
|
+
auto state_ptr = fdata[rid];
|
368
501
|
|
369
|
-
|
502
|
+
const auto begin = begins[rid];
|
503
|
+
const auto end = ends[rid];
|
504
|
+
if (begin >= end) {
|
505
|
+
continue;
|
506
|
+
}
|
507
|
+
|
508
|
+
// Aggregate everything at once if we can't combine states
|
370
509
|
idx_t parent_begin = begin / TREE_FANOUT;
|
371
510
|
idx_t parent_end = end / TREE_FANOUT;
|
372
|
-
if (parent_begin == parent_end) {
|
373
|
-
WindowSegmentValue(
|
374
|
-
|
511
|
+
if (parent_begin == parent_end || cant_combine) {
|
512
|
+
WindowSegmentValue(0, begin, end, state_ptr);
|
513
|
+
continue;
|
375
514
|
}
|
515
|
+
|
376
516
|
idx_t group_begin = parent_begin * TREE_FANOUT;
|
377
517
|
if (begin != group_begin) {
|
378
|
-
WindowSegmentValue(
|
518
|
+
WindowSegmentValue(0, begin, group_begin + TREE_FANOUT, state_ptr);
|
379
519
|
parent_begin++;
|
380
520
|
}
|
381
521
|
idx_t group_end = parent_end * TREE_FANOUT;
|
382
522
|
if (end != group_end) {
|
383
|
-
WindowSegmentValue(
|
523
|
+
WindowSegmentValue(0, group_end, end, state_ptr);
|
384
524
|
}
|
385
|
-
begin = parent_begin;
|
386
|
-
end = parent_end;
|
387
525
|
}
|
526
|
+
FlushStates(false);
|
527
|
+
|
528
|
+
// Finalise the result aggregates
|
529
|
+
AggregateInputData aggr_input_data(aggr.GetFunctionData(), allocator);
|
530
|
+
aggr.function.finalize(statef, aggr_input_data, result, count, 0);
|
531
|
+
|
532
|
+
// Destruct the result aggregates
|
533
|
+
if (aggr.function.destructor) {
|
534
|
+
aggr.function.destructor(statef, aggr_input_data, count);
|
535
|
+
}
|
536
|
+
|
537
|
+
// Set the validity mask on the invalid rows
|
538
|
+
auto &rmask = FlatVector::Validity(result);
|
539
|
+
for (idx_t rid = 0; rid < count; ++rid) {
|
540
|
+
const auto begin = begins[rid];
|
541
|
+
const auto end = ends[rid];
|
388
542
|
|
389
|
-
|
543
|
+
if (begin >= end) {
|
544
|
+
rmask.SetInvalid(rid);
|
545
|
+
}
|
546
|
+
}
|
390
547
|
}
|
391
548
|
|
392
549
|
} // namespace duckdb
|
@@ -374,7 +374,8 @@ struct SortedAggregateFunction {
|
|
374
374
|
|
375
375
|
// State variables
|
376
376
|
auto bind_info = order_bind.bind_info.get();
|
377
|
-
|
377
|
+
ArenaAllocator allocator(Allocator::DefaultAllocator());
|
378
|
+
AggregateInputData aggr_bind_info(bind_info, allocator);
|
378
379
|
|
379
380
|
// Inner aggregate APIs
|
380
381
|
auto initialize = order_bind.function.initialize;
|
@@ -1,3 +1,6 @@
|
|
1
|
+
#include "duckdb/common/hugeint.hpp"
|
2
|
+
#include "duckdb/common/operator/cast_operators.hpp"
|
3
|
+
#include "duckdb/common/types.hpp"
|
1
4
|
#include "duckdb/function/cast/default_casts.hpp"
|
2
5
|
#include "duckdb/function/cast/vector_cast_helpers.hpp"
|
3
6
|
|
@@ -6,9 +9,38 @@ namespace duckdb {
|
|
6
9
|
BoundCastInfo DefaultCasts::BitCastSwitch(BindCastInput &input, const LogicalType &source, const LogicalType &target) {
|
7
10
|
// now switch on the result type
|
8
11
|
switch (target.id()) {
|
12
|
+
// Numerics
|
13
|
+
case LogicalTypeId::BOOLEAN:
|
14
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, bool, CastFromBitToNumeric>);
|
15
|
+
case LogicalTypeId::TINYINT:
|
16
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, int8_t, CastFromBitToNumeric>);
|
17
|
+
case LogicalTypeId::SMALLINT:
|
18
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, int16_t, CastFromBitToNumeric>);
|
19
|
+
case LogicalTypeId::INTEGER:
|
20
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, int32_t, CastFromBitToNumeric>);
|
21
|
+
case LogicalTypeId::BIGINT:
|
22
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, int64_t, CastFromBitToNumeric>);
|
23
|
+
case LogicalTypeId::UTINYINT:
|
24
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, uint8_t, CastFromBitToNumeric>);
|
25
|
+
case LogicalTypeId::USMALLINT:
|
26
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, uint16_t, CastFromBitToNumeric>);
|
27
|
+
case LogicalTypeId::UINTEGER:
|
28
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, uint32_t, CastFromBitToNumeric>);
|
29
|
+
case LogicalTypeId::UBIGINT:
|
30
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, uint64_t, CastFromBitToNumeric>);
|
31
|
+
case LogicalTypeId::HUGEINT:
|
32
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, hugeint_t, CastFromBitToNumeric>);
|
33
|
+
case LogicalTypeId::FLOAT:
|
34
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, float, CastFromBitToNumeric>);
|
35
|
+
case LogicalTypeId::DOUBLE:
|
36
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastLoop<string_t, double, CastFromBitToNumeric>);
|
37
|
+
|
38
|
+
case LogicalTypeId::BLOB:
|
39
|
+
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, CastFromBitToBlob>);
|
40
|
+
|
9
41
|
case LogicalTypeId::VARCHAR:
|
10
|
-
|
11
|
-
|
42
|
+
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, CastFromBitToString>);
|
43
|
+
|
12
44
|
default:
|
13
45
|
return DefaultCasts::TryVectorNullCast;
|
14
46
|
}
|
@@ -11,6 +11,9 @@ BoundCastInfo DefaultCasts::BlobCastSwitch(BindCastInput &input, const LogicalTy
|
|
11
11
|
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, duckdb::CastFromBlob>);
|
12
12
|
case LogicalTypeId::AGGREGATE_STATE:
|
13
13
|
return DefaultCasts::ReinterpretCast;
|
14
|
+
case LogicalTypeId::BIT:
|
15
|
+
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, duckdb::CastFromBlobToBit>);
|
16
|
+
|
14
17
|
default:
|
15
18
|
return DefaultCasts::TryVectorNullCast;
|
16
19
|
}
|
@@ -37,6 +37,8 @@ static BoundCastInfo InternalNumericCastSwitch(const LogicalType &source, const
|
|
37
37
|
return BoundCastInfo(&VectorCastHelpers::ToDecimalCast<SRC>);
|
38
38
|
case LogicalTypeId::VARCHAR:
|
39
39
|
return BoundCastInfo(&VectorCastHelpers::StringCast<SRC, duckdb::StringCast>);
|
40
|
+
case LogicalTypeId::BIT:
|
41
|
+
return BoundCastInfo(&VectorCastHelpers::StringCast<SRC, duckdb::NumericTryCastToBit>);
|
40
42
|
default:
|
41
43
|
return DefaultCasts::TryVectorNullCast;
|
42
44
|
}
|
@@ -94,6 +94,8 @@ void BuiltinFunctions::Initialize() {
|
|
94
94
|
|
95
95
|
RegisterDistributiveAggregates();
|
96
96
|
|
97
|
+
RegisterCompressedMaterializationFunctions();
|
98
|
+
|
97
99
|
RegisterGenericFunctions();
|
98
100
|
RegisterOperators();
|
99
101
|
RegisterSequenceFunctions();
|
@@ -111,7 +113,7 @@ void BuiltinFunctions::Initialize() {
|
|
111
113
|
hash_t BaseScalarFunction::Hash() const {
|
112
114
|
hash_t hash = return_type.Hash();
|
113
115
|
for (auto &arg : arguments) {
|
114
|
-
duckdb::CombineHash(hash, arg.Hash());
|
116
|
+
hash = duckdb::CombineHash(hash, arg.Hash());
|
115
117
|
}
|
116
118
|
return hash;
|
117
119
|
}
|