duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.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 +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- 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/local_file_system.cpp +64 -7
- 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 +18 -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 +12 -10
- 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/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- 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 +98 -74
- 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/join_hashtable.cpp +3 -1
- 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 +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- 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 +23 -15
- 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 +138 -45
- 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/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- 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 +27 -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/validity_mask.hpp +4 -1
- 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 +35 -20
- 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 +5 -1
- 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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include <type_traits>
|
|
3
|
+
#include "duckdb/common/vector.hpp"
|
|
4
|
+
#include "duckdb/common/unordered_map.hpp"
|
|
5
|
+
#include "duckdb/common/unordered_set.hpp"
|
|
6
|
+
|
|
7
|
+
namespace duckdb {
|
|
8
|
+
|
|
9
|
+
class FormatSerializer; // Forward declare
|
|
10
|
+
class FormatDeserializer; // Forward declare
|
|
11
|
+
|
|
12
|
+
// Backport to c++11
|
|
13
|
+
template <class...>
|
|
14
|
+
using void_t = void;
|
|
15
|
+
|
|
16
|
+
// Check for anything implementing a `void FormatSerialize(FormatSerializer &FormatSerializer)` method
|
|
17
|
+
template <typename T, typename = void_t<>>
|
|
18
|
+
struct has_serialize : std::false_type {};
|
|
19
|
+
|
|
20
|
+
template <typename T>
|
|
21
|
+
struct has_serialize<T, void_t<decltype(std::declval<T>().FormatSerialize(std::declval<FormatSerializer &>()))>>
|
|
22
|
+
: std::true_type {};
|
|
23
|
+
|
|
24
|
+
template <typename T>
|
|
25
|
+
constexpr bool has_serialize_v() {
|
|
26
|
+
return has_serialize<T>::value;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Check for anything implementing a static `T FormatDeserialize(FormatDeserializer&)` method
|
|
30
|
+
/*
|
|
31
|
+
template <typename T, typename = void_t<>>
|
|
32
|
+
struct has_deserialize : std::false_type {};
|
|
33
|
+
|
|
34
|
+
template <typename T>
|
|
35
|
+
struct has_deserialize<T, void_t<decltype(T::FormatDeserialize)>> : std::true_type {};
|
|
36
|
+
|
|
37
|
+
template <typename T>
|
|
38
|
+
constexpr bool has_deserialize_v() {
|
|
39
|
+
return has_deserialize<T>::value;
|
|
40
|
+
}*/
|
|
41
|
+
|
|
42
|
+
template <typename T, typename = T>
|
|
43
|
+
struct has_deserialize : std::false_type {};
|
|
44
|
+
|
|
45
|
+
// Accept `static unique_ptr<T> FormatDeserialize(FormatDeserializer& deserializer)`
|
|
46
|
+
template <typename T>
|
|
47
|
+
struct has_deserialize<
|
|
48
|
+
T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), unique_ptr<T>(FormatDeserializer &)>::value,
|
|
49
|
+
T>::type> : std::true_type {};
|
|
50
|
+
|
|
51
|
+
// Accept `static shared_ptr<T> FormatDeserialize(FormatDeserializer& deserializer)`
|
|
52
|
+
template <typename T>
|
|
53
|
+
struct has_deserialize<
|
|
54
|
+
T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), shared_ptr<T>(FormatDeserializer &)>::value,
|
|
55
|
+
T>::type> : std::true_type {};
|
|
56
|
+
|
|
57
|
+
// Accept `static T FormatDeserialize(FormatDeserializer& deserializer)`
|
|
58
|
+
template <typename T>
|
|
59
|
+
struct has_deserialize<
|
|
60
|
+
T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), T(FormatDeserializer &)>::value, T>::type>
|
|
61
|
+
: std::true_type {};
|
|
62
|
+
|
|
63
|
+
// Check if T is a vector, and provide access to the inner type
|
|
64
|
+
template <typename T>
|
|
65
|
+
struct is_vector : std::false_type {};
|
|
66
|
+
template <typename T>
|
|
67
|
+
struct is_vector<typename std::vector<T>> : std::true_type {
|
|
68
|
+
typedef T ELEMENT_TYPE;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Check if T is a unordered map, and provide access to the inner type
|
|
72
|
+
template <typename T>
|
|
73
|
+
struct is_unordered_map : std::false_type {};
|
|
74
|
+
template <typename... Args>
|
|
75
|
+
struct is_unordered_map<typename std::unordered_map<Args...>> : std::true_type {
|
|
76
|
+
typedef typename std::tuple_element<0, std::tuple<Args...>>::type KEY_TYPE;
|
|
77
|
+
typedef typename std::tuple_element<1, std::tuple<Args...>>::type VALUE_TYPE;
|
|
78
|
+
typedef typename std::tuple_element<2, std::tuple<Args...>>::type HASH_TYPE;
|
|
79
|
+
typedef typename std::tuple_element<3, std::tuple<Args...>>::type EQUAL_TYPE;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
template <typename T>
|
|
83
|
+
struct is_unique_ptr : std::false_type {};
|
|
84
|
+
|
|
85
|
+
template <typename T, typename D>
|
|
86
|
+
struct is_unique_ptr<unique_ptr<T, D>> : std::true_type {
|
|
87
|
+
typedef T ELEMENT_TYPE;
|
|
88
|
+
typedef D DELETER_TYPE;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
template <typename T>
|
|
92
|
+
struct is_shared_ptr : std::false_type {};
|
|
93
|
+
|
|
94
|
+
template <typename T>
|
|
95
|
+
struct is_shared_ptr<shared_ptr<T>> : std::true_type {
|
|
96
|
+
typedef T ELEMENT_TYPE;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
template <typename T>
|
|
100
|
+
struct is_pair : std::false_type {};
|
|
101
|
+
|
|
102
|
+
template <typename T, typename U>
|
|
103
|
+
struct is_pair<std::pair<T, U>> : std::true_type {
|
|
104
|
+
typedef T FIRST_TYPE;
|
|
105
|
+
typedef U SECOND_TYPE;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
template <typename T>
|
|
109
|
+
struct is_unordered_set : std::false_type {};
|
|
110
|
+
template <typename... Args>
|
|
111
|
+
struct is_unordered_set<std::unordered_set<Args...>> : std::true_type {
|
|
112
|
+
typedef typename std::tuple_element<0, std::tuple<Args...>>::type ELEMENT_TYPE;
|
|
113
|
+
typedef typename std::tuple_element<1, std::tuple<Args...>>::type HASH_TYPE;
|
|
114
|
+
typedef typename std::tuple_element<2, std::tuple<Args...>>::type EQUAL_TYPE;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
template <typename T>
|
|
118
|
+
struct is_set : std::false_type {};
|
|
119
|
+
template <typename... Args>
|
|
120
|
+
struct is_set<std::set<Args...>> : std::true_type {
|
|
121
|
+
typedef typename std::tuple_element<0, std::tuple<Args...>>::type ELEMENT_TYPE;
|
|
122
|
+
typedef typename std::tuple_element<1, std::tuple<Args...>>::type HASH_TYPE;
|
|
123
|
+
typedef typename std::tuple_element<2, std::tuple<Args...>>::type EQUAL_TYPE;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace duckdb
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
+
#include "duckdb/catalog/catalog.hpp"
|
|
11
12
|
#include "duckdb/common/common.hpp"
|
|
12
13
|
#include "duckdb/common/exception.hpp"
|
|
13
14
|
#include "duckdb/common/vector.hpp"
|
|
@@ -21,6 +22,8 @@ private:
|
|
|
21
22
|
uint64_t version = 0L;
|
|
22
23
|
|
|
23
24
|
public:
|
|
25
|
+
bool is_query_plan = false;
|
|
26
|
+
|
|
24
27
|
virtual ~Serializer() {
|
|
25
28
|
}
|
|
26
29
|
|
|
@@ -111,6 +114,16 @@ public:
|
|
|
111
114
|
//! Reads [read_size] bytes into the buffer
|
|
112
115
|
virtual void ReadData(data_ptr_t buffer, idx_t read_size) = 0;
|
|
113
116
|
|
|
117
|
+
//! Gets the context for the deserializer
|
|
118
|
+
virtual ClientContext &GetContext() {
|
|
119
|
+
throw InternalException("This deserializer does not have a client-context");
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
//! Gets the catalog for the deserializer
|
|
123
|
+
virtual Catalog *GetCatalog() {
|
|
124
|
+
return nullptr;
|
|
125
|
+
};
|
|
126
|
+
|
|
114
127
|
template <class T>
|
|
115
128
|
T Read() {
|
|
116
129
|
T value;
|
|
@@ -21,6 +21,21 @@ namespace duckdb {
|
|
|
21
21
|
*/
|
|
22
22
|
class StringUtil {
|
|
23
23
|
public:
|
|
24
|
+
static string GenerateRandomName(idx_t length = 16);
|
|
25
|
+
|
|
26
|
+
static uint8_t GetHexValue(char c) {
|
|
27
|
+
if (c >= '0' && c <= '9') {
|
|
28
|
+
return c - '0';
|
|
29
|
+
}
|
|
30
|
+
if (c >= 'a' && c <= 'f') {
|
|
31
|
+
return c - 'a' + 10;
|
|
32
|
+
}
|
|
33
|
+
if (c >= 'A' && c <= 'F') {
|
|
34
|
+
return c - 'A' + 10;
|
|
35
|
+
}
|
|
36
|
+
throw InvalidInputException("Invalid input for hex digit: %s", string(c, 1));
|
|
37
|
+
}
|
|
38
|
+
|
|
24
39
|
DUCKDB_API static bool CharacterIsSpace(char c) {
|
|
25
40
|
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
|
|
26
41
|
}
|
|
@@ -170,6 +185,18 @@ public:
|
|
|
170
185
|
//! Equivalent to calling TopNLevenshtein followed by CandidatesMessage
|
|
171
186
|
DUCKDB_API static string CandidatesErrorMessage(const vector<string> &strings, const string &target,
|
|
172
187
|
const string &message_prefix, idx_t n = 5);
|
|
188
|
+
|
|
189
|
+
//! Returns true if two null-terminated strings are equal or point to the same address.
|
|
190
|
+
//! Returns false if only one of the strings is nullptr
|
|
191
|
+
DUCKDB_API static bool Equals(const char *s1, const char *s2) {
|
|
192
|
+
if (s1 == s2) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (s1 == nullptr || s2 == nullptr) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
return strcmp(s1, s2) == 0;
|
|
199
|
+
}
|
|
173
200
|
};
|
|
174
201
|
|
|
175
202
|
} // namespace duckdb
|
|
@@ -25,7 +25,7 @@ public:
|
|
|
25
25
|
//! Extracts the nth bit from bit string; the first (leftmost) bit is indexed 0
|
|
26
26
|
DUCKDB_API static idx_t GetBit(string_t bit_string, idx_t n);
|
|
27
27
|
//! Sets the nth bit in bit string to newvalue; the first (leftmost) bit is indexed 0
|
|
28
|
-
DUCKDB_API static void SetBit(
|
|
28
|
+
DUCKDB_API static void SetBit(string_t &bit_string, idx_t n, idx_t new_value);
|
|
29
29
|
//! Returns first starting index of the specified substring within bits, or zero if it's not present.
|
|
30
30
|
DUCKDB_API static idx_t BitPosition(string_t substring, string_t bits);
|
|
31
31
|
//! Converts bits to a string, writing the output to the designated output string.
|
|
@@ -36,9 +36,13 @@ public:
|
|
|
36
36
|
DUCKDB_API static bool TryGetBitStringSize(string_t str, idx_t &result_size, string *error_message);
|
|
37
37
|
//! Convert a string to a bit. This function should ONLY be called after calling GetBitSize, since it does NOT
|
|
38
38
|
//! perform data validation.
|
|
39
|
-
DUCKDB_API static void ToBit(string_t str,
|
|
39
|
+
DUCKDB_API static void ToBit(string_t str, string_t &output);
|
|
40
40
|
DUCKDB_API static string ToBit(string_t str);
|
|
41
|
+
//! Creates a new bitstring of determined length
|
|
42
|
+
DUCKDB_API static void BitString(const string_t &input, const idx_t &len, string_t &result);
|
|
41
43
|
DUCKDB_API static void SetEmptyBitString(string_t &target, string_t &input);
|
|
44
|
+
DUCKDB_API static void SetEmptyBitString(string_t &target, idx_t len);
|
|
45
|
+
DUCKDB_API static idx_t ComputeBitstringLen(idx_t len);
|
|
42
46
|
|
|
43
47
|
DUCKDB_API static void RightShift(const string_t &bit_string, const idx_t &shif, string_t &result);
|
|
44
48
|
DUCKDB_API static void LeftShift(const string_t &bit_string, const idx_t &shift, string_t &result);
|
|
@@ -47,11 +51,12 @@ public:
|
|
|
47
51
|
DUCKDB_API static void BitwiseXor(const string_t &rhs, const string_t &lhs, string_t &result);
|
|
48
52
|
DUCKDB_API static void BitwiseNot(const string_t &rhs, string_t &result);
|
|
49
53
|
|
|
54
|
+
DUCKDB_API static void Verify(const string_t &input);
|
|
55
|
+
|
|
50
56
|
private:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
DUCKDB_API static void SetBit(string_t &bit_string, idx_t n, idx_t new_value);
|
|
57
|
+
static void Finalize(string_t &str);
|
|
58
|
+
static idx_t GetBitInternal(string_t bit_string, idx_t n);
|
|
59
|
+
static void SetBitInternal(string_t &bit_string, idx_t n, idx_t new_value);
|
|
60
|
+
static idx_t GetBitIndex(idx_t n);
|
|
56
61
|
};
|
|
57
62
|
} // namespace duckdb
|
|
@@ -101,8 +101,44 @@ public:
|
|
|
101
101
|
static dtime_t Add(dtime_t left, interval_t right, date_t &date);
|
|
102
102
|
|
|
103
103
|
//! Comparison operators
|
|
104
|
-
static bool Equals(interval_t left, interval_t right);
|
|
105
|
-
static bool GreaterThan(interval_t left, interval_t right);
|
|
106
|
-
static bool GreaterThanEquals(interval_t left, interval_t right);
|
|
104
|
+
inline static bool Equals(const interval_t &left, const interval_t &right);
|
|
105
|
+
inline static bool GreaterThan(const interval_t &left, const interval_t &right);
|
|
107
106
|
};
|
|
107
|
+
static void NormalizeIntervalEntries(interval_t input, int64_t &months, int64_t &days, int64_t µs) {
|
|
108
|
+
int64_t extra_months_d = input.days / Interval::DAYS_PER_MONTH;
|
|
109
|
+
int64_t extra_months_micros = input.micros / Interval::MICROS_PER_MONTH;
|
|
110
|
+
input.days -= extra_months_d * Interval::DAYS_PER_MONTH;
|
|
111
|
+
input.micros -= extra_months_micros * Interval::MICROS_PER_MONTH;
|
|
112
|
+
|
|
113
|
+
int64_t extra_days_micros = input.micros / Interval::MICROS_PER_DAY;
|
|
114
|
+
input.micros -= extra_days_micros * Interval::MICROS_PER_DAY;
|
|
115
|
+
|
|
116
|
+
months = input.months + extra_months_d + extra_months_micros;
|
|
117
|
+
days = input.days + extra_days_micros;
|
|
118
|
+
micros = input.micros;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
bool Interval::Equals(const interval_t &left, const interval_t &right) {
|
|
122
|
+
return left.months == right.months && left.days == right.days && left.micros == right.micros;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
bool Interval::GreaterThan(const interval_t &left, const interval_t &right) {
|
|
126
|
+
int64_t lmonths, ldays, lmicros;
|
|
127
|
+
int64_t rmonths, rdays, rmicros;
|
|
128
|
+
NormalizeIntervalEntries(left, lmonths, ldays, lmicros);
|
|
129
|
+
NormalizeIntervalEntries(right, rmonths, rdays, rmicros);
|
|
130
|
+
|
|
131
|
+
if (lmonths > rmonths) {
|
|
132
|
+
return true;
|
|
133
|
+
} else if (lmonths < rmonths) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (ldays > rdays) {
|
|
137
|
+
return true;
|
|
138
|
+
} else if (ldays < rdays) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return lmicros > rmicros;
|
|
142
|
+
}
|
|
143
|
+
|
|
108
144
|
} // namespace duckdb
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/common/types/list_segment.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#include "duckdb/common/allocator.hpp"
|
|
10
|
+
#include "duckdb/common/constants.hpp"
|
|
11
|
+
#include "duckdb/common/types/vector.hpp"
|
|
12
|
+
|
|
13
|
+
#pragma once
|
|
14
|
+
|
|
15
|
+
namespace duckdb {
|
|
16
|
+
|
|
17
|
+
struct ListSegment {
|
|
18
|
+
uint16_t count;
|
|
19
|
+
uint16_t capacity;
|
|
20
|
+
ListSegment *next;
|
|
21
|
+
};
|
|
22
|
+
struct LinkedList {
|
|
23
|
+
LinkedList() {};
|
|
24
|
+
LinkedList(idx_t total_capacity_p, ListSegment *first_segment_p, ListSegment *last_segment_p)
|
|
25
|
+
: total_capacity(total_capacity_p), first_segment(first_segment_p), last_segment(last_segment_p) {
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
idx_t total_capacity = 0;
|
|
29
|
+
ListSegment *first_segment = nullptr;
|
|
30
|
+
ListSegment *last_segment = nullptr;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// forward declarations
|
|
34
|
+
struct WriteDataToSegment;
|
|
35
|
+
struct ReadDataFromSegment;
|
|
36
|
+
struct CopyDataFromSegment;
|
|
37
|
+
typedef ListSegment *(*create_segment_t)(WriteDataToSegment &write_data_to_segment, Allocator &allocator,
|
|
38
|
+
vector<AllocatedData> &owning_vector, const uint16_t &capacity);
|
|
39
|
+
typedef void (*write_data_to_segment_t)(WriteDataToSegment &write_data_to_segment, Allocator &allocator,
|
|
40
|
+
vector<AllocatedData> &owning_vector, ListSegment *segment, Vector &input,
|
|
41
|
+
idx_t &entry_idx, idx_t &count);
|
|
42
|
+
typedef void (*read_data_from_segment_t)(ReadDataFromSegment &read_data_from_segment, const ListSegment *segment,
|
|
43
|
+
Vector &result, idx_t &total_count);
|
|
44
|
+
typedef ListSegment *(*copy_data_from_segment_t)(CopyDataFromSegment ©_data_from_segment, const ListSegment *source,
|
|
45
|
+
Allocator &allocator, vector<AllocatedData> &owning_vector);
|
|
46
|
+
|
|
47
|
+
struct WriteDataToSegment {
|
|
48
|
+
create_segment_t create_segment;
|
|
49
|
+
write_data_to_segment_t segment_function;
|
|
50
|
+
vector<WriteDataToSegment> child_functions;
|
|
51
|
+
void AppendRow(Allocator &allocator, vector<AllocatedData> &owning_vector, LinkedList *linked_list, Vector &input,
|
|
52
|
+
idx_t &entry_idx, idx_t &count);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
struct ReadDataFromSegment {
|
|
56
|
+
read_data_from_segment_t segment_function;
|
|
57
|
+
vector<ReadDataFromSegment> child_functions;
|
|
58
|
+
void BuildListVector(LinkedList *linked_list, Vector &result, idx_t &initial_total_count);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
struct CopyDataFromSegment {
|
|
62
|
+
copy_data_from_segment_t segment_function;
|
|
63
|
+
vector<CopyDataFromSegment> child_functions;
|
|
64
|
+
void CopyLinkedList(const LinkedList *source_list, LinkedList &target_list, Allocator &allocator,
|
|
65
|
+
vector<AllocatedData> &owning_vector);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
void GetSegmentDataFunctions(WriteDataToSegment &write_data_to_segment, ReadDataFromSegment &read_data_from_segment,
|
|
69
|
+
CopyDataFromSegment ©_data_from_segment, const LogicalType &type);
|
|
70
|
+
} // namespace duckdb
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/assert.hpp"
|
|
12
12
|
#include "duckdb/common/constants.hpp"
|
|
13
|
+
#include "duckdb/common/helper.hpp"
|
|
13
14
|
|
|
14
15
|
#include <cstring>
|
|
15
16
|
|
|
@@ -117,10 +118,79 @@ public:
|
|
|
117
118
|
|
|
118
119
|
void Verify() const;
|
|
119
120
|
void VerifyNull() const;
|
|
121
|
+
|
|
122
|
+
struct StringComparisonOperators {
|
|
123
|
+
static inline bool Equals(const string_t &a, const string_t &b) {
|
|
124
|
+
#ifdef DUCKDB_DEBUG_NO_INLINE
|
|
125
|
+
if (a.GetSize() != b.GetSize())
|
|
126
|
+
return false;
|
|
127
|
+
return (memcmp(a.GetDataUnsafe(), b.GetDataUnsafe(), a.GetSize()) == 0);
|
|
128
|
+
#endif
|
|
129
|
+
uint64_t A = Load<uint64_t>((const_data_ptr_t)&a);
|
|
130
|
+
uint64_t B = Load<uint64_t>((const_data_ptr_t)&b);
|
|
131
|
+
if (A != B) {
|
|
132
|
+
// Either length or prefix are different -> not equal
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// they have the same length and same prefix!
|
|
136
|
+
A = Load<uint64_t>((const_data_ptr_t)&a + 8u);
|
|
137
|
+
B = Load<uint64_t>((const_data_ptr_t)&b + 8u);
|
|
138
|
+
if (A == B) {
|
|
139
|
+
// either they are both inlined (so compare equal) or point to the same string (so compare equal)
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
if (!a.IsInlined()) {
|
|
143
|
+
// 'long' strings of the same length -> compare pointed value
|
|
144
|
+
if (memcmp(a.value.pointer.ptr, b.value.pointer.ptr, a.GetSize()) == 0) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// either they are short string of same length but different content
|
|
149
|
+
// or they point to string with different content
|
|
150
|
+
// either way, they can't represent the same underlying string
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
// compare up to shared length. if still the same, compare lengths
|
|
154
|
+
static bool GreaterThan(const string_t &left, const string_t &right) {
|
|
155
|
+
const uint32_t left_length = left.GetSize();
|
|
156
|
+
const uint32_t right_length = right.GetSize();
|
|
157
|
+
const uint32_t min_length = std::min<uint32_t>(left_length, right_length);
|
|
158
|
+
|
|
159
|
+
#ifndef DUCKDB_DEBUG_NO_INLINE
|
|
160
|
+
uint32_t A = Load<uint32_t>((const_data_ptr_t)left.GetPrefix());
|
|
161
|
+
uint32_t B = Load<uint32_t>((const_data_ptr_t)right.GetPrefix());
|
|
162
|
+
|
|
163
|
+
// Utility to move 0xa1b2c3d4 into 0xd4c3b2a1, basically inverting the order byte-a-byte
|
|
164
|
+
auto bswap = [](uint32_t v) -> uint32_t {
|
|
165
|
+
uint32_t t1 = (v >> 16u) | (v << 16u);
|
|
166
|
+
uint32_t t2 = t1 & 0x00ff00ff;
|
|
167
|
+
uint32_t t3 = t1 & 0xff00ff00;
|
|
168
|
+
return (t2 << 8u) | (t3 >> 8u);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// Check on prefix -----
|
|
172
|
+
// We dont' need to mask since:
|
|
173
|
+
// if the prefix is greater(after bswap), it will stay greater regardless of the extra bytes
|
|
174
|
+
// if the prefix is smaller(after bswap), it will stay smaller regardless of the extra bytes
|
|
175
|
+
// if the prefix is equal, the extra bytes are guaranteed to be /0 for the shorter one
|
|
176
|
+
|
|
177
|
+
if (A != B)
|
|
178
|
+
return bswap(A) > bswap(B);
|
|
179
|
+
#endif
|
|
180
|
+
auto memcmp_res = memcmp(left.GetDataUnsafe(), right.GetDataUnsafe(), min_length);
|
|
181
|
+
return memcmp_res > 0 || (memcmp_res == 0 && left_length > right_length);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
bool operator==(const string_t &r) const {
|
|
186
|
+
return StringComparisonOperators::Equals(*this, r);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
bool operator>(const string_t &r) const {
|
|
190
|
+
return StringComparisonOperators::GreaterThan(*this, r);
|
|
191
|
+
}
|
|
120
192
|
bool operator<(const string_t &r) const {
|
|
121
|
-
|
|
122
|
-
auto r_str = r.GetString();
|
|
123
|
-
return this_str < r_str;
|
|
193
|
+
return r > *this;
|
|
124
194
|
}
|
|
125
195
|
|
|
126
196
|
private:
|
|
@@ -39,6 +39,9 @@ public:
|
|
|
39
39
|
DUCKDB_API static string ConversionError(const string &str);
|
|
40
40
|
DUCKDB_API static string ConversionError(string_t str);
|
|
41
41
|
|
|
42
|
+
DUCKDB_API static dtime_t FromTimeMs(int64_t time_ms);
|
|
43
|
+
DUCKDB_API static dtime_t FromTimeNs(int64_t time_ns);
|
|
44
|
+
|
|
42
45
|
private:
|
|
43
46
|
static bool TryConvertInternal(const char *buf, idx_t len, idx_t &pos, dtime_t &result, bool strict);
|
|
44
47
|
};
|
|
@@ -323,9 +323,12 @@ public:
|
|
|
323
323
|
public:
|
|
324
324
|
DUCKDB_API void Resize(idx_t old_size, idx_t new_size);
|
|
325
325
|
|
|
326
|
-
DUCKDB_API void
|
|
326
|
+
DUCKDB_API void SliceInPlace(const ValidityMask &other, idx_t target_offset, idx_t source_offset, idx_t count);
|
|
327
|
+
DUCKDB_API void Slice(const ValidityMask &other, idx_t source_offset, idx_t count);
|
|
327
328
|
DUCKDB_API void Combine(const ValidityMask &other, idx_t count);
|
|
328
329
|
DUCKDB_API string ToString(idx_t count) const;
|
|
330
|
+
|
|
331
|
+
DUCKDB_API static bool IsAligned(idx_t count);
|
|
329
332
|
};
|
|
330
333
|
|
|
331
334
|
} // namespace duckdb
|
|
@@ -23,6 +23,7 @@ class CastFunctionSet;
|
|
|
23
23
|
class Deserializer;
|
|
24
24
|
class Serializer;
|
|
25
25
|
struct GetCastFunctionInput;
|
|
26
|
+
struct ExtraValueInfo;
|
|
26
27
|
|
|
27
28
|
//! The Value object holds a single arbitrary value of any type that can be
|
|
28
29
|
//! stored in the database.
|
|
@@ -66,7 +67,7 @@ public:
|
|
|
66
67
|
inline LogicalType &GetTypeMutable() {
|
|
67
68
|
return type_;
|
|
68
69
|
}
|
|
69
|
-
inline const LogicalType &type() const {
|
|
70
|
+
inline const LogicalType &type() const { // NOLINT
|
|
70
71
|
return type_;
|
|
71
72
|
}
|
|
72
73
|
inline bool IsNull() const {
|
|
@@ -77,6 +78,10 @@ public:
|
|
|
77
78
|
DUCKDB_API static Value MinimumValue(const LogicalType &type);
|
|
78
79
|
//! Create the highest possible value of a given type (numeric only)
|
|
79
80
|
DUCKDB_API static Value MaximumValue(const LogicalType &type);
|
|
81
|
+
//! Create the negative infinite value of a given type (numeric only)
|
|
82
|
+
DUCKDB_API static Value NegativeInfinity(const LogicalType &type);
|
|
83
|
+
//! Create the positive infinite value of a given type (numeric only)
|
|
84
|
+
DUCKDB_API static Value Infinity(const LogicalType &type);
|
|
80
85
|
//! Create a Numeric value of the specified type with the specified value
|
|
81
86
|
DUCKDB_API static Value Numeric(const LogicalType &type, int64_t value);
|
|
82
87
|
DUCKDB_API static Value Numeric(const LogicalType &type, hugeint_t value);
|
|
@@ -150,17 +155,17 @@ public:
|
|
|
150
155
|
//! Cannot be called with an empty list, use either EMPTYLIST or LIST with a type instead
|
|
151
156
|
DUCKDB_API static Value LIST(vector<Value> values);
|
|
152
157
|
//! Create a list value with the given entries
|
|
153
|
-
DUCKDB_API static Value LIST(LogicalType child_type, vector<Value> values);
|
|
158
|
+
DUCKDB_API static Value LIST(const LogicalType &child_type, vector<Value> values);
|
|
154
159
|
//! Create an empty list with the specified child-type
|
|
155
|
-
DUCKDB_API static Value EMPTYLIST(LogicalType child_type);
|
|
160
|
+
DUCKDB_API static Value EMPTYLIST(const LogicalType &child_type);
|
|
156
161
|
//! Create a map value with the given entries
|
|
157
|
-
DUCKDB_API static Value MAP(LogicalType child_type, vector<Value> values);
|
|
162
|
+
DUCKDB_API static Value MAP(const LogicalType &child_type, vector<Value> values);
|
|
158
163
|
//! Create a union value from a selected value and a tag from a set of alternatives.
|
|
159
164
|
DUCKDB_API static Value UNION(child_list_t<LogicalType> members, uint8_t tag, Value value);
|
|
160
165
|
|
|
161
166
|
//! Create a blob Value from a data pointer and a length: no bytes are interpreted
|
|
162
167
|
DUCKDB_API static Value BLOB(const_data_ptr_t data, idx_t len);
|
|
163
|
-
DUCKDB_API static Value BLOB_RAW(const string &data) {
|
|
168
|
+
DUCKDB_API static Value BLOB_RAW(const string &data) { // NOLINT
|
|
164
169
|
return Value::BLOB((const_data_ptr_t)data.c_str(), data.size());
|
|
165
170
|
}
|
|
166
171
|
//! Creates a blob by casting a specified string to a blob (i.e. interpreting \x characters)
|
|
@@ -225,6 +230,8 @@ public:
|
|
|
225
230
|
|
|
226
231
|
//! Serializes a Value to a stand-alone binary blob
|
|
227
232
|
DUCKDB_API void Serialize(Serializer &serializer) const;
|
|
233
|
+
DUCKDB_API void FormatSerialize(FormatSerializer &serializer) const;
|
|
234
|
+
DUCKDB_API static Value FormatDeserialize(FormatDeserializer &deserializer);
|
|
228
235
|
//! Deserializes a Value from a blob
|
|
229
236
|
DUCKDB_API static Value Deserialize(Deserializer &source);
|
|
230
237
|
|
|
@@ -277,11 +284,8 @@ public:
|
|
|
277
284
|
|
|
278
285
|
private:
|
|
279
286
|
//! The logical of the value
|
|
280
|
-
LogicalType type_;
|
|
287
|
+
LogicalType type_; // NOLINT
|
|
281
288
|
|
|
282
|
-
#if DUCKDB_API_VERSION < DUCKDB_API_0_3_2
|
|
283
|
-
public:
|
|
284
|
-
#endif
|
|
285
289
|
//! Whether or not the value is NULL
|
|
286
290
|
bool is_null;
|
|
287
291
|
|
|
@@ -297,21 +301,17 @@ public:
|
|
|
297
301
|
uint32_t uinteger;
|
|
298
302
|
uint64_t ubigint;
|
|
299
303
|
hugeint_t hugeint;
|
|
300
|
-
float float_;
|
|
301
|
-
double double_;
|
|
304
|
+
float float_; // NOLINT
|
|
305
|
+
double double_; // NOLINT
|
|
302
306
|
uintptr_t pointer;
|
|
303
307
|
uint64_t hash;
|
|
304
308
|
date_t date;
|
|
305
309
|
dtime_t time;
|
|
306
310
|
timestamp_t timestamp;
|
|
307
311
|
interval_t interval;
|
|
308
|
-
} value_;
|
|
309
|
-
|
|
310
|
-
//! The value of the object, if it is of a variable size type
|
|
311
|
-
string str_value;
|
|
312
|
+
} value_; // NOLINT
|
|
312
313
|
|
|
313
|
-
|
|
314
|
-
vector<Value> list_value;
|
|
314
|
+
shared_ptr<ExtraValueInfo> value_info_; // NOLINT
|
|
315
315
|
|
|
316
316
|
private:
|
|
317
317
|
template <class T>
|
|
@@ -535,37 +535,6 @@ DUCKDB_API timestamp_t Value::GetValueUnsafe() const;
|
|
|
535
535
|
template <>
|
|
536
536
|
DUCKDB_API interval_t Value::GetValueUnsafe() const;
|
|
537
537
|
|
|
538
|
-
template <>
|
|
539
|
-
DUCKDB_API int8_t &Value::GetReferenceUnsafe();
|
|
540
|
-
template <>
|
|
541
|
-
DUCKDB_API int16_t &Value::GetReferenceUnsafe();
|
|
542
|
-
template <>
|
|
543
|
-
DUCKDB_API int32_t &Value::GetReferenceUnsafe();
|
|
544
|
-
template <>
|
|
545
|
-
DUCKDB_API int64_t &Value::GetReferenceUnsafe();
|
|
546
|
-
template <>
|
|
547
|
-
DUCKDB_API hugeint_t &Value::GetReferenceUnsafe();
|
|
548
|
-
template <>
|
|
549
|
-
DUCKDB_API uint8_t &Value::GetReferenceUnsafe();
|
|
550
|
-
template <>
|
|
551
|
-
DUCKDB_API uint16_t &Value::GetReferenceUnsafe();
|
|
552
|
-
template <>
|
|
553
|
-
DUCKDB_API uint32_t &Value::GetReferenceUnsafe();
|
|
554
|
-
template <>
|
|
555
|
-
DUCKDB_API uint64_t &Value::GetReferenceUnsafe();
|
|
556
|
-
template <>
|
|
557
|
-
DUCKDB_API float &Value::GetReferenceUnsafe();
|
|
558
|
-
template <>
|
|
559
|
-
DUCKDB_API double &Value::GetReferenceUnsafe();
|
|
560
|
-
template <>
|
|
561
|
-
DUCKDB_API date_t &Value::GetReferenceUnsafe();
|
|
562
|
-
template <>
|
|
563
|
-
DUCKDB_API dtime_t &Value::GetReferenceUnsafe();
|
|
564
|
-
template <>
|
|
565
|
-
DUCKDB_API timestamp_t &Value::GetReferenceUnsafe();
|
|
566
|
-
template <>
|
|
567
|
-
DUCKDB_API interval_t &Value::GetReferenceUnsafe();
|
|
568
|
-
|
|
569
538
|
template <>
|
|
570
539
|
DUCKDB_API bool Value::IsNan(float input);
|
|
571
540
|
template <>
|
|
@@ -162,6 +162,9 @@ public:
|
|
|
162
162
|
//! Deserializes a blob back into a Vector
|
|
163
163
|
DUCKDB_API void Deserialize(idx_t count, Deserializer &source);
|
|
164
164
|
|
|
165
|
+
DUCKDB_API void FormatSerialize(FormatSerializer &serializer, idx_t count);
|
|
166
|
+
DUCKDB_API void FormatDeserialize(FormatDeserializer &deserializer, idx_t count);
|
|
167
|
+
|
|
165
168
|
// Getters
|
|
166
169
|
inline VectorType GetVectorType() const {
|
|
167
170
|
return vector_type;
|
|
@@ -312,7 +315,6 @@ struct FlatVector {
|
|
|
312
315
|
return !vector.validity.RowIsValid(idx);
|
|
313
316
|
}
|
|
314
317
|
DUCKDB_API static const SelectionVector *IncrementalSelectionVector();
|
|
315
|
-
static Value GetValuesFromOffsets(Vector &values, vector<idx_t> &offsets);
|
|
316
318
|
};
|
|
317
319
|
|
|
318
320
|
struct ListVector {
|