duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
- package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +4 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +156 -128
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +0 -4
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -0
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -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 +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -35,7 +35,10 @@
|
|
|
35
35
|
#endif
|
|
36
36
|
#endif
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// API versions
|
|
39
|
+
// if no explicit API version is defined, the latest API version is used
|
|
40
|
+
// Note that using older API versions (i.e. not using DUCKDB_API_LATEST) is deprecated.
|
|
41
|
+
// These will not be supported long-term, and will be removed in future versions.
|
|
39
42
|
#ifndef DUCKDB_API_0_3_1
|
|
40
43
|
#define DUCKDB_API_0_3_1 1
|
|
41
44
|
#endif
|
|
@@ -570,11 +573,19 @@ Use `duckdb_result_chunk_count` to figure out how many chunks there are in the r
|
|
|
570
573
|
*/
|
|
571
574
|
DUCKDB_API duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);
|
|
572
575
|
|
|
576
|
+
/*!
|
|
577
|
+
Checks if the type of the internal result is StreamQueryResult.
|
|
578
|
+
|
|
579
|
+
* result: The result object to check.
|
|
580
|
+
* returns: Whether or not the result object is of the type StreamQueryResult
|
|
581
|
+
*/
|
|
582
|
+
DUCKDB_API bool duckdb_result_is_streaming(duckdb_result result);
|
|
583
|
+
|
|
573
584
|
/*!
|
|
574
585
|
Returns the number of data chunks present in the result.
|
|
575
586
|
|
|
576
587
|
* result: The result object
|
|
577
|
-
* returns:
|
|
588
|
+
* returns: Number of data chunks present in the result.
|
|
578
589
|
*/
|
|
579
590
|
DUCKDB_API idx_t duckdb_result_chunk_count(duckdb_result result);
|
|
580
591
|
|
|
@@ -1106,6 +1117,21 @@ Note that after calling `duckdb_pending_prepared`, the pending result should alw
|
|
|
1106
1117
|
DUCKDB_API duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement,
|
|
1107
1118
|
duckdb_pending_result *out_result);
|
|
1108
1119
|
|
|
1120
|
+
/*!
|
|
1121
|
+
Executes the prepared statement with the given bound parameters, and returns a pending result.
|
|
1122
|
+
This pending result will create a streaming duckdb_result when executed.
|
|
1123
|
+
The pending result represents an intermediate structure for a query that is not yet fully executed.
|
|
1124
|
+
|
|
1125
|
+
Note that after calling `duckdb_pending_prepared_streaming`, the pending result should always be destroyed using
|
|
1126
|
+
`duckdb_destroy_pending`, even if this function returns DuckDBError.
|
|
1127
|
+
|
|
1128
|
+
* prepared_statement: The prepared statement to execute.
|
|
1129
|
+
* out_result: The pending query result.
|
|
1130
|
+
* returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
|
|
1131
|
+
*/
|
|
1132
|
+
DUCKDB_API duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,
|
|
1133
|
+
duckdb_pending_result *out_result);
|
|
1134
|
+
|
|
1109
1135
|
/*!
|
|
1110
1136
|
Closes the pending result and de-allocates all memory allocated for the result.
|
|
1111
1137
|
|
|
@@ -1684,6 +1710,16 @@ Adds a parameter to the table function.
|
|
|
1684
1710
|
*/
|
|
1685
1711
|
DUCKDB_API void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);
|
|
1686
1712
|
|
|
1713
|
+
/*!
|
|
1714
|
+
Adds a named parameter to the table function.
|
|
1715
|
+
|
|
1716
|
+
* table_function: The table function
|
|
1717
|
+
* name: The name of the parameter
|
|
1718
|
+
* type: The type of the parameter to add.
|
|
1719
|
+
*/
|
|
1720
|
+
DUCKDB_API void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name,
|
|
1721
|
+
duckdb_logical_type type);
|
|
1722
|
+
|
|
1687
1723
|
/*!
|
|
1688
1724
|
Assigns extra information to the table function that can be fetched during binding, etc.
|
|
1689
1725
|
|
|
@@ -1792,6 +1828,17 @@ The result must be destroyed with `duckdb_destroy_value`.
|
|
|
1792
1828
|
*/
|
|
1793
1829
|
DUCKDB_API duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);
|
|
1794
1830
|
|
|
1831
|
+
/*!
|
|
1832
|
+
Retrieves a named parameter with the given name.
|
|
1833
|
+
|
|
1834
|
+
The result must be destroyed with `duckdb_destroy_value`.
|
|
1835
|
+
|
|
1836
|
+
* info: The info object
|
|
1837
|
+
* name: The name of the parameter
|
|
1838
|
+
* returns: The value of the parameter. Must be destroyed with `duckdb_destroy_value`.
|
|
1839
|
+
*/
|
|
1840
|
+
DUCKDB_API duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);
|
|
1841
|
+
|
|
1795
1842
|
/*!
|
|
1796
1843
|
Sets the user-provided bind data in the bind object. This object can be retrieved again during execution.
|
|
1797
1844
|
|
|
@@ -2319,6 +2366,28 @@ Returns true if execution of the current query is finished.
|
|
|
2319
2366
|
*/
|
|
2320
2367
|
DUCKDB_API bool duckdb_execution_is_finished(duckdb_connection con);
|
|
2321
2368
|
|
|
2369
|
+
//===--------------------------------------------------------------------===//
|
|
2370
|
+
// Streaming Result Interface
|
|
2371
|
+
//===--------------------------------------------------------------------===//
|
|
2372
|
+
|
|
2373
|
+
/*!
|
|
2374
|
+
Fetches a data chunk from the (streaming) duckdb_result. This function should be called repeatedly until the result is
|
|
2375
|
+
exhausted.
|
|
2376
|
+
|
|
2377
|
+
The result must be destroyed with `duckdb_destroy_data_chunk`.
|
|
2378
|
+
|
|
2379
|
+
This function can only be used on duckdb_results created with 'duckdb_pending_prepared_streaming'
|
|
2380
|
+
|
|
2381
|
+
If this function is used, none of the other result functions can be used and vice versa (i.e. this function cannot be
|
|
2382
|
+
mixed with the legacy result functions or the materialized result functions).
|
|
2383
|
+
|
|
2384
|
+
It is not known beforehand how many chunks will be returned by this result.
|
|
2385
|
+
|
|
2386
|
+
* result: The result object to fetch the data chunk from.
|
|
2387
|
+
* returns: The resulting data chunk. Returns `NULL` if the result has an error.
|
|
2388
|
+
*/
|
|
2389
|
+
DUCKDB_API duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);
|
|
2390
|
+
|
|
2322
2391
|
#ifdef __cplusplus
|
|
2323
2392
|
}
|
|
2324
2393
|
#endif
|
|
@@ -9,14 +9,16 @@ using duckdb::PendingQueryResult;
|
|
|
9
9
|
using duckdb::PendingStatementWrapper;
|
|
10
10
|
using duckdb::PreparedStatementWrapper;
|
|
11
11
|
|
|
12
|
-
duckdb_state
|
|
12
|
+
duckdb_state duckdb_pending_prepared_internal(duckdb_prepared_statement prepared_statement,
|
|
13
|
+
duckdb_pending_result *out_result, bool allow_streaming) {
|
|
13
14
|
if (!prepared_statement || !out_result) {
|
|
14
15
|
return DuckDBError;
|
|
15
16
|
}
|
|
16
17
|
auto wrapper = (PreparedStatementWrapper *)prepared_statement;
|
|
17
18
|
auto result = new PendingStatementWrapper();
|
|
19
|
+
result->allow_streaming = allow_streaming;
|
|
18
20
|
try {
|
|
19
|
-
result->statement = wrapper->statement->PendingQuery(wrapper->values,
|
|
21
|
+
result->statement = wrapper->statement->PendingQuery(wrapper->values, allow_streaming);
|
|
20
22
|
} catch (const duckdb::Exception &ex) {
|
|
21
23
|
result->statement = make_unique<PendingQueryResult>(duckdb::PreservedError(ex));
|
|
22
24
|
} catch (std::exception &ex) {
|
|
@@ -28,6 +30,15 @@ duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statemen
|
|
|
28
30
|
return return_value;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement, duckdb_pending_result *out_result) {
|
|
34
|
+
return duckdb_pending_prepared_internal(prepared_statement, out_result, false);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,
|
|
38
|
+
duckdb_pending_result *out_result) {
|
|
39
|
+
return duckdb_pending_prepared_internal(prepared_statement, out_result, true);
|
|
40
|
+
}
|
|
41
|
+
|
|
31
42
|
void duckdb_destroy_pending(duckdb_pending_result *pending_result) {
|
|
32
43
|
if (!pending_result || !*pending_result) {
|
|
33
44
|
return;
|
|
@@ -90,7 +101,9 @@ duckdb_state duckdb_execute_pending(duckdb_pending_result pending_result, duckdb
|
|
|
90
101
|
if (!wrapper->statement) {
|
|
91
102
|
return DuckDBError;
|
|
92
103
|
}
|
|
93
|
-
|
|
104
|
+
|
|
105
|
+
std::unique_ptr<duckdb::QueryResult> result;
|
|
106
|
+
result = wrapper->statement->Execute();
|
|
94
107
|
wrapper->statement.reset();
|
|
95
108
|
return duckdb_translate_result(std::move(result), out_result);
|
|
96
109
|
}
|
|
@@ -292,6 +292,10 @@ bool deprecated_materialize_result(duckdb_result *result) {
|
|
|
292
292
|
// already used as a new result set
|
|
293
293
|
return false;
|
|
294
294
|
}
|
|
295
|
+
if (result_data->result_set_type == CAPIResultSetType::CAPI_RESULT_TYPE_STREAMING) {
|
|
296
|
+
// already used as a streaming result
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
295
299
|
// materialize as deprecated result set
|
|
296
300
|
result_data->result_set_type = CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED;
|
|
297
301
|
auto column_count = result_data->result->ColumnCount();
|
|
@@ -413,6 +417,10 @@ idx_t duckdb_row_count(duckdb_result *result) {
|
|
|
413
417
|
return 0;
|
|
414
418
|
}
|
|
415
419
|
auto &result_data = *((duckdb::DuckDBResultData *)result->internal_data);
|
|
420
|
+
if (result_data.result->type == duckdb::QueryResultType::STREAM_RESULT) {
|
|
421
|
+
// We can't know the row count beforehand
|
|
422
|
+
return 0;
|
|
423
|
+
}
|
|
416
424
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
417
425
|
return materialized.RowCount();
|
|
418
426
|
}
|
|
@@ -463,7 +471,10 @@ idx_t duckdb_result_chunk_count(duckdb_result result) {
|
|
|
463
471
|
if (result_data.result_set_type == duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED) {
|
|
464
472
|
return 0;
|
|
465
473
|
}
|
|
466
|
-
|
|
474
|
+
if (result_data.result->type != duckdb::QueryResultType::MATERIALIZED_RESULT) {
|
|
475
|
+
// Can't know beforehand how many chunks are returned.
|
|
476
|
+
return 0;
|
|
477
|
+
}
|
|
467
478
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
468
479
|
return materialized.Collection().ChunkCount();
|
|
469
480
|
}
|
|
@@ -476,6 +487,10 @@ duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_idx)
|
|
|
476
487
|
if (result_data.result_set_type == duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED) {
|
|
477
488
|
return nullptr;
|
|
478
489
|
}
|
|
490
|
+
if (result_data.result->type != duckdb::QueryResultType::MATERIALIZED_RESULT) {
|
|
491
|
+
// This API is only supported for materialized query results
|
|
492
|
+
return nullptr;
|
|
493
|
+
}
|
|
479
494
|
result_data.result_set_type = duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_MATERIALIZED;
|
|
480
495
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
481
496
|
auto &collection = materialized.Collection();
|
|
@@ -487,3 +502,14 @@ duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_idx)
|
|
|
487
502
|
collection.FetchChunk(chunk_idx, *chunk);
|
|
488
503
|
return reinterpret_cast<duckdb_data_chunk>(chunk.release());
|
|
489
504
|
}
|
|
505
|
+
|
|
506
|
+
bool duckdb_result_is_streaming(duckdb_result result) {
|
|
507
|
+
if (!result.internal_data) {
|
|
508
|
+
return false;
|
|
509
|
+
}
|
|
510
|
+
if (duckdb_result_error(&result) != nullptr) {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
auto &result_data = *((duckdb::DuckDBResultData *)result.internal_data);
|
|
514
|
+
return result_data.result->type == duckdb::QueryResultType::STREAM_RESULT;
|
|
515
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#include "duckdb/main/capi/capi_internal.hpp"
|
|
2
|
+
#include "duckdb/common/types/timestamp.hpp"
|
|
3
|
+
#include "duckdb/common/allocator.hpp"
|
|
4
|
+
|
|
5
|
+
duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result) {
|
|
6
|
+
if (!result.internal_data) {
|
|
7
|
+
return nullptr;
|
|
8
|
+
}
|
|
9
|
+
auto &result_data = *((duckdb::DuckDBResultData *)result.internal_data);
|
|
10
|
+
if (result_data.result_set_type == duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED) {
|
|
11
|
+
return nullptr;
|
|
12
|
+
}
|
|
13
|
+
if (result_data.result->type != duckdb::QueryResultType::STREAM_RESULT) {
|
|
14
|
+
// We can only fetch from a StreamQueryResult
|
|
15
|
+
return nullptr;
|
|
16
|
+
}
|
|
17
|
+
result_data.result_set_type = duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_STREAMING;
|
|
18
|
+
auto &streaming = (duckdb::StreamQueryResult &)*result_data.result;
|
|
19
|
+
if (!streaming.IsOpen()) {
|
|
20
|
+
return nullptr;
|
|
21
|
+
}
|
|
22
|
+
// FetchRaw ? Do we care about flattening them?
|
|
23
|
+
auto chunk = streaming.Fetch();
|
|
24
|
+
return reinterpret_cast<duckdb_data_chunk>(chunk.release());
|
|
25
|
+
}
|
|
@@ -208,6 +208,16 @@ void duckdb_table_function_add_parameter(duckdb_table_function function, duckdb_
|
|
|
208
208
|
tf->arguments.push_back(*logical_type);
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
+
void duckdb_table_function_add_named_parameter(duckdb_table_function function, const char *name,
|
|
212
|
+
duckdb_logical_type type) {
|
|
213
|
+
if (!function || !type) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
auto tf = (duckdb::TableFunction *)function;
|
|
217
|
+
auto logical_type = (duckdb::LogicalType *)type;
|
|
218
|
+
tf->named_parameters.insert({name, *logical_type});
|
|
219
|
+
}
|
|
220
|
+
|
|
211
221
|
void duckdb_table_function_set_extra_info(duckdb_table_function function, void *extra_info,
|
|
212
222
|
duckdb_delete_callback_t destroy) {
|
|
213
223
|
if (!function) {
|
|
@@ -319,6 +329,19 @@ duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index) {
|
|
|
319
329
|
return reinterpret_cast<duckdb_value>(new duckdb::Value(bind_info->input.inputs[index]));
|
|
320
330
|
}
|
|
321
331
|
|
|
332
|
+
duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name) {
|
|
333
|
+
if (!info || !name) {
|
|
334
|
+
return nullptr;
|
|
335
|
+
}
|
|
336
|
+
auto bind_info = (duckdb::CTableInternalBindInfo *)info;
|
|
337
|
+
auto t = bind_info->input.named_parameters.find(name);
|
|
338
|
+
if (t == bind_info->input.named_parameters.end()) {
|
|
339
|
+
return nullptr;
|
|
340
|
+
} else {
|
|
341
|
+
return reinterpret_cast<duckdb_value>(new duckdb::Value(t->second));
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
322
345
|
void duckdb_bind_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy) {
|
|
323
346
|
if (!info) {
|
|
324
347
|
return;
|
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
#include "duckdb/main/client_context.hpp"
|
|
2
2
|
|
|
3
|
-
#include "duckdb/main/client_context_file_opener.hpp"
|
|
4
|
-
#include "duckdb/main/query_profiler.hpp"
|
|
5
|
-
#include "duckdb/catalog/catalog_entry/table_catalog_entry.hpp"
|
|
6
3
|
#include "duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp"
|
|
4
|
+
#include "duckdb/catalog/catalog_entry/table_catalog_entry.hpp"
|
|
7
5
|
#include "duckdb/catalog/catalog_search_path.hpp"
|
|
6
|
+
#include "duckdb/common/file_system.hpp"
|
|
7
|
+
#include "duckdb/common/http_state.hpp"
|
|
8
|
+
#include "duckdb/common/preserved_error.hpp"
|
|
9
|
+
#include "duckdb/common/progress_bar/progress_bar.hpp"
|
|
8
10
|
#include "duckdb/common/serializer/buffered_deserializer.hpp"
|
|
11
|
+
#include "duckdb/common/serializer/buffered_file_writer.hpp"
|
|
9
12
|
#include "duckdb/common/serializer/buffered_serializer.hpp"
|
|
13
|
+
#include "duckdb/common/types/column_data_collection.hpp"
|
|
14
|
+
#include "duckdb/execution/column_binding_resolver.hpp"
|
|
15
|
+
#include "duckdb/execution/operator/helper/physical_result_collector.hpp"
|
|
10
16
|
#include "duckdb/execution/physical_plan_generator.hpp"
|
|
17
|
+
#include "duckdb/main/appender.hpp"
|
|
18
|
+
#include "duckdb/main/attached_database.hpp"
|
|
19
|
+
#include "duckdb/main/client_context_file_opener.hpp"
|
|
20
|
+
#include "duckdb/main/client_data.hpp"
|
|
11
21
|
#include "duckdb/main/database.hpp"
|
|
22
|
+
#include "duckdb/main/database_manager.hpp"
|
|
23
|
+
#include "duckdb/main/error_manager.hpp"
|
|
12
24
|
#include "duckdb/main/materialized_query_result.hpp"
|
|
13
|
-
#include "duckdb/main/
|
|
25
|
+
#include "duckdb/main/query_profiler.hpp"
|
|
14
26
|
#include "duckdb/main/query_result.hpp"
|
|
27
|
+
#include "duckdb/main/relation.hpp"
|
|
15
28
|
#include "duckdb/main/stream_query_result.hpp"
|
|
16
29
|
#include "duckdb/optimizer/optimizer.hpp"
|
|
17
|
-
#include "duckdb/
|
|
30
|
+
#include "duckdb/parallel/task_scheduler.hpp"
|
|
18
31
|
#include "duckdb/parser/expression/constant_expression.hpp"
|
|
19
32
|
#include "duckdb/parser/expression/parameter_expression.hpp"
|
|
20
33
|
#include "duckdb/parser/parsed_data/create_function_info.hpp"
|
|
34
|
+
#include "duckdb/parser/parsed_expression_iterator.hpp"
|
|
35
|
+
#include "duckdb/parser/parser.hpp"
|
|
36
|
+
#include "duckdb/parser/query_node/select_node.hpp"
|
|
21
37
|
#include "duckdb/parser/statement/drop_statement.hpp"
|
|
38
|
+
#include "duckdb/parser/statement/execute_statement.hpp"
|
|
22
39
|
#include "duckdb/parser/statement/explain_statement.hpp"
|
|
40
|
+
#include "duckdb/parser/statement/prepare_statement.hpp"
|
|
41
|
+
#include "duckdb/parser/statement/relation_statement.hpp"
|
|
23
42
|
#include "duckdb/parser/statement/select_statement.hpp"
|
|
24
43
|
#include "duckdb/planner/operator/logical_execute.hpp"
|
|
25
44
|
#include "duckdb/planner/planner.hpp"
|
|
26
|
-
#include "duckdb/transaction/transaction_manager.hpp"
|
|
27
|
-
#include "duckdb/transaction/transaction.hpp"
|
|
28
|
-
#include "duckdb/storage/data_table.hpp"
|
|
29
|
-
#include "duckdb/main/appender.hpp"
|
|
30
|
-
#include "duckdb/main/relation.hpp"
|
|
31
|
-
#include "duckdb/parser/statement/relation_statement.hpp"
|
|
32
|
-
#include "duckdb/parallel/task_scheduler.hpp"
|
|
33
|
-
#include "duckdb/common/serializer/buffered_file_writer.hpp"
|
|
34
45
|
#include "duckdb/planner/pragma_handler.hpp"
|
|
35
|
-
#include "duckdb/
|
|
36
|
-
#include "duckdb/execution/column_binding_resolver.hpp"
|
|
37
|
-
#include "duckdb/execution/operator/helper/physical_result_collector.hpp"
|
|
38
|
-
#include "duckdb/parser/query_node/select_node.hpp"
|
|
39
|
-
#include "duckdb/parser/parsed_expression_iterator.hpp"
|
|
40
|
-
#include "duckdb/parser/statement/prepare_statement.hpp"
|
|
41
|
-
#include "duckdb/parser/statement/execute_statement.hpp"
|
|
42
|
-
#include "duckdb/common/types/column_data_collection.hpp"
|
|
43
|
-
#include "duckdb/common/preserved_error.hpp"
|
|
44
|
-
#include "duckdb/common/progress_bar/progress_bar.hpp"
|
|
45
|
-
#include "duckdb/main/error_manager.hpp"
|
|
46
|
-
#include "duckdb/main/database_manager.hpp"
|
|
46
|
+
#include "duckdb/storage/data_table.hpp"
|
|
47
47
|
#include "duckdb/transaction/meta_transaction.hpp"
|
|
48
|
-
#include "duckdb/
|
|
49
|
-
#include "duckdb/
|
|
48
|
+
#include "duckdb/transaction/transaction.hpp"
|
|
49
|
+
#include "duckdb/transaction/transaction_manager.hpp"
|
|
50
50
|
|
|
51
51
|
namespace duckdb {
|
|
52
52
|
|
|
@@ -156,8 +156,8 @@ void ClientContext::BeginQueryInternal(ClientContextLock &lock, const string &qu
|
|
|
156
156
|
PreservedError ClientContext::EndQueryInternal(ClientContextLock &lock, bool success, bool invalidate_transaction) {
|
|
157
157
|
client_data->profiler->EndQuery();
|
|
158
158
|
|
|
159
|
-
if (client_data->
|
|
160
|
-
client_data->
|
|
159
|
+
if (client_data->http_state) {
|
|
160
|
+
client_data->http_state->Reset();
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
// Notify any registered state of query end
|
|
@@ -209,6 +209,7 @@ PreservedError ClientContext::EndQueryInternal(ClientContextLock &lock, bool suc
|
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
void ClientContext::CleanupInternal(ClientContextLock &lock, BaseQueryResult *result, bool invalidate_transaction) {
|
|
212
|
+
client_data->http_state = make_unique<HTTPState>();
|
|
212
213
|
if (!active_query) {
|
|
213
214
|
// no query currently active
|
|
214
215
|
return;
|
|
@@ -717,10 +718,6 @@ unique_ptr<PendingQueryResult> ClientContext::PendingStatementOrPreparedStatemen
|
|
|
717
718
|
auto &profiler = QueryProfiler::Get(*this);
|
|
718
719
|
profiler.StartQuery(query, IsExplainAnalyze(statement ? statement.get() : prepared->unbound_statement.get()));
|
|
719
720
|
|
|
720
|
-
if (IsExplainAnalyze(statement ? statement.get() : prepared->unbound_statement.get())) {
|
|
721
|
-
client_data->http_stats = make_unique<HTTPStats>();
|
|
722
|
-
}
|
|
723
|
-
|
|
724
721
|
bool invalidate_query = true;
|
|
725
722
|
try {
|
|
726
723
|
if (statement) {
|
|
@@ -813,12 +810,14 @@ unique_ptr<QueryResult> ClientContext::Query(const string &query, bool allow_str
|
|
|
813
810
|
|
|
814
811
|
unique_ptr<QueryResult> result;
|
|
815
812
|
QueryResult *last_result = nullptr;
|
|
813
|
+
bool last_had_result = false;
|
|
816
814
|
for (idx_t i = 0; i < statements.size(); i++) {
|
|
817
815
|
auto &statement = statements[i];
|
|
818
816
|
bool is_last_statement = i + 1 == statements.size();
|
|
819
817
|
PendingQueryParameters parameters;
|
|
820
818
|
parameters.allow_stream_result = allow_stream_result && is_last_statement;
|
|
821
819
|
auto pending_query = PendingQueryInternal(*lock, std::move(statement), parameters);
|
|
820
|
+
auto has_result = pending_query->properties.return_type == StatementReturnType::QUERY_RESULT;
|
|
822
821
|
unique_ptr<QueryResult> current_result;
|
|
823
822
|
if (pending_query->HasError()) {
|
|
824
823
|
current_result = make_unique<MaterializedQueryResult>(pending_query->GetErrorObject());
|
|
@@ -826,12 +825,17 @@ unique_ptr<QueryResult> ClientContext::Query(const string &query, bool allow_str
|
|
|
826
825
|
current_result = ExecutePendingQueryInternal(*lock, *pending_query);
|
|
827
826
|
}
|
|
828
827
|
// now append the result to the list of results
|
|
829
|
-
if (!last_result) {
|
|
828
|
+
if (!last_result || !last_had_result) {
|
|
830
829
|
// first result of the query
|
|
831
830
|
result = std::move(current_result);
|
|
832
831
|
last_result = result.get();
|
|
832
|
+
last_had_result = has_result;
|
|
833
833
|
} else {
|
|
834
834
|
// later results; attach to the result chain
|
|
835
|
+
// but only if there is a result
|
|
836
|
+
if (!has_result) {
|
|
837
|
+
continue;
|
|
838
|
+
}
|
|
835
839
|
last_result->next = std::move(current_result);
|
|
836
840
|
last_result = last_result->next.get();
|
|
837
841
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#include "duckdb/main/client_data.hpp"
|
|
2
|
-
|
|
3
|
-
#include "duckdb/main/client_context_file_opener.hpp"
|
|
4
|
-
#include "duckdb/main/query_profiler.hpp"
|
|
5
|
-
#include "duckdb/common/http_stats.hpp"
|
|
6
|
-
#include "duckdb/common/random_engine.hpp"
|
|
7
|
-
#include "duckdb/catalog/catalog_search_path.hpp"
|
|
2
|
+
|
|
8
3
|
#include "duckdb/catalog/catalog.hpp"
|
|
4
|
+
#include "duckdb/catalog/catalog_search_path.hpp"
|
|
5
|
+
#include "duckdb/common/http_state.hpp"
|
|
6
|
+
#include "duckdb/common/random_engine.hpp"
|
|
9
7
|
#include "duckdb/common/serializer/buffered_file_writer.hpp"
|
|
10
8
|
#include "duckdb/main/attached_database.hpp"
|
|
9
|
+
#include "duckdb/main/client_context.hpp"
|
|
10
|
+
#include "duckdb/main/client_context_file_opener.hpp"
|
|
11
11
|
#include "duckdb/main/database.hpp"
|
|
12
12
|
#include "duckdb/main/database_manager.hpp"
|
|
13
|
+
#include "duckdb/main/query_profiler.hpp"
|
|
13
14
|
|
|
14
15
|
namespace duckdb {
|
|
15
16
|
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
#include "duckdb/common/thread.hpp"
|
|
10
10
|
#endif
|
|
11
11
|
|
|
12
|
+
#include <cstdio>
|
|
13
|
+
#include <inttypes.h>
|
|
14
|
+
|
|
12
15
|
namespace duckdb {
|
|
13
16
|
|
|
14
17
|
#define DUCKDB_GLOBAL(_PARAM) \
|
|
@@ -214,9 +217,75 @@ void DBConfig::SetDefaultMaxMemory() {
|
|
|
214
217
|
}
|
|
215
218
|
}
|
|
216
219
|
|
|
220
|
+
idx_t CGroupBandwidthQuota(idx_t physical_cores, FileSystem &fs) {
|
|
221
|
+
static constexpr const char *CPU_MAX = "/sys/fs/cgroup/cpu.max";
|
|
222
|
+
static constexpr const char *CFS_QUOTA = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us";
|
|
223
|
+
static constexpr const char *CFS_PERIOD = "/sys/fs/cgroup/cpu/cpu.cfs_period_us";
|
|
224
|
+
|
|
225
|
+
int64_t quota, period;
|
|
226
|
+
char byte_buffer[1000];
|
|
227
|
+
unique_ptr<FileHandle> handle;
|
|
228
|
+
int64_t read_bytes;
|
|
229
|
+
|
|
230
|
+
if (fs.FileExists(CPU_MAX)) {
|
|
231
|
+
// cgroup v2
|
|
232
|
+
// https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html
|
|
233
|
+
handle =
|
|
234
|
+
fs.OpenFile(CPU_MAX, FileFlags::FILE_FLAGS_READ, FileSystem::DEFAULT_LOCK, FileSystem::DEFAULT_COMPRESSION);
|
|
235
|
+
read_bytes = fs.Read(*handle, (void *)byte_buffer, 999);
|
|
236
|
+
byte_buffer[read_bytes] = '\0';
|
|
237
|
+
if (std::sscanf(byte_buffer, "%" SCNd64 " %" SCNd64 "", "a, &period) != 2) {
|
|
238
|
+
return physical_cores;
|
|
239
|
+
}
|
|
240
|
+
} else if (fs.FileExists(CFS_QUOTA) && fs.FileExists(CFS_PERIOD)) {
|
|
241
|
+
// cgroup v1
|
|
242
|
+
// https://www.kernel.org/doc/html/latest/scheduler/sched-bwc.html#management
|
|
243
|
+
|
|
244
|
+
// Read the quota, this indicates how many microseconds the CPU can be utilized by this cgroup per period
|
|
245
|
+
handle = fs.OpenFile(CFS_QUOTA, FileFlags::FILE_FLAGS_READ, FileSystem::DEFAULT_LOCK,
|
|
246
|
+
FileSystem::DEFAULT_COMPRESSION);
|
|
247
|
+
read_bytes = fs.Read(*handle, (void *)byte_buffer, 999);
|
|
248
|
+
byte_buffer[read_bytes] = '\0';
|
|
249
|
+
if (std::sscanf(byte_buffer, "%" SCNd64 "", "a) != 1) {
|
|
250
|
+
return physical_cores;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Read the time period, a cgroup can utilize the CPU up to quota microseconds every period
|
|
254
|
+
handle = fs.OpenFile(CFS_PERIOD, FileFlags::FILE_FLAGS_READ, FileSystem::DEFAULT_LOCK,
|
|
255
|
+
FileSystem::DEFAULT_COMPRESSION);
|
|
256
|
+
read_bytes = fs.Read(*handle, (void *)byte_buffer, 999);
|
|
257
|
+
byte_buffer[read_bytes] = '\0';
|
|
258
|
+
if (std::sscanf(byte_buffer, "%" SCNd64 "", &period) != 1) {
|
|
259
|
+
return physical_cores;
|
|
260
|
+
}
|
|
261
|
+
} else {
|
|
262
|
+
// No cgroup quota
|
|
263
|
+
return physical_cores;
|
|
264
|
+
}
|
|
265
|
+
if (quota > 0 && period > 0) {
|
|
266
|
+
return idx_t(std::ceil((double)quota / (double)period));
|
|
267
|
+
} else {
|
|
268
|
+
return physical_cores;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
idx_t GetSystemMaxThreadsInternal(FileSystem &fs) {
|
|
273
|
+
#ifndef DUCKDB_NO_THREADS
|
|
274
|
+
idx_t physical_cores = std::thread::hardware_concurrency();
|
|
275
|
+
#ifdef __linux__
|
|
276
|
+
auto cores_available_per_period = CGroupBandwidthQuota(physical_cores, fs);
|
|
277
|
+
return MaxValue<idx_t>(cores_available_per_period, 1);
|
|
278
|
+
#else
|
|
279
|
+
return physical_cores;
|
|
280
|
+
#endif
|
|
281
|
+
#else
|
|
282
|
+
return 1;
|
|
283
|
+
#endif
|
|
284
|
+
}
|
|
285
|
+
|
|
217
286
|
void DBConfig::SetDefaultMaxThreads() {
|
|
218
287
|
#ifndef DUCKDB_NO_THREADS
|
|
219
|
-
options.maximum_threads =
|
|
288
|
+
options.maximum_threads = GetSystemMaxThreadsInternal(*file_system);
|
|
220
289
|
#else
|
|
221
290
|
options.maximum_threads = 1;
|
|
222
291
|
#endif
|
|
@@ -115,6 +115,15 @@ ConnectionManager &ConnectionManager::Get(DatabaseInstance &db) {
|
|
|
115
115
|
return db.GetConnectionManager();
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
ClientContext *ConnectionManager::GetConnection(DatabaseInstance *db) {
|
|
119
|
+
for (auto &conn : connections) {
|
|
120
|
+
if (conn.first->db.get() == db) {
|
|
121
|
+
return conn.first;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return nullptr;
|
|
125
|
+
}
|
|
126
|
+
|
|
118
127
|
ConnectionManager &ConnectionManager::Get(ClientContext &context) {
|
|
119
128
|
return ConnectionManager::Get(DatabaseInstance::GetDatabase(context));
|
|
120
129
|
}
|
|
@@ -191,8 +200,7 @@ void DatabaseInstance::Initialize(const char *database_path, DBConfig *user_conf
|
|
|
191
200
|
}
|
|
192
201
|
|
|
193
202
|
db_manager = make_unique<DatabaseManager>(*this);
|
|
194
|
-
buffer_manager =
|
|
195
|
-
make_unique<BufferManager>(*this, config.options.temporary_directory, config.options.maximum_memory);
|
|
203
|
+
buffer_manager = make_unique<BufferManager>(*this, config.options.temporary_directory);
|
|
196
204
|
scheduler = make_unique<TaskScheduler>(*this);
|
|
197
205
|
object_cache = make_unique<ObjectCache>();
|
|
198
206
|
connection_manager = make_unique<ConnectionManager>();
|
|
@@ -271,6 +279,10 @@ BufferManager &DatabaseInstance::GetBufferManager() {
|
|
|
271
279
|
return *buffer_manager;
|
|
272
280
|
}
|
|
273
281
|
|
|
282
|
+
BufferPool &DatabaseInstance::GetBufferPool() {
|
|
283
|
+
return *config.buffer_pool;
|
|
284
|
+
}
|
|
285
|
+
|
|
274
286
|
DatabaseManager &DatabaseManager::Get(DatabaseInstance &db) {
|
|
275
287
|
return db.GetDatabaseManager();
|
|
276
288
|
}
|
|
@@ -340,6 +352,11 @@ void DatabaseInstance::Configure(DBConfig &new_config) {
|
|
|
340
352
|
if (!config.default_allocator) {
|
|
341
353
|
config.default_allocator = Allocator::DefaultAllocatorReference();
|
|
342
354
|
}
|
|
355
|
+
if (new_config.buffer_pool) {
|
|
356
|
+
config.buffer_pool = std::move(new_config.buffer_pool);
|
|
357
|
+
} else {
|
|
358
|
+
config.buffer_pool = make_shared<BufferPool>(config.options.maximum_memory);
|
|
359
|
+
}
|
|
343
360
|
}
|
|
344
361
|
|
|
345
362
|
DBConfig &DBConfig::GetConfig(ClientContext &context) {
|
|
@@ -206,8 +206,13 @@ void ExtensionHelper::InstallExtensionInternal(DBConfig &config, ClientConfig *c
|
|
|
206
206
|
if (exact_match) {
|
|
207
207
|
message += "\nAre you using a development build? In this case, extensions might not (yet) be uploaded.";
|
|
208
208
|
}
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
if (res.error() == duckdb_httplib::Error::Success) {
|
|
210
|
+
throw HTTPException(res.value(), "Failed to download extension \"%s\" at URL \"%s%s\"\n%s", extension_name,
|
|
211
|
+
url_base, url_local_part, message);
|
|
212
|
+
} else {
|
|
213
|
+
throw IOException("Failed to download extension \"%s\" at URL \"%s%s\"\n%s (ERROR %s)", extension_name,
|
|
214
|
+
url_base, url_local_part, message, to_string(res.error()));
|
|
215
|
+
}
|
|
211
216
|
}
|
|
212
217
|
auto decompressed_body = GZipFileSystem::UncompressGZIPString(res->body);
|
|
213
218
|
std::ofstream out(temp_path, std::ios::binary);
|