duckdb 0.8.2-dev150.0 → 0.8.2-dev1559.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_structure.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
- 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 +192 -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 +5 -11
- 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.cpp +8 -655
- 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 +414 -283
- 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 +13 -22
- 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/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/copy_csv.cpp +8 -1
- package/src/duckdb/src/function/table/read_csv.cpp +100 -17
- package/src/duckdb/src/function/table/table_scan.cpp +9 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -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/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/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.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 +2 -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/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/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 +96 -89
- package/src/duckdb/src/main/extension/extension_install.cpp +6 -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 +61 -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/test_all_types.test.ts +233 -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
@@ -8,10 +8,9 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/execution/index/art/art.hpp"
|
12
11
|
#include "duckdb/execution/index/art/fixed_size_allocator.hpp"
|
12
|
+
#include "duckdb/execution/index/art/art.hpp"
|
13
13
|
#include "duckdb/execution/index/art/node.hpp"
|
14
|
-
#include "duckdb/execution/index/art/prefix.hpp"
|
15
14
|
|
16
15
|
namespace duckdb {
|
17
16
|
|
@@ -20,8 +19,6 @@ class Node16 {
|
|
20
19
|
public:
|
21
20
|
//! Number of non-null children
|
22
21
|
uint8_t count;
|
23
|
-
//! Compressed path (prefix)
|
24
|
-
Prefix prefix;
|
25
22
|
//! Array containing all partial key bytes
|
26
23
|
uint8_t key[Node::NODE_16_CAPACITY];
|
27
24
|
//! ART node pointers to the child nodes
|
@@ -57,10 +54,10 @@ public:
|
|
57
54
|
//! Get the first child that is greater or equal to the specific byte
|
58
55
|
optional_ptr<Node> GetNextChild(uint8_t &byte);
|
59
56
|
|
60
|
-
//! Serialize
|
57
|
+
//! Serialize this node
|
61
58
|
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
62
59
|
//! Deserialize this node
|
63
|
-
void Deserialize(
|
60
|
+
void Deserialize(MetaBlockReader &reader);
|
64
61
|
|
65
62
|
//! Vacuum the children of the node
|
66
63
|
void Vacuum(ART &art, const ARTFlags &flags);
|
@@ -8,10 +8,9 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/execution/index/art/art.hpp"
|
12
11
|
#include "duckdb/execution/index/art/fixed_size_allocator.hpp"
|
12
|
+
#include "duckdb/execution/index/art/art.hpp"
|
13
13
|
#include "duckdb/execution/index/art/node.hpp"
|
14
|
-
#include "duckdb/execution/index/art/prefix.hpp"
|
15
14
|
|
16
15
|
namespace duckdb {
|
17
16
|
|
@@ -20,8 +19,6 @@ class Node256 {
|
|
20
19
|
public:
|
21
20
|
//! Number of non-null children
|
22
21
|
uint16_t count;
|
23
|
-
//! Compressed path (prefix)
|
24
|
-
Prefix prefix;
|
25
22
|
//! ART node pointers to the child nodes
|
26
23
|
Node children[Node::NODE_256_CAPACITY];
|
27
24
|
|
@@ -60,10 +57,10 @@ public:
|
|
60
57
|
//! Get the first child that is greater or equal to the specific byte
|
61
58
|
optional_ptr<Node> GetNextChild(uint8_t &byte);
|
62
59
|
|
63
|
-
//! Serialize
|
60
|
+
//! Serialize this node
|
64
61
|
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
65
62
|
//! Deserialize this node
|
66
|
-
void Deserialize(
|
63
|
+
void Deserialize(MetaBlockReader &reader);
|
67
64
|
|
68
65
|
//! Vacuum the children of the node
|
69
66
|
void Vacuum(ART &art, const ARTFlags &flags);
|
@@ -8,10 +8,9 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/execution/index/art/art.hpp"
|
12
11
|
#include "duckdb/execution/index/art/fixed_size_allocator.hpp"
|
12
|
+
#include "duckdb/execution/index/art/art.hpp"
|
13
13
|
#include "duckdb/execution/index/art/node.hpp"
|
14
|
-
#include "duckdb/execution/index/art/prefix.hpp"
|
15
14
|
|
16
15
|
namespace duckdb {
|
17
16
|
|
@@ -20,8 +19,6 @@ class Node4 {
|
|
20
19
|
public:
|
21
20
|
//! Number of non-null children
|
22
21
|
uint8_t count;
|
23
|
-
//! Compressed path (prefix)
|
24
|
-
Prefix prefix;
|
25
22
|
//! Array containing all partial key bytes
|
26
23
|
uint8_t key[Node::NODE_4_CAPACITY];
|
27
24
|
//! ART node pointers to the child nodes
|
@@ -39,13 +36,13 @@ public:
|
|
39
36
|
//! Initializes all fields of the node while shrinking a Node16 to a Node4
|
40
37
|
static Node4 &ShrinkNode16(ART &art, Node &node4, Node &node16);
|
41
38
|
|
42
|
-
//! Initializes a merge by incrementing the buffer IDs of the
|
39
|
+
//! Initializes a merge by incrementing the buffer IDs of the child nodes
|
43
40
|
void InitializeMerge(ART &art, const ARTFlags &flags);
|
44
41
|
|
45
42
|
//! Insert a child node at byte
|
46
43
|
static void InsertChild(ART &art, Node &node, const uint8_t byte, const Node child);
|
47
44
|
//! Delete the child node at the respective byte
|
48
|
-
static void DeleteChild(ART &art, Node &node, const uint8_t byte);
|
45
|
+
static void DeleteChild(ART &art, Node &node, Node &prefix, const uint8_t byte);
|
49
46
|
|
50
47
|
//! Replace the child node at the respective byte
|
51
48
|
void ReplaceChild(const uint8_t byte, const Node child);
|
@@ -55,10 +52,10 @@ public:
|
|
55
52
|
//! Get the first child that is greater or equal to the specific byte
|
56
53
|
optional_ptr<Node> GetNextChild(uint8_t &byte);
|
57
54
|
|
58
|
-
//! Serialize
|
55
|
+
//! Serialize this node
|
59
56
|
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
60
57
|
//! Deserialize this node
|
61
|
-
void Deserialize(
|
58
|
+
void Deserialize(MetaBlockReader &reader);
|
62
59
|
|
63
60
|
//! Vacuum the children of the node
|
64
61
|
void Vacuum(ART &art, const ARTFlags &flags);
|
@@ -8,10 +8,9 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/execution/index/art/art.hpp"
|
12
11
|
#include "duckdb/execution/index/art/fixed_size_allocator.hpp"
|
12
|
+
#include "duckdb/execution/index/art/art.hpp"
|
13
13
|
#include "duckdb/execution/index/art/node.hpp"
|
14
|
-
#include "duckdb/execution/index/art/prefix.hpp"
|
15
14
|
|
16
15
|
namespace duckdb {
|
17
16
|
|
@@ -21,8 +20,6 @@ class Node48 {
|
|
21
20
|
public:
|
22
21
|
//! Number of non-null children
|
23
22
|
uint8_t count;
|
24
|
-
//! Compressed path (prefix)
|
25
|
-
Prefix prefix;
|
26
23
|
//! Array containing all possible partial key bytes, those not set have an EMPTY_MARKER
|
27
24
|
uint8_t child_index[Node::NODE_256_CAPACITY];
|
28
25
|
//! ART node pointers to the child nodes
|
@@ -67,10 +64,10 @@ public:
|
|
67
64
|
//! Get the first child that is greater or equal to the specific byte
|
68
65
|
optional_ptr<Node> GetNextChild(uint8_t &byte);
|
69
66
|
|
70
|
-
//! Serialize
|
67
|
+
//! Serialize this node
|
71
68
|
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
72
69
|
//! Deserialize this node
|
73
|
-
void Deserialize(
|
70
|
+
void Deserialize(MetaBlockReader &reader);
|
74
71
|
|
75
72
|
//! Vacuum the children of the node
|
76
73
|
void Vacuum(ART &art, const ARTFlags &flags);
|
@@ -7,78 +7,89 @@
|
|
7
7
|
//===----------------------------------------------------------------------===//
|
8
8
|
#pragma once
|
9
9
|
|
10
|
+
#include "duckdb/execution/index/art/art.hpp"
|
10
11
|
#include "duckdb/execution/index/art/node.hpp"
|
11
12
|
|
12
13
|
namespace duckdb {
|
13
14
|
|
14
15
|
// classes
|
15
16
|
class ARTKey;
|
16
|
-
class PrefixSegment;
|
17
17
|
|
18
|
+
//! The Prefix is a special node type that contains up to PREFIX_SIZE bytes, and one byte for the count,
|
19
|
+
//! and a Node pointer. This pointer either points to another prefix
|
20
|
+
//! node or the 'actual' ART node.
|
18
21
|
class Prefix {
|
19
22
|
public:
|
20
|
-
//!
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
Node ptr;
|
25
|
-
//! Inlined prefix bytes
|
26
|
-
uint8_t inlined[Node::PREFIX_INLINE_BYTES];
|
27
|
-
} data;
|
23
|
+
//! Up to PREFIX_SIZE bytes of prefix data and the count
|
24
|
+
uint8_t data[Node::PREFIX_SIZE + 1];
|
25
|
+
//! A pointer to the next ART node
|
26
|
+
Node ptr;
|
28
27
|
|
29
28
|
public:
|
30
|
-
//!
|
31
|
-
|
32
|
-
//!
|
33
|
-
|
34
|
-
|
29
|
+
//! Get a new empty prefix node, might cause a new buffer allocation
|
30
|
+
static Prefix &New(ART &art, Node &node);
|
31
|
+
//! Create a new prefix node containing a single byte and a pointer to a next node
|
32
|
+
static Prefix &New(ART &art, Node &node, uint8_t byte, Node next);
|
33
|
+
//! Get a new chain of prefix nodes, might cause new buffer allocations,
|
34
|
+
//! with the node parameter holding the tail of the chain
|
35
|
+
static void New(ART &art, reference<Node> &node, const ARTKey &key, const uint32_t depth, uint32_t count);
|
36
|
+
//! Free the node (and its subtree)
|
37
|
+
static void Free(ART &art, Node &node);
|
38
|
+
//! Get a reference to the prefix
|
39
|
+
static inline Prefix &Get(const ART &art, const Node ptr) {
|
40
|
+
return *Node::GetAllocator(art, NType::PREFIX).Get<Prefix>(ptr);
|
35
41
|
}
|
36
|
-
//! Initialize a prefix from an ART key
|
37
|
-
void Initialize(ART &art, const ARTKey &key, const uint32_t depth, const uint32_t count_p);
|
38
|
-
//! Initialize a prefix from another prefix up to count
|
39
|
-
void Initialize(ART &art, const Prefix &other, const uint32_t count_p);
|
40
42
|
|
41
|
-
//! Initializes a merge by incrementing the buffer
|
42
|
-
void InitializeMerge(ART &art, const
|
43
|
+
//! Initializes a merge by incrementing the buffer ID of the child node(s)
|
44
|
+
inline void InitializeMerge(ART &art, const ARTFlags &flags) {
|
45
|
+
ptr.InitializeMerge(art, flags);
|
46
|
+
}
|
43
47
|
|
44
|
-
//!
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
//! Appends a byte and a child_prefix to prefix. If there is no prefix, than it pushes the
|
49
|
+
//! byte on top of child_prefix. If there is no child_prefix, then it creates a new
|
50
|
+
//! prefix node containing that byte
|
51
|
+
static void Concatenate(ART &art, Node &prefix_node, const uint8_t byte, Node &child_prefix_node);
|
52
|
+
//! Traverse a prefix and a key until (1) encountering a non-prefix node, or (2) encountering
|
53
|
+
//! a mismatching byte, in which case depth indexes the mismatching byte in the key
|
54
|
+
static idx_t Traverse(ART &art, reference<Node> &prefix_node, const ARTKey &key, idx_t &depth);
|
55
|
+
//! Traverse two prefixes to find (1) that they match (so far), or (2) that they have a mismatching position,
|
56
|
+
//! or (3) that one prefix contains the other prefix
|
57
|
+
static bool Traverse(ART &art, reference<Node> &l_node, reference<Node> &r_node, idx_t &mismatch_position);
|
58
|
+
//! Returns the byte at position
|
59
|
+
static inline uint8_t GetByte(const ART &art, const Node &prefix_node, const idx_t position) {
|
60
|
+
auto prefix = Prefix::Get(art, prefix_node);
|
61
|
+
D_ASSERT(position < Node::PREFIX_SIZE);
|
62
|
+
D_ASSERT(position < prefix.data[Node::PREFIX_SIZE]);
|
63
|
+
return prefix.data[position];
|
49
64
|
}
|
50
|
-
//!
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
//!
|
55
|
-
|
65
|
+
//! Removes the first n bytes from the prefix and shifts all subsequent bytes in the
|
66
|
+
//! prefix node(s) by n. Frees empty prefix nodes
|
67
|
+
static void Reduce(ART &art, Node &prefix_node, const idx_t n);
|
68
|
+
//! Splits the prefix at position. prefix_node then references the ptr (if any bytes left before
|
69
|
+
//! the split), or stays unchanged (no bytes left before the split). child_node references
|
70
|
+
//! the node after the split, which is either a new prefix node, or ptr
|
71
|
+
static void Split(ART &art, reference<Node> &prefix_node, Node &child_node, idx_t position);
|
56
72
|
|
57
|
-
//!
|
58
|
-
|
59
|
-
//! Compare the key with the prefix of the node, return the position where they mismatch
|
60
|
-
uint32_t KeyMismatchPosition(const ART &art, const ARTKey &key, const uint32_t depth) const;
|
61
|
-
//! Compare this prefix to another prefix, return the position where they mismatch, or count otherwise
|
62
|
-
uint32_t MismatchPosition(const ART &art, const Prefix &other) const;
|
73
|
+
//! Returns the string representation of the node, or only traverses and verifies the node and its subtree
|
74
|
+
string VerifyAndToString(ART &art, const bool only_verify);
|
63
75
|
|
64
|
-
//! Serialize this
|
65
|
-
|
66
|
-
//! Deserialize this
|
67
|
-
void Deserialize(
|
76
|
+
//! Serialize this node
|
77
|
+
BlockPointer Serialize(ART &art, MetaBlockWriter &writer);
|
78
|
+
//! Deserialize this node
|
79
|
+
void Deserialize(MetaBlockReader &reader);
|
68
80
|
|
69
|
-
//! Vacuum the
|
70
|
-
void Vacuum(ART &art)
|
81
|
+
//! Vacuum the child of the node
|
82
|
+
inline void Vacuum(ART &art, const ARTFlags &flags) {
|
83
|
+
Node::Vacuum(art, ptr, flags);
|
84
|
+
}
|
71
85
|
|
72
86
|
private:
|
73
|
-
//!
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
//!
|
78
|
-
|
79
|
-
PrefixSegment &MoveInlinedToSegment(ART &art);
|
80
|
-
//! Inlines up to eight bytes on the first prefix segment
|
81
|
-
void MoveSegmentToInlined(ART &art);
|
87
|
+
//! Appends the byte to this prefix node, or creates a subsequent prefix node,
|
88
|
+
//! if this node is full
|
89
|
+
Prefix &Append(ART &art, const uint8_t byte);
|
90
|
+
//! Appends the other_prefix and all its subsequent prefix nodes to this prefix node.
|
91
|
+
//! Also frees all copied/appended nodes
|
92
|
+
void Append(ART &art, Node other_prefix);
|
82
93
|
};
|
83
94
|
|
84
95
|
} // namespace duckdb
|
@@ -13,8 +13,7 @@
|
|
13
13
|
|
14
14
|
namespace duckdb {
|
15
15
|
|
16
|
-
//! PhysicalAsOfJoin represents
|
17
|
-
//! two tables
|
16
|
+
//! PhysicalAsOfJoin represents an as-of join between two tables
|
18
17
|
class PhysicalAsOfJoin : public PhysicalComparisonJoin {
|
19
18
|
public:
|
20
19
|
static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::ASOF_JOIN;
|
@@ -58,7 +57,7 @@ public:
|
|
58
57
|
SourceResultType GetData(ExecutionContext &context, DataChunk &chunk, OperatorSourceInput &input) const override;
|
59
58
|
|
60
59
|
bool IsSource() const override {
|
61
|
-
return
|
60
|
+
return true;
|
62
61
|
}
|
63
62
|
bool ParallelSource() const override {
|
64
63
|
return true;
|
@@ -79,13 +78,6 @@ public:
|
|
79
78
|
bool ParallelSink() const override {
|
80
79
|
return true;
|
81
80
|
}
|
82
|
-
|
83
|
-
private:
|
84
|
-
// resolve joins that output max N elements (SEMI, ANTI, MARK)
|
85
|
-
void ResolveSimpleJoin(ExecutionContext &context, DataChunk &input, DataChunk &chunk, OperatorState &state) const;
|
86
|
-
// resolve joins that can potentially output N*M elements (INNER, LEFT, FULL)
|
87
|
-
OperatorResultType ResolveComplexJoin(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
|
88
|
-
OperatorState &state) const;
|
89
81
|
};
|
90
82
|
|
91
83
|
} // namespace duckdb
|
@@ -20,7 +20,7 @@ public:
|
|
20
20
|
static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::IE_JOIN;
|
21
21
|
|
22
22
|
public:
|
23
|
-
PhysicalIEJoin(
|
23
|
+
PhysicalIEJoin(LogicalComparisonJoin &op, unique_ptr<PhysicalOperator> left, unique_ptr<PhysicalOperator> right,
|
24
24
|
vector<JoinCondition> cond, JoinType join_type, idx_t estimated_cardinality);
|
25
25
|
|
26
26
|
vector<LogicalType> join_key_types;
|
package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp
CHANGED
@@ -22,7 +22,7 @@ public:
|
|
22
22
|
static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::PIECEWISE_MERGE_JOIN;
|
23
23
|
|
24
24
|
public:
|
25
|
-
PhysicalPiecewiseMergeJoin(
|
25
|
+
PhysicalPiecewiseMergeJoin(LogicalComparisonJoin &op, unique_ptr<PhysicalOperator> left,
|
26
26
|
unique_ptr<PhysicalOperator> right, vector<JoinCondition> cond, JoinType join_type,
|
27
27
|
idx_t estimated_cardinality);
|
28
28
|
|
@@ -89,10 +89,18 @@ public:
|
|
89
89
|
};
|
90
90
|
|
91
91
|
public:
|
92
|
-
PhysicalRangeJoin(
|
92
|
+
PhysicalRangeJoin(LogicalComparisonJoin &op, PhysicalOperatorType type, unique_ptr<PhysicalOperator> left,
|
93
93
|
unique_ptr<PhysicalOperator> right, vector<JoinCondition> cond, JoinType join_type,
|
94
94
|
idx_t estimated_cardinality);
|
95
95
|
|
96
|
+
// Projection mappings
|
97
|
+
using ProjectionMapping = vector<column_t>;
|
98
|
+
ProjectionMapping left_projection_map;
|
99
|
+
ProjectionMapping right_projection_map;
|
100
|
+
|
101
|
+
//! The full set of types (left + right child)
|
102
|
+
vector<LogicalType> unprojected_types;
|
103
|
+
|
96
104
|
public:
|
97
105
|
// Gather the result values and slice the payload columns to those values.
|
98
106
|
// Returns a buffer handle to the pinned heap block (if any)
|
@@ -102,6 +110,9 @@ public:
|
|
102
110
|
// Apply a tail condition to the current selection
|
103
111
|
static idx_t SelectJoinTail(const ExpressionType &condition, Vector &left, Vector &right,
|
104
112
|
const SelectionVector *sel, idx_t count, SelectionVector *true_sel);
|
113
|
+
|
114
|
+
//! Utility to project full width internal chunks to projected results
|
115
|
+
void ProjectResult(DataChunk &chunk, DataChunk &result) const;
|
105
116
|
};
|
106
117
|
|
107
118
|
} // namespace duckdb
|
@@ -37,7 +37,7 @@ class BaseCSVReader {
|
|
37
37
|
public:
|
38
38
|
BaseCSVReader(ClientContext &context, BufferedCSVReaderOptions options,
|
39
39
|
const vector<LogicalType> &requested_types = vector<LogicalType>());
|
40
|
-
~BaseCSVReader();
|
40
|
+
virtual ~BaseCSVReader();
|
41
41
|
|
42
42
|
ClientContext &context;
|
43
43
|
FileSystem &fs;
|
@@ -75,7 +75,7 @@ public:
|
|
75
75
|
}
|
76
76
|
|
77
77
|
//! Get the 1-indexed global line number for the given local error line
|
78
|
-
virtual idx_t GetLineError(idx_t line_error, idx_t buffer_idx) {
|
78
|
+
virtual idx_t GetLineError(idx_t line_error, idx_t buffer_idx, bool stop_at_first = true) {
|
79
79
|
return line_error + 1;
|
80
80
|
};
|
81
81
|
|
@@ -18,11 +18,12 @@ public:
|
|
18
18
|
bool CanItGetLine(idx_t file_idx, idx_t batch_idx);
|
19
19
|
|
20
20
|
//! Return the 1-indexed line number
|
21
|
-
idx_t GetLine(idx_t batch_idx, idx_t line_error = 0, idx_t file_idx = 0, idx_t cur_start = 0, bool verify = true
|
21
|
+
idx_t GetLine(idx_t batch_idx, idx_t line_error = 0, idx_t file_idx = 0, idx_t cur_start = 0, bool verify = true,
|
22
|
+
bool stop_at_first = true);
|
22
23
|
//! Verify if the CSV File was read correctly from [0,batch_idx] batches.
|
23
24
|
void Verify(idx_t file_idx, idx_t batch_idx, idx_t cur_first_pos);
|
24
|
-
//! Lines read per batch, <batch_index,count
|
25
|
-
unordered_map<idx_t, idx_t
|
25
|
+
//! Lines read per batch, <file_index, <batch_index, count>>
|
26
|
+
vector<unordered_map<idx_t, idx_t>> lines_read;
|
26
27
|
//! Set of batches that have been initialized but are not yet finished.
|
27
28
|
vector<set<idx_t>> current_batches;
|
28
29
|
//! Pointer to CSV Reader Mutex
|
@@ -55,6 +55,14 @@ struct BufferedCSVReaderOptions {
|
|
55
55
|
bool header = false;
|
56
56
|
//! Whether or not we should ignore InvalidInput errors
|
57
57
|
bool ignore_errors = false;
|
58
|
+
//! Rejects table name
|
59
|
+
string rejects_table_name;
|
60
|
+
//! Rejects table entry limit (0 = no limit)
|
61
|
+
idx_t rejects_limit = 0;
|
62
|
+
//! Columns to use as recovery key for rejected rows when reading with ignore_errors = true
|
63
|
+
vector<string> rejects_recovery_columns;
|
64
|
+
//! Index of the recovery columns
|
65
|
+
vector<idx_t> rejects_recovery_column_ids;
|
58
66
|
//! Expected number of columns
|
59
67
|
idx_t num_cols = 0;
|
60
68
|
//! Number of samples to buffer
|
@@ -155,7 +163,6 @@ struct BufferedCSVReaderOptions {
|
|
155
163
|
//! set - argument(s) to the option
|
156
164
|
//! expected_names - names expected if the option is "columns"
|
157
165
|
void SetReadOption(const string &loption, const Value &value, vector<string> &expected_names);
|
158
|
-
|
159
166
|
void SetWriteOption(const string &loption, const Value &value);
|
160
167
|
void SetDateFormat(LogicalTypeId type, const string &format, bool read_format);
|
161
168
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include "duckdb.hpp"
|
4
|
+
#ifndef DUCKDB_AMALGAMATION
|
5
|
+
#include "duckdb/storage/object_cache.hpp"
|
6
|
+
#endif
|
7
|
+
|
8
|
+
namespace duckdb {
|
9
|
+
|
10
|
+
struct ReadCSVData;
|
11
|
+
|
12
|
+
class CSVRejectsTable : public ObjectCacheEntry {
|
13
|
+
public:
|
14
|
+
CSVRejectsTable(string name) : name(name), count(0) {
|
15
|
+
}
|
16
|
+
~CSVRejectsTable() override = default;
|
17
|
+
mutex write_lock;
|
18
|
+
string name;
|
19
|
+
idx_t count;
|
20
|
+
|
21
|
+
static shared_ptr<CSVRejectsTable> GetOrCreate(ClientContext &context, const string &name);
|
22
|
+
|
23
|
+
void InitializeTable(ClientContext &context, const ReadCSVData &options);
|
24
|
+
TableCatalogEntry &GetTable(ClientContext &context);
|
25
|
+
|
26
|
+
public:
|
27
|
+
static string ObjectType() {
|
28
|
+
return "csv_rejects_table_cache";
|
29
|
+
}
|
30
|
+
|
31
|
+
string GetObjectType() override {
|
32
|
+
return ObjectType();
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
} // namespace duckdb
|
@@ -137,7 +137,7 @@ public:
|
|
137
137
|
//! Extract a single DataChunk from the CSV file and stores it in insert_chunk
|
138
138
|
void ParseCSV(DataChunk &insert_chunk);
|
139
139
|
|
140
|
-
idx_t GetLineError(idx_t line_error, idx_t buffer_idx) override;
|
140
|
+
idx_t GetLineError(idx_t line_error, idx_t buffer_idx, bool stop_at_first = true) override;
|
141
141
|
|
142
142
|
private:
|
143
143
|
//! Initialize Parser
|
@@ -22,11 +22,19 @@ public:
|
|
22
22
|
PhysicalColumnDataScan(vector<LogicalType> types, PhysicalOperatorType op_type, idx_t estimated_cardinality,
|
23
23
|
unique_ptr<ColumnDataCollection> owned_collection = nullptr);
|
24
24
|
|
25
|
+
PhysicalColumnDataScan(vector<LogicalType> types, PhysicalOperatorType op_type, idx_t estimated_cardinality,
|
26
|
+
idx_t cte_index)
|
27
|
+
: PhysicalOperator(op_type, std::move(types), estimated_cardinality), collection(nullptr),
|
28
|
+
cte_index(cte_index) {
|
29
|
+
}
|
30
|
+
|
25
31
|
// the column data collection to scan
|
26
32
|
optional_ptr<ColumnDataCollection> collection;
|
27
33
|
//! Owned column data collection, if any
|
28
34
|
unique_ptr<ColumnDataCollection> owned_collection;
|
29
35
|
|
36
|
+
idx_t cte_index;
|
37
|
+
|
30
38
|
public:
|
31
39
|
unique_ptr<GlobalSourceState> GetGlobalSourceState(ClientContext &context) const override;
|
32
40
|
SourceResultType GetData(ExecutionContext &context, DataChunk &chunk, OperatorSourceInput &input) const override;
|
@@ -35,6 +43,8 @@ public:
|
|
35
43
|
return true;
|
36
44
|
}
|
37
45
|
|
46
|
+
string ParamsToString() const override;
|
47
|
+
|
38
48
|
public:
|
39
49
|
void BuildPipelines(Pipeline ¤t, MetaPipeline &meta_pipeline) override;
|
40
50
|
};
|
@@ -12,6 +12,7 @@
|
|
12
12
|
#include "duckdb/function/table_function.hpp"
|
13
13
|
#include "duckdb/planner/table_filter.hpp"
|
14
14
|
#include "duckdb/storage/data_table.hpp"
|
15
|
+
#include "duckdb/common/extra_operator_info.hpp"
|
15
16
|
|
16
17
|
namespace duckdb {
|
17
18
|
|
@@ -28,7 +29,8 @@ public:
|
|
28
29
|
//! Table scan that immediately projects out filter columns that are unused in the remainder of the query plan
|
29
30
|
PhysicalTableScan(vector<LogicalType> types, TableFunction function, unique_ptr<FunctionData> bind_data,
|
30
31
|
vector<LogicalType> returned_types, vector<column_t> column_ids, vector<idx_t> projection_ids,
|
31
|
-
vector<string> names, unique_ptr<TableFilterSet> table_filters, idx_t estimated_cardinality
|
32
|
+
vector<string> names, unique_ptr<TableFilterSet> table_filters, idx_t estimated_cardinality,
|
33
|
+
ExtraOperatorInfo extra_info);
|
32
34
|
|
33
35
|
//! The table function
|
34
36
|
TableFunction function;
|
@@ -44,6 +46,8 @@ public:
|
|
44
46
|
vector<string> names;
|
45
47
|
//! The table filters
|
46
48
|
unique_ptr<TableFilterSet> table_filters;
|
49
|
+
//! Currently stores any filters applied to file names (as strings)
|
50
|
+
ExtraOperatorInfo extra_info;
|
47
51
|
|
48
52
|
public:
|
49
53
|
string GetName() const override;
|
@@ -0,0 +1,62 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/execution/operator/set/physical_cte.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/common/types/column/column_data_collection.hpp"
|
12
|
+
#include "duckdb/execution/physical_operator.hpp"
|
13
|
+
|
14
|
+
namespace duckdb {
|
15
|
+
|
16
|
+
class RecursiveCTEState;
|
17
|
+
|
18
|
+
class PhysicalCTE : public PhysicalOperator {
|
19
|
+
public:
|
20
|
+
static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::CTE;
|
21
|
+
|
22
|
+
public:
|
23
|
+
PhysicalCTE(string ctename, idx_t table_index, vector<LogicalType> types, unique_ptr<PhysicalOperator> top,
|
24
|
+
unique_ptr<PhysicalOperator> bottom, idx_t estimated_cardinality);
|
25
|
+
~PhysicalCTE() override;
|
26
|
+
|
27
|
+
std::shared_ptr<ColumnDataCollection> working_table;
|
28
|
+
shared_ptr<MetaPipeline> recursive_meta_pipeline;
|
29
|
+
|
30
|
+
idx_t table_index;
|
31
|
+
string ctename;
|
32
|
+
|
33
|
+
public:
|
34
|
+
// Source interface
|
35
|
+
SourceResultType GetData(ExecutionContext &context, DataChunk &chunk, OperatorSourceInput &input) const override;
|
36
|
+
|
37
|
+
bool IsSource() const override {
|
38
|
+
return true;
|
39
|
+
}
|
40
|
+
|
41
|
+
public:
|
42
|
+
// Sink interface
|
43
|
+
SinkResultType Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const override;
|
44
|
+
|
45
|
+
unique_ptr<GlobalSinkState> GetGlobalSinkState(ClientContext &context) const override;
|
46
|
+
|
47
|
+
bool IsSink() const override {
|
48
|
+
return true;
|
49
|
+
}
|
50
|
+
|
51
|
+
string ParamsToString() const override;
|
52
|
+
|
53
|
+
public:
|
54
|
+
void BuildPipelines(Pipeline ¤t, MetaPipeline &meta_pipeline) override;
|
55
|
+
|
56
|
+
vector<const_reference<PhysicalOperator>> GetSources() const override;
|
57
|
+
|
58
|
+
private:
|
59
|
+
void ExecuteRecursivePipelines(ExecutionContext &context) const;
|
60
|
+
};
|
61
|
+
|
62
|
+
} // namespace duckdb
|
@@ -20,10 +20,14 @@ public:
|
|
20
20
|
static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::RECURSIVE_CTE;
|
21
21
|
|
22
22
|
public:
|
23
|
-
PhysicalRecursiveCTE(vector<LogicalType> types, bool union_all,
|
24
|
-
unique_ptr<PhysicalOperator>
|
23
|
+
PhysicalRecursiveCTE(string ctename, idx_t table_index, vector<LogicalType> types, bool union_all,
|
24
|
+
unique_ptr<PhysicalOperator> top, unique_ptr<PhysicalOperator> bottom,
|
25
|
+
idx_t estimated_cardinality);
|
25
26
|
~PhysicalRecursiveCTE() override;
|
26
27
|
|
28
|
+
string ctename;
|
29
|
+
idx_t table_index;
|
30
|
+
|
27
31
|
bool union_all;
|
28
32
|
std::shared_ptr<ColumnDataCollection> working_table;
|
29
33
|
shared_ptr<MetaPipeline> recursive_meta_pipeline;
|
@@ -46,6 +50,8 @@ public:
|
|
46
50
|
return true;
|
47
51
|
}
|
48
52
|
|
53
|
+
string ParamsToString() const override;
|
54
|
+
|
49
55
|
public:
|
50
56
|
void BuildPipelines(Pipeline ¤t, MetaPipeline &meta_pipeline) override;
|
51
57
|
|
@@ -33,14 +33,18 @@ public:
|
|
33
33
|
vector<BoundAggregateExpression *> bindings_p);
|
34
34
|
|
35
35
|
idx_t AddChunk(DataChunk &groups, DataChunk &payload, bool do_partition, const unsafe_vector<idx_t> &filter);
|
36
|
-
void Partition();
|
36
|
+
void Partition(bool sink_done);
|
37
37
|
bool IsPartitioned();
|
38
38
|
|
39
39
|
HashTableList GetPartition(idx_t partition);
|
40
40
|
HashTableList GetUnpartitioned();
|
41
|
+
idx_t GetPartitionCount(idx_t partition) const;
|
42
|
+
idx_t GetPartitionSize(idx_t partition) const;
|
41
43
|
|
42
44
|
void Finalize();
|
43
45
|
|
46
|
+
void Append(GroupedAggregateHashTable &ht);
|
47
|
+
|
44
48
|
private:
|
45
49
|
ClientContext &context;
|
46
50
|
Allocator &allocator;
|