duckdb 0.8.2-dev145.0 → 0.8.2-dev1493.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 +42 -5
- 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/file_system.cpp +19 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
- package/src/duckdb/src/common/local_file_system.cpp +2 -2
- 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/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_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +22 -3
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +2 -2
- 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_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/enum_util.hpp +8 -0
- 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/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/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/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 +3 -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 +30 -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 +8 -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 +3 -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 +64 -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 +5 -0
- 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/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_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 +8 -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
@@ -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;
|
@@ -32,6 +32,8 @@ public:
|
|
32
32
|
//! Recursive CTEs require at least one ChunkScan, referencing the working_table.
|
33
33
|
//! This data structure is used to establish it.
|
34
34
|
unordered_map<idx_t, std::shared_ptr<ColumnDataCollection>> recursive_cte_tables;
|
35
|
+
//! Materialized CTE ids must be collected.
|
36
|
+
unordered_set<idx_t> materialized_ctes;
|
35
37
|
|
36
38
|
public:
|
37
39
|
//! Creates a plan from the logical operator. This involves resolving column bindings and generating physical
|
@@ -87,6 +89,7 @@ protected:
|
|
87
89
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalSimple &op);
|
88
90
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalUnnest &op);
|
89
91
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalRecursiveCTE &op);
|
92
|
+
unique_ptr<PhysicalOperator> CreatePlan(LogicalMaterializedCTE &op);
|
90
93
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalCTERef &op);
|
91
94
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalPivot &op);
|
92
95
|
|
@@ -8,10 +8,10 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/execution/operator/aggregate/grouped_aggregate_data.hpp"
|
11
12
|
#include "duckdb/execution/partitionable_hashtable.hpp"
|
12
|
-
#include "duckdb/parser/group_by_node.hpp"
|
13
13
|
#include "duckdb/execution/physical_operator.hpp"
|
14
|
-
#include "duckdb/
|
14
|
+
#include "duckdb/parser/group_by_node.hpp"
|
15
15
|
|
16
16
|
namespace duckdb {
|
17
17
|
class BufferManager;
|
@@ -57,11 +57,18 @@ public:
|
|
57
57
|
OperatorSourceInput &input) const;
|
58
58
|
|
59
59
|
static void SetMultiScan(GlobalSinkState &state);
|
60
|
-
bool ForceSingleHT(GlobalSinkState &state)
|
60
|
+
static bool ForceSingleHT(GlobalSinkState &state);
|
61
|
+
static bool AnyPartitioned(GlobalSinkState &state);
|
62
|
+
static void GetRepartitionInfo(ClientContext &context, GlobalSinkState &state, idx_t &repartition_radix_bits,
|
63
|
+
idx_t &concurrent_repartitions, idx_t &tasks_per_partition);
|
61
64
|
|
62
65
|
private:
|
63
66
|
void SetGroupingValues();
|
64
67
|
void PopulateGroupChunk(DataChunk &group_chunk, DataChunk &input_chunk) const;
|
68
|
+
void InitializeFinalizedHTs(ClientContext &context, GlobalSinkState &state) const;
|
69
|
+
void ScheduleRepartitionTasks(Executor &executor, const shared_ptr<Event> &event, GlobalSinkState &state,
|
70
|
+
vector<shared_ptr<Task>> &tasks, const idx_t repartition_radix_bits,
|
71
|
+
const idx_t concurrent_repartitions, const idx_t tasks_per_partition) const;
|
65
72
|
};
|
66
73
|
|
67
74
|
} // namespace duckdb
|
@@ -18,12 +18,13 @@ namespace duckdb {
|
|
18
18
|
|
19
19
|
class WindowAggregateState {
|
20
20
|
public:
|
21
|
-
WindowAggregateState(AggregateObject aggr, const LogicalType &result_type_p);
|
21
|
+
WindowAggregateState(AggregateObject aggr, const LogicalType &result_type_p, idx_t partition_count);
|
22
22
|
virtual ~WindowAggregateState();
|
23
23
|
|
24
24
|
virtual void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered);
|
25
25
|
virtual void Finalize();
|
26
26
|
virtual void Compute(Vector &result, idx_t rid, idx_t start, idx_t end);
|
27
|
+
virtual void Evaluate(const idx_t *begins, const idx_t *ends, Vector &result, idx_t count);
|
27
28
|
|
28
29
|
protected:
|
29
30
|
void AggregateInit();
|
@@ -33,20 +34,28 @@ protected:
|
|
33
34
|
//! The result type of the window function
|
34
35
|
LogicalType result_type;
|
35
36
|
|
37
|
+
//! The cardinality of the partition
|
38
|
+
const idx_t partition_count;
|
39
|
+
//! The size of a single aggregate state
|
40
|
+
const idx_t state_size;
|
36
41
|
//! Data pointer that contains a single state, used for intermediate window segment aggregation
|
37
42
|
vector<data_t> state;
|
38
43
|
//! Reused result state container for the window functions
|
39
|
-
Vector
|
40
|
-
//!
|
41
|
-
Vector statep;
|
42
|
-
//! Input data chunk, used for intermediate window segment aggregation
|
44
|
+
Vector statef;
|
45
|
+
//! Partition data chunk
|
43
46
|
DataChunk inputs;
|
47
|
+
|
48
|
+
//! The filtered rows in inputs.
|
49
|
+
vector<validity_t> filter_bits;
|
50
|
+
ValidityMask filter_mask;
|
51
|
+
idx_t filter_pos;
|
52
|
+
|
53
|
+
//! Allocator for aggregates
|
54
|
+
ArenaAllocator allocator;
|
44
55
|
};
|
45
56
|
|
46
57
|
class WindowConstantAggregate : public WindowAggregateState {
|
47
58
|
public:
|
48
|
-
static bool IsConstantAggregate(const BoundWindowExpression &wexpr);
|
49
|
-
|
50
59
|
WindowConstantAggregate(AggregateObject aggr, const LogicalType &result_type_p, const ValidityMask &partition_mask,
|
51
60
|
const idx_t count);
|
52
61
|
~WindowConstantAggregate() override {
|
@@ -54,7 +63,7 @@ public:
|
|
54
63
|
|
55
64
|
void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered) override;
|
56
65
|
void Finalize() override;
|
57
|
-
void
|
66
|
+
void Evaluate(const idx_t *begins, const idx_t *ends, Vector &result, idx_t count) override;
|
58
67
|
|
59
68
|
private:
|
60
69
|
//! Partition starts
|
@@ -65,52 +74,57 @@ private:
|
|
65
74
|
idx_t partition;
|
66
75
|
//! The current input row being built/read
|
67
76
|
idx_t row;
|
77
|
+
//! A vector of pointers to "state", used for intermediate window segment aggregation
|
78
|
+
Vector statep;
|
79
|
+
//! Shared SV for evaluation
|
80
|
+
SelectionVector matches;
|
81
|
+
};
|
82
|
+
|
83
|
+
class WindowCustomAggregate : public WindowAggregateState {
|
84
|
+
public:
|
85
|
+
WindowCustomAggregate(AggregateObject aggr, const LogicalType &result_type_p, idx_t partition_count);
|
86
|
+
~WindowCustomAggregate() override;
|
87
|
+
|
88
|
+
void Compute(Vector &result, idx_t rid, idx_t start, idx_t end) override;
|
89
|
+
|
90
|
+
private:
|
91
|
+
//! The frame boundaries, used for the window functions
|
92
|
+
FrameBounds frame;
|
68
93
|
};
|
69
94
|
|
70
|
-
class WindowSegmentTree {
|
95
|
+
class WindowSegmentTree : public WindowAggregateState {
|
71
96
|
public:
|
72
97
|
using FrameBounds = std::pair<idx_t, idx_t>;
|
73
98
|
|
74
|
-
WindowSegmentTree(AggregateObject aggr, const LogicalType &result_type,
|
75
|
-
|
76
|
-
~WindowSegmentTree();
|
99
|
+
WindowSegmentTree(AggregateObject aggr, const LogicalType &result_type, idx_t count, WindowAggregationMode mode_p);
|
100
|
+
~WindowSegmentTree() override;
|
77
101
|
|
78
|
-
|
79
|
-
void
|
102
|
+
void Finalize() override;
|
103
|
+
void Evaluate(const idx_t *begins, const idx_t *ends, Vector &result, idx_t count) override;
|
80
104
|
|
81
105
|
private:
|
82
106
|
void ConstructTree();
|
83
|
-
void ExtractFrame(idx_t begin, idx_t end);
|
84
|
-
void
|
85
|
-
void
|
86
|
-
void AggegateFinal(Vector &result, idx_t rid);
|
107
|
+
void ExtractFrame(idx_t begin, idx_t end, data_ptr_t current_state);
|
108
|
+
void FlushStates(bool combining);
|
109
|
+
void WindowSegmentValue(idx_t l_idx, idx_t begin, idx_t end, data_ptr_t current_state);
|
87
110
|
|
88
|
-
//! Use the window API, if available
|
89
|
-
inline bool UseWindowAPI() const {
|
90
|
-
return mode < WindowAggregationMode::COMBINE;
|
91
|
-
}
|
92
111
|
//! Use the combine API, if available
|
93
112
|
inline bool UseCombineAPI() const {
|
94
113
|
return mode < WindowAggregationMode::SEPARATE;
|
95
114
|
}
|
96
115
|
|
97
|
-
//!
|
98
|
-
|
99
|
-
//! The result type of the window function
|
100
|
-
LogicalType result_type;
|
101
|
-
|
102
|
-
//! Data pointer that contains a single state, used for intermediate window segment aggregation
|
103
|
-
vector<data_t> state;
|
104
|
-
//! Input data chunk, used for intermediate window segment aggregation
|
105
|
-
DataChunk inputs;
|
116
|
+
//! Input data chunk, used for leaf segment aggregation
|
117
|
+
DataChunk leaves;
|
106
118
|
//! The filtered rows in inputs.
|
107
119
|
SelectionVector filter_sel;
|
108
120
|
//! A vector of pointers to "state", used for intermediate window segment aggregation
|
109
121
|
Vector statep;
|
110
122
|
//! The frame boundaries, used for the window functions
|
111
123
|
FrameBounds frame;
|
112
|
-
//! Reused
|
113
|
-
Vector
|
124
|
+
//! Reused state pointers for combining segment tree levels
|
125
|
+
Vector statel;
|
126
|
+
//! Count of buffered values
|
127
|
+
idx_t flush_count;
|
114
128
|
|
115
129
|
//! The actual window segment tree: an array of aggregate states that represent all the intermediate nodes
|
116
130
|
unsafe_unique_array<data_t> levels_flat_native;
|
@@ -120,17 +134,14 @@ private:
|
|
120
134
|
//! The total number of internal nodes of the tree, stored in levels_flat_native
|
121
135
|
idx_t internal_nodes;
|
122
136
|
|
123
|
-
//! The (sorted) input chunk collection on which the tree is built
|
124
|
-
DataChunk *input_ref;
|
125
|
-
|
126
|
-
//! The filtered rows in input_ref.
|
127
|
-
const ValidityMask &filter_mask;
|
128
|
-
|
129
137
|
//! Use the window API, if available
|
130
138
|
WindowAggregationMode mode;
|
131
139
|
|
140
|
+
//! Aggregate allocator
|
141
|
+
ArenaAllocator allocator;
|
142
|
+
|
132
143
|
// TREE_FANOUT needs to cleanly divide STANDARD_VECTOR_SIZE
|
133
|
-
static constexpr idx_t TREE_FANOUT =
|
144
|
+
static constexpr idx_t TREE_FANOUT = 16;
|
134
145
|
};
|
135
146
|
|
136
147
|
} // namespace duckdb
|
@@ -8,10 +8,10 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/common/vector_operations/aggregate_executor.hpp"
|
11
12
|
#include "duckdb/function/aggregate_state.hpp"
|
12
13
|
#include "duckdb/planner/bound_result_modifier.hpp"
|
13
14
|
#include "duckdb/planner/expression.hpp"
|
14
|
-
#include "duckdb/common/vector_operations/aggregate_executor.hpp"
|
15
15
|
|
16
16
|
namespace duckdb {
|
17
17
|
|
@@ -21,11 +21,11 @@ enum class AggregateOrderDependent : uint8_t { ORDER_DEPENDENT = 1, NOT_ORDER_DE
|
|
21
21
|
class BoundAggregateExpression;
|
22
22
|
|
23
23
|
struct AggregateInputData {
|
24
|
-
AggregateInputData(optional_ptr<FunctionData> bind_data_p,
|
24
|
+
AggregateInputData(optional_ptr<FunctionData> bind_data_p, ArenaAllocator &allocator_p)
|
25
25
|
: bind_data(bind_data_p), allocator(allocator_p) {
|
26
26
|
}
|
27
27
|
optional_ptr<FunctionData> bind_data;
|
28
|
-
|
28
|
+
ArenaAllocator &allocator;
|
29
29
|
};
|
30
30
|
|
31
31
|
struct AggregateUnaryInput {
|
package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/function/scalar/compressed_materialization_functions.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/function/built_in_functions.hpp"
|
12
|
+
#include "duckdb/function/function_set.hpp"
|
13
|
+
|
14
|
+
namespace duckdb {
|
15
|
+
|
16
|
+
struct CompressedMaterializationFunctions {
|
17
|
+
//! The types we compress integral types to
|
18
|
+
static const vector<LogicalType> IntegralTypes();
|
19
|
+
//! The types we compress strings to
|
20
|
+
static const vector<LogicalType> StringTypes();
|
21
|
+
|
22
|
+
static unique_ptr<FunctionData> Bind(ClientContext &context, ScalarFunction &bound_function,
|
23
|
+
vector<unique_ptr<Expression>> &arguments);
|
24
|
+
};
|
25
|
+
|
26
|
+
//! Needed for (de)serialization without binding
|
27
|
+
enum class CompressedMaterializationDirection : uint8_t { INVALID = 0, COMPRESS = 1, DECOMPRESS = 2 };
|
28
|
+
|
29
|
+
struct CMIntegralCompressFun {
|
30
|
+
static ScalarFunction GetFunction(const LogicalType &input_type, const LogicalType &result_type);
|
31
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
32
|
+
};
|
33
|
+
|
34
|
+
struct CMIntegralDecompressFun {
|
35
|
+
static ScalarFunction GetFunction(const LogicalType &input_type, const LogicalType &result_type);
|
36
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
37
|
+
};
|
38
|
+
|
39
|
+
struct CMStringCompressFun {
|
40
|
+
static ScalarFunction GetFunction(const LogicalType &result_type);
|
41
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
42
|
+
};
|
43
|
+
|
44
|
+
struct CMStringDecompressFun {
|
45
|
+
static ScalarFunction GetFunction(const LogicalType &input_type);
|
46
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
47
|
+
};
|
48
|
+
|
49
|
+
} // namespace duckdb
|
@@ -130,7 +130,7 @@ void ListContainsOrPosition(DataChunk &args, Vector &result) {
|
|
130
130
|
TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result, true);
|
131
131
|
break;
|
132
132
|
default:
|
133
|
-
throw NotImplementedException("This function has not been implemented for
|
133
|
+
throw NotImplementedException("This function has not been implemented for logical type %s",
|
134
134
|
TypeIdToString(physical_type));
|
135
135
|
}
|
136
136
|
}
|
@@ -99,6 +99,11 @@ struct ListPositionFun {
|
|
99
99
|
static void RegisterFunction(BuiltinFunctions &set);
|
100
100
|
};
|
101
101
|
|
102
|
+
struct ListResizeFun {
|
103
|
+
static ScalarFunction GetFunction();
|
104
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
105
|
+
};
|
106
|
+
|
102
107
|
struct StructExtractFun {
|
103
108
|
static ScalarFunction GetFunction();
|
104
109
|
static void RegisterFunction(BuiltinFunctions &set);
|
@@ -83,12 +83,14 @@ struct LengthFun {
|
|
83
83
|
};
|
84
84
|
|
85
85
|
struct LikeFun {
|
86
|
+
static ScalarFunction GetLikeFunction();
|
86
87
|
static void RegisterFunction(BuiltinFunctions &set);
|
87
88
|
DUCKDB_API static bool Glob(const char *s, idx_t slen, const char *pattern, idx_t plen,
|
88
89
|
bool allow_question_mark = true);
|
89
90
|
};
|
90
91
|
|
91
92
|
struct LikeEscapeFun {
|
93
|
+
static ScalarFunction GetLikeEscapeFun();
|
92
94
|
static void RegisterFunction(BuiltinFunctions &set);
|
93
95
|
};
|
94
96
|
|
@@ -96,6 +96,9 @@ struct ClientConfig {
|
|
96
96
|
//! The maximum amount of pivot columns
|
97
97
|
idx_t pivot_limit = 100000;
|
98
98
|
|
99
|
+
//! The threshold at which we switch from using filtered aggregates to LIST with a dedicated pivot operator
|
100
|
+
idx_t pivot_filter_threshold = 10;
|
101
|
+
|
99
102
|
//! Whether or not the "/" division operator defaults to integer division or floating point division
|
100
103
|
bool integer_division = false;
|
101
104
|
|
@@ -158,6 +158,8 @@ struct DBConfigOptions {
|
|
158
158
|
bool lock_configuration = false;
|
159
159
|
//! Whether to print bindings when printing the plan (debug mode only)
|
160
160
|
static bool debug_print_bindings;
|
161
|
+
//! The peak allocation threshold at which to flush the allocator after completing a task (1 << 27, ~128MB)
|
162
|
+
idx_t allocator_flush_threshold = 134217728;
|
161
163
|
|
162
164
|
bool operator==(const DBConfigOptions &other) const;
|
163
165
|
};
|
@@ -169,8 +169,7 @@ public:
|
|
169
169
|
template <typename TR, typename... Args>
|
170
170
|
void CreateScalarFunction(const string &name, vector<LogicalType> args, LogicalType ret_type,
|
171
171
|
TR (*udf_func)(Args...)) {
|
172
|
-
scalar_function_t function =
|
173
|
-
UDFWrapper::CreateScalarFunction<TR, Args...>(name, args, std::move(ret_type), udf_func);
|
172
|
+
scalar_function_t function = UDFWrapper::CreateScalarFunction<TR, Args...>(name, args, ret_type, udf_func);
|
174
173
|
UDFWrapper::RegisterFunction(name, args, ret_type, function, *context);
|
175
174
|
}
|
176
175
|
|
@@ -9,15 +9,18 @@
|
|
9
9
|
#pragma once
|
10
10
|
|
11
11
|
#include "duckdb/main/relation.hpp"
|
12
|
+
#include "duckdb/common/enums/joinref_type.hpp"
|
12
13
|
|
13
14
|
namespace duckdb {
|
14
15
|
|
15
16
|
class CrossProductRelation : public Relation {
|
16
17
|
public:
|
17
|
-
DUCKDB_API CrossProductRelation(shared_ptr<Relation> left, shared_ptr<Relation> right
|
18
|
+
DUCKDB_API CrossProductRelation(shared_ptr<Relation> left, shared_ptr<Relation> right,
|
19
|
+
JoinRefType join_ref_type = JoinRefType::CROSS);
|
18
20
|
|
19
21
|
shared_ptr<Relation> left;
|
20
22
|
shared_ptr<Relation> right;
|
23
|
+
JoinRefType ref_type;
|
21
24
|
vector<ColumnDefinition> columns;
|
22
25
|
|
23
26
|
public:
|