duckdb 0.8.0 → 0.8.1-dev111.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/package.json +1 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -1
- package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
- package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
- package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
- package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
- package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
- package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
- package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
- package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
- package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
- package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
- package/src/duckdb/src/catalog/catalog.cpp +0 -4
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -0
- package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
- package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
- package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +183 -94
- package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -2
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
- package/src/duckdb/src/common/checksum.cpp +1 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
- package/src/duckdb/src/common/crypto/md5.cpp +9 -9
- package/src/duckdb/src/common/field_writer.cpp +1 -1
- package/src/duckdb/src/common/file_system.cpp +15 -2
- package/src/duckdb/src/common/fsst.cpp +11 -6
- package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
- package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
- package/src/duckdb/src/common/local_file_system.cpp +11 -11
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
- package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
- package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
- package/src/duckdb/src/common/serializer.cpp +1 -1
- package/src/duckdb/src/common/sort/comparators.cpp +1 -1
- package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
- package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
- package/src/duckdb/src/common/types/bit.cpp +5 -5
- package/src/duckdb/src/common/types/blob.cpp +8 -8
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +2 -2
- package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
- package/src/duckdb/src/common/types/list_segment.cpp +77 -49
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/value.cpp +2 -2
- package/src/duckdb/src/common/types/vector.cpp +101 -101
- package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
- package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
- package/src/duckdb/src/common/types.cpp +44 -33
- package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
- package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
- package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
- package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +43 -43
- package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
- package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
- package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
- package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +83 -119
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
- package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
- package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
- package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
- package/src/duckdb/src/execution/expression_executor.cpp +33 -28
- package/src/duckdb/src/execution/index/art/art.cpp +30 -32
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
- package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
- package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
- package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
- package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
- package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
- package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
- package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
- package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
- package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
- package/src/duckdb/src/function/scalar_function.cpp +3 -3
- package/src/duckdb/src/function/table/arrow.cpp +4 -4
- package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
- package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
- package/src/duckdb/src/function/table/glob.cpp +1 -1
- package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
- package/src/duckdb/src/function/table/range.cpp +4 -4
- package/src/duckdb/src/function/table/read_csv.cpp +4 -7
- package/src/duckdb/src/function/table/repeat.cpp +2 -2
- package/src/duckdb/src/function/table/repeat_row.cpp +2 -2
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
- package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
- package/src/duckdb/src/function/table/table_scan.cpp +2 -2
- package/src/duckdb/src/function/table/unnest.cpp +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
- package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
- package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
- package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
- package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
- package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
- package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
- package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
- package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.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/patas/patas_analyze.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
- package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
- package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
- package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
- package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
- package/src/duckdb/src/main/capi/config-c.cpp +1 -1
- package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
- package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
- package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
- package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
- package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
- package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
- package/src/duckdb/src/main/capi/result-c.cpp +23 -23
- package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
- package/src/duckdb/src/main/client_context.cpp +3 -3
- package/src/duckdb/src/main/database_manager.cpp +1 -1
- package/src/duckdb/src/main/error_manager.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
- package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
- package/src/duckdb/src/main/relation.cpp +1 -1
- package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
- package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
- package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
- package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
- package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
- package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
- package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
- package/src/duckdb/src/parallel/executor.cpp +1 -1
- package/src/duckdb/src/parser/base_expression.cpp +2 -5
- package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
- package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
- package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
- package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
- package/src/duckdb/src/parser/parser.cpp +3 -3
- package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
- package/src/duckdb/src/parser/query_node.cpp +7 -6
- package/src/duckdb/src/parser/result_modifier.cpp +25 -18
- package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
- package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
- package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
- package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
- package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
- package/src/duckdb/src/parser/tableref.cpp +12 -3
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
- package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
- package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
- package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
- package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
- package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
- package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
- package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
- package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
- package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
- package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
- package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
- package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
- package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
- package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
- package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
- package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
- package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
- package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
- package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
- package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
- package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
- package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
- package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
- package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
- package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
- package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +27 -27
- package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
- package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
- package/src/duckdb/src/parser/transformer.cpp +46 -46
- package/src/duckdb/src/planner/bind_context.cpp +6 -6
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +14 -7
- package/src/duckdb/src/planner/binder.cpp +1 -1
- package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
- package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
- package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
- package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
- package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
- package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
- package/src/duckdb/src/planner/expression.cpp +15 -0
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
- package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
- package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +3 -4
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
- package/src/duckdb/src/planner/table_filter.cpp +1 -1
- package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
- package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
- package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
- package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
- package/src/duckdb/src/storage/compression/rle.cpp +8 -8
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
- package/src/duckdb/src/storage/data_table.cpp +2 -2
- package/src/duckdb/src/storage/index.cpp +1 -3
- package/src/duckdb/src/storage/local_storage.cpp +2 -1
- package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
- package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
- package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
- package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
- package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
- package/src/duckdb/src/storage/table/row_group.cpp +4 -4
- package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
- package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
- package/src/duckdb/src/storage/wal_replay.cpp +1 -1
- package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
- package/src/duckdb/src/transaction/commit_state.cpp +8 -8
- package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
- package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
- package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
- package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
- package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -451,34 +451,34 @@ struct QuantileBindData : public FunctionData {
|
|
451
451
|
|
452
452
|
struct QuantileOperation {
|
453
453
|
template <class STATE>
|
454
|
-
static void Initialize(STATE
|
455
|
-
new (state) STATE;
|
454
|
+
static void Initialize(STATE &state) {
|
455
|
+
new (&state) STATE();
|
456
456
|
}
|
457
457
|
|
458
458
|
template <class INPUT_TYPE, class STATE, class OP>
|
459
|
-
static void ConstantOperation(STATE
|
460
|
-
|
459
|
+
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
|
460
|
+
idx_t count) {
|
461
461
|
for (idx_t i = 0; i < count; i++) {
|
462
|
-
Operation<INPUT_TYPE, STATE, OP>(state,
|
462
|
+
Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
|
463
463
|
}
|
464
464
|
}
|
465
465
|
|
466
466
|
template <class INPUT_TYPE, class STATE, class OP>
|
467
|
-
static void Operation(STATE
|
468
|
-
state
|
467
|
+
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &) {
|
468
|
+
state.v.emplace_back(input);
|
469
469
|
}
|
470
470
|
|
471
471
|
template <class STATE, class OP>
|
472
|
-
static void Combine(const STATE &source, STATE
|
472
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
|
473
473
|
if (source.v.empty()) {
|
474
474
|
return;
|
475
475
|
}
|
476
|
-
target
|
476
|
+
target.v.insert(target.v.end(), source.v.begin(), source.v.end());
|
477
477
|
}
|
478
478
|
|
479
479
|
template <class STATE>
|
480
|
-
static void Destroy(
|
481
|
-
state
|
480
|
+
static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
|
481
|
+
state.~STATE();
|
482
482
|
}
|
483
483
|
|
484
484
|
static bool IgnoreNull() {
|
@@ -486,69 +486,35 @@ struct QuantileOperation {
|
|
486
486
|
}
|
487
487
|
};
|
488
488
|
|
489
|
-
template <class STATE_TYPE, class RESULT_TYPE, class OP>
|
490
|
-
static void ExecuteListFinalize(Vector &states, AggregateInputData &aggr_input_data, Vector &result,
|
491
|
-
idx_t count, // NOLINT
|
492
|
-
idx_t offset) {
|
493
|
-
D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
|
494
|
-
|
495
|
-
D_ASSERT(aggr_input_data.bind_data);
|
496
|
-
auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
|
497
|
-
|
498
|
-
if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
|
499
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
500
|
-
ListVector::Reserve(result, bind_data->quantiles.size());
|
501
|
-
|
502
|
-
auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
|
503
|
-
auto rdata = ConstantVector::GetData<RESULT_TYPE>(result);
|
504
|
-
auto &mask = ConstantVector::Validity(result);
|
505
|
-
OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[0], rdata, mask, 0);
|
506
|
-
} else {
|
507
|
-
D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
|
508
|
-
result.SetVectorType(VectorType::FLAT_VECTOR);
|
509
|
-
ListVector::Reserve(result, (offset + count) * bind_data->quantiles.size());
|
510
|
-
|
511
|
-
auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
|
512
|
-
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
513
|
-
auto &mask = FlatVector::Validity(result);
|
514
|
-
for (idx_t i = 0; i < count; i++) {
|
515
|
-
OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[i], rdata, mask, i + offset);
|
516
|
-
}
|
517
|
-
}
|
518
|
-
|
519
|
-
result.Verify(count);
|
520
|
-
}
|
521
|
-
|
522
489
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE, class OP>
|
523
490
|
static AggregateFunction QuantileListAggregate(const LogicalType &input_type, const LogicalType &child_type) { // NOLINT
|
524
491
|
LogicalType result_type = LogicalType::LIST(child_type);
|
525
492
|
return AggregateFunction(
|
526
493
|
{input_type}, result_type, AggregateFunction::StateSize<STATE>, AggregateFunction::StateInitialize<STATE, OP>,
|
527
494
|
AggregateFunction::UnaryScatterUpdate<STATE, INPUT_TYPE, OP>, AggregateFunction::StateCombine<STATE, OP>,
|
528
|
-
|
529
|
-
AggregateFunction::StateDestroy<STATE, OP>);
|
495
|
+
AggregateFunction::StateFinalize<STATE, RESULT_TYPE, OP>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>,
|
496
|
+
nullptr, AggregateFunction::StateDestroy<STATE, OP>);
|
530
497
|
}
|
531
498
|
|
532
499
|
template <bool DISCRETE>
|
533
500
|
struct QuantileScalarOperation : public QuantileOperation {
|
534
501
|
|
535
|
-
template <class
|
536
|
-
static void Finalize(
|
537
|
-
|
538
|
-
|
539
|
-
mask.SetInvalid(idx);
|
502
|
+
template <class T, class STATE>
|
503
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
504
|
+
if (state.v.empty()) {
|
505
|
+
finalize_data.ReturnNull();
|
540
506
|
return;
|
541
507
|
}
|
542
|
-
D_ASSERT(
|
543
|
-
auto bind_data = (
|
544
|
-
D_ASSERT(bind_data
|
545
|
-
Interpolator<DISCRETE> interp(bind_data
|
546
|
-
target
|
508
|
+
D_ASSERT(finalize_data.input.bind_data);
|
509
|
+
auto &bind_data = finalize_data.input.bind_data->Cast<QuantileBindData>();
|
510
|
+
D_ASSERT(bind_data.quantiles.size() == 1);
|
511
|
+
Interpolator<DISCRETE> interp(bind_data.quantiles[0], state.v.size(), bind_data.desc);
|
512
|
+
target = interp.template Operation<typename STATE::SaveType, T>(state.v.data(), finalize_data.result);
|
547
513
|
}
|
548
514
|
|
549
515
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
550
516
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
551
|
-
AggregateInputData &aggr_input_data, STATE
|
517
|
+
AggregateInputData &aggr_input_data, STATE &state, const FrameBounds &frame,
|
552
518
|
const FrameBounds &prev, Vector &result, idx_t ridx, idx_t bias) {
|
553
519
|
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
554
520
|
auto &rmask = FlatVector::Validity(result);
|
@@ -556,17 +522,17 @@ struct QuantileScalarOperation : public QuantileOperation {
|
|
556
522
|
QuantileIncluded included(fmask, dmask, bias);
|
557
523
|
|
558
524
|
// Lazily initialise frame state
|
559
|
-
auto prev_pos = state
|
560
|
-
state
|
525
|
+
auto prev_pos = state.pos;
|
526
|
+
state.SetPos(frame.second - frame.first);
|
561
527
|
|
562
|
-
auto index = state
|
528
|
+
auto index = state.w.data();
|
563
529
|
D_ASSERT(index);
|
564
530
|
|
565
531
|
D_ASSERT(aggr_input_data.bind_data);
|
566
|
-
auto bind_data =
|
532
|
+
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
567
533
|
|
568
534
|
// Find the two positions needed
|
569
|
-
const auto q = bind_data
|
535
|
+
const auto q = bind_data.quantiles[0];
|
570
536
|
|
571
537
|
bool replace = false;
|
572
538
|
if (frame.first == prev.first + 1 && frame.second == prev.second + 1) {
|
@@ -577,7 +543,7 @@ struct QuantileScalarOperation : public QuantileOperation {
|
|
577
543
|
Interpolator<DISCRETE> interp(q, prev_pos, false);
|
578
544
|
replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
579
545
|
if (replace) {
|
580
|
-
state
|
546
|
+
state.pos = prev_pos;
|
581
547
|
}
|
582
548
|
}
|
583
549
|
} else {
|
@@ -586,10 +552,10 @@ struct QuantileScalarOperation : public QuantileOperation {
|
|
586
552
|
|
587
553
|
if (!replace && !included.AllValid()) {
|
588
554
|
// Remove the NULLs
|
589
|
-
state
|
555
|
+
state.pos = std::partition(index, index + state.pos, included) - index;
|
590
556
|
}
|
591
|
-
if (state
|
592
|
-
Interpolator<DISCRETE> interp(q, state
|
557
|
+
if (state.pos) {
|
558
|
+
Interpolator<DISCRETE> interp(q, state.pos, false);
|
593
559
|
|
594
560
|
using ID = QuantileIndirect<INPUT_TYPE>;
|
595
561
|
ID indirect(data);
|
@@ -661,46 +627,45 @@ AggregateFunction GetDiscreteQuantileAggregateFunction(const LogicalType &type)
|
|
661
627
|
template <class CHILD_TYPE, bool DISCRETE>
|
662
628
|
struct QuantileListOperation : public QuantileOperation {
|
663
629
|
|
664
|
-
template <class
|
665
|
-
static void Finalize(
|
666
|
-
|
667
|
-
|
668
|
-
mask.SetInvalid(idx);
|
630
|
+
template <class T, class STATE>
|
631
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
632
|
+
if (state.v.empty()) {
|
633
|
+
finalize_data.ReturnNull();
|
669
634
|
return;
|
670
635
|
}
|
671
636
|
|
672
|
-
D_ASSERT(
|
673
|
-
auto bind_data = (
|
637
|
+
D_ASSERT(finalize_data.input.bind_data);
|
638
|
+
auto &bind_data = finalize_data.input.bind_data->Cast<QuantileBindData>();
|
674
639
|
|
675
|
-
auto &result = ListVector::GetEntry(
|
676
|
-
auto ridx = ListVector::GetListSize(
|
677
|
-
ListVector::Reserve(
|
640
|
+
auto &result = ListVector::GetEntry(finalize_data.result);
|
641
|
+
auto ridx = ListVector::GetListSize(finalize_data.result);
|
642
|
+
ListVector::Reserve(finalize_data.result, ridx + bind_data.quantiles.size());
|
678
643
|
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
679
644
|
|
680
|
-
auto v_t = state
|
645
|
+
auto v_t = state.v.data();
|
681
646
|
D_ASSERT(v_t);
|
682
647
|
|
683
|
-
auto &entry = target
|
648
|
+
auto &entry = target;
|
684
649
|
entry.offset = ridx;
|
685
650
|
idx_t lower = 0;
|
686
|
-
for (const auto &q : bind_data
|
687
|
-
const auto &quantile = bind_data
|
688
|
-
Interpolator<DISCRETE> interp(quantile, state
|
651
|
+
for (const auto &q : bind_data.order) {
|
652
|
+
const auto &quantile = bind_data.quantiles[q];
|
653
|
+
Interpolator<DISCRETE> interp(quantile, state.v.size(), bind_data.desc);
|
689
654
|
interp.begin = lower;
|
690
655
|
rdata[ridx + q] = interp.template Operation<typename STATE::SaveType, CHILD_TYPE>(v_t, result);
|
691
656
|
lower = interp.FRN;
|
692
657
|
}
|
693
|
-
entry.length = bind_data
|
658
|
+
entry.length = bind_data.quantiles.size();
|
694
659
|
|
695
|
-
ListVector::SetListSize(
|
660
|
+
ListVector::SetListSize(finalize_data.result, entry.offset + entry.length);
|
696
661
|
}
|
697
662
|
|
698
663
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
699
664
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
700
|
-
AggregateInputData &aggr_input_data, STATE
|
665
|
+
AggregateInputData &aggr_input_data, STATE &state, const FrameBounds &frame,
|
701
666
|
const FrameBounds &prev, Vector &list, idx_t lidx, idx_t bias) {
|
702
667
|
D_ASSERT(aggr_input_data.bind_data);
|
703
|
-
auto bind_data =
|
668
|
+
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
704
669
|
|
705
670
|
QuantileIncluded included(fmask, dmask, bias);
|
706
671
|
|
@@ -709,7 +674,7 @@ struct QuantileListOperation : public QuantileOperation {
|
|
709
674
|
auto &lmask = FlatVector::Validity(list);
|
710
675
|
auto &lentry = ldata[lidx];
|
711
676
|
lentry.offset = ListVector::GetListSize(list);
|
712
|
-
lentry.length = bind_data
|
677
|
+
lentry.length = bind_data.quantiles.size();
|
713
678
|
|
714
679
|
ListVector::Reserve(list, lentry.offset + lentry.length);
|
715
680
|
ListVector::SetListSize(list, lentry.offset + lentry.length);
|
@@ -717,10 +682,10 @@ struct QuantileListOperation : public QuantileOperation {
|
|
717
682
|
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
718
683
|
|
719
684
|
// Lazily initialise frame state
|
720
|
-
auto prev_pos = state
|
721
|
-
state
|
685
|
+
auto prev_pos = state.pos;
|
686
|
+
state.SetPos(frame.second - frame.first);
|
722
687
|
|
723
|
-
auto index = state
|
688
|
+
auto index = state.w.data();
|
724
689
|
|
725
690
|
// We can generalise replacement for quantile lists by observing that when a replacement is
|
726
691
|
// valid for a single quantile, it is valid for all quantiles greater/less than that quantile
|
@@ -728,14 +693,14 @@ struct QuantileListOperation : public QuantileOperation {
|
|
728
693
|
// So if a replaced index in an IQR is located between Q25 and Q50, but has a value below Q25,
|
729
694
|
// then Q25 must be recomputed, but Q50 and Q75 are unaffected.
|
730
695
|
// For a single element list, this reduces to the scalar case.
|
731
|
-
std::pair<idx_t, idx_t> replaceable {state
|
696
|
+
std::pair<idx_t, idx_t> replaceable {state.pos, 0};
|
732
697
|
if (frame.first == prev.first + 1 && frame.second == prev.second + 1) {
|
733
698
|
// Fixed frame size
|
734
699
|
const auto j = ReplaceIndex(index, frame, prev);
|
735
700
|
// We can only replace if the number of NULLs has not changed
|
736
701
|
if (included.AllValid() || included(prev.first) == included(prev.second)) {
|
737
|
-
for (const auto &q : bind_data
|
738
|
-
const auto &quantile = bind_data
|
702
|
+
for (const auto &q : bind_data.order) {
|
703
|
+
const auto &quantile = bind_data.quantiles[q];
|
739
704
|
Interpolator<DISCRETE> interp(quantile, prev_pos, false);
|
740
705
|
const auto replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
741
706
|
if (replace < 0) {
|
@@ -750,7 +715,7 @@ struct QuantileListOperation : public QuantileOperation {
|
|
750
715
|
}
|
751
716
|
}
|
752
717
|
if (replaceable.first < replaceable.second) {
|
753
|
-
state
|
718
|
+
state.pos = prev_pos;
|
754
719
|
}
|
755
720
|
}
|
756
721
|
} else {
|
@@ -759,15 +724,15 @@ struct QuantileListOperation : public QuantileOperation {
|
|
759
724
|
|
760
725
|
if (replaceable.first >= replaceable.second && !included.AllValid()) {
|
761
726
|
// Remove the NULLs
|
762
|
-
state
|
727
|
+
state.pos = std::partition(index, index + state.pos, included) - index;
|
763
728
|
}
|
764
729
|
|
765
|
-
if (state
|
730
|
+
if (state.pos) {
|
766
731
|
using ID = QuantileIndirect<INPUT_TYPE>;
|
767
732
|
ID indirect(data);
|
768
|
-
for (const auto &q : bind_data
|
769
|
-
const auto &quantile = bind_data
|
770
|
-
Interpolator<DISCRETE> interp(quantile, state
|
733
|
+
for (const auto &q : bind_data.order) {
|
734
|
+
const auto &quantile = bind_data.quantiles[q];
|
735
|
+
Interpolator<DISCRETE> interp(quantile, state.pos, false);
|
771
736
|
if (replaceable.first <= interp.FRN && interp.CRN <= replaceable.second) {
|
772
737
|
rdata[lentry.offset + q] = interp.template Replace<idx_t, CHILD_TYPE, ID>(index, result, indirect);
|
773
738
|
} else {
|
@@ -1035,24 +1000,23 @@ struct MadAccessor<dtime_t, interval_t, dtime_t> {
|
|
1035
1000
|
template <typename MEDIAN_TYPE>
|
1036
1001
|
struct MedianAbsoluteDeviationOperation : public QuantileOperation {
|
1037
1002
|
|
1038
|
-
template <class
|
1039
|
-
static void Finalize(
|
1040
|
-
|
1041
|
-
|
1042
|
-
mask.SetInvalid(idx);
|
1003
|
+
template <class T, class STATE>
|
1004
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
1005
|
+
if (state.v.empty()) {
|
1006
|
+
finalize_data.ReturnNull();
|
1043
1007
|
return;
|
1044
1008
|
}
|
1045
1009
|
using SAVE_TYPE = typename STATE::SaveType;
|
1046
|
-
Interpolator<false> interp(0.5, state
|
1047
|
-
const auto med = interp.template Operation<SAVE_TYPE, MEDIAN_TYPE>(state
|
1010
|
+
Interpolator<false> interp(0.5, state.v.size(), false);
|
1011
|
+
const auto med = interp.template Operation<SAVE_TYPE, MEDIAN_TYPE>(state.v.data(), finalize_data.result);
|
1048
1012
|
|
1049
|
-
MadAccessor<SAVE_TYPE,
|
1050
|
-
target
|
1013
|
+
MadAccessor<SAVE_TYPE, T, MEDIAN_TYPE> accessor(med);
|
1014
|
+
target = interp.template Operation<SAVE_TYPE, T>(state.v.data(), finalize_data.result, accessor);
|
1051
1015
|
}
|
1052
1016
|
|
1053
1017
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
1054
1018
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
1055
|
-
AggregateInputData &, STATE
|
1019
|
+
AggregateInputData &, STATE &state, const FrameBounds &frame, const FrameBounds &prev,
|
1056
1020
|
Vector &result, idx_t ridx, idx_t bias) {
|
1057
1021
|
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
1058
1022
|
auto &rmask = FlatVector::Validity(result);
|
@@ -1060,25 +1024,25 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
|
|
1060
1024
|
QuantileIncluded included(fmask, dmask, bias);
|
1061
1025
|
|
1062
1026
|
// Lazily initialise frame state
|
1063
|
-
auto prev_pos = state
|
1064
|
-
state
|
1027
|
+
auto prev_pos = state.pos;
|
1028
|
+
state.SetPos(frame.second - frame.first);
|
1065
1029
|
|
1066
|
-
auto index = state
|
1030
|
+
auto index = state.w.data();
|
1067
1031
|
D_ASSERT(index);
|
1068
1032
|
|
1069
1033
|
// We need a second index for the second pass.
|
1070
|
-
if (state
|
1071
|
-
state
|
1034
|
+
if (state.pos > state.m.size()) {
|
1035
|
+
state.m.resize(state.pos);
|
1072
1036
|
}
|
1073
1037
|
|
1074
|
-
auto index2 = state
|
1038
|
+
auto index2 = state.m.data();
|
1075
1039
|
D_ASSERT(index2);
|
1076
1040
|
|
1077
1041
|
// The replacement trick does not work on the second index because if
|
1078
1042
|
// the median has changed, the previous order is not correct.
|
1079
1043
|
// It is probably close, however, and so reuse is helpful.
|
1080
1044
|
ReuseIndexes(index2, frame, prev);
|
1081
|
-
std::partition(index2, index2 + state
|
1045
|
+
std::partition(index2, index2 + state.pos, included);
|
1082
1046
|
|
1083
1047
|
// Find the two positions needed for the median
|
1084
1048
|
const float q = 0.5;
|
@@ -1092,7 +1056,7 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
|
|
1092
1056
|
Interpolator<false> interp(q, prev_pos, false);
|
1093
1057
|
replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
1094
1058
|
if (replace) {
|
1095
|
-
state
|
1059
|
+
state.pos = prev_pos;
|
1096
1060
|
}
|
1097
1061
|
}
|
1098
1062
|
} else {
|
@@ -1101,11 +1065,11 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
|
|
1101
1065
|
|
1102
1066
|
if (!replace && !included.AllValid()) {
|
1103
1067
|
// Remove the NULLs
|
1104
|
-
state
|
1068
|
+
state.pos = std::partition(index, index + state.pos, included) - index;
|
1105
1069
|
}
|
1106
1070
|
|
1107
|
-
if (state
|
1108
|
-
Interpolator<false> interp(q, state
|
1071
|
+
if (state.pos) {
|
1072
|
+
Interpolator<false> interp(q, state.pos, false);
|
1109
1073
|
|
1110
1074
|
// Compute or replace median from the first index
|
1111
1075
|
using ID = QuantileIndirect<INPUT_TYPE>;
|
@@ -66,9 +66,9 @@ struct ReservoirQuantileBindData : public FunctionData {
|
|
66
66
|
|
67
67
|
static void Serialize(FieldWriter &writer, const FunctionData *bind_data_p, const AggregateFunction &function) {
|
68
68
|
D_ASSERT(bind_data_p);
|
69
|
-
auto bind_data = (
|
70
|
-
writer.WriteList<double>(bind_data
|
71
|
-
writer.WriteField<int32_t>(bind_data
|
69
|
+
auto &bind_data = bind_data_p->Cast<ReservoirQuantileBindData>();
|
70
|
+
writer.WriteList<double>(bind_data.quantiles);
|
71
|
+
writer.WriteField<int32_t>(bind_data.sample_size);
|
72
72
|
}
|
73
73
|
|
74
74
|
static unique_ptr<FunctionData> Deserialize(ClientContext &context, FieldReader &reader,
|
@@ -84,61 +84,59 @@ struct ReservoirQuantileBindData : public FunctionData {
|
|
84
84
|
|
85
85
|
struct ReservoirQuantileOperation {
|
86
86
|
template <class STATE>
|
87
|
-
static void Initialize(STATE
|
88
|
-
state
|
89
|
-
state
|
90
|
-
state
|
91
|
-
state
|
87
|
+
static void Initialize(STATE &state) {
|
88
|
+
state.v = nullptr;
|
89
|
+
state.len = 0;
|
90
|
+
state.pos = 0;
|
91
|
+
state.r_samp = nullptr;
|
92
92
|
}
|
93
93
|
|
94
94
|
template <class INPUT_TYPE, class STATE, class OP>
|
95
|
-
static void ConstantOperation(STATE
|
96
|
-
|
95
|
+
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
|
96
|
+
idx_t count) {
|
97
97
|
for (idx_t i = 0; i < count; i++) {
|
98
|
-
Operation<INPUT_TYPE, STATE, OP>(state,
|
98
|
+
Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
|
99
99
|
}
|
100
100
|
}
|
101
101
|
|
102
102
|
template <class INPUT_TYPE, class STATE, class OP>
|
103
|
-
static void Operation(STATE
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
if (state->pos == 0) {
|
108
|
-
state->Resize(bind_data->sample_size);
|
103
|
+
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input) {
|
104
|
+
auto &bind_data = unary_input.input.bind_data->template Cast<ReservoirQuantileBindData>();
|
105
|
+
if (state.pos == 0) {
|
106
|
+
state.Resize(bind_data.sample_size);
|
109
107
|
}
|
110
|
-
if (!state
|
111
|
-
state
|
108
|
+
if (!state.r_samp) {
|
109
|
+
state.r_samp = new BaseReservoirSampling();
|
112
110
|
}
|
113
|
-
D_ASSERT(state
|
114
|
-
state
|
111
|
+
D_ASSERT(state.v);
|
112
|
+
state.FillReservoir(bind_data.sample_size, input);
|
115
113
|
}
|
116
114
|
|
117
115
|
template <class STATE, class OP>
|
118
|
-
static void Combine(const STATE &source, STATE
|
116
|
+
static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
|
119
117
|
if (source.pos == 0) {
|
120
118
|
return;
|
121
119
|
}
|
122
|
-
if (target
|
123
|
-
target
|
120
|
+
if (target.pos == 0) {
|
121
|
+
target.Resize(source.len);
|
124
122
|
}
|
125
|
-
if (!target
|
126
|
-
target
|
123
|
+
if (!target.r_samp) {
|
124
|
+
target.r_samp = new BaseReservoirSampling();
|
127
125
|
}
|
128
126
|
for (idx_t src_idx = 0; src_idx < source.pos; src_idx++) {
|
129
|
-
target
|
127
|
+
target.FillReservoir(target.len, source.v[src_idx]);
|
130
128
|
}
|
131
129
|
}
|
132
130
|
|
133
131
|
template <class STATE>
|
134
|
-
static void Destroy(
|
135
|
-
if (state
|
136
|
-
free(state
|
137
|
-
state
|
132
|
+
static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
|
133
|
+
if (state.v) {
|
134
|
+
free(state.v);
|
135
|
+
state.v = nullptr;
|
138
136
|
}
|
139
|
-
if (state
|
140
|
-
delete state
|
141
|
-
state
|
137
|
+
if (state.r_samp) {
|
138
|
+
delete state.r_samp;
|
139
|
+
state.r_samp = nullptr;
|
142
140
|
}
|
143
141
|
}
|
144
142
|
|
@@ -148,21 +146,20 @@ struct ReservoirQuantileOperation {
|
|
148
146
|
};
|
149
147
|
|
150
148
|
struct ReservoirQuantileScalarOperation : public ReservoirQuantileOperation {
|
151
|
-
template <class
|
152
|
-
static void Finalize(
|
153
|
-
|
154
|
-
|
155
|
-
mask.SetInvalid(idx);
|
149
|
+
template <class T, class STATE>
|
150
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
151
|
+
if (state.pos == 0) {
|
152
|
+
finalize_data.ReturnNull();
|
156
153
|
return;
|
157
154
|
}
|
158
|
-
D_ASSERT(state
|
159
|
-
D_ASSERT(
|
160
|
-
auto bind_data = (
|
161
|
-
auto v_t = state
|
162
|
-
D_ASSERT(bind_data
|
163
|
-
auto offset = (idx_t)((double)(state
|
164
|
-
std::nth_element(v_t, v_t + offset, v_t + state
|
165
|
-
target
|
155
|
+
D_ASSERT(state.v);
|
156
|
+
D_ASSERT(finalize_data.input.bind_data);
|
157
|
+
auto &bind_data = finalize_data.input.bind_data->template Cast<ReservoirQuantileBindData>();
|
158
|
+
auto v_t = state.v;
|
159
|
+
D_ASSERT(bind_data.quantiles.size() == 1);
|
160
|
+
auto offset = (idx_t)((double)(state.pos - 1) * bind_data.quantiles[0]);
|
161
|
+
std::nth_element(v_t, v_t + offset, v_t + state.pos);
|
162
|
+
target = v_t[offset];
|
166
163
|
}
|
167
164
|
};
|
168
165
|
|
@@ -207,69 +204,35 @@ AggregateFunction GetReservoirQuantileAggregateFunction(PhysicalType type) {
|
|
207
204
|
|
208
205
|
template <class CHILD_TYPE>
|
209
206
|
struct ReservoirQuantileListOperation : public ReservoirQuantileOperation {
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
if (state->pos == 0) {
|
215
|
-
mask.SetInvalid(idx);
|
207
|
+
template <class T, class STATE>
|
208
|
+
static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
|
209
|
+
if (state.pos == 0) {
|
210
|
+
finalize_data.ReturnNull();
|
216
211
|
return;
|
217
212
|
}
|
218
213
|
|
219
|
-
D_ASSERT(
|
220
|
-
auto bind_data = (
|
214
|
+
D_ASSERT(finalize_data.input.bind_data);
|
215
|
+
auto &bind_data = finalize_data.input.bind_data->template Cast<ReservoirQuantileBindData>();
|
221
216
|
|
222
|
-
auto &result = ListVector::GetEntry(
|
223
|
-
auto ridx = ListVector::GetListSize(
|
224
|
-
ListVector::Reserve(
|
217
|
+
auto &result = ListVector::GetEntry(finalize_data.result);
|
218
|
+
auto ridx = ListVector::GetListSize(finalize_data.result);
|
219
|
+
ListVector::Reserve(finalize_data.result, ridx + bind_data.quantiles.size());
|
225
220
|
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
226
221
|
|
227
|
-
auto v_t = state
|
222
|
+
auto v_t = state.v;
|
228
223
|
D_ASSERT(v_t);
|
229
224
|
|
230
|
-
auto &entry = target
|
225
|
+
auto &entry = target;
|
231
226
|
entry.offset = ridx;
|
232
|
-
entry.length = bind_data
|
227
|
+
entry.length = bind_data.quantiles.size();
|
233
228
|
for (size_t q = 0; q < entry.length; ++q) {
|
234
|
-
const auto &quantile = bind_data
|
235
|
-
auto offset = (idx_t)((double)(state
|
236
|
-
std::nth_element(v_t, v_t + offset, v_t + state
|
229
|
+
const auto &quantile = bind_data.quantiles[q];
|
230
|
+
auto offset = (idx_t)((double)(state.pos - 1) * quantile);
|
231
|
+
std::nth_element(v_t, v_t + offset, v_t + state.pos);
|
237
232
|
rdata[ridx + q] = v_t[offset];
|
238
233
|
}
|
239
234
|
|
240
|
-
ListVector::SetListSize(
|
241
|
-
}
|
242
|
-
|
243
|
-
template <class STATE_TYPE, class RESULT_TYPE>
|
244
|
-
static void FinalizeList(Vector &states, AggregateInputData &aggr_input_data, Vector &result, idx_t count, // NOLINT
|
245
|
-
idx_t offset) {
|
246
|
-
D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
|
247
|
-
|
248
|
-
D_ASSERT(aggr_input_data.bind_data);
|
249
|
-
auto bind_data = (ReservoirQuantileBindData *)aggr_input_data.bind_data;
|
250
|
-
|
251
|
-
if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
|
252
|
-
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
253
|
-
ListVector::Reserve(result, bind_data->quantiles.size());
|
254
|
-
|
255
|
-
auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
|
256
|
-
auto rdata = ConstantVector::GetData<RESULT_TYPE>(result);
|
257
|
-
auto &mask = ConstantVector::Validity(result);
|
258
|
-
Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[0], rdata, mask, 0);
|
259
|
-
} else {
|
260
|
-
D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
|
261
|
-
result.SetVectorType(VectorType::FLAT_VECTOR);
|
262
|
-
ListVector::Reserve(result, (offset + count) * bind_data->quantiles.size());
|
263
|
-
|
264
|
-
auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
|
265
|
-
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
266
|
-
auto &mask = FlatVector::Validity(result);
|
267
|
-
for (idx_t i = 0; i < count; i++) {
|
268
|
-
Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[i], rdata, mask, i + offset);
|
269
|
-
}
|
270
|
-
}
|
271
|
-
|
272
|
-
result.Verify(count);
|
235
|
+
ListVector::SetListSize(finalize_data.result, entry.offset + entry.length);
|
273
236
|
}
|
274
237
|
};
|
275
238
|
|
@@ -279,8 +242,8 @@ static AggregateFunction ReservoirQuantileListAggregate(const LogicalType &input
|
|
279
242
|
return AggregateFunction(
|
280
243
|
{input_type}, result_type, AggregateFunction::StateSize<STATE>, AggregateFunction::StateInitialize<STATE, OP>,
|
281
244
|
AggregateFunction::UnaryScatterUpdate<STATE, INPUT_TYPE, OP>, AggregateFunction::StateCombine<STATE, OP>,
|
282
|
-
|
283
|
-
AggregateFunction::StateDestroy<STATE, OP>);
|
245
|
+
AggregateFunction::StateFinalize<STATE, RESULT_TYPE, OP>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>,
|
246
|
+
nullptr, AggregateFunction::StateDestroy<STATE, OP>);
|
284
247
|
}
|
285
248
|
|
286
249
|
template <typename INPUT_TYPE, typename SAVE_TYPE>
|