duckdb 0.8.2-dev11.0 → 0.8.2-dev1212.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 +14 -12
- package/binding.gyp.in +1 -1
- package/configure.py +1 -1
- package/duckdb_extension_config.cmake +10 -0
- package/lib/duckdb.d.ts +59 -0
- package/lib/duckdb.js +21 -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 +5 -7
- 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 +191 -19
- 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/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/arrow/arrow_wrapper.cpp +0 -12
- 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 +15 -0
- package/src/duckdb/src/common/local_file_system.cpp +2 -2
- package/src/duckdb/src/common/multi_file_reader.cpp +181 -18
- package/src/duckdb/src/common/radix_partitioning.cpp +27 -9
- 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/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/vector.cpp +15 -14
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +6 -4
- 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 +0 -17
- 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_batch_insert.cpp +3 -2
- 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/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_operator.cpp +17 -14
- 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_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/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/system/test_all_types.cpp +38 -18
- 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/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/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/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/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/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/scalar/date_functions.hpp +24 -6
- 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/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_operator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +1 -1
- 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/settings.hpp +21 -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/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/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_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 +2 -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/settings/settings.cpp +40 -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/pipeline_executor.cpp +7 -6
- 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/lambda_expression.cpp +1 -1
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
- package/src/duckdb/src/parser/query_node/cte_node.cpp +75 -0
- package/src/duckdb/src/parser/query_node.cpp +18 -1
- package/src/duckdb/src/parser/tableref/joinref.cpp +3 -0
- 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/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 -50
- 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_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/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/storage_manager.cpp +7 -2
- 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_node.hpp +1 -0
- package/src/statement.cpp +104 -4
- package/test/columns.test.ts +243 -0
- 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
@@ -74,7 +74,6 @@ public:
|
|
74
74
|
RowGroupCollection &GetCollection() {
|
75
75
|
return collection.get();
|
76
76
|
}
|
77
|
-
DatabaseInstance &GetDatabase();
|
78
77
|
BlockManager &GetBlockManager();
|
79
78
|
DataTableInfo &GetTableInfo();
|
80
79
|
|
@@ -82,7 +81,7 @@ public:
|
|
82
81
|
ExpressionExecutor &executor, CollectionScanState &scan_state,
|
83
82
|
DataChunk &scan_chunk);
|
84
83
|
unique_ptr<RowGroup> AddColumn(RowGroupCollection &collection, ColumnDefinition &new_column,
|
85
|
-
ExpressionExecutor &executor, Expression
|
84
|
+
ExpressionExecutor &executor, Expression &default_value, Vector &intermediate);
|
86
85
|
unique_ptr<RowGroup> RemoveColumn(RowGroupCollection &collection, idx_t removed_column);
|
87
86
|
|
88
87
|
void CommitDrop();
|
@@ -123,6 +122,7 @@ public:
|
|
123
122
|
idx_t Delete(TransactionData transaction, DataTable &table, row_t *row_ids, idx_t count);
|
124
123
|
|
125
124
|
RowGroupWriteData WriteToDisk(PartialBlockManager &manager, const vector<CompressionType> &compression_types);
|
125
|
+
bool AllDeleted();
|
126
126
|
RowGroupPointer Checkpoint(RowGroupWriter &writer, TableStatistics &global_stats);
|
127
127
|
static void Serialize(RowGroupPointer &pointer, Serializer &serializer);
|
128
128
|
static RowGroupPointer Deserialize(Deserializer &source, const vector<LogicalType> &columns);
|
@@ -170,6 +170,7 @@ struct VersionNode {
|
|
170
170
|
unique_ptr<ChunkInfo> info[RowGroup::ROW_GROUP_VECTOR_COUNT];
|
171
171
|
|
172
172
|
void SetStart(idx_t start);
|
173
|
+
idx_t GetCommittedDeletedCount(idx_t count);
|
173
174
|
};
|
174
175
|
|
175
176
|
} // namespace duckdb
|
@@ -45,7 +45,6 @@ public:
|
|
45
45
|
void AppendRowGroup(SegmentLock &l, idx_t start_row);
|
46
46
|
//! Get the nth row-group, negative numbers start from the back (so -1 is the last row group, etc)
|
47
47
|
RowGroup *GetRowGroup(int64_t index);
|
48
|
-
idx_t RowGroupCount();
|
49
48
|
void Verify();
|
50
49
|
|
51
50
|
void InitializeScan(CollectionScanState &state, const vector<column_t> &column_ids, TableFilterSet *table_filters);
|
@@ -93,7 +92,7 @@ public:
|
|
93
92
|
const vector<LogicalType> &GetTypes() const;
|
94
93
|
|
95
94
|
shared_ptr<RowGroupCollection> AddColumn(ClientContext &context, ColumnDefinition &new_column,
|
96
|
-
Expression
|
95
|
+
Expression &default_value);
|
97
96
|
shared_ptr<RowGroupCollection> RemoveColumn(idx_t col_idx);
|
98
97
|
shared_ptr<RowGroupCollection> AlterType(ClientContext &context, idx_t changed_idx, const LogicalType &target_type,
|
99
98
|
vector<column_t> bound_columns, Expression &cast_expr);
|
@@ -104,7 +103,6 @@ public:
|
|
104
103
|
void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
|
105
104
|
|
106
105
|
AttachedDatabase &GetAttached();
|
107
|
-
DatabaseInstance &GetDatabase();
|
108
106
|
BlockManager &GetBlockManager() {
|
109
107
|
return block_manager;
|
110
108
|
}
|
@@ -32,7 +32,7 @@ public:
|
|
32
32
|
LocalTableStorage(DataTable &table, LocalTableStorage &parent, idx_t drop_idx);
|
33
33
|
// Create a LocalTableStorage from an ADD COLUMN
|
34
34
|
LocalTableStorage(ClientContext &context, DataTable &table, LocalTableStorage &parent, ColumnDefinition &new_column,
|
35
|
-
|
35
|
+
Expression &default_value);
|
36
36
|
~LocalTableStorage();
|
37
37
|
|
38
38
|
reference<DataTable> table_ref;
|
@@ -143,8 +143,7 @@ public:
|
|
143
143
|
|
144
144
|
idx_t AddedRows(DataTable &table);
|
145
145
|
|
146
|
-
void AddColumn(DataTable &old_dt, DataTable &new_dt, ColumnDefinition &new_column,
|
147
|
-
optional_ptr<Expression> default_value);
|
146
|
+
void AddColumn(DataTable &old_dt, DataTable &new_dt, ColumnDefinition &new_column, Expression &default_value);
|
148
147
|
void DropColumn(DataTable &old_dt, DataTable &new_dt, idx_t removed_column);
|
149
148
|
void ChangeType(DataTable &old_dt, DataTable &new_dt, idx_t changed_idx, const LogicalType &target_type,
|
150
149
|
const vector<column_t> &bound_columns, Expression &cast_expr);
|
@@ -279,6 +279,9 @@ typedef struct _duckdb_appender {
|
|
279
279
|
typedef struct _duckdb_arrow {
|
280
280
|
void *__arrw;
|
281
281
|
} * duckdb_arrow;
|
282
|
+
typedef struct _duckdb_arrow_stream {
|
283
|
+
void *__arrwstr;
|
284
|
+
} * duckdb_arrow_stream;
|
282
285
|
typedef struct _duckdb_config {
|
283
286
|
void *__cnfg;
|
284
287
|
} * duckdb_config;
|
@@ -1078,6 +1081,31 @@ Executes the prepared statement with the given bound parameters, and returns an
|
|
1078
1081
|
DUCKDB_API duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_statement,
|
1079
1082
|
duckdb_arrow *out_result);
|
1080
1083
|
|
1084
|
+
/*!
|
1085
|
+
Scans the Arrow stream and creates a view with the given name.
|
1086
|
+
|
1087
|
+
* connection: The connection on which to execute the scan.
|
1088
|
+
* table_name: Name of the temporary view to create.
|
1089
|
+
* arrow: Arrow stream wrapper.
|
1090
|
+
* returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
|
1091
|
+
*/
|
1092
|
+
DUCKDB_API duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name,
|
1093
|
+
duckdb_arrow_stream arrow);
|
1094
|
+
|
1095
|
+
/*!
|
1096
|
+
Scans the Arrow array and creates a view with the given name.
|
1097
|
+
|
1098
|
+
* connection: The connection on which to execute the scan.
|
1099
|
+
* table_name: Name of the temporary view to create.
|
1100
|
+
* arrow_schema: Arrow schema wrapper.
|
1101
|
+
* arrow_array: Arrow array wrapper.
|
1102
|
+
* out_stream: Output array stream that wraps around the passed schema, for releasing/deleting once done.
|
1103
|
+
* returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
|
1104
|
+
*/
|
1105
|
+
DUCKDB_API duckdb_state duckdb_arrow_array_scan(duckdb_connection connection, const char *table_name,
|
1106
|
+
duckdb_arrow_schema arrow_schema, duckdb_arrow_array arrow_array,
|
1107
|
+
duckdb_arrow_stream *out_stream);
|
1108
|
+
|
1081
1109
|
//===--------------------------------------------------------------------===//
|
1082
1110
|
// Extract Statements
|
1083
1111
|
//===--------------------------------------------------------------------===//
|
@@ -1,5 +1,6 @@
|
|
1
|
-
#include "duckdb/main/capi/capi_internal.hpp"
|
2
1
|
#include "duckdb/common/arrow/arrow_converter.hpp"
|
2
|
+
#include "duckdb/function/table/arrow.hpp"
|
3
|
+
#include "duckdb/main/capi/capi_internal.hpp"
|
3
4
|
|
4
5
|
using duckdb::ArrowConverter;
|
5
6
|
using duckdb::ArrowResultWrapper;
|
@@ -108,3 +109,156 @@ duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_st
|
|
108
109
|
*out_result = reinterpret_cast<duckdb_arrow>(arrow_wrapper);
|
109
110
|
return !arrow_wrapper->result->HasError() ? DuckDBSuccess : DuckDBError;
|
110
111
|
}
|
112
|
+
|
113
|
+
namespace arrow_array_stream_wrapper {
|
114
|
+
namespace {
|
115
|
+
struct PrivateData {
|
116
|
+
ArrowSchema *schema;
|
117
|
+
ArrowArray *array;
|
118
|
+
bool done = false;
|
119
|
+
};
|
120
|
+
|
121
|
+
// LCOV_EXCL_START
|
122
|
+
// This function is never called, but used to set ArrowSchema's release functions to a non-null NOOP.
|
123
|
+
void EmptySchemaRelease(ArrowSchema *) {
|
124
|
+
}
|
125
|
+
// LCOV_EXCL_STOP
|
126
|
+
|
127
|
+
void EmptyArrayRelease(ArrowArray *) {
|
128
|
+
}
|
129
|
+
|
130
|
+
void EmptyStreamRelease(ArrowArrayStream *) {
|
131
|
+
}
|
132
|
+
|
133
|
+
void FactoryGetSchema(uintptr_t stream_factory_ptr, duckdb::ArrowSchemaWrapper &schema) {
|
134
|
+
auto private_data =
|
135
|
+
reinterpret_cast<PrivateData *>(reinterpret_cast<ArrowArrayStream *>(stream_factory_ptr)->private_data);
|
136
|
+
schema.arrow_schema = *private_data->schema;
|
137
|
+
|
138
|
+
// Need to nullify the root schema's release function here, because streams don't allow us to set the release
|
139
|
+
// function. For the schema's children, we nullify the release functions in `duckdb_arrow_scan`, so we don't need to
|
140
|
+
// handle them again here. We set this to nullptr and not EmptySchemaRelease to prevent ArrowSchemaWrapper's
|
141
|
+
// destructor from destroying the schema (it's the caller's responsibility).
|
142
|
+
schema.arrow_schema.release = nullptr;
|
143
|
+
}
|
144
|
+
|
145
|
+
int GetSchema(struct ArrowArrayStream *stream, struct ArrowSchema *out) {
|
146
|
+
auto private_data = static_cast<arrow_array_stream_wrapper::PrivateData *>((stream->private_data));
|
147
|
+
if (private_data->schema == nullptr) {
|
148
|
+
return DuckDBError;
|
149
|
+
}
|
150
|
+
|
151
|
+
*out = *private_data->schema;
|
152
|
+
out->release = EmptySchemaRelease;
|
153
|
+
return DuckDBSuccess;
|
154
|
+
}
|
155
|
+
|
156
|
+
int GetNext(struct ArrowArrayStream *stream, struct ArrowArray *out) {
|
157
|
+
auto private_data = static_cast<arrow_array_stream_wrapper::PrivateData *>((stream->private_data));
|
158
|
+
*out = *private_data->array;
|
159
|
+
if (private_data->done) {
|
160
|
+
out->release = nullptr;
|
161
|
+
} else {
|
162
|
+
out->release = EmptyArrayRelease;
|
163
|
+
}
|
164
|
+
|
165
|
+
private_data->done = true;
|
166
|
+
return DuckDBSuccess;
|
167
|
+
}
|
168
|
+
|
169
|
+
duckdb::unique_ptr<duckdb::ArrowArrayStreamWrapper> FactoryGetNext(uintptr_t stream_factory_ptr,
|
170
|
+
duckdb::ArrowStreamParameters ¶meters) {
|
171
|
+
auto stream = reinterpret_cast<ArrowArrayStream *>(stream_factory_ptr);
|
172
|
+
auto ret = duckdb::make_uniq<duckdb::ArrowArrayStreamWrapper>();
|
173
|
+
ret->arrow_array_stream = *stream;
|
174
|
+
ret->arrow_array_stream.release = EmptyStreamRelease;
|
175
|
+
return ret;
|
176
|
+
}
|
177
|
+
|
178
|
+
// LCOV_EXCL_START
|
179
|
+
// This function is never be called, because it's used to construct a stream wrapping around a caller-supplied
|
180
|
+
// ArrowArray. Thus, the stream itself cannot produce an error.
|
181
|
+
const char *GetLastError(struct ArrowArrayStream *stream) {
|
182
|
+
return nullptr;
|
183
|
+
}
|
184
|
+
// LCOV_EXCL_STOP
|
185
|
+
|
186
|
+
void Release(struct ArrowArrayStream *stream) {
|
187
|
+
if (stream->private_data != nullptr) {
|
188
|
+
delete reinterpret_cast<PrivateData *>(stream->private_data);
|
189
|
+
}
|
190
|
+
|
191
|
+
stream->private_data = nullptr;
|
192
|
+
stream->release = nullptr;
|
193
|
+
}
|
194
|
+
|
195
|
+
duckdb_state Ingest(duckdb_connection connection, const char *table_name, struct ArrowArrayStream *input) {
|
196
|
+
try {
|
197
|
+
auto cconn = reinterpret_cast<duckdb::Connection *>(connection);
|
198
|
+
cconn
|
199
|
+
->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
|
200
|
+
duckdb::Value::POINTER((uintptr_t)FactoryGetNext),
|
201
|
+
duckdb::Value::POINTER((uintptr_t)FactoryGetSchema)})
|
202
|
+
->CreateView(table_name, true, false);
|
203
|
+
} catch (...) { // LCOV_EXCL_START
|
204
|
+
// Tried covering this in tests, but it proved harder than expected. At the time of writing:
|
205
|
+
// - Passing any name to `CreateView` worked without throwing an exception
|
206
|
+
// - Passing a null Arrow array worked without throwing an exception
|
207
|
+
// - Passing an invalid schema (without any columns) led to an InternalException with SIGABRT, which is meant to
|
208
|
+
// be un-catchable. This case likely needs to be handled gracefully within `arrow_scan`.
|
209
|
+
// Ref: https://discord.com/channels/909674491309850675/921100573732909107/1115230468699336785
|
210
|
+
return DuckDBError;
|
211
|
+
} // LCOV_EXCL_STOP
|
212
|
+
|
213
|
+
return DuckDBSuccess;
|
214
|
+
}
|
215
|
+
} // namespace
|
216
|
+
} // namespace arrow_array_stream_wrapper
|
217
|
+
|
218
|
+
duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name, duckdb_arrow_stream arrow) {
|
219
|
+
auto stream = reinterpret_cast<ArrowArrayStream *>(arrow);
|
220
|
+
|
221
|
+
// Backup release functions - we nullify children schema release functions because we don't want to release on
|
222
|
+
// behalf of the caller, downstream in our code. Note that Arrow releases target immediate children, but aren't
|
223
|
+
// recursive. So we only back up immediate children here and restore their functions.
|
224
|
+
ArrowSchema schema;
|
225
|
+
if (stream->get_schema(stream, &schema) == DuckDBError) {
|
226
|
+
return DuckDBError;
|
227
|
+
}
|
228
|
+
|
229
|
+
typedef void (*release_fn_t)(ArrowSchema *);
|
230
|
+
std::vector<release_fn_t> release_fns(schema.n_children);
|
231
|
+
for (int64_t i = 0; i < schema.n_children; i++) {
|
232
|
+
auto child = schema.children[i];
|
233
|
+
release_fns[i] = child->release;
|
234
|
+
child->release = arrow_array_stream_wrapper::EmptySchemaRelease;
|
235
|
+
}
|
236
|
+
|
237
|
+
auto ret = arrow_array_stream_wrapper::Ingest(connection, table_name, stream);
|
238
|
+
|
239
|
+
// Restore release functions.
|
240
|
+
for (int64_t i = 0; i < schema.n_children; i++) {
|
241
|
+
schema.children[i]->release = release_fns[i];
|
242
|
+
}
|
243
|
+
|
244
|
+
return ret;
|
245
|
+
}
|
246
|
+
|
247
|
+
duckdb_state duckdb_arrow_array_scan(duckdb_connection connection, const char *table_name,
|
248
|
+
duckdb_arrow_schema arrow_schema, duckdb_arrow_array arrow_array,
|
249
|
+
duckdb_arrow_stream *out_stream) {
|
250
|
+
auto private_data = new arrow_array_stream_wrapper::PrivateData;
|
251
|
+
private_data->schema = reinterpret_cast<ArrowSchema *>(arrow_schema);
|
252
|
+
private_data->array = reinterpret_cast<ArrowArray *>(arrow_array);
|
253
|
+
private_data->done = false;
|
254
|
+
|
255
|
+
ArrowArrayStream *stream = new ArrowArrayStream;
|
256
|
+
*out_stream = reinterpret_cast<duckdb_arrow_stream>(stream);
|
257
|
+
stream->get_schema = arrow_array_stream_wrapper::GetSchema;
|
258
|
+
stream->get_next = arrow_array_stream_wrapper::GetNext;
|
259
|
+
stream->get_last_error = arrow_array_stream_wrapper::GetLastError;
|
260
|
+
stream->release = arrow_array_stream_wrapper::Release;
|
261
|
+
stream->private_data = private_data;
|
262
|
+
|
263
|
+
return duckdb_arrow_scan(connection, table_name, reinterpret_cast<duckdb_arrow_stream>(stream));
|
264
|
+
}
|
@@ -26,7 +26,7 @@ char *duckdb_get_varchar(duckdb_value value) {
|
|
26
26
|
auto str_val = val->DefaultCastAs(duckdb::LogicalType::VARCHAR);
|
27
27
|
auto &str = duckdb::StringValue::Get(str_val);
|
28
28
|
|
29
|
-
auto result = reinterpret_cast<char *>(malloc(sizeof(char
|
29
|
+
auto result = reinterpret_cast<char *>(malloc(sizeof(char) * (str.size() + 1)));
|
30
30
|
memcpy(result, str.c_str(), str.size());
|
31
31
|
result[str.size()] = '\0';
|
32
32
|
return result;
|
@@ -92,6 +92,7 @@ static ConfigurationOption internal_options[] = {DUCKDB_GLOBAL(AccessModeSetting
|
|
92
92
|
DUCKDB_LOCAL(OrderedAggregateThreshold),
|
93
93
|
DUCKDB_GLOBAL(PasswordSetting),
|
94
94
|
DUCKDB_LOCAL(PerfectHashThresholdSetting),
|
95
|
+
DUCKDB_LOCAL(PivotFilterThreshold),
|
95
96
|
DUCKDB_LOCAL(PivotLimitSetting),
|
96
97
|
DUCKDB_LOCAL(PreserveIdentifierCase),
|
97
98
|
DUCKDB_GLOBAL(PreserveInsertionOrder),
|
@@ -109,6 +110,7 @@ static ConfigurationOption internal_options[] = {DUCKDB_GLOBAL(AccessModeSetting
|
|
109
110
|
DUCKDB_GLOBAL_ALIAS("user", UsernameSetting),
|
110
111
|
DUCKDB_GLOBAL_ALIAS("wal_autocheckpoint", CheckpointThresholdSetting),
|
111
112
|
DUCKDB_GLOBAL_ALIAS("worker_threads", ThreadsSetting),
|
113
|
+
DUCKDB_GLOBAL(FlushAllocatorSetting),
|
112
114
|
FINAL_SETTING};
|
113
115
|
|
114
116
|
vector<ConfigurationOption> DBConfig::GetOptions() {
|
@@ -178,7 +178,7 @@ void DatabaseInstance::CreateMainDatabase() {
|
|
178
178
|
void ThrowExtensionSetUnrecognizedOptions(const unordered_map<string, Value> &unrecognized_options) {
|
179
179
|
auto unrecognized_options_iter = unrecognized_options.begin();
|
180
180
|
string unrecognized_option_keys = unrecognized_options_iter->first;
|
181
|
-
|
181
|
+
while (++unrecognized_options_iter != unrecognized_options.end()) {
|
182
182
|
unrecognized_option_keys = "," + unrecognized_options_iter->first;
|
183
183
|
}
|
184
184
|
throw InvalidInputException("Unrecognized configuration property \"%s\"", unrecognized_option_keys);
|
@@ -6,88 +6,85 @@
|
|
6
6
|
#include "duckdb/main/client_context.hpp"
|
7
7
|
#include "duckdb/main/database.hpp"
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#define ICU_STATICALLY_LOADED false
|
9
|
+
// Note that c++ preprocessor doesn't have a nice way to clean this up so we need to set the defines we use to false
|
10
|
+
// explicitly when they are undefined
|
11
|
+
#ifndef DUCKDB_EXTENSION_ICU_LINKED
|
12
|
+
#define DUCKDB_EXTENSION_ICU_LINKED false
|
14
13
|
#endif
|
15
14
|
|
16
|
-
#
|
17
|
-
#define
|
18
|
-
#include "parquet_extension.hpp"
|
19
|
-
#else
|
20
|
-
#define PARQUET_STATICALLY_LOADED false
|
15
|
+
#ifndef DUCKDB_EXTENSION_PARQUET_LINKED
|
16
|
+
#define DUCKDB_EXTENSION_PARQUET_LINKED false
|
21
17
|
#endif
|
22
18
|
|
23
|
-
#
|
24
|
-
#define
|
25
|
-
#include "tpch_extension.hpp"
|
26
|
-
#else
|
27
|
-
#define TPCH_STATICALLY_LOADED false
|
19
|
+
#ifndef DUCKDB_EXTENSION_TPCH_LINKED
|
20
|
+
#define DUCKDB_EXTENSION_TPCH_LINKED false
|
28
21
|
#endif
|
29
22
|
|
30
|
-
#
|
31
|
-
#define
|
32
|
-
#include "tpcds_extension.hpp"
|
33
|
-
#else
|
34
|
-
#define TPCDS_STATICALLY_LOADED false
|
23
|
+
#ifndef DUCKDB_EXTENSION_TPCDS_LINKED
|
24
|
+
#define DUCKDB_EXTENSION_TPCDS_LINKED false
|
35
25
|
#endif
|
36
26
|
|
37
|
-
#
|
38
|
-
#define
|
39
|
-
#include "fts_extension.hpp"
|
40
|
-
#else
|
41
|
-
#define FTS_STATICALLY_LOADED false
|
27
|
+
#ifndef DUCKDB_EXTENSION_FTS_LINKED
|
28
|
+
#define DUCKDB_EXTENSION_FTS_LINKED false
|
42
29
|
#endif
|
43
30
|
|
44
|
-
#
|
45
|
-
#define
|
46
|
-
#include "httpfs_extension.hpp"
|
47
|
-
#else
|
48
|
-
#define HTTPFS_STATICALLY_LOADED false
|
31
|
+
#ifndef DUCKDB_EXTENSION_HTTPFS_LINKED
|
32
|
+
#define DUCKDB_EXTENSION_HTTPFS_LINKED false
|
49
33
|
#endif
|
50
34
|
|
51
|
-
#
|
52
|
-
#
|
35
|
+
#ifndef DUCKDB_EXTENSION_JSON_LINKED
|
36
|
+
#define DUCKDB_EXTENSION_JSON_LINKED false
|
53
37
|
#endif
|
54
38
|
|
55
|
-
#
|
56
|
-
#define
|
57
|
-
#include "json_extension.hpp"
|
58
|
-
#else
|
59
|
-
#define JSON_STATICALLY_LOADED false
|
39
|
+
#ifndef DUCKDB_EXTENSION_JEMALLOC_LINKED
|
40
|
+
#define DUCKDB_EXTENSION_JEMALLOC_LINKED false
|
60
41
|
#endif
|
61
42
|
|
62
|
-
#
|
63
|
-
#define
|
64
|
-
#
|
43
|
+
#ifndef DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
|
44
|
+
#define DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED false
|
45
|
+
#endif
|
46
|
+
|
47
|
+
// Load the generated header file containing our list of extension headers
|
48
|
+
#if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS && !defined(DUCKDB_AMALGAMATION)
|
49
|
+
#include "generated_extension_loader.hpp"
|
65
50
|
#else
|
66
|
-
|
51
|
+
// TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
|
52
|
+
// these can be removed
|
53
|
+
#if DUCKDB_EXTENSION_ICU_LINKED
|
54
|
+
#include "icu_extension.hpp"
|
67
55
|
#endif
|
68
56
|
|
69
|
-
#if
|
70
|
-
#include "
|
57
|
+
#if DUCKDB_EXTENSION_PARQUET_LINKED
|
58
|
+
#include "parquet_extension.hpp"
|
71
59
|
#endif
|
72
60
|
|
73
|
-
#if
|
74
|
-
#include "
|
61
|
+
#if DUCKDB_EXTENSION_TPCH_LINKED
|
62
|
+
#include "tpch_extension.hpp"
|
75
63
|
#endif
|
76
64
|
|
77
|
-
#if
|
78
|
-
#include "
|
65
|
+
#if DUCKDB_EXTENSION_TPCDS_LINKED
|
66
|
+
#include "tpcds_extension.hpp"
|
79
67
|
#endif
|
80
68
|
|
81
|
-
#if
|
82
|
-
#
|
83
|
-
#include "autocomplete_extension.hpp"
|
84
|
-
#else
|
85
|
-
#define AUTOCOMPLETE_STATICALLY_LOADED false
|
69
|
+
#if DUCKDB_EXTENSION_FTS_LINKED
|
70
|
+
#include "fts_extension.hpp"
|
86
71
|
#endif
|
87
72
|
|
88
|
-
|
89
|
-
#
|
90
|
-
#
|
73
|
+
#if DUCKDB_EXTENSION_HTTPFS_LINKED
|
74
|
+
#include "httpfs_extension.hpp"
|
75
|
+
#endif
|
76
|
+
|
77
|
+
#if DUCKDB_EXTENSION_JSON_LINKED
|
78
|
+
#include "json_extension.hpp"
|
79
|
+
#endif
|
80
|
+
|
81
|
+
#if DUCKDB_EXTENSION_JEMALLOC_LINKED
|
82
|
+
#include "jemalloc_extension.hpp"
|
83
|
+
#endif
|
84
|
+
|
85
|
+
#if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
|
86
|
+
#include "autocomplete_extension.hpp"
|
87
|
+
#endif
|
91
88
|
#endif
|
92
89
|
|
93
90
|
namespace duckdb {
|
@@ -96,15 +93,15 @@ namespace duckdb {
|
|
96
93
|
// Default Extensions
|
97
94
|
//===--------------------------------------------------------------------===//
|
98
95
|
static DefaultExtension internal_extensions[] = {
|
99
|
-
{"icu", "Adds support for time zones and collations using the ICU library",
|
100
|
-
{"parquet", "Adds support for reading and writing parquet files",
|
101
|
-
{"tpch", "Adds TPC-H data generation and query support",
|
102
|
-
{"tpcds", "Adds TPC-DS data generation and query support",
|
103
|
-
{"fts", "Adds support for Full-Text Search Indexes",
|
104
|
-
{"httpfs", "Adds support for reading and writing files over a HTTP(S) connection",
|
105
|
-
{"json", "Adds support for JSON operations",
|
106
|
-
{"jemalloc", "Overwrites system allocator with JEMalloc",
|
107
|
-
{"autocomplete", "Add supports for autocomplete in the shell",
|
96
|
+
{"icu", "Adds support for time zones and collations using the ICU library", DUCKDB_EXTENSION_ICU_LINKED},
|
97
|
+
{"parquet", "Adds support for reading and writing parquet files", DUCKDB_EXTENSION_PARQUET_LINKED},
|
98
|
+
{"tpch", "Adds TPC-H data generation and query support", DUCKDB_EXTENSION_TPCH_LINKED},
|
99
|
+
{"tpcds", "Adds TPC-DS data generation and query support", DUCKDB_EXTENSION_TPCDS_LINKED},
|
100
|
+
{"fts", "Adds support for Full-Text Search Indexes", DUCKDB_EXTENSION_FTS_LINKED},
|
101
|
+
{"httpfs", "Adds support for reading and writing files over a HTTP(S) connection", DUCKDB_EXTENSION_HTTPFS_LINKED},
|
102
|
+
{"json", "Adds support for JSON operations", DUCKDB_EXTENSION_JSON_LINKED},
|
103
|
+
{"jemalloc", "Overwrites system allocator with JEMalloc", DUCKDB_EXTENSION_JEMALLOC_LINKED},
|
104
|
+
{"autocomplete", "Add supports for autocomplete in the shell", DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED},
|
108
105
|
{"motherduck", "Enables motherduck integration with the system", false},
|
109
106
|
{"sqlite_scanner", "Adds support for reading SQLite database files", false},
|
110
107
|
{"postgres_scanner", "Adds support for reading from a Postgres database", false},
|
@@ -143,15 +140,20 @@ bool ExtensionHelper::AllowAutoInstall(const string &extension) {
|
|
143
140
|
// Load Statically Compiled Extension
|
144
141
|
//===--------------------------------------------------------------------===//
|
145
142
|
void ExtensionHelper::LoadAllExtensions(DuckDB &db) {
|
143
|
+
// The in-tree extensions that we check. Non-cmake builds are currently limited to these for static linking
|
144
|
+
// TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
|
145
|
+
// these can be removed
|
146
146
|
unordered_set<string> extensions {"parquet", "icu", "tpch", "tpcds", "fts", "httpfs", "visualizer",
|
147
147
|
"json", "excel", "sqlsmith", "inet", "jemalloc", "autocomplete"};
|
148
148
|
for (auto &ext : extensions) {
|
149
149
|
LoadExtensionInternal(db, ext, true);
|
150
150
|
}
|
151
151
|
|
152
|
-
#if defined(
|
153
|
-
for (auto &ext :
|
154
|
-
|
152
|
+
#if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
|
153
|
+
for (auto &ext : LINKED_EXTENSIONS) {
|
154
|
+
if (extensions.find(ext) != extensions.end()) {
|
155
|
+
LoadExtensionInternal(db, ext, true);
|
156
|
+
}
|
155
157
|
}
|
156
158
|
#endif
|
157
159
|
}
|
@@ -178,105 +180,110 @@ ExtensionLoadResult ExtensionHelper::LoadExtensionInternal(DuckDB &db, const std
|
|
178
180
|
return ExtensionLoadResult::LOADED_EXTENSION;
|
179
181
|
}
|
180
182
|
#endif
|
183
|
+
|
184
|
+
// This is the main extension loading mechanism that loads the extension that are statically linked.
|
185
|
+
#if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
|
186
|
+
if (TryLoadLinkedExtension(db, extension)) {
|
187
|
+
return ExtensionLoadResult::LOADED_EXTENSION;
|
188
|
+
} else {
|
189
|
+
return ExtensionLoadResult::NOT_LOADED;
|
190
|
+
}
|
191
|
+
#endif
|
192
|
+
|
193
|
+
// This is the fallback to the "old" extension loading mechanism for non-cmake builds
|
194
|
+
// TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds
|
181
195
|
if (extension == "parquet") {
|
182
|
-
#if
|
196
|
+
#if DUCKDB_EXTENSION_PARQUET_LINKED
|
183
197
|
db.LoadExtension<ParquetExtension>();
|
184
198
|
#else
|
185
199
|
// parquet extension required but not build: skip this test
|
186
200
|
return ExtensionLoadResult::NOT_LOADED;
|
187
201
|
#endif
|
188
202
|
} else if (extension == "icu") {
|
189
|
-
#if
|
203
|
+
#if DUCKDB_EXTENSION_ICU_LINKED
|
190
204
|
db.LoadExtension<IcuExtension>();
|
191
205
|
#else
|
192
206
|
// icu extension required but not build: skip this test
|
193
207
|
return ExtensionLoadResult::NOT_LOADED;
|
194
208
|
#endif
|
195
209
|
} else if (extension == "tpch") {
|
196
|
-
#if
|
210
|
+
#if DUCKDB_EXTENSION_TPCH_LINKED
|
197
211
|
db.LoadExtension<TpchExtension>();
|
198
212
|
#else
|
199
213
|
// icu extension required but not build: skip this test
|
200
214
|
return ExtensionLoadResult::NOT_LOADED;
|
201
215
|
#endif
|
202
216
|
} else if (extension == "tpcds") {
|
203
|
-
#if
|
217
|
+
#if DUCKDB_EXTENSION_TPCDS_LINKED
|
204
218
|
db.LoadExtension<TpcdsExtension>();
|
205
219
|
#else
|
206
220
|
// icu extension required but not build: skip this test
|
207
221
|
return ExtensionLoadResult::NOT_LOADED;
|
208
222
|
#endif
|
209
223
|
} else if (extension == "fts") {
|
210
|
-
#if
|
211
|
-
db.LoadExtension<FtsExtension>();
|
224
|
+
#if DUCKDB_EXTENSION_FTS_LINKED
|
225
|
+
// db.LoadExtension<FtsExtension>();
|
212
226
|
#else
|
213
227
|
// fts extension required but not build: skip this test
|
214
228
|
return ExtensionLoadResult::NOT_LOADED;
|
215
229
|
#endif
|
216
230
|
} else if (extension == "httpfs") {
|
217
|
-
#if
|
231
|
+
#if DUCKDB_EXTENSION_HTTPFS_LINKED
|
218
232
|
db.LoadExtension<HttpfsExtension>();
|
219
233
|
#else
|
220
234
|
return ExtensionLoadResult::NOT_LOADED;
|
221
235
|
#endif
|
222
236
|
} else if (extension == "visualizer") {
|
223
|
-
#if
|
237
|
+
#if DUCKDB_EXTENSION_VISUALIZER_LINKED
|
224
238
|
db.LoadExtension<VisualizerExtension>();
|
225
239
|
#else
|
226
240
|
// visualizer extension required but not build: skip this test
|
227
241
|
return ExtensionLoadResult::NOT_LOADED;
|
228
242
|
#endif
|
229
243
|
} else if (extension == "json") {
|
230
|
-
#if
|
244
|
+
#if DUCKDB_EXTENSION_JSON_LINKED
|
231
245
|
db.LoadExtension<JsonExtension>();
|
232
246
|
#else
|
233
247
|
// json extension required but not build: skip this test
|
234
248
|
return ExtensionLoadResult::NOT_LOADED;
|
235
249
|
#endif
|
236
250
|
} else if (extension == "excel") {
|
237
|
-
#if
|
251
|
+
#if DUCKDB_EXTENSION_EXCEL_LINKED
|
238
252
|
db.LoadExtension<ExcelExtension>();
|
239
253
|
#else
|
240
254
|
// excel extension required but not build: skip this test
|
241
255
|
return ExtensionLoadResult::NOT_LOADED;
|
242
256
|
#endif
|
243
257
|
} else if (extension == "sqlsmith") {
|
244
|
-
#if
|
258
|
+
#if DUCKDB_EXTENSION_SQLSMITH_LINKED
|
245
259
|
db.LoadExtension<SqlsmithExtension>();
|
246
260
|
#else
|
247
261
|
// excel extension required but not build: skip this test
|
248
262
|
return ExtensionLoadResult::NOT_LOADED;
|
249
263
|
#endif
|
250
264
|
} else if (extension == "jemalloc") {
|
251
|
-
#if
|
265
|
+
#if DUCKDB_EXTENSION_JEMALLOC_LINKED
|
252
266
|
db.LoadExtension<JemallocExtension>();
|
253
267
|
#else
|
254
268
|
// jemalloc extension required but not build: skip this test
|
255
269
|
return ExtensionLoadResult::NOT_LOADED;
|
256
270
|
#endif
|
257
271
|
} else if (extension == "autocomplete") {
|
258
|
-
#if
|
272
|
+
#if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
|
259
273
|
db.LoadExtension<AutocompleteExtension>();
|
260
274
|
#else
|
261
275
|
// autocomplete extension required but not build: skip this test
|
262
276
|
return ExtensionLoadResult::NOT_LOADED;
|
263
277
|
#endif
|
264
278
|
} else if (extension == "inet") {
|
265
|
-
#if
|
279
|
+
#if DUCKDB_EXTENSION_INET_LINKED
|
266
280
|
db.LoadExtension<InetExtension>();
|
267
281
|
#else
|
268
282
|
// inet extension required but not build: skip this test
|
269
283
|
return ExtensionLoadResult::NOT_LOADED;
|
270
284
|
#endif
|
271
|
-
} else {
|
272
|
-
|
273
|
-
#if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
|
274
|
-
if (TryLoadLinkedExtension(db, extension)) {
|
275
|
-
return ExtensionLoadResult::LOADED_EXTENSION;
|
276
|
-
}
|
277
|
-
#endif
|
278
|
-
return ExtensionLoadResult::EXTENSION_UNKNOWN;
|
279
285
|
}
|
286
|
+
|
280
287
|
return ExtensionLoadResult::LOADED_EXTENSION;
|
281
288
|
}
|
282
289
|
|