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
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/common/serializer/format_serializer.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/field_writer.hpp"
|
|
12
|
+
#include "duckdb/common/serializer.hpp"
|
|
13
|
+
#include "duckdb/common/serializer/enum_serializer.hpp"
|
|
14
|
+
#include "duckdb/common/serializer/serialization_traits.hpp"
|
|
15
|
+
#include "duckdb/common/types/interval.hpp"
|
|
16
|
+
#include "duckdb/common/types/string_type.hpp"
|
|
17
|
+
#include "duckdb/common/unordered_map.hpp"
|
|
18
|
+
#include "duckdb/common/unordered_set.hpp"
|
|
19
|
+
|
|
20
|
+
namespace duckdb {
|
|
21
|
+
|
|
22
|
+
class FormatSerializer {
|
|
23
|
+
protected:
|
|
24
|
+
bool serialize_enum_as_string = false;
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
// Serialize a value
|
|
28
|
+
template <class T>
|
|
29
|
+
typename std::enable_if<!std::is_enum<T>::value, void>::type WriteProperty(const char *tag, T &value) {
|
|
30
|
+
SetTag(tag);
|
|
31
|
+
WriteValue(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Serialize a range
|
|
35
|
+
template <class T>
|
|
36
|
+
typename std::enable_if<std::is_pointer<T>::value, void>::type WriteProperty(const char *tag, const T start,
|
|
37
|
+
idx_t count) {
|
|
38
|
+
SetTag(tag);
|
|
39
|
+
WriteValue(start, count);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Serialize an enum
|
|
43
|
+
template <class T>
|
|
44
|
+
typename std::enable_if<std::is_enum<T>::value, void>::type WriteProperty(const char *tag, T value) {
|
|
45
|
+
SetTag(tag);
|
|
46
|
+
if (serialize_enum_as_string) {
|
|
47
|
+
// Use the enum serializer to lookup tostring function
|
|
48
|
+
auto str = EnumSerializer::EnumToString(value);
|
|
49
|
+
WriteValue(str);
|
|
50
|
+
} else {
|
|
51
|
+
// Use the underlying type
|
|
52
|
+
WriteValue(static_cast<typename std::underlying_type<T>::type>(value));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Optional pointer
|
|
57
|
+
template <class T>
|
|
58
|
+
void WriteOptionalProperty(const char *tag, T *ptr) {
|
|
59
|
+
SetTag(tag);
|
|
60
|
+
if (ptr == nullptr) {
|
|
61
|
+
OnOptionalBegin(false);
|
|
62
|
+
OnOptionalEnd(false);
|
|
63
|
+
} else {
|
|
64
|
+
OnOptionalBegin(true);
|
|
65
|
+
WriteValue(*ptr);
|
|
66
|
+
OnOptionalEnd(true);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Optional unique_ptr
|
|
71
|
+
template <class T>
|
|
72
|
+
void WriteOptionalProperty(const char *tag, const unique_ptr<T> &ptr) {
|
|
73
|
+
SetTag(tag);
|
|
74
|
+
if (ptr == nullptr) {
|
|
75
|
+
OnOptionalBegin(false);
|
|
76
|
+
OnOptionalEnd(false);
|
|
77
|
+
} else {
|
|
78
|
+
OnOptionalBegin(true);
|
|
79
|
+
WriteValue(*ptr);
|
|
80
|
+
OnOptionalEnd(true);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected:
|
|
85
|
+
// Unique Pointer Ref
|
|
86
|
+
template <typename T>
|
|
87
|
+
void WriteValue(const unique_ptr<T> &ptr) {
|
|
88
|
+
WriteValue(ptr.get());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Pointer
|
|
92
|
+
template <typename T>
|
|
93
|
+
typename std::enable_if<std::is_pointer<T>::value, void>::type WriteValue(const T ptr) {
|
|
94
|
+
if (ptr == nullptr) {
|
|
95
|
+
WriteNull();
|
|
96
|
+
} else {
|
|
97
|
+
WriteValue(*ptr);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// data_ptr_t
|
|
102
|
+
void WriteValue(data_ptr_t ptr, idx_t count) {
|
|
103
|
+
OnListBegin(count);
|
|
104
|
+
auto end = ptr + count;
|
|
105
|
+
while (ptr != end) {
|
|
106
|
+
WriteValue(*ptr);
|
|
107
|
+
ptr++;
|
|
108
|
+
}
|
|
109
|
+
OnListEnd(count);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void WriteValue(const_data_ptr_t ptr, idx_t count) {
|
|
113
|
+
OnListBegin(count);
|
|
114
|
+
auto end = ptr + count;
|
|
115
|
+
while (ptr != end) {
|
|
116
|
+
WriteValue(*ptr);
|
|
117
|
+
ptr++;
|
|
118
|
+
}
|
|
119
|
+
OnListEnd(count);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Pair
|
|
123
|
+
template <class K, class V>
|
|
124
|
+
void WriteValue(const std::pair<K, V> &pair) {
|
|
125
|
+
OnPairBegin();
|
|
126
|
+
OnPairKeyBegin();
|
|
127
|
+
WriteValue(pair.first);
|
|
128
|
+
OnPairKeyEnd();
|
|
129
|
+
OnPairValueBegin();
|
|
130
|
+
WriteValue(pair.second);
|
|
131
|
+
OnPairValueEnd();
|
|
132
|
+
OnPairEnd();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Vector
|
|
136
|
+
template <class T>
|
|
137
|
+
void WriteValue(const vector<T> &vec) {
|
|
138
|
+
auto count = vec.size();
|
|
139
|
+
OnListBegin(count);
|
|
140
|
+
for (auto &item : vec) {
|
|
141
|
+
WriteValue(item);
|
|
142
|
+
}
|
|
143
|
+
OnListEnd(count);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// UnorderedSet
|
|
147
|
+
// Serialized the same way as a list/vector
|
|
148
|
+
template <class T, class HASH, class CMP>
|
|
149
|
+
void WriteValue(const unordered_set<T, HASH, CMP> &set) {
|
|
150
|
+
auto count = set.size();
|
|
151
|
+
OnListBegin(count);
|
|
152
|
+
for (auto &item : set) {
|
|
153
|
+
WriteValue(item);
|
|
154
|
+
}
|
|
155
|
+
OnListEnd(count);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Set
|
|
159
|
+
// Serialized the same way as a list/vector
|
|
160
|
+
template <class T, class HASH, class CMP>
|
|
161
|
+
void WriteValue(const set<T, HASH, CMP> &set) {
|
|
162
|
+
auto count = set.size();
|
|
163
|
+
OnListBegin(count);
|
|
164
|
+
for (auto &item : set) {
|
|
165
|
+
WriteValue(item);
|
|
166
|
+
}
|
|
167
|
+
OnListEnd(count);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Map
|
|
171
|
+
template <class K, class V, class HASH, class CMP>
|
|
172
|
+
void WriteValue(const std::unordered_map<K, V, HASH, CMP> &map) {
|
|
173
|
+
auto count = map.size();
|
|
174
|
+
OnMapBegin(count);
|
|
175
|
+
for (auto &item : map) {
|
|
176
|
+
OnMapEntryBegin();
|
|
177
|
+
OnMapKeyBegin();
|
|
178
|
+
WriteValue(item.first);
|
|
179
|
+
OnMapKeyEnd();
|
|
180
|
+
OnMapValueBegin();
|
|
181
|
+
WriteValue(item.second);
|
|
182
|
+
OnMapValueEnd();
|
|
183
|
+
OnMapEntryEnd();
|
|
184
|
+
}
|
|
185
|
+
OnMapEnd(count);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// class or struct implementing `FormatSerialize(FormatSerializer& FormatSerializer)`;
|
|
189
|
+
template <typename T>
|
|
190
|
+
typename std::enable_if<has_serialize_v<T>(), void>::type WriteValue(T &value) {
|
|
191
|
+
// Else, we defer to the .FormatSerialize method
|
|
192
|
+
OnObjectBegin();
|
|
193
|
+
value.FormatSerialize(*this);
|
|
194
|
+
OnObjectEnd();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Handle setting a "tag" (optional)
|
|
198
|
+
virtual void SetTag(const char *tag) {
|
|
199
|
+
(void)tag;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Hooks for subclasses to override to implement custom behavior
|
|
203
|
+
virtual void OnListBegin(idx_t count) {
|
|
204
|
+
(void)count;
|
|
205
|
+
}
|
|
206
|
+
virtual void OnListEnd(idx_t count) {
|
|
207
|
+
(void)count;
|
|
208
|
+
}
|
|
209
|
+
virtual void OnMapBegin(idx_t count) {
|
|
210
|
+
(void)count;
|
|
211
|
+
}
|
|
212
|
+
virtual void OnMapEnd(idx_t count) {
|
|
213
|
+
(void)count;
|
|
214
|
+
}
|
|
215
|
+
virtual void OnMapEntryBegin() {
|
|
216
|
+
}
|
|
217
|
+
virtual void OnMapEntryEnd() {
|
|
218
|
+
}
|
|
219
|
+
virtual void OnMapKeyBegin() {
|
|
220
|
+
}
|
|
221
|
+
virtual void OnMapKeyEnd() {
|
|
222
|
+
}
|
|
223
|
+
virtual void OnMapValueBegin() {
|
|
224
|
+
}
|
|
225
|
+
virtual void OnMapValueEnd() {
|
|
226
|
+
}
|
|
227
|
+
virtual void OnOptionalBegin(bool present) {
|
|
228
|
+
}
|
|
229
|
+
virtual void OnOptionalEnd(bool present) {
|
|
230
|
+
}
|
|
231
|
+
virtual void OnObjectBegin() {
|
|
232
|
+
}
|
|
233
|
+
virtual void OnObjectEnd() {
|
|
234
|
+
}
|
|
235
|
+
virtual void OnPairBegin() {
|
|
236
|
+
}
|
|
237
|
+
virtual void OnPairKeyBegin() {
|
|
238
|
+
}
|
|
239
|
+
virtual void OnPairKeyEnd() {
|
|
240
|
+
}
|
|
241
|
+
virtual void OnPairValueBegin() {
|
|
242
|
+
}
|
|
243
|
+
virtual void OnPairValueEnd() {
|
|
244
|
+
}
|
|
245
|
+
virtual void OnPairEnd() {
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Handle primitive types, a serializer needs to implement these.
|
|
249
|
+
virtual void WriteNull() = 0;
|
|
250
|
+
virtual void WriteValue(uint8_t value) = 0;
|
|
251
|
+
virtual void WriteValue(int8_t value) = 0;
|
|
252
|
+
virtual void WriteValue(uint16_t value) = 0;
|
|
253
|
+
virtual void WriteValue(int16_t value) = 0;
|
|
254
|
+
virtual void WriteValue(uint32_t value) = 0;
|
|
255
|
+
virtual void WriteValue(int32_t value) = 0;
|
|
256
|
+
virtual void WriteValue(uint64_t value) = 0;
|
|
257
|
+
virtual void WriteValue(int64_t value) = 0;
|
|
258
|
+
virtual void WriteValue(hugeint_t value) = 0;
|
|
259
|
+
virtual void WriteValue(float value) = 0;
|
|
260
|
+
virtual void WriteValue(double value) = 0;
|
|
261
|
+
virtual void WriteValue(interval_t value) = 0;
|
|
262
|
+
virtual void WriteValue(const string &value) = 0;
|
|
263
|
+
virtual void WriteValue(const string_t value) = 0;
|
|
264
|
+
virtual void WriteValue(const char *value) = 0;
|
|
265
|
+
virtual void WriteValue(bool value) = 0;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
} // namespace duckdb
|
|
@@ -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,19 @@ namespace duckdb {
|
|
|
21
21
|
*/
|
|
22
22
|
class StringUtil {
|
|
23
23
|
public:
|
|
24
|
+
static uint8_t GetHexValue(char c) {
|
|
25
|
+
if (c >= '0' && c <= '9') {
|
|
26
|
+
return c - '0';
|
|
27
|
+
}
|
|
28
|
+
if (c >= 'a' && c <= 'f') {
|
|
29
|
+
return c - 'a' + 10;
|
|
30
|
+
}
|
|
31
|
+
if (c >= 'A' && c <= 'F') {
|
|
32
|
+
return c - 'A' + 10;
|
|
33
|
+
}
|
|
34
|
+
throw InvalidInputException("Invalid input for hex digit: %s", string(c, 1));
|
|
35
|
+
}
|
|
36
|
+
|
|
24
37
|
DUCKDB_API static bool CharacterIsSpace(char c) {
|
|
25
38
|
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
|
|
26
39
|
}
|
|
@@ -170,6 +183,18 @@ public:
|
|
|
170
183
|
//! Equivalent to calling TopNLevenshtein followed by CandidatesMessage
|
|
171
184
|
DUCKDB_API static string CandidatesErrorMessage(const vector<string> &strings, const string &target,
|
|
172
185
|
const string &message_prefix, idx_t n = 5);
|
|
186
|
+
|
|
187
|
+
//! Returns true if two null-terminated strings are equal or point to the same address.
|
|
188
|
+
//! Returns false if only one of the strings is nullptr
|
|
189
|
+
DUCKDB_API static bool Equals(const char *s1, const char *s2) {
|
|
190
|
+
if (s1 == s2) {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
if (s1 == nullptr || s2 == nullptr) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
return strcmp(s1, s2) == 0;
|
|
197
|
+
}
|
|
173
198
|
};
|
|
174
199
|
|
|
175
200
|
} // 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
|