duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.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
|
@@ -16,14 +16,19 @@
|
|
|
16
16
|
namespace duckdb {
|
|
17
17
|
class FieldWriter;
|
|
18
18
|
class FieldReader;
|
|
19
|
+
class FormatDeserializer;
|
|
20
|
+
class FormatSerializer;
|
|
19
21
|
|
|
20
|
-
enum ResultModifierType : uint8_t {
|
|
22
|
+
enum class ResultModifierType : uint8_t {
|
|
21
23
|
LIMIT_MODIFIER = 1,
|
|
22
24
|
ORDER_MODIFIER = 2,
|
|
23
25
|
DISTINCT_MODIFIER = 3,
|
|
24
26
|
LIMIT_PERCENT_MODIFIER = 4
|
|
25
27
|
};
|
|
26
28
|
|
|
29
|
+
const char *ToString(ResultModifierType value);
|
|
30
|
+
ResultModifierType ResultModifierFromString(const char *value);
|
|
31
|
+
|
|
27
32
|
//! A ResultModifier
|
|
28
33
|
class ResultModifier {
|
|
29
34
|
public:
|
|
@@ -46,6 +51,9 @@ public:
|
|
|
46
51
|
virtual void Serialize(FieldWriter &writer) const = 0;
|
|
47
52
|
//! Deserializes a blob back into a ResultModifier
|
|
48
53
|
static unique_ptr<ResultModifier> Deserialize(Deserializer &source);
|
|
54
|
+
|
|
55
|
+
virtual void FormatSerialize(FormatSerializer &serializer) const;
|
|
56
|
+
static unique_ptr<ResultModifier> FormatDeserialize(FormatDeserializer &deserializer);
|
|
49
57
|
};
|
|
50
58
|
|
|
51
59
|
//! Single node in ORDER BY statement
|
|
@@ -65,6 +73,9 @@ public:
|
|
|
65
73
|
void Serialize(Serializer &serializer) const;
|
|
66
74
|
string ToString() const;
|
|
67
75
|
static OrderByNode Deserialize(Deserializer &source);
|
|
76
|
+
|
|
77
|
+
void FormatSerialize(FormatSerializer &serializer) const;
|
|
78
|
+
static OrderByNode FormatDeserialize(FormatDeserializer &deserializer);
|
|
68
79
|
};
|
|
69
80
|
|
|
70
81
|
class LimitModifier : public ResultModifier {
|
|
@@ -82,6 +93,9 @@ public:
|
|
|
82
93
|
unique_ptr<ResultModifier> Copy() const override;
|
|
83
94
|
void Serialize(FieldWriter &writer) const override;
|
|
84
95
|
static unique_ptr<ResultModifier> Deserialize(FieldReader &reader);
|
|
96
|
+
|
|
97
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
98
|
+
static unique_ptr<ResultModifier> FormatDeserialize(FormatDeserializer &deserializer);
|
|
85
99
|
};
|
|
86
100
|
|
|
87
101
|
class OrderModifier : public ResultModifier {
|
|
@@ -97,6 +111,9 @@ public:
|
|
|
97
111
|
unique_ptr<ResultModifier> Copy() const override;
|
|
98
112
|
void Serialize(FieldWriter &writer) const override;
|
|
99
113
|
static unique_ptr<ResultModifier> Deserialize(FieldReader &reader);
|
|
114
|
+
|
|
115
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
116
|
+
static unique_ptr<ResultModifier> FormatDeserialize(FormatDeserializer &deserializer);
|
|
100
117
|
};
|
|
101
118
|
|
|
102
119
|
class DistinctModifier : public ResultModifier {
|
|
@@ -112,6 +129,9 @@ public:
|
|
|
112
129
|
unique_ptr<ResultModifier> Copy() const override;
|
|
113
130
|
void Serialize(FieldWriter &writer) const override;
|
|
114
131
|
static unique_ptr<ResultModifier> Deserialize(FieldReader &reader);
|
|
132
|
+
|
|
133
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
134
|
+
static unique_ptr<ResultModifier> FormatDeserialize(FormatDeserializer &deserializer);
|
|
115
135
|
};
|
|
116
136
|
|
|
117
137
|
class LimitPercentModifier : public ResultModifier {
|
|
@@ -129,6 +149,9 @@ public:
|
|
|
129
149
|
unique_ptr<ResultModifier> Copy() const override;
|
|
130
150
|
void Serialize(FieldWriter &writer) const override;
|
|
131
151
|
static unique_ptr<ResultModifier> Deserialize(FieldReader &reader);
|
|
152
|
+
|
|
153
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
154
|
+
static unique_ptr<ResultModifier> FormatDeserialize(FormatDeserializer &deserializer);
|
|
132
155
|
};
|
|
133
156
|
|
|
134
157
|
} // namespace duckdb
|
|
@@ -19,7 +19,8 @@ namespace duckdb {
|
|
|
19
19
|
//! SQLStatement is the base class of any type of SQL statement.
|
|
20
20
|
class SQLStatement {
|
|
21
21
|
public:
|
|
22
|
-
explicit SQLStatement(StatementType type) : type(type) {
|
|
22
|
+
explicit SQLStatement(StatementType type) : type(type) {
|
|
23
|
+
}
|
|
23
24
|
virtual ~SQLStatement() {
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/parser/statement/multi_statement.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/parser/sql_statement.hpp"
|
|
12
|
+
|
|
13
|
+
namespace duckdb {
|
|
14
|
+
|
|
15
|
+
class MultiStatement : public SQLStatement {
|
|
16
|
+
public:
|
|
17
|
+
MultiStatement();
|
|
18
|
+
|
|
19
|
+
vector<unique_ptr<SQLStatement>> statements;
|
|
20
|
+
|
|
21
|
+
protected:
|
|
22
|
+
MultiStatement(const MultiStatement &other);
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
unique_ptr<SQLStatement> Copy() const override;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
} // namespace duckdb
|
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/unordered_map.hpp"
|
|
12
12
|
#include "duckdb/parser/parsed_expression.hpp"
|
|
13
|
-
#include "duckdb/parser/query_node.hpp"
|
|
14
13
|
#include "duckdb/parser/sql_statement.hpp"
|
|
15
14
|
#include "duckdb/parser/tableref.hpp"
|
|
15
|
+
#include "duckdb/parser/query_node.hpp"
|
|
16
16
|
|
|
17
17
|
namespace duckdb {
|
|
18
18
|
|
|
19
19
|
class QueryNode;
|
|
20
|
+
class FormatSerializer;
|
|
21
|
+
class FormatDeserializer;
|
|
20
22
|
|
|
21
23
|
//! SelectStatement is a typical SELECT clause
|
|
22
24
|
class SelectStatement : public SQLStatement {
|
|
@@ -42,5 +44,8 @@ public:
|
|
|
42
44
|
static unique_ptr<SelectStatement> Deserialize(Deserializer &source);
|
|
43
45
|
//! Whether or not the statements are equivalent
|
|
44
46
|
bool Equals(const SQLStatement *other) const;
|
|
47
|
+
|
|
48
|
+
void FormatSerialize(FormatSerializer &serializer) const;
|
|
49
|
+
static unique_ptr<SelectStatement> FormatDeserialize(FormatDeserializer &deserializer);
|
|
45
50
|
};
|
|
46
51
|
} // namespace duckdb
|
|
@@ -38,5 +38,9 @@ public:
|
|
|
38
38
|
void Serialize(FieldWriter &serializer) const override;
|
|
39
39
|
//! Deserializes a blob back into a BaseTableRef
|
|
40
40
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
41
|
+
|
|
42
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
43
|
+
|
|
44
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
41
45
|
};
|
|
42
46
|
} // namespace duckdb
|
|
@@ -27,5 +27,7 @@ public:
|
|
|
27
27
|
void Serialize(FieldWriter &serializer) const override;
|
|
28
28
|
//! Deserializes a blob back into a DummyTableRef
|
|
29
29
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
30
|
+
|
|
31
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
30
32
|
};
|
|
31
33
|
} // namespace duckdb
|
|
@@ -37,5 +37,8 @@ public:
|
|
|
37
37
|
void Serialize(FieldWriter &serializer) const override;
|
|
38
38
|
//! Deserializes a blob back into a ExpressionListRef
|
|
39
39
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
40
|
+
|
|
41
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
42
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
40
43
|
};
|
|
41
44
|
} // namespace duckdb
|
|
@@ -47,5 +47,8 @@ public:
|
|
|
47
47
|
void Serialize(FieldWriter &serializer) const override;
|
|
48
48
|
//! Deserializes a blob back into a JoinRef
|
|
49
49
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
50
|
+
|
|
51
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
52
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
50
53
|
};
|
|
51
54
|
} // namespace duckdb
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
#include "duckdb/parser/tableref/emptytableref.hpp"
|
|
3
3
|
#include "duckdb/parser/tableref/expressionlistref.hpp"
|
|
4
4
|
#include "duckdb/parser/tableref/joinref.hpp"
|
|
5
|
+
#include "duckdb/parser/tableref/pivotref.hpp"
|
|
5
6
|
#include "duckdb/parser/tableref/subqueryref.hpp"
|
|
6
7
|
#include "duckdb/parser/tableref/table_function_ref.hpp"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/parser/tableref/pivotref.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/parser/tableref.hpp"
|
|
12
|
+
|
|
13
|
+
namespace duckdb {
|
|
14
|
+
|
|
15
|
+
struct PivotColumnEntry {
|
|
16
|
+
//! The set of values to match on
|
|
17
|
+
vector<Value> values;
|
|
18
|
+
//! The star expression (UNPIVOT only)
|
|
19
|
+
unique_ptr<ParsedExpression> star_expr;
|
|
20
|
+
//! The alias of the pivot column entry
|
|
21
|
+
string alias;
|
|
22
|
+
|
|
23
|
+
bool Equals(const PivotColumnEntry &other) const;
|
|
24
|
+
void Serialize(Serializer &serializer) const;
|
|
25
|
+
PivotColumnEntry Copy() const;
|
|
26
|
+
static PivotColumnEntry Deserialize(Deserializer &source);
|
|
27
|
+
|
|
28
|
+
void FormatSerialize(FormatSerializer &serializer) const;
|
|
29
|
+
static PivotColumnEntry FormatDeserialize(FormatDeserializer &source);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
struct PivotColumn {
|
|
33
|
+
//! The set of expressions to pivot on
|
|
34
|
+
vector<unique_ptr<ParsedExpression>> pivot_expressions;
|
|
35
|
+
//! The set of unpivot names
|
|
36
|
+
vector<string> unpivot_names;
|
|
37
|
+
//! The set of values to pivot on
|
|
38
|
+
vector<PivotColumnEntry> entries;
|
|
39
|
+
//! The enum to read pivot values from (if any)
|
|
40
|
+
string pivot_enum;
|
|
41
|
+
|
|
42
|
+
string ToString() const;
|
|
43
|
+
bool Equals(const PivotColumn &other) const;
|
|
44
|
+
void Serialize(Serializer &serializer) const;
|
|
45
|
+
PivotColumn Copy() const;
|
|
46
|
+
static PivotColumn Deserialize(Deserializer &source);
|
|
47
|
+
|
|
48
|
+
void FormatSerialize(FormatSerializer &serializer) const;
|
|
49
|
+
static PivotColumn FormatDeserialize(FormatDeserializer &source);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//! Represents a PIVOT or UNPIVOT expression
|
|
53
|
+
class PivotRef : public TableRef {
|
|
54
|
+
public:
|
|
55
|
+
explicit PivotRef() : TableRef(TableReferenceType::PIVOT), include_nulls(false) {
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//! The source table of the pivot
|
|
59
|
+
unique_ptr<TableRef> source;
|
|
60
|
+
//! The aggregates to compute over the pivot (PIVOT only)
|
|
61
|
+
vector<unique_ptr<ParsedExpression>> aggregates;
|
|
62
|
+
//! The names of the unpivot expressions (UNPIVOT only)
|
|
63
|
+
vector<string> unpivot_names;
|
|
64
|
+
//! The set of pivots
|
|
65
|
+
vector<PivotColumn> pivots;
|
|
66
|
+
//! The groups to pivot over. If none are specified all columns not included in the pivots/aggregate are chosen.
|
|
67
|
+
vector<string> groups;
|
|
68
|
+
//! Aliases for the column names
|
|
69
|
+
vector<string> column_name_alias;
|
|
70
|
+
//! Whether or not to include nulls in the result (UNPIVOT only)
|
|
71
|
+
bool include_nulls;
|
|
72
|
+
|
|
73
|
+
public:
|
|
74
|
+
string ToString() const override;
|
|
75
|
+
bool Equals(const TableRef *other_p) const override;
|
|
76
|
+
|
|
77
|
+
unique_ptr<TableRef> Copy() override;
|
|
78
|
+
|
|
79
|
+
//! Serializes a blob into a JoinRef
|
|
80
|
+
void Serialize(FieldWriter &serializer) const override;
|
|
81
|
+
//! Deserializes a blob back into a JoinRef
|
|
82
|
+
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
83
|
+
|
|
84
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
85
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
86
|
+
};
|
|
87
|
+
} // namespace duckdb
|
|
@@ -32,5 +32,8 @@ public:
|
|
|
32
32
|
void Serialize(FieldWriter &serializer) const override;
|
|
33
33
|
//! Deserializes a blob back into a SubqueryRef
|
|
34
34
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
35
|
+
|
|
36
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
37
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
35
38
|
};
|
|
36
39
|
} // namespace duckdb
|
|
@@ -40,5 +40,8 @@ public:
|
|
|
40
40
|
void Serialize(FieldWriter &serializer) const override;
|
|
41
41
|
//! Deserializes a blob back into a BaseTableRef
|
|
42
42
|
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
|
43
|
+
|
|
44
|
+
void FormatSerialize(FormatSerializer &serializer) const override;
|
|
45
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
|
|
43
46
|
};
|
|
44
47
|
} // namespace duckdb
|
|
@@ -48,8 +48,10 @@ public:
|
|
|
48
48
|
DUCKDB_API virtual void Serialize(FieldWriter &writer) const = 0;
|
|
49
49
|
//! Deserializes a blob back into a TableRef
|
|
50
50
|
DUCKDB_API static unique_ptr<TableRef> Deserialize(Deserializer &source);
|
|
51
|
-
|
|
52
51
|
//! Copy the properties of this table ref to the target
|
|
53
52
|
void CopyProperties(TableRef &target) const;
|
|
53
|
+
|
|
54
|
+
virtual void FormatSerialize(FormatSerializer &serializer) const;
|
|
55
|
+
static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &deserializer);
|
|
54
56
|
};
|
|
55
57
|
} // namespace duckdb
|
|
@@ -41,6 +41,7 @@ class SetVariableStatement;
|
|
|
41
41
|
class ResetVariableStatement;
|
|
42
42
|
class LoadStatement;
|
|
43
43
|
class LogicalPlanStatement;
|
|
44
|
+
class MultiStatement;
|
|
44
45
|
|
|
45
46
|
//===--------------------------------------------------------------------===//
|
|
46
47
|
// Query Node
|
|
@@ -94,6 +95,7 @@ class SubqueryRef;
|
|
|
94
95
|
class TableFunctionRef;
|
|
95
96
|
class EmptyTableRef;
|
|
96
97
|
class ExpressionListRef;
|
|
98
|
+
class PivotRef;
|
|
97
99
|
|
|
98
100
|
//===--------------------------------------------------------------------===//
|
|
99
101
|
// Other
|
|
@@ -32,15 +32,23 @@ struct CommonTableExpressionInfo;
|
|
|
32
32
|
struct GroupingExpressionMap;
|
|
33
33
|
class OnConflictInfo;
|
|
34
34
|
class UpdateSetInfo;
|
|
35
|
+
struct PivotColumn;
|
|
35
36
|
|
|
36
37
|
//! The transformer class is responsible for transforming the internal Postgres
|
|
37
38
|
//! parser representation into the DuckDB representation
|
|
38
39
|
class Transformer {
|
|
39
40
|
friend class StackChecker;
|
|
40
41
|
|
|
42
|
+
struct CreatePivotEntry {
|
|
43
|
+
string enum_name;
|
|
44
|
+
unique_ptr<SelectNode> base;
|
|
45
|
+
unique_ptr<ParsedExpression> column;
|
|
46
|
+
};
|
|
47
|
+
|
|
41
48
|
public:
|
|
42
49
|
explicit Transformer(idx_t max_expression_depth_p);
|
|
43
50
|
explicit Transformer(Transformer *parent);
|
|
51
|
+
~Transformer();
|
|
44
52
|
|
|
45
53
|
//! Transforms a Postgres parse tree into a set of SQL Statements
|
|
46
54
|
bool TransformParseTree(duckdb_libpgquery::PGList *tree, vector<unique_ptr<SQLStatement>> &statements);
|
|
@@ -59,6 +67,15 @@ private:
|
|
|
59
67
|
case_insensitive_map_t<idx_t> named_param_map;
|
|
60
68
|
//! Holds window expressions defined by name. We need those when transforming the expressions referring to them.
|
|
61
69
|
unordered_map<string, duckdb_libpgquery::PGWindowDef *> window_clauses;
|
|
70
|
+
//! The set of pivot entries to create
|
|
71
|
+
vector<unique_ptr<CreatePivotEntry>> pivot_entries;
|
|
72
|
+
//! Sets of stored CTEs, if any
|
|
73
|
+
vector<CommonTableExpressionMap *> stored_cte_map;
|
|
74
|
+
//! Whether or not we are currently binding a window definition
|
|
75
|
+
bool in_window_definition = false;
|
|
76
|
+
|
|
77
|
+
void Clear();
|
|
78
|
+
bool InWindowDefinition();
|
|
62
79
|
|
|
63
80
|
void SetParamCount(idx_t new_count) {
|
|
64
81
|
if (parent) {
|
|
@@ -91,6 +108,12 @@ private:
|
|
|
91
108
|
return parent ? parent->HasNamedParameters() : !named_param_map.empty();
|
|
92
109
|
}
|
|
93
110
|
|
|
111
|
+
void AddPivotEntry(string enum_name, unique_ptr<SelectNode> source, unique_ptr<ParsedExpression> column);
|
|
112
|
+
unique_ptr<SQLStatement> GenerateCreateEnumStmt(unique_ptr<CreatePivotEntry> entry);
|
|
113
|
+
bool HasPivotEntries();
|
|
114
|
+
idx_t PivotEntryCount();
|
|
115
|
+
void ExtractCTEsRecursive(CommonTableExpressionMap &cte_map);
|
|
116
|
+
|
|
94
117
|
private:
|
|
95
118
|
//! Transforms a Postgres statement into a single SQL statement
|
|
96
119
|
unique_ptr<SQLStatement> TransformStatement(duckdb_libpgquery::PGNode *stmt);
|
|
@@ -163,6 +186,10 @@ private:
|
|
|
163
186
|
unique_ptr<ExecuteStatement> TransformExecute(duckdb_libpgquery::PGNode *node);
|
|
164
187
|
unique_ptr<CallStatement> TransformCall(duckdb_libpgquery::PGNode *node);
|
|
165
188
|
unique_ptr<DropStatement> TransformDeallocate(duckdb_libpgquery::PGNode *node);
|
|
189
|
+
unique_ptr<QueryNode> TransformPivotStatement(duckdb_libpgquery::PGSelectStmt *stmt);
|
|
190
|
+
unique_ptr<SQLStatement> CreatePivotStatement(unique_ptr<SQLStatement> statement);
|
|
191
|
+
PivotColumn TransformPivotColumn(duckdb_libpgquery::PGPivot *pivot);
|
|
192
|
+
vector<PivotColumn> TransformPivotList(duckdb_libpgquery::PGList *list);
|
|
166
193
|
|
|
167
194
|
//===--------------------------------------------------------------------===//
|
|
168
195
|
// SetStatement Transform
|
|
@@ -179,6 +206,7 @@ private:
|
|
|
179
206
|
//===--------------------------------------------------------------------===//
|
|
180
207
|
//! Transform a Postgres duckdb_libpgquery::T_PGSelectStmt node into a QueryNode
|
|
181
208
|
unique_ptr<QueryNode> TransformSelectNode(duckdb_libpgquery::PGSelectStmt *node);
|
|
209
|
+
unique_ptr<QueryNode> TransformSelectInternal(duckdb_libpgquery::PGSelectStmt *node);
|
|
182
210
|
|
|
183
211
|
//===--------------------------------------------------------------------===//
|
|
184
212
|
// Expression Transform
|
|
@@ -256,6 +284,7 @@ private:
|
|
|
256
284
|
//===--------------------------------------------------------------------===//
|
|
257
285
|
OnCreateConflict TransformOnConflict(duckdb_libpgquery::PGOnCreateConflict conflict);
|
|
258
286
|
string TransformAlias(duckdb_libpgquery::PGAlias *root, vector<string> &column_name_alias);
|
|
287
|
+
vector<string> TransformStringList(duckdb_libpgquery::PGList *list);
|
|
259
288
|
void TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause, CommonTableExpressionMap &cte_map);
|
|
260
289
|
unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr *node,
|
|
261
290
|
CommonTableExpressionInfo &info);
|
|
@@ -276,6 +305,8 @@ private:
|
|
|
276
305
|
unique_ptr<TableRef> TransformRangeFunction(duckdb_libpgquery::PGRangeFunction *root);
|
|
277
306
|
//! Transform a Postgres join node into a TableRef
|
|
278
307
|
unique_ptr<TableRef> TransformJoin(duckdb_libpgquery::PGJoinExpr *root);
|
|
308
|
+
//! Transform a Postgres pivot node into a TableRef
|
|
309
|
+
unique_ptr<TableRef> TransformPivot(duckdb_libpgquery::PGPivotExpr *root);
|
|
279
310
|
//! Transform a table producing subquery into a TableRef
|
|
280
311
|
unique_ptr<TableRef> TransformRangeSubselect(duckdb_libpgquery::PGRangeSubselect *root);
|
|
281
312
|
//! Transform a VALUES list into a set of expressions
|
|
@@ -307,6 +338,8 @@ private:
|
|
|
307
338
|
void TransformWindowFrame(duckdb_libpgquery::PGWindowDef *window_spec, WindowExpression *expr);
|
|
308
339
|
|
|
309
340
|
unique_ptr<SampleOptions> TransformSampleOptions(duckdb_libpgquery::PGNode *options);
|
|
341
|
+
//! Returns true if an expression is only a star (i.e. "*", without any other decorators)
|
|
342
|
+
bool ExpressionIsEmptyStar(ParsedExpression &expr);
|
|
310
343
|
|
|
311
344
|
private:
|
|
312
345
|
//! Current stack depth
|
|
@@ -141,6 +141,8 @@ public:
|
|
|
141
141
|
|
|
142
142
|
//! Add all the bindings from a BindContext to this BindContext. The other BindContext is destroyed in the process.
|
|
143
143
|
void AddContext(BindContext other);
|
|
144
|
+
//! For semi and anti joins we remove the binding context of the right table after binding the condition.
|
|
145
|
+
void RemoveContext(vector<std::pair<string, duckdb::Binding *>> &other_bindings_list);
|
|
144
146
|
|
|
145
147
|
//! Gets a binding of the specified name. Returns a nullptr and sets the out_error if the binding could not be
|
|
146
148
|
//! found.
|
|
@@ -73,7 +73,6 @@ struct CorrelatedColumnInfo {
|
|
|
73
73
|
*/
|
|
74
74
|
class Binder : public std::enable_shared_from_this<Binder> {
|
|
75
75
|
friend class ExpressionBinder;
|
|
76
|
-
friend class SelectBinder;
|
|
77
76
|
friend class RecursiveSubqueryPlanner;
|
|
78
77
|
|
|
79
78
|
public:
|
|
@@ -185,6 +184,9 @@ public:
|
|
|
185
184
|
BindingMode GetBindingMode();
|
|
186
185
|
void AddTableName(string table_name);
|
|
187
186
|
const unordered_set<string> &GetTableNames();
|
|
187
|
+
SQLStatement *GetRootStatement() {
|
|
188
|
+
return root_statement;
|
|
189
|
+
}
|
|
188
190
|
|
|
189
191
|
void SetCanContainNulls(bool can_contain_nulls);
|
|
190
192
|
|
|
@@ -253,8 +255,8 @@ private:
|
|
|
253
255
|
BoundStatement Bind(DetachStatement &stmt);
|
|
254
256
|
|
|
255
257
|
BoundStatement BindReturning(vector<unique_ptr<ParsedExpression>> returning_list, TableCatalogEntry *table,
|
|
256
|
-
|
|
257
|
-
BoundStatement result);
|
|
258
|
+
const string &alias, idx_t update_table_index,
|
|
259
|
+
unique_ptr<LogicalOperator> child_operator, BoundStatement result);
|
|
258
260
|
|
|
259
261
|
unique_ptr<QueryNode> BindTableMacro(FunctionExpression &function, TableMacroCatalogEntry *macro_func, idx_t depth);
|
|
260
262
|
|
|
@@ -275,6 +277,12 @@ private:
|
|
|
275
277
|
unique_ptr<BoundTableRef> Bind(TableFunctionRef &ref);
|
|
276
278
|
unique_ptr<BoundTableRef> Bind(EmptyTableRef &ref);
|
|
277
279
|
unique_ptr<BoundTableRef> Bind(ExpressionListRef &ref);
|
|
280
|
+
unique_ptr<BoundTableRef> Bind(PivotRef &expr);
|
|
281
|
+
|
|
282
|
+
unique_ptr<SelectNode> BindPivot(PivotRef &expr, vector<unique_ptr<ParsedExpression>> all_columns);
|
|
283
|
+
unique_ptr<SelectNode> BindUnpivot(Binder &child_binder, PivotRef &expr,
|
|
284
|
+
vector<unique_ptr<ParsedExpression>> all_columns,
|
|
285
|
+
unique_ptr<ParsedExpression> &where_clause);
|
|
278
286
|
|
|
279
287
|
bool BindTableFunctionParameters(TableFunctionCatalogEntry &table_function,
|
|
280
288
|
vector<unique_ptr<ParsedExpression>> &expressions, vector<LogicalType> &arguments,
|
|
@@ -333,13 +341,16 @@ private:
|
|
|
333
341
|
void ExpandStarExpressions(vector<unique_ptr<ParsedExpression>> &select_list,
|
|
334
342
|
vector<unique_ptr<ParsedExpression>> &new_select_list);
|
|
335
343
|
void ExpandStarExpression(unique_ptr<ParsedExpression> expr, vector<unique_ptr<ParsedExpression>> &new_select_list);
|
|
336
|
-
bool FindStarExpression(ParsedExpression &expr, StarExpression **star);
|
|
344
|
+
bool FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpression **star, bool is_root, bool in_columns);
|
|
337
345
|
void ReplaceStarExpression(unique_ptr<ParsedExpression> &expr, unique_ptr<ParsedExpression> &replacement);
|
|
346
|
+
void BindWhereStarExpression(unique_ptr<ParsedExpression> &expr);
|
|
338
347
|
|
|
339
348
|
//! If only a schema name is provided (e.g. "a.b") then figure out if "a" is a schema or a catalog name
|
|
340
349
|
void BindSchemaOrCatalog(string &catalog_name, string &schema_name);
|
|
341
350
|
SchemaCatalogEntry *BindCreateSchema(CreateInfo &info);
|
|
342
351
|
|
|
352
|
+
unique_ptr<BoundQueryNode> BindSelectNode(SelectNode &statement, unique_ptr<BoundTableRef> from_table);
|
|
353
|
+
|
|
343
354
|
public:
|
|
344
355
|
// This should really be a private constructor, but make_shared does not allow it...
|
|
345
356
|
// If you are thinking about calling this, you should probably call Binder::CreateBinder
|
|
@@ -65,6 +65,9 @@ public:
|
|
|
65
65
|
|
|
66
66
|
//! List of order nodes
|
|
67
67
|
vector<BoundOrderByNode> orders;
|
|
68
|
+
|
|
69
|
+
unique_ptr<BoundOrderModifier> Copy() const;
|
|
70
|
+
static bool Equals(const BoundOrderModifier *left, const BoundOrderModifier *right);
|
|
68
71
|
};
|
|
69
72
|
|
|
70
73
|
class BoundDistinctModifier : public BoundResultModifier {
|
|
@@ -25,10 +25,13 @@ public:
|
|
|
25
25
|
vector<unique_ptr<Expression>> children;
|
|
26
26
|
//! The bound function data (if any)
|
|
27
27
|
unique_ptr<FunctionData> bind_info;
|
|
28
|
+
//! The aggregate type (distinct or non-distinct)
|
|
28
29
|
AggregateType aggr_type;
|
|
29
30
|
|
|
30
31
|
//! Filter for this aggregate
|
|
31
32
|
unique_ptr<Expression> filter;
|
|
33
|
+
//! The order by expression for this aggregate - if any
|
|
34
|
+
unique_ptr<BoundOrderModifier> order_bys;
|
|
32
35
|
|
|
33
36
|
public:
|
|
34
37
|
bool IsDistinct() const {
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/planner/expression_binder/base_select_binder.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/case_insensitive_map.hpp"
|
|
12
|
+
#include "duckdb/parser/expression_map.hpp"
|
|
13
|
+
#include "duckdb/planner/expression_binder.hpp"
|
|
14
|
+
|
|
15
|
+
namespace duckdb {
|
|
16
|
+
class BoundColumnRefExpression;
|
|
17
|
+
class WindowExpression;
|
|
18
|
+
|
|
19
|
+
class BoundSelectNode;
|
|
20
|
+
|
|
21
|
+
struct BoundGroupInformation {
|
|
22
|
+
expression_map_t<idx_t> map;
|
|
23
|
+
case_insensitive_map_t<idx_t> alias_map;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//! The BaseSelectBinder is the base binder of the SELECT, HAVING and QUALIFY binders. It can bind aggregates and window
|
|
27
|
+
//! functions.
|
|
28
|
+
class BaseSelectBinder : public ExpressionBinder {
|
|
29
|
+
public:
|
|
30
|
+
BaseSelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
|
|
31
|
+
case_insensitive_map_t<idx_t> alias_map);
|
|
32
|
+
BaseSelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info);
|
|
33
|
+
|
|
34
|
+
bool BoundAggregates() {
|
|
35
|
+
return bound_aggregate;
|
|
36
|
+
}
|
|
37
|
+
void ResetBindings() {
|
|
38
|
+
this->bound_aggregate = false;
|
|
39
|
+
this->bound_columns.clear();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
protected:
|
|
43
|
+
BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
|
|
44
|
+
bool root_expression = false) override;
|
|
45
|
+
|
|
46
|
+
BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth) override;
|
|
47
|
+
|
|
48
|
+
bool inside_window;
|
|
49
|
+
bool bound_aggregate = false;
|
|
50
|
+
|
|
51
|
+
BoundSelectNode &node;
|
|
52
|
+
BoundGroupInformation &info;
|
|
53
|
+
case_insensitive_map_t<idx_t> alias_map;
|
|
54
|
+
|
|
55
|
+
protected:
|
|
56
|
+
BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth);
|
|
57
|
+
BindResult BindGroupingFunction(OperatorExpression &op, idx_t depth) override;
|
|
58
|
+
BindResult BindWindow(WindowExpression &expr, idx_t depth);
|
|
59
|
+
|
|
60
|
+
idx_t TryBindGroup(ParsedExpression &expr, idx_t depth);
|
|
61
|
+
BindResult BindGroup(ParsedExpression &expr, idx_t depth, idx_t group_index);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
} // namespace duckdb
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
-
#include "duckdb/planner/expression_binder/
|
|
11
|
+
#include "duckdb/planner/expression_binder/base_select_binder.hpp"
|
|
12
12
|
#include "duckdb/planner/expression_binder/column_alias_binder.hpp"
|
|
13
13
|
#include "duckdb/common/enums/aggregate_handling.hpp"
|
|
14
14
|
|
|
15
15
|
namespace duckdb {
|
|
16
16
|
|
|
17
17
|
//! The HAVING binder is responsible for binding an expression within the HAVING clause of a SQL statement
|
|
18
|
-
class HavingBinder : public
|
|
18
|
+
class HavingBinder : public BaseSelectBinder {
|
|
19
19
|
public:
|
|
20
20
|
HavingBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
|
|
21
21
|
case_insensitive_map_t<idx_t> &alias_map, AggregateHandling aggregate_handling);
|
|
@@ -32,10 +32,13 @@ public:
|
|
|
32
32
|
idx_t MaxCount() const {
|
|
33
33
|
return max_count;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
35
|
bool HasExtraList() const {
|
|
37
36
|
return extra_list;
|
|
38
37
|
}
|
|
38
|
+
const vector<Binder *> &GetBinders() const {
|
|
39
|
+
return binders;
|
|
40
|
+
}
|
|
41
|
+
|
|
39
42
|
unique_ptr<Expression> CreateExtraReference(unique_ptr<ParsedExpression> expr);
|
|
40
43
|
|
|
41
44
|
private:
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
-
#include "duckdb/planner/expression_binder/
|
|
11
|
+
#include "duckdb/planner/expression_binder/base_select_binder.hpp"
|
|
12
12
|
#include "duckdb/planner/expression_binder/column_alias_binder.hpp"
|
|
13
13
|
|
|
14
14
|
namespace duckdb {
|
|
15
15
|
|
|
16
16
|
//! The QUALIFY binder is responsible for binding an expression within the QUALIFY clause of a SQL statement
|
|
17
|
-
class QualifyBinder : public
|
|
17
|
+
class QualifyBinder : public BaseSelectBinder {
|
|
18
18
|
public:
|
|
19
19
|
QualifyBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
|
|
20
20
|
case_insensitive_map_t<idx_t> &alias_map);
|