duckdb 0.8.1-dev0.0 → 0.8.1-dev111.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/package.json +1 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -1
- package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
- package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
- package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
- package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
- package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
- package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
- package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
- package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
- package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
- package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
- package/src/duckdb/src/catalog/catalog.cpp +0 -4
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -0
- package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
- package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
- package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +183 -94
- package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -2
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
- package/src/duckdb/src/common/checksum.cpp +1 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
- package/src/duckdb/src/common/crypto/md5.cpp +9 -9
- package/src/duckdb/src/common/field_writer.cpp +1 -1
- package/src/duckdb/src/common/file_system.cpp +15 -2
- package/src/duckdb/src/common/fsst.cpp +11 -6
- package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
- package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
- package/src/duckdb/src/common/local_file_system.cpp +11 -11
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
- package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
- package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
- package/src/duckdb/src/common/serializer.cpp +1 -1
- package/src/duckdb/src/common/sort/comparators.cpp +1 -1
- package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
- package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
- package/src/duckdb/src/common/types/bit.cpp +5 -5
- package/src/duckdb/src/common/types/blob.cpp +8 -8
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +2 -2
- package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
- package/src/duckdb/src/common/types/list_segment.cpp +77 -49
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/value.cpp +2 -2
- package/src/duckdb/src/common/types/vector.cpp +101 -101
- package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
- package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
- package/src/duckdb/src/common/types.cpp +44 -33
- package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
- package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
- package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
- package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +43 -43
- package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
- package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
- package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
- package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +83 -119
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
- package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
- package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
- package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
- package/src/duckdb/src/execution/expression_executor.cpp +33 -28
- package/src/duckdb/src/execution/index/art/art.cpp +30 -32
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
- package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
- package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
- package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
- package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
- package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
- package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
- package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
- package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
- package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
- package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
- package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
- package/src/duckdb/src/function/scalar_function.cpp +3 -3
- package/src/duckdb/src/function/table/arrow.cpp +4 -4
- package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
- package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
- package/src/duckdb/src/function/table/glob.cpp +1 -1
- package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
- package/src/duckdb/src/function/table/range.cpp +4 -4
- package/src/duckdb/src/function/table/read_csv.cpp +4 -7
- package/src/duckdb/src/function/table/repeat.cpp +2 -2
- package/src/duckdb/src/function/table/repeat_row.cpp +2 -2
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
- package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
- package/src/duckdb/src/function/table/table_scan.cpp +2 -2
- package/src/duckdb/src/function/table/unnest.cpp +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
- package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
- package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
- package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
- package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
- package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
- package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
- package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
- package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.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/patas/patas_analyze.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
- package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
- package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
- package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
- package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
- package/src/duckdb/src/main/capi/config-c.cpp +1 -1
- package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
- package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
- package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
- package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
- package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
- package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
- package/src/duckdb/src/main/capi/result-c.cpp +23 -23
- package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
- package/src/duckdb/src/main/client_context.cpp +3 -3
- package/src/duckdb/src/main/database_manager.cpp +1 -1
- package/src/duckdb/src/main/error_manager.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
- package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
- package/src/duckdb/src/main/relation.cpp +1 -1
- package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
- package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
- package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
- package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
- package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
- package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
- package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
- package/src/duckdb/src/parallel/executor.cpp +1 -1
- package/src/duckdb/src/parser/base_expression.cpp +2 -5
- package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
- package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
- package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
- package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
- package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
- package/src/duckdb/src/parser/parser.cpp +3 -3
- package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
- package/src/duckdb/src/parser/query_node.cpp +7 -6
- package/src/duckdb/src/parser/result_modifier.cpp +25 -18
- package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
- package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
- package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
- package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
- package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
- package/src/duckdb/src/parser/tableref.cpp +12 -3
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
- package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
- package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
- package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
- package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
- package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
- package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
- package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
- package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
- package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
- package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
- package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
- package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
- package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
- package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
- package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
- package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
- package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
- package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
- package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
- package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
- package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
- package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
- package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
- package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
- package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
- package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
- package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +27 -27
- package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
- package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
- package/src/duckdb/src/parser/transformer.cpp +46 -46
- package/src/duckdb/src/planner/bind_context.cpp +6 -6
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +14 -7
- package/src/duckdb/src/planner/binder.cpp +1 -1
- package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
- package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
- package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
- package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
- package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
- package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
- package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
- package/src/duckdb/src/planner/expression.cpp +15 -0
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
- package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
- package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
- package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +3 -4
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
- package/src/duckdb/src/planner/table_filter.cpp +1 -1
- package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
- package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
- package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
- package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
- package/src/duckdb/src/storage/compression/rle.cpp +8 -8
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
- package/src/duckdb/src/storage/data_table.cpp +2 -2
- package/src/duckdb/src/storage/index.cpp +1 -3
- package/src/duckdb/src/storage/local_storage.cpp +2 -1
- package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
- package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
- package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
- package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
- package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
- package/src/duckdb/src/storage/table/row_group.cpp +4 -4
- package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
- package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
- package/src/duckdb/src/storage/wal_replay.cpp +1 -1
- package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
- package/src/duckdb/src/transaction/commit_state.cpp +8 -8
- package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
- package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
- package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
- package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
- package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -57,17 +57,16 @@ unique_ptr<ParsedExpression> Transformer::TransformBinaryOperator(string op, uni
|
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
60
|
-
unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgquery::PGAExpr
|
61
|
-
|
62
|
-
auto name = string((reinterpret_cast<duckdb_libpgquery::PGValue *>(root->name->head->data.ptr_value))->val.str);
|
60
|
+
unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgquery::PGAExpr &root) {
|
61
|
+
auto name = string(PGPointerCast<duckdb_libpgquery::PGValue>(root.name->head->data.ptr_value)->val.str);
|
63
62
|
|
64
|
-
switch (root
|
63
|
+
switch (root.kind) {
|
65
64
|
case duckdb_libpgquery::PG_AEXPR_OP_ALL:
|
66
65
|
case duckdb_libpgquery::PG_AEXPR_OP_ANY: {
|
67
66
|
// left=ANY(right)
|
68
67
|
// we turn this into left=ANY((SELECT UNNEST(right)))
|
69
|
-
auto left_expr = TransformExpression(root
|
70
|
-
auto right_expr = TransformExpression(root
|
68
|
+
auto left_expr = TransformExpression(root.lexpr);
|
69
|
+
auto right_expr = TransformExpression(root.rexpr);
|
71
70
|
|
72
71
|
auto subquery_expr = make_uniq<SubqueryExpression>();
|
73
72
|
auto select_statement = make_uniq<SelectStatement>();
|
@@ -82,9 +81,9 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
82
81
|
subquery_expr->subquery_type = SubqueryType::ANY;
|
83
82
|
subquery_expr->child = std::move(left_expr);
|
84
83
|
subquery_expr->comparison_type = OperatorToExpressionType(name);
|
85
|
-
subquery_expr->query_location = root
|
84
|
+
subquery_expr->query_location = root.location;
|
86
85
|
|
87
|
-
if (root
|
86
|
+
if (root.kind == duckdb_libpgquery::PG_AEXPR_OP_ALL) {
|
88
87
|
// ALL sublink is equivalent to NOT(ANY) with inverted comparison
|
89
88
|
// e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
|
90
89
|
// first invert the comparison type
|
@@ -94,7 +93,7 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
94
93
|
return std::move(subquery_expr);
|
95
94
|
}
|
96
95
|
case duckdb_libpgquery::PG_AEXPR_IN: {
|
97
|
-
auto left_expr = TransformExpression(root
|
96
|
+
auto left_expr = TransformExpression(root.lexpr);
|
98
97
|
ExpressionType operator_type;
|
99
98
|
// this looks very odd, but seems to be the way to find out its NOT IN
|
100
99
|
if (name == "<>") {
|
@@ -105,35 +104,35 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
105
104
|
operator_type = ExpressionType::COMPARE_IN;
|
106
105
|
}
|
107
106
|
auto result = make_uniq<OperatorExpression>(operator_type, std::move(left_expr));
|
108
|
-
result->query_location = root
|
109
|
-
TransformExpressionList(*
|
107
|
+
result->query_location = root.location;
|
108
|
+
TransformExpressionList(*PGPointerCast<duckdb_libpgquery::PGList>(root.rexpr), result->children);
|
110
109
|
return std::move(result);
|
111
110
|
}
|
112
111
|
// rewrite NULLIF(a, b) into CASE WHEN a=b THEN NULL ELSE a END
|
113
112
|
case duckdb_libpgquery::PG_AEXPR_NULLIF: {
|
114
113
|
vector<unique_ptr<ParsedExpression>> children;
|
115
|
-
children.push_back(TransformExpression(root
|
116
|
-
children.push_back(TransformExpression(root
|
114
|
+
children.push_back(TransformExpression(root.lexpr));
|
115
|
+
children.push_back(TransformExpression(root.rexpr));
|
117
116
|
return make_uniq<FunctionExpression>("nullif", std::move(children));
|
118
117
|
}
|
119
118
|
// rewrite (NOT) X BETWEEN A AND B into (NOT) AND(GREATERTHANOREQUALTO(X,
|
120
119
|
// A), LESSTHANOREQUALTO(X, B))
|
121
120
|
case duckdb_libpgquery::PG_AEXPR_BETWEEN:
|
122
121
|
case duckdb_libpgquery::PG_AEXPR_NOT_BETWEEN: {
|
123
|
-
auto between_args =
|
122
|
+
auto between_args = PGPointerCast<duckdb_libpgquery::PGList>(root.rexpr);
|
124
123
|
if (between_args->length != 2 || !between_args->head->data.ptr_value || !between_args->tail->data.ptr_value) {
|
125
124
|
throw InternalException("(NOT) BETWEEN needs two args");
|
126
125
|
}
|
127
126
|
|
128
|
-
auto input = TransformExpression(root
|
127
|
+
auto input = TransformExpression(root.lexpr);
|
129
128
|
auto between_left =
|
130
|
-
TransformExpression(
|
129
|
+
TransformExpression(PGPointerCast<duckdb_libpgquery::PGNode>(between_args->head->data.ptr_value));
|
131
130
|
auto between_right =
|
132
|
-
TransformExpression(
|
131
|
+
TransformExpression(PGPointerCast<duckdb_libpgquery::PGNode>(between_args->tail->data.ptr_value));
|
133
132
|
|
134
133
|
auto compare_between =
|
135
134
|
make_uniq<BetweenExpression>(std::move(input), std::move(between_left), std::move(between_right));
|
136
|
-
if (root
|
135
|
+
if (root.kind == duckdb_libpgquery::PG_AEXPR_BETWEEN) {
|
137
136
|
return std::move(compare_between);
|
138
137
|
} else {
|
139
138
|
return make_uniq<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(compare_between));
|
@@ -141,13 +140,13 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
141
140
|
}
|
142
141
|
// rewrite SIMILAR TO into regexp_full_match('asdf', '.*sd.*')
|
143
142
|
case duckdb_libpgquery::PG_AEXPR_SIMILAR: {
|
144
|
-
auto left_expr = TransformExpression(root
|
145
|
-
auto right_expr = TransformExpression(root
|
143
|
+
auto left_expr = TransformExpression(root.lexpr);
|
144
|
+
auto right_expr = TransformExpression(root.rexpr);
|
146
145
|
|
147
146
|
vector<unique_ptr<ParsedExpression>> children;
|
148
147
|
children.push_back(std::move(left_expr));
|
149
148
|
|
150
|
-
auto &similar_func =
|
149
|
+
auto &similar_func = right_expr->Cast<FunctionExpression>();
|
151
150
|
D_ASSERT(similar_func.function_name == "similar_escape");
|
152
151
|
D_ASSERT(similar_func.children.size() == 2);
|
153
152
|
if (similar_func.children[1]->type != ExpressionType::VALUE_CONSTANT) {
|
@@ -176,14 +175,14 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
176
175
|
}
|
177
176
|
}
|
178
177
|
case duckdb_libpgquery::PG_AEXPR_NOT_DISTINCT: {
|
179
|
-
auto left_expr = TransformExpression(root
|
180
|
-
auto right_expr = TransformExpression(root
|
178
|
+
auto left_expr = TransformExpression(root.lexpr);
|
179
|
+
auto right_expr = TransformExpression(root.rexpr);
|
181
180
|
return make_uniq<ComparisonExpression>(ExpressionType::COMPARE_NOT_DISTINCT_FROM, std::move(left_expr),
|
182
181
|
std::move(right_expr));
|
183
182
|
}
|
184
183
|
case duckdb_libpgquery::PG_AEXPR_DISTINCT: {
|
185
|
-
auto left_expr = TransformExpression(root
|
186
|
-
auto right_expr = TransformExpression(root
|
184
|
+
auto left_expr = TransformExpression(root.lexpr);
|
185
|
+
auto right_expr = TransformExpression(root.rexpr);
|
187
186
|
return make_uniq<ComparisonExpression>(ExpressionType::COMPARE_DISTINCT_FROM, std::move(left_expr),
|
188
187
|
std::move(right_expr));
|
189
188
|
}
|
@@ -191,8 +190,8 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
191
190
|
default:
|
192
191
|
break;
|
193
192
|
}
|
194
|
-
auto left_expr = TransformExpression(root
|
195
|
-
auto right_expr = TransformExpression(root
|
193
|
+
auto left_expr = TransformExpression(root.lexpr);
|
194
|
+
auto right_expr = TransformExpression(root.rexpr);
|
196
195
|
|
197
196
|
if (!left_expr) {
|
198
197
|
// prefix operator
|
@@ -205,10 +204,10 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
|
|
205
204
|
}
|
206
205
|
}
|
207
206
|
|
208
|
-
unique_ptr<ParsedExpression> Transformer::TransformAExpr(duckdb_libpgquery::PGAExpr
|
207
|
+
unique_ptr<ParsedExpression> Transformer::TransformAExpr(duckdb_libpgquery::PGAExpr &root) {
|
209
208
|
auto result = TransformAExprInternal(root);
|
210
209
|
if (result) {
|
211
|
-
result->query_location = root
|
210
|
+
result->query_location = root.location;
|
212
211
|
}
|
213
212
|
return result;
|
214
213
|
}
|
@@ -4,39 +4,38 @@
|
|
4
4
|
|
5
5
|
namespace duckdb {
|
6
6
|
|
7
|
-
unique_ptr<ParsedExpression> Transformer::TransformParamRef(duckdb_libpgquery::PGParamRef
|
8
|
-
D_ASSERT(node);
|
7
|
+
unique_ptr<ParsedExpression> Transformer::TransformParamRef(duckdb_libpgquery::PGParamRef &node) {
|
9
8
|
auto expr = make_uniq<ParameterExpression>();
|
10
|
-
if (node
|
9
|
+
if (node.number < 0) {
|
11
10
|
throw ParserException("Parameter numbers cannot be negative");
|
12
11
|
}
|
13
12
|
|
14
|
-
if (node
|
13
|
+
if (node.name) {
|
15
14
|
// This is a named parameter, try to find an entry for it
|
16
|
-
D_ASSERT(node
|
15
|
+
D_ASSERT(node.number == 0);
|
17
16
|
int32_t index;
|
18
|
-
if (GetNamedParam(node
|
17
|
+
if (GetNamedParam(node.name, index)) {
|
19
18
|
// We've seen this named parameter before and assigned it an index!
|
20
|
-
node
|
19
|
+
node.number = index;
|
21
20
|
}
|
22
21
|
}
|
23
|
-
if (node
|
22
|
+
if (node.number == 0) {
|
24
23
|
expr->parameter_nr = ParamCount() + 1;
|
25
|
-
if (node
|
24
|
+
if (node.name && !HasNamedParameters() && ParamCount() != 0) {
|
26
25
|
// This parameter is named, but there were other parameter before it, and they were not named
|
27
26
|
throw NotImplementedException("Mixing positional and named parameters is not supported yet");
|
28
27
|
}
|
29
|
-
if (node
|
30
|
-
D_ASSERT(!named_param_map.count(node
|
28
|
+
if (node.name) {
|
29
|
+
D_ASSERT(!named_param_map.count(node.name));
|
31
30
|
// Add it to the named parameter map so we can find it next time it's referenced
|
32
|
-
SetNamedParam(node
|
31
|
+
SetNamedParam(node.name, expr->parameter_nr);
|
33
32
|
}
|
34
33
|
} else {
|
35
|
-
if (!node
|
34
|
+
if (!node.name && HasNamedParameters()) {
|
36
35
|
// This parameter does not have a name, but the named param map is not empty
|
37
36
|
throw NotImplementedException("Mixing positional and named parameters is not supported yet");
|
38
37
|
}
|
39
|
-
expr->parameter_nr = node
|
38
|
+
expr->parameter_nr = node.number;
|
40
39
|
}
|
41
40
|
SetParamCount(MaxValue<idx_t>(ParamCount(), expr->parameter_nr));
|
42
41
|
return std::move(expr);
|
@@ -4,12 +4,12 @@
|
|
4
4
|
|
5
5
|
namespace duckdb {
|
6
6
|
|
7
|
-
unique_ptr<ParsedExpression> Transformer::TransformPositionalReference(duckdb_libpgquery::PGPositionalReference
|
8
|
-
if (node
|
7
|
+
unique_ptr<ParsedExpression> Transformer::TransformPositionalReference(duckdb_libpgquery::PGPositionalReference &node) {
|
8
|
+
if (node.position <= 0) {
|
9
9
|
throw ParserException("Positional reference node needs to be >= 1");
|
10
10
|
}
|
11
|
-
auto result = make_uniq<PositionalReferenceExpression>(node
|
12
|
-
result->query_location = node
|
11
|
+
auto result = make_uniq<PositionalReferenceExpression>(node.position);
|
12
|
+
result->query_location = node.location;
|
13
13
|
return std::move(result);
|
14
14
|
}
|
15
15
|
|
@@ -5,15 +5,14 @@
|
|
5
5
|
|
6
6
|
namespace duckdb {
|
7
7
|
|
8
|
-
unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::PGSubLink
|
9
|
-
D_ASSERT(root);
|
8
|
+
unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::PGSubLink &root) {
|
10
9
|
auto subquery_expr = make_uniq<SubqueryExpression>();
|
11
10
|
|
12
|
-
subquery_expr->subquery = TransformSelect(root
|
11
|
+
subquery_expr->subquery = TransformSelect(root.subselect);
|
13
12
|
D_ASSERT(subquery_expr->subquery);
|
14
13
|
D_ASSERT(subquery_expr->subquery->node->GetSelectList().size() > 0);
|
15
14
|
|
16
|
-
switch (root
|
15
|
+
switch (root.subLinkType) {
|
17
16
|
case duckdb_libpgquery::PG_EXISTS_SUBLINK: {
|
18
17
|
subquery_expr->subquery_type = SubqueryType::EXISTS;
|
19
18
|
break;
|
@@ -22,14 +21,14 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
|
|
22
21
|
case duckdb_libpgquery::PG_ALL_SUBLINK: {
|
23
22
|
// comparison with ANY() or ALL()
|
24
23
|
subquery_expr->subquery_type = SubqueryType::ANY;
|
25
|
-
subquery_expr->child = TransformExpression(root
|
24
|
+
subquery_expr->child = TransformExpression(root.testexpr);
|
26
25
|
// get the operator name
|
27
|
-
if (!root
|
26
|
+
if (!root.operName) {
|
28
27
|
// simple IN
|
29
28
|
subquery_expr->comparison_type = ExpressionType::COMPARE_EQUAL;
|
30
29
|
} else {
|
31
30
|
auto operator_name =
|
32
|
-
string((
|
31
|
+
string((PGPointerCast<duckdb_libpgquery::PGValue>(root.operName->head->data.ptr_value))->val.str);
|
33
32
|
subquery_expr->comparison_type = OperatorToExpressionType(operator_name);
|
34
33
|
}
|
35
34
|
if (subquery_expr->comparison_type != ExpressionType::COMPARE_EQUAL &&
|
@@ -40,7 +39,7 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
|
|
40
39
|
subquery_expr->comparison_type != ExpressionType::COMPARE_LESSTHANOREQUALTO) {
|
41
40
|
throw ParserException("ANY and ALL operators require one of =,<>,>,<,>=,<= comparisons!");
|
42
41
|
}
|
43
|
-
if (root
|
42
|
+
if (root.subLinkType == duckdb_libpgquery::PG_ALL_SUBLINK) {
|
44
43
|
// ALL sublink is equivalent to NOT(ANY) with inverted comparison
|
45
44
|
// e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
|
46
45
|
// first invert the comparison type
|
@@ -96,9 +95,9 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
|
|
96
95
|
break;
|
97
96
|
}
|
98
97
|
default:
|
99
|
-
throw NotImplementedException("Subquery of type %d not implemented\n", (int)root
|
98
|
+
throw NotImplementedException("Subquery of type %d not implemented\n", (int)root.subLinkType);
|
100
99
|
}
|
101
|
-
subquery_expr->query_location = root
|
100
|
+
subquery_expr->query_location = root.location;
|
102
101
|
return std::move(subquery_expr);
|
103
102
|
}
|
104
103
|
|
@@ -29,50 +29,50 @@ void Transformer::ExtractCTEsRecursive(CommonTableExpressionMap &cte_map) {
|
|
29
29
|
}
|
30
30
|
}
|
31
31
|
|
32
|
-
void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause
|
32
|
+
void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map) {
|
33
33
|
// TODO: might need to update in case of future lawsuit
|
34
|
-
D_ASSERT(de_with_clause);
|
35
34
|
stored_cte_map.push_back(&cte_map);
|
36
35
|
|
37
|
-
D_ASSERT(de_with_clause
|
38
|
-
for (auto cte_ele = de_with_clause
|
36
|
+
D_ASSERT(de_with_clause.ctes);
|
37
|
+
for (auto cte_ele = de_with_clause.ctes->head; cte_ele != nullptr; cte_ele = cte_ele->next) {
|
39
38
|
auto info = make_uniq<CommonTableExpressionInfo>();
|
40
39
|
|
41
|
-
auto cte =
|
42
|
-
if (cte
|
43
|
-
for (auto node = cte
|
40
|
+
auto &cte = *PGPointerCast<duckdb_libpgquery::PGCommonTableExpr>(cte_ele->data.ptr_value);
|
41
|
+
if (cte.aliascolnames) {
|
42
|
+
for (auto node = cte.aliascolnames->head; node != nullptr; node = node->next) {
|
44
43
|
info->aliases.emplace_back(
|
45
44
|
reinterpret_cast<duckdb_libpgquery::PGValue *>(node->data.ptr_value)->val.str);
|
46
45
|
}
|
47
46
|
}
|
48
47
|
// lets throw some errors on unsupported features early
|
49
|
-
if (cte
|
48
|
+
if (cte.ctecolnames) {
|
50
49
|
throw NotImplementedException("Column name setting not supported in CTEs");
|
51
50
|
}
|
52
|
-
if (cte
|
51
|
+
if (cte.ctecoltypes) {
|
53
52
|
throw NotImplementedException("Column type setting not supported in CTEs");
|
54
53
|
}
|
55
|
-
if (cte
|
54
|
+
if (cte.ctecoltypmods) {
|
56
55
|
throw NotImplementedException("Column type modification not supported in CTEs");
|
57
56
|
}
|
58
|
-
if (cte
|
57
|
+
if (cte.ctecolcollations) {
|
59
58
|
throw NotImplementedException("CTE collations not supported");
|
60
59
|
}
|
61
60
|
// we need a query
|
62
|
-
if (!cte
|
61
|
+
if (!cte.ctequery || cte.ctequery->type != duckdb_libpgquery::T_PGSelectStmt) {
|
63
62
|
throw NotImplementedException("A CTE needs a SELECT");
|
64
63
|
}
|
65
64
|
|
66
65
|
// CTE transformation can either result in inlining for non recursive CTEs, or in recursive CTE bindings
|
67
66
|
// otherwise.
|
68
|
-
if (cte
|
67
|
+
if (cte.cterecursive || de_with_clause.recursive) {
|
69
68
|
info->query = TransformRecursiveCTE(cte, *info);
|
70
69
|
} else {
|
71
70
|
Transformer cte_transformer(*this);
|
72
|
-
info->query =
|
71
|
+
info->query =
|
72
|
+
cte_transformer.TransformSelect(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery));
|
73
73
|
}
|
74
74
|
D_ASSERT(info->query);
|
75
|
-
auto cte_name = string(cte
|
75
|
+
auto cte_name = string(cte.ctename);
|
76
76
|
|
77
77
|
auto it = cte_map.map.find(cte_name);
|
78
78
|
if (it != cte_map.map.end()) {
|
@@ -83,41 +83,37 @@ void Transformer::TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause,
|
|
83
83
|
}
|
84
84
|
}
|
85
85
|
|
86
|
-
unique_ptr<SelectStatement> Transformer::TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr
|
86
|
+
unique_ptr<SelectStatement> Transformer::TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr &cte,
|
87
87
|
CommonTableExpressionInfo &info) {
|
88
|
-
auto stmt =
|
88
|
+
auto &stmt = *PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery);
|
89
89
|
|
90
90
|
unique_ptr<SelectStatement> select;
|
91
|
-
switch (stmt
|
91
|
+
switch (stmt.op) {
|
92
92
|
case duckdb_libpgquery::PG_SETOP_UNION:
|
93
93
|
case duckdb_libpgquery::PG_SETOP_EXCEPT:
|
94
94
|
case duckdb_libpgquery::PG_SETOP_INTERSECT: {
|
95
95
|
select = make_uniq<SelectStatement>();
|
96
96
|
select->node = make_uniq_base<QueryNode, RecursiveCTENode>();
|
97
|
-
auto result =
|
98
|
-
result
|
99
|
-
result
|
100
|
-
result
|
101
|
-
result
|
102
|
-
result
|
103
|
-
|
104
|
-
D_ASSERT(result->left);
|
105
|
-
D_ASSERT(result->right);
|
106
|
-
|
107
|
-
if (stmt->op != duckdb_libpgquery::PG_SETOP_UNION) {
|
97
|
+
auto &result = select->node->Cast<RecursiveCTENode>();
|
98
|
+
result.ctename = string(cte.ctename);
|
99
|
+
result.union_all = stmt.all;
|
100
|
+
result.left = TransformSelectNode(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(stmt.larg));
|
101
|
+
result.right = TransformSelectNode(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(stmt.rarg));
|
102
|
+
result.aliases = info.aliases;
|
103
|
+
if (stmt.op != duckdb_libpgquery::PG_SETOP_UNION) {
|
108
104
|
throw ParserException("Unsupported setop type for recursive CTE: only UNION or UNION ALL are supported");
|
109
105
|
}
|
110
106
|
break;
|
111
107
|
}
|
112
108
|
default:
|
113
109
|
// This CTE is not recursive. Fallback to regular query transformation.
|
114
|
-
return TransformSelect(cte
|
110
|
+
return TransformSelect(*PGPointerCast<duckdb_libpgquery::PGSelectStmt>(cte.ctequery));
|
115
111
|
}
|
116
112
|
|
117
|
-
if (stmt
|
113
|
+
if (stmt.limitCount || stmt.limitOffset) {
|
118
114
|
throw ParserException("LIMIT or OFFSET in a recursive query is not allowed");
|
119
115
|
}
|
120
|
-
if (stmt
|
116
|
+
if (stmt.sortClause) {
|
121
117
|
throw ParserException("ORDER BY in a recursive query is not allowed");
|
122
118
|
}
|
123
119
|
return select;
|
@@ -72,7 +72,7 @@ static void AddCubeSets(const GroupingSet ¤t_set, vector<GroupingSet> &res
|
|
72
72
|
}
|
73
73
|
}
|
74
74
|
|
75
|
-
void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode
|
75
|
+
void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode &n, GroupingExpressionMap &map,
|
76
76
|
GroupByNode &result, vector<idx_t> &indexes) {
|
77
77
|
auto expression = TransformExpression(n);
|
78
78
|
AddGroupByExpression(std::move(expression), map, result, indexes);
|
@@ -80,11 +80,11 @@ void Transformer::TransformGroupByExpression(duckdb_libpgquery::PGNode *n, Group
|
|
80
80
|
|
81
81
|
// If one GROUPING SETS clause is nested inside another,
|
82
82
|
// the effect is the same as if all the elements of the inner clause had been written directly in the outer clause.
|
83
|
-
void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode
|
83
|
+
void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode &n, GroupingExpressionMap &map, SelectNode &result,
|
84
84
|
vector<GroupingSet> &result_sets) {
|
85
|
-
if (n
|
86
|
-
auto grouping_set =
|
87
|
-
switch (grouping_set
|
85
|
+
if (n.type == duckdb_libpgquery::T_PGGroupingSet) {
|
86
|
+
auto &grouping_set = PGCast<duckdb_libpgquery::PGGroupingSet>(n);
|
87
|
+
switch (grouping_set.kind) {
|
88
88
|
case duckdb_libpgquery::GROUPING_SET_EMPTY:
|
89
89
|
result_sets.emplace_back();
|
90
90
|
break;
|
@@ -93,18 +93,18 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
|
|
93
93
|
break;
|
94
94
|
}
|
95
95
|
case duckdb_libpgquery::GROUPING_SET_SETS: {
|
96
|
-
for (auto node = grouping_set
|
97
|
-
auto pg_node =
|
98
|
-
TransformGroupByNode(pg_node, map, result, result_sets);
|
96
|
+
for (auto node = grouping_set.content->head; node; node = node->next) {
|
97
|
+
auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
|
98
|
+
TransformGroupByNode(*pg_node, map, result, result_sets);
|
99
99
|
}
|
100
100
|
break;
|
101
101
|
}
|
102
102
|
case duckdb_libpgquery::GROUPING_SET_ROLLUP: {
|
103
103
|
vector<GroupingSet> rollup_sets;
|
104
|
-
for (auto node = grouping_set
|
105
|
-
auto pg_node =
|
104
|
+
for (auto node = grouping_set.content->head; node; node = node->next) {
|
105
|
+
auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
|
106
106
|
vector<idx_t> rollup_set;
|
107
|
-
TransformGroupByExpression(pg_node, map, result.groups, rollup_set);
|
107
|
+
TransformGroupByExpression(*pg_node, map, result.groups, rollup_set);
|
108
108
|
rollup_sets.push_back(VectorToGroupingSet(rollup_set));
|
109
109
|
}
|
110
110
|
// generate the subsets of the rollup set and add them to the grouping sets
|
@@ -118,10 +118,10 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
|
|
118
118
|
}
|
119
119
|
case duckdb_libpgquery::GROUPING_SET_CUBE: {
|
120
120
|
vector<GroupingSet> cube_sets;
|
121
|
-
for (auto node = grouping_set
|
122
|
-
auto pg_node =
|
121
|
+
for (auto node = grouping_set.content->head; node; node = node->next) {
|
122
|
+
auto pg_node = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
|
123
123
|
vector<idx_t> cube_set;
|
124
|
-
TransformGroupByExpression(pg_node, map, result.groups, cube_set);
|
124
|
+
TransformGroupByExpression(*pg_node, map, result.groups, cube_set);
|
125
125
|
cube_sets.push_back(VectorToGroupingSet(cube_set));
|
126
126
|
}
|
127
127
|
// generate the subsets of the rollup set and add them to the grouping sets
|
@@ -132,7 +132,7 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
|
|
132
132
|
break;
|
133
133
|
}
|
134
134
|
default:
|
135
|
-
throw InternalException("Unsupported GROUPING SET type %d", grouping_set
|
135
|
+
throw InternalException("Unsupported GROUPING SET type %d", grouping_set.kind);
|
136
136
|
}
|
137
137
|
} else {
|
138
138
|
vector<idx_t> indexes;
|
@@ -143,16 +143,16 @@ void Transformer::TransformGroupByNode(duckdb_libpgquery::PGNode *n, GroupingExp
|
|
143
143
|
|
144
144
|
// If multiple grouping items are specified in a single GROUP BY clause,
|
145
145
|
// then the final list of grouping sets is the cross product of the individual items.
|
146
|
-
bool Transformer::TransformGroupBy(duckdb_libpgquery::PGList
|
146
|
+
bool Transformer::TransformGroupBy(optional_ptr<duckdb_libpgquery::PGList> group, SelectNode &select_node) {
|
147
147
|
if (!group) {
|
148
148
|
return false;
|
149
149
|
}
|
150
150
|
auto &result = select_node.groups;
|
151
151
|
GroupingExpressionMap map;
|
152
152
|
for (auto node = group->head; node != nullptr; node = node->next) {
|
153
|
-
auto n =
|
153
|
+
auto n = PGPointerCast<duckdb_libpgquery::PGNode>(node->data.ptr_value);
|
154
154
|
vector<GroupingSet> result_sets;
|
155
|
-
TransformGroupByNode(n, map, select_node, result_sets);
|
155
|
+
TransformGroupByNode(*n, map, select_node, result_sets);
|
156
156
|
CheckGroupingSetMax(result_sets.size());
|
157
157
|
if (result.grouping_sets.empty()) {
|
158
158
|
// no grouping sets yet: use the current set of grouping sets
|
@@ -18,13 +18,13 @@ static SampleMethod GetSampleMethod(const string &method) {
|
|
18
18
|
}
|
19
19
|
}
|
20
20
|
|
21
|
-
unique_ptr<SampleOptions> Transformer::TransformSampleOptions(duckdb_libpgquery::PGNode
|
21
|
+
unique_ptr<SampleOptions> Transformer::TransformSampleOptions(optional_ptr<duckdb_libpgquery::PGNode> options) {
|
22
22
|
if (!options) {
|
23
23
|
return nullptr;
|
24
24
|
}
|
25
25
|
auto result = make_uniq<SampleOptions>();
|
26
|
-
auto &sample_options =
|
27
|
-
auto &sample_size =
|
26
|
+
auto &sample_options = PGCast<duckdb_libpgquery::PGSampleOptions>(*options);
|
27
|
+
auto &sample_size = *PGPointerCast<duckdb_libpgquery::PGSampleSize>(sample_options.sample_size);
|
28
28
|
auto sample_value = TransformValue(sample_size.sample_size)->value;
|
29
29
|
result->is_percentage = sample_size.is_percentage;
|
30
30
|
if (sample_size.is_percentage) {
|
@@ -7,13 +7,13 @@
|
|
7
7
|
|
8
8
|
namespace duckdb {
|
9
9
|
|
10
|
-
LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName
|
11
|
-
if (
|
10
|
+
LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName &type_name) {
|
11
|
+
if (type_name.type != duckdb_libpgquery::T_PGTypeName) {
|
12
12
|
throw ParserException("Expected a type");
|
13
13
|
}
|
14
14
|
auto stack_checker = StackCheck();
|
15
15
|
|
16
|
-
auto name =
|
16
|
+
auto name = PGPointerCast<duckdb_libpgquery::PGValue>(type_name.names->tail->data.ptr_value)->val.str;
|
17
17
|
// transform it to the SQL type
|
18
18
|
LogicalTypeId base_type = TransformStringToLogicalTypeId(name);
|
19
19
|
|
@@ -23,21 +23,21 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
23
23
|
} else if (base_type == LogicalTypeId::ENUM) {
|
24
24
|
throw ParserException("ENUM is not valid as a stand-alone type");
|
25
25
|
} else if (base_type == LogicalTypeId::STRUCT) {
|
26
|
-
if (!type_name
|
26
|
+
if (!type_name.typmods || type_name.typmods->length == 0) {
|
27
27
|
throw ParserException("Struct needs a name and entries");
|
28
28
|
}
|
29
29
|
child_list_t<LogicalType> children;
|
30
30
|
case_insensitive_set_t name_collision_set;
|
31
31
|
|
32
|
-
for (auto node = type_name
|
33
|
-
auto &type_val = *
|
32
|
+
for (auto node = type_name.typmods->head; node; node = node->next) {
|
33
|
+
auto &type_val = *PGPointerCast<duckdb_libpgquery::PGList>(node->data.ptr_value);
|
34
34
|
if (type_val.length != 2) {
|
35
35
|
throw ParserException("Struct entry needs an entry name and a type name");
|
36
36
|
}
|
37
37
|
|
38
|
-
auto entry_name_node =
|
38
|
+
auto entry_name_node = PGPointerCast<duckdb_libpgquery::PGValue>(type_val.head->data.ptr_value);
|
39
39
|
D_ASSERT(entry_name_node->type == duckdb_libpgquery::T_PGString);
|
40
|
-
auto entry_type_node =
|
40
|
+
auto entry_type_node = PGPointerCast<duckdb_libpgquery::PGTypeName>(type_val.tail->data.ptr_value);
|
41
41
|
D_ASSERT(entry_type_node->type == duckdb_libpgquery::T_PGTypeName);
|
42
42
|
|
43
43
|
auto entry_name = string(entry_name_node->val.str);
|
@@ -47,42 +47,43 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
47
47
|
throw ParserException("Duplicate struct entry name \"%s\"", entry_name);
|
48
48
|
}
|
49
49
|
name_collision_set.insert(entry_name);
|
50
|
+
auto entry_type = TransformTypeName(*entry_type_node);
|
50
51
|
|
51
|
-
auto entry_type = TransformTypeName((duckdb_libpgquery::PGTypeName *)entry_type_node);
|
52
52
|
children.push_back(make_pair(entry_name, entry_type));
|
53
53
|
}
|
54
54
|
D_ASSERT(!children.empty());
|
55
55
|
result_type = LogicalType::STRUCT(children);
|
56
56
|
|
57
57
|
} else if (base_type == LogicalTypeId::MAP) {
|
58
|
-
|
59
|
-
if (!type_name->typmods || type_name->typmods->length != 2) {
|
58
|
+
if (!type_name.typmods || type_name.typmods->length != 2) {
|
60
59
|
throw ParserException("Map type needs exactly two entries, key and value type");
|
61
60
|
}
|
62
|
-
auto key_type =
|
63
|
-
|
61
|
+
auto key_type =
|
62
|
+
TransformTypeName(*PGPointerCast<duckdb_libpgquery::PGTypeName>(type_name.typmods->head->data.ptr_value));
|
63
|
+
auto value_type =
|
64
|
+
TransformTypeName(*PGPointerCast<duckdb_libpgquery::PGTypeName>(type_name.typmods->tail->data.ptr_value));
|
64
65
|
|
65
66
|
result_type = LogicalType::MAP(std::move(key_type), std::move(value_type));
|
66
67
|
} else if (base_type == LogicalTypeId::UNION) {
|
67
|
-
if (!type_name
|
68
|
+
if (!type_name.typmods || type_name.typmods->length == 0) {
|
68
69
|
throw ParserException("Union type needs at least one member");
|
69
70
|
}
|
70
|
-
if (type_name
|
71
|
+
if (type_name.typmods->length > (int)UnionType::MAX_UNION_MEMBERS) {
|
71
72
|
throw ParserException("Union types can have at most %d members", UnionType::MAX_UNION_MEMBERS);
|
72
73
|
}
|
73
74
|
|
74
75
|
child_list_t<LogicalType> children;
|
75
76
|
case_insensitive_set_t name_collision_set;
|
76
77
|
|
77
|
-
for (auto node = type_name
|
78
|
-
auto &type_val = *
|
78
|
+
for (auto node = type_name.typmods->head; node; node = node->next) {
|
79
|
+
auto &type_val = *PGPointerCast<duckdb_libpgquery::PGList>(node->data.ptr_value);
|
79
80
|
if (type_val.length != 2) {
|
80
81
|
throw ParserException("Union type member needs a tag name and a type name");
|
81
82
|
}
|
82
83
|
|
83
|
-
auto entry_name_node =
|
84
|
+
auto entry_name_node = PGPointerCast<duckdb_libpgquery::PGValue>(type_val.head->data.ptr_value);
|
84
85
|
D_ASSERT(entry_name_node->type == duckdb_libpgquery::T_PGString);
|
85
|
-
auto entry_type_node =
|
86
|
+
auto entry_type_node = PGPointerCast<duckdb_libpgquery::PGTypeName>(type_val.tail->data.ptr_value);
|
86
87
|
D_ASSERT(entry_type_node->type == duckdb_libpgquery::T_PGTypeName);
|
87
88
|
|
88
89
|
auto entry_name = string(entry_name_node->val.str);
|
@@ -94,7 +95,7 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
94
95
|
|
95
96
|
name_collision_set.insert(entry_name);
|
96
97
|
|
97
|
-
auto entry_type = TransformTypeName(
|
98
|
+
auto entry_type = TransformTypeName(*entry_type_node);
|
98
99
|
children.push_back(make_pair(entry_name, entry_type));
|
99
100
|
}
|
100
101
|
D_ASSERT(!children.empty());
|
@@ -111,9 +112,9 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
111
112
|
}
|
112
113
|
// check any modifiers
|
113
114
|
int modifier_idx = 0;
|
114
|
-
if (type_name
|
115
|
-
for (auto node = type_name
|
116
|
-
auto &const_val = *
|
115
|
+
if (type_name.typmods) {
|
116
|
+
for (auto node = type_name.typmods->head; node; node = node->next) {
|
117
|
+
auto &const_val = *PGPointerCast<duckdb_libpgquery::PGAConst>(node->data.ptr_value);
|
117
118
|
if (const_val.type != duckdb_libpgquery::T_PGAConst ||
|
118
119
|
const_val.val.type != duckdb_libpgquery::T_PGInteger) {
|
119
120
|
throw ParserException("Expected an integer constant as type modifier");
|
@@ -169,7 +170,7 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
169
170
|
break;
|
170
171
|
}
|
171
172
|
case LogicalTypeId::BIT: {
|
172
|
-
if (!width && type_name
|
173
|
+
if (!width && type_name.typmods) {
|
173
174
|
throw ParserException("Type %s does not support any modifiers!", LogicalType(base_type).ToString());
|
174
175
|
}
|
175
176
|
result_type = LogicalType(base_type);
|
@@ -204,10 +205,10 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName *type_n
|
|
204
205
|
break;
|
205
206
|
}
|
206
207
|
}
|
207
|
-
if (type_name
|
208
|
+
if (type_name.arrayBounds) {
|
208
209
|
// array bounds: turn the type into a list
|
209
210
|
idx_t extra_stack = 0;
|
210
|
-
for (auto cell = type_name
|
211
|
+
for (auto cell = type_name.arrayBounds->head; cell != nullptr; cell = cell->next) {
|
211
212
|
result_type = LogicalType::LIST(result_type);
|
212
213
|
StackCheck(extra_stack++);
|
213
214
|
}
|