duckdb 0.8.2-dev157.0 → 0.8.2-dev1573.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 +15 -12
- package/binding.gyp.in +1 -1
- package/configure.py +1 -1
- package/duckdb_extension_config.cmake +10 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
- package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
- package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
- package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
- package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
- package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
- package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
- package/src/duckdb/extension/json/include/json_common.hpp +47 -231
- package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
- package/src/duckdb/extension/json/json_common.cpp +272 -40
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +24 -24
- package/src/duckdb/extension/json/json_scan.cpp +3 -6
- package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
- package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
- package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
- package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
- package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
- package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
- package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
- package/src/duckdb/extension/parquet/parquet_extension.cpp +192 -20
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
- package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
- package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
- package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
- package/src/duckdb/src/common/allocator.cpp +14 -2
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -11
- package/src/duckdb/src/common/assert.cpp +3 -0
- package/src/duckdb/src/common/enum_util.cpp +4619 -4446
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/exception.cpp +2 -2
- package/src/duckdb/src/common/extra_type_info.cpp +506 -0
- package/src/duckdb/src/common/file_system.cpp +19 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
- package/src/duckdb/src/common/local_file_system.cpp +14 -14
- package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
- package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
- package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
- package/src/duckdb/src/common/re2_regex.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
- package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
- package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
- package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
- package/src/duckdb/src/common/types/bit.cpp +51 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
- package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
- package/src/duckdb/src/common/types/date.cpp +9 -0
- package/src/duckdb/src/common/types/list_segment.cpp +24 -74
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
- package/src/duckdb/src/common/types/uuid.cpp +2 -2
- package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
- package/src/duckdb/src/common/types.cpp +8 -655
- package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
- package/src/duckdb/src/core_functions/function_list.cpp +4 -2
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
- package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
- package/src/duckdb/src/execution/expression_executor.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +149 -139
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
- package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
- package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
- package/src/duckdb/src/execution/index/art/node.cpp +113 -120
- package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
- package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
- package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
- package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
- package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
- package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
- package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +444 -284
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
- package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
- package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
- package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +56 -33
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
- package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
- package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
- package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
- package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
- package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
- package/src/duckdb/src/function/function.cpp +3 -1
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
- package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
- package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
- package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
- package/src/duckdb/src/function/table/read_csv.cpp +100 -17
- package/src/duckdb/src/function/table/system_functions.cpp +1 -0
- package/src/duckdb/src/function/table/table_scan.cpp +9 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +46 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
- package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
- package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
- package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
- package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
- package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
- package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
- package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
- package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
- package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
- package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +3 -10
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
- package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
- package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
- package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
- package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -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 +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
- package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
- package/src/duckdb/src/include/duckdb.h +28 -0
- package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
- package/src/duckdb/src/main/config.cpp +4 -0
- package/src/duckdb/src/main/database.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
- package/src/duckdb/src/main/extension/extension_install.cpp +9 -0
- package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
- package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
- package/src/duckdb/src/main/relation.cpp +6 -5
- package/src/duckdb/src/main/settings/settings.cpp +79 -18
- package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
- package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
- package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
- package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
- package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
- package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
- package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
- package/src/duckdb/src/parallel/executor.cpp +15 -0
- package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
- package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
- package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
- package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
- package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
- package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
- package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
- package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
- package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
- package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
- package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
- package/src/duckdb/src/parser/parser.cpp +8 -2
- package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
- package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
- package/src/duckdb/src/parser/query_node.cpp +15 -37
- package/src/duckdb/src/parser/result_modifier.cpp +0 -74
- package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
- package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
- package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
- package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
- package/src/duckdb/src/parser/tableref.cpp +0 -44
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
- package/src/duckdb/src/parser/transformer.cpp +15 -0
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +64 -26
- package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
- package/src/duckdb/src/planner/binder.cpp +44 -31
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
- package/src/duckdb/src/planner/expression_binder.cpp +3 -0
- package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
- package/src/duckdb/src/planner/logical_operator.cpp +5 -0
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
- package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
- package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
- package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
- package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
- package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
- package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
- package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
- package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
- package/src/duckdb/src/storage/compression/rle.cpp +0 -1
- package/src/duckdb/src/storage/data_table.cpp +1 -1
- package/src/duckdb/src/storage/local_storage.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
- package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
- package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
- package/src/duckdb/src/storage/table/row_group.cpp +25 -9
- package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
- package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
- package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
- package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
- package/src/duckdb/ub_src_common.cpp +2 -0
- package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
- package/src/duckdb/ub_src_optimizer.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
- package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
- package/src/duckdb/ub_src_planner_operator.cpp +4 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
- package/src/statement.cpp +10 -3
- package/test/test_all_types.test.ts +233 -0
- package/tsconfig.json +1 -0
- package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -17,6 +17,9 @@ class SubqueryRef : public TableRef {
|
|
17
17
|
public:
|
18
18
|
static constexpr const TableReferenceType TYPE = TableReferenceType::SUBQUERY;
|
19
19
|
|
20
|
+
private:
|
21
|
+
SubqueryRef();
|
22
|
+
|
20
23
|
public:
|
21
24
|
DUCKDB_API explicit SubqueryRef(unique_ptr<SelectStatement> subquery, string alias = string());
|
22
25
|
|
@@ -8,20 +8,20 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/common/case_insensitive_map.hpp"
|
11
12
|
#include "duckdb/common/constants.hpp"
|
12
13
|
#include "duckdb/common/enums/expression_type.hpp"
|
13
14
|
#include "duckdb/common/types.hpp"
|
14
15
|
#include "duckdb/common/unordered_map.hpp"
|
15
|
-
#include "duckdb/parser/qualified_name.hpp"
|
16
|
-
#include "duckdb/parser/tokens.hpp"
|
17
|
-
#include "duckdb/parser/parsed_data/create_info.hpp"
|
18
16
|
#include "duckdb/parser/group_by_node.hpp"
|
17
|
+
#include "duckdb/parser/parsed_data/create_info.hpp"
|
18
|
+
#include "duckdb/parser/qualified_name.hpp"
|
19
19
|
#include "duckdb/parser/query_node.hpp"
|
20
|
-
#include "duckdb/
|
21
|
-
|
22
|
-
#include "pg_definitions.hpp"
|
20
|
+
#include "duckdb/parser/query_node/cte_node.hpp"
|
21
|
+
#include "duckdb/parser/tokens.hpp"
|
23
22
|
#include "nodes/parsenodes.hpp"
|
24
23
|
#include "nodes/primnodes.hpp"
|
24
|
+
#include "pg_definitions.hpp"
|
25
25
|
|
26
26
|
namespace duckdb {
|
27
27
|
|
@@ -232,6 +232,9 @@ private:
|
|
232
232
|
unique_ptr<ParsedExpression> TransformParamRef(duckdb_libpgquery::PGParamRef &node);
|
233
233
|
unique_ptr<ParsedExpression> TransformNamedArg(duckdb_libpgquery::PGNamedArgExpr &root);
|
234
234
|
|
235
|
+
//! Transform multi assignment reference into an Expression
|
236
|
+
unique_ptr<ParsedExpression> TransformMultiAssignRef(duckdb_libpgquery::PGMultiAssignRef &root);
|
237
|
+
|
235
238
|
unique_ptr<ParsedExpression> TransformSQLValueFunction(duckdb_libpgquery::PGSQLValueFunction &node);
|
236
239
|
|
237
240
|
unique_ptr<ParsedExpression> TransformSubquery(duckdb_libpgquery::PGSubLink &root);
|
@@ -269,13 +272,17 @@ private:
|
|
269
272
|
OnCreateConflict TransformOnConflict(duckdb_libpgquery::PGOnCreateConflict conflict);
|
270
273
|
string TransformAlias(duckdb_libpgquery::PGAlias *root, vector<string> &column_name_alias);
|
271
274
|
vector<string> TransformStringList(duckdb_libpgquery::PGList *list);
|
272
|
-
void TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map
|
273
|
-
|
275
|
+
void TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map,
|
276
|
+
vector<unique_ptr<CTENode>> &materialized_ctes);
|
277
|
+
static unique_ptr<QueryNode> TransformMaterializedCTE(unique_ptr<QueryNode> root,
|
278
|
+
vector<unique_ptr<CTENode>> &materialized_ctes);
|
279
|
+
unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr &node,
|
274
280
|
CommonTableExpressionInfo &info);
|
275
281
|
|
276
282
|
unique_ptr<ParsedExpression> TransformUnaryOperator(const string &op, unique_ptr<ParsedExpression> child);
|
277
283
|
unique_ptr<ParsedExpression> TransformBinaryOperator(string op, unique_ptr<ParsedExpression> left,
|
278
284
|
unique_ptr<ParsedExpression> right);
|
285
|
+
static bool ConstructConstantFromExpression(const ParsedExpression &expr, Value &value);
|
279
286
|
//===--------------------------------------------------------------------===//
|
280
287
|
// TableRef transform
|
281
288
|
//===--------------------------------------------------------------------===//
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#include "duckdb/planner/bound_tokens.hpp"
|
22
22
|
#include "duckdb/planner/expression/bound_columnref_expression.hpp"
|
23
23
|
#include "duckdb/planner/logical_operator.hpp"
|
24
|
+
#include "duckdb/planner/joinside.hpp"
|
24
25
|
#include "duckdb/common/reference_map.hpp"
|
25
26
|
|
26
27
|
namespace duckdb {
|
@@ -75,7 +76,7 @@ struct CorrelatedColumnInfo {
|
|
75
76
|
*/
|
76
77
|
class Binder : public std::enable_shared_from_this<Binder> {
|
77
78
|
friend class ExpressionBinder;
|
78
|
-
friend class
|
79
|
+
friend class RecursiveDependentJoinPlanner;
|
79
80
|
|
80
81
|
public:
|
81
82
|
DUCKDB_API static shared_ptr<Binder> CreateBinder(ClientContext &context, optional_ptr<Binder> parent = nullptr,
|
@@ -199,10 +200,10 @@ private:
|
|
199
200
|
vector<reference<ExpressionBinder>> active_binders;
|
200
201
|
//! The count of bound_tables
|
201
202
|
idx_t bound_tables;
|
202
|
-
//! Whether or not the binder has any unplanned
|
203
|
-
bool
|
204
|
-
//! Whether or not
|
205
|
-
bool
|
203
|
+
//! Whether or not the binder has any unplanned dependent joins that still need to be planned/flattened
|
204
|
+
bool has_unplanned_dependent_joins = false;
|
205
|
+
//! Whether or not outside dependent joins have been planned and flattened
|
206
|
+
bool is_outside_flattened = true;
|
206
207
|
//! Whether CTEs should reference the parent binder (if it exists)
|
207
208
|
bool inherit_ctes = true;
|
208
209
|
//! Whether or not the binder can contain NULLs as the root of expressions
|
@@ -217,6 +218,10 @@ private:
|
|
217
218
|
reference_set_t<ViewCatalogEntry> bound_views;
|
218
219
|
|
219
220
|
private:
|
221
|
+
//! Get the root binder (binder with no parent)
|
222
|
+
Binder *GetRootBinder();
|
223
|
+
//! Determine the depth of the binder
|
224
|
+
idx_t GetBinderDepth() const;
|
220
225
|
//! Bind the expressions of generated columns to check for errors
|
221
226
|
void BindGeneratedColumns(BoundCreateTableInfo &info);
|
222
227
|
//! Bind the default values of the columns of a table
|
@@ -265,10 +270,12 @@ private:
|
|
265
270
|
unique_ptr<BoundQueryNode> BindNode(SelectNode &node);
|
266
271
|
unique_ptr<BoundQueryNode> BindNode(SetOperationNode &node);
|
267
272
|
unique_ptr<BoundQueryNode> BindNode(RecursiveCTENode &node);
|
273
|
+
unique_ptr<BoundQueryNode> BindNode(CTENode &node);
|
268
274
|
unique_ptr<BoundQueryNode> BindNode(QueryNode &node);
|
269
275
|
|
270
276
|
unique_ptr<LogicalOperator> VisitQueryNode(BoundQueryNode &node, unique_ptr<LogicalOperator> root);
|
271
277
|
unique_ptr<LogicalOperator> CreatePlan(BoundRecursiveCTENode &node);
|
278
|
+
unique_ptr<LogicalOperator> CreatePlan(BoundCTENode &node);
|
272
279
|
unique_ptr<LogicalOperator> CreatePlan(BoundSelectNode &statement);
|
273
280
|
unique_ptr<LogicalOperator> CreatePlan(BoundSetOperationNode &node);
|
274
281
|
unique_ptr<LogicalOperator> CreatePlan(BoundQueryNode &node);
|
@@ -32,6 +32,10 @@ struct ColumnBinding {
|
|
32
32
|
bool operator==(const ColumnBinding &rhs) const {
|
33
33
|
return table_index == rhs.table_index && column_index == rhs.column_index;
|
34
34
|
}
|
35
|
+
|
36
|
+
bool operator!=(const ColumnBinding &rhs) const {
|
37
|
+
return !(*this == rhs);
|
38
|
+
}
|
35
39
|
};
|
36
40
|
|
37
41
|
} // namespace duckdb
|
@@ -23,9 +23,9 @@ public:
|
|
23
23
|
: BoundConstraint(ConstraintType::UNIQUE), keys(std::move(keys)), key_set(std::move(key_set)),
|
24
24
|
is_primary_key(is_primary_key) {
|
25
25
|
#ifdef DEBUG
|
26
|
-
D_ASSERT(keys.size() == key_set.size());
|
27
|
-
for (auto &key : keys) {
|
28
|
-
D_ASSERT(key_set.find(key) != key_set.end());
|
26
|
+
D_ASSERT(this->keys.size() == this->key_set.size());
|
27
|
+
for (auto &key : this->keys) {
|
28
|
+
D_ASSERT(this->key_set.find(key) != this->key_set.end());
|
29
29
|
}
|
30
30
|
#endif
|
31
31
|
}
|
@@ -20,8 +20,6 @@ class LateralBinder : public ExpressionBinder {
|
|
20
20
|
public:
|
21
21
|
LateralBinder(Binder &binder, ClientContext &context);
|
22
22
|
|
23
|
-
//! Extract the correlated lateral join columns and remove them from the targeted binder
|
24
|
-
vector<CorrelatedColumnInfo> ExtractCorrelatedColumns(Binder &binder);
|
25
23
|
bool HasCorrelatedColumns() const {
|
26
24
|
return !correlated_columns.empty();
|
27
25
|
}
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include "duckdb/planner/operator/logical_join.hpp"
|
26
26
|
#include "duckdb/planner/operator/logical_limit.hpp"
|
27
27
|
#include "duckdb/planner/operator/logical_limit_percent.hpp"
|
28
|
+
#include "duckdb/planner/operator/logical_materialized_cte.hpp"
|
28
29
|
#include "duckdb/planner/operator/logical_order.hpp"
|
29
30
|
#include "duckdb/planner/operator/logical_pivot.hpp"
|
30
31
|
#include "duckdb/planner/operator/logical_positional_join.hpp"
|
@@ -32,9 +33,9 @@
|
|
32
33
|
#include "duckdb/planner/operator/logical_prepare.hpp"
|
33
34
|
#include "duckdb/planner/operator/logical_projection.hpp"
|
34
35
|
#include "duckdb/planner/operator/logical_recursive_cte.hpp"
|
36
|
+
#include "duckdb/planner/operator/logical_reset.hpp"
|
35
37
|
#include "duckdb/planner/operator/logical_sample.hpp"
|
36
38
|
#include "duckdb/planner/operator/logical_set.hpp"
|
37
|
-
#include "duckdb/planner/operator/logical_reset.hpp"
|
38
39
|
#include "duckdb/planner/operator/logical_set_operation.hpp"
|
39
40
|
#include "duckdb/planner/operator/logical_show.hpp"
|
40
41
|
#include "duckdb/planner/operator/logical_simple.hpp"
|
@@ -38,25 +38,25 @@ public:
|
|
38
38
|
FieldReader &reader);
|
39
39
|
|
40
40
|
public:
|
41
|
-
static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
|
41
|
+
static unique_ptr<LogicalOperator> CreateJoin(ClientContext &context, JoinType type, JoinRefType ref_type,
|
42
42
|
unique_ptr<LogicalOperator> left_child,
|
43
43
|
unique_ptr<LogicalOperator> right_child,
|
44
44
|
unique_ptr<Expression> condition);
|
45
|
-
static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
|
45
|
+
static unique_ptr<LogicalOperator> CreateJoin(ClientContext &context, JoinType type, JoinRefType ref_type,
|
46
46
|
unique_ptr<LogicalOperator> left_child,
|
47
47
|
unique_ptr<LogicalOperator> right_child,
|
48
48
|
vector<JoinCondition> conditions,
|
49
49
|
vector<unique_ptr<Expression>> arbitrary_expressions);
|
50
50
|
|
51
|
-
static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
|
51
|
+
static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
|
52
52
|
unique_ptr<LogicalOperator> &right_child, unique_ptr<Expression> condition,
|
53
53
|
vector<JoinCondition> &conditions,
|
54
54
|
vector<unique_ptr<Expression>> &arbitrary_expressions);
|
55
|
-
static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
|
55
|
+
static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
|
56
56
|
unique_ptr<LogicalOperator> &right_child,
|
57
57
|
vector<unique_ptr<Expression>> &expressions, vector<JoinCondition> &conditions,
|
58
58
|
vector<unique_ptr<Expression>> &arbitrary_expressions);
|
59
|
-
static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
|
59
|
+
static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
|
60
60
|
unique_ptr<LogicalOperator> &right_child,
|
61
61
|
const unordered_set<idx_t> &left_bindings,
|
62
62
|
const unordered_set<idx_t> &right_bindings,
|
@@ -10,6 +10,7 @@
|
|
10
10
|
|
11
11
|
#include "duckdb/common/types/chunk_collection.hpp"
|
12
12
|
#include "duckdb/planner/logical_operator.hpp"
|
13
|
+
#include "duckdb/common/enums/cte_materialize.hpp"
|
13
14
|
|
14
15
|
namespace duckdb {
|
15
16
|
|
@@ -19,8 +20,10 @@ public:
|
|
19
20
|
static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_CTE_REF;
|
20
21
|
|
21
22
|
public:
|
22
|
-
LogicalCTERef(idx_t table_index, idx_t cte_index, vector<LogicalType> types, vector<string> colnames
|
23
|
-
|
23
|
+
LogicalCTERef(idx_t table_index, idx_t cte_index, vector<LogicalType> types, vector<string> colnames,
|
24
|
+
CTEMaterialize materialized_cte)
|
25
|
+
: LogicalOperator(LogicalOperatorType::LOGICAL_CTE_REF), table_index(table_index), cte_index(cte_index),
|
26
|
+
materialized_cte(materialized_cte) {
|
24
27
|
D_ASSERT(types.size() > 0);
|
25
28
|
chunk_types = types;
|
26
29
|
bound_columns = colnames;
|
@@ -33,6 +36,8 @@ public:
|
|
33
36
|
idx_t cte_index;
|
34
37
|
//! The types of the chunk
|
35
38
|
vector<LogicalType> chunk_types;
|
39
|
+
//! Does this operator read a materialized CTE?
|
40
|
+
CTEMaterialize materialized_cte;
|
36
41
|
|
37
42
|
public:
|
38
43
|
vector<ColumnBinding> GetColumnBindings() override {
|
@@ -0,0 +1,43 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/planner/operator/logical_dependent_join.hpp
|
5
|
+
//
|
6
|
+
// logical_dependent_join represents a logical operator for lateral joins that
|
7
|
+
// is planned but not yet flattened
|
8
|
+
//
|
9
|
+
// This construct only exists during planning and should not exist in the plan
|
10
|
+
// once flattening is complete. Although the same information can be kept in the
|
11
|
+
// join itself, creating a new construct makes the code cleaner and easier to
|
12
|
+
// understand.
|
13
|
+
//
|
14
|
+
//===----------------------------------------------------------------------===//
|
15
|
+
|
16
|
+
#pragma once
|
17
|
+
|
18
|
+
#include "duckdb/planner/binder.hpp"
|
19
|
+
#include "duckdb/planner/operator/logical_comparison_join.hpp"
|
20
|
+
|
21
|
+
namespace duckdb {
|
22
|
+
|
23
|
+
class LogicalDependentJoin : public LogicalComparisonJoin {
|
24
|
+
public:
|
25
|
+
static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_DEPENDENT_JOIN;
|
26
|
+
|
27
|
+
public:
|
28
|
+
explicit LogicalDependentJoin(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
|
29
|
+
vector<CorrelatedColumnInfo> correlated_columns, JoinType type,
|
30
|
+
unique_ptr<Expression> condition);
|
31
|
+
|
32
|
+
//! The conditions of the join
|
33
|
+
unique_ptr<Expression> join_condition;
|
34
|
+
//! The list of columns that have correlations with the right
|
35
|
+
vector<CorrelatedColumnInfo> correlated_columns;
|
36
|
+
|
37
|
+
public:
|
38
|
+
static unique_ptr<LogicalOperator> Create(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
|
39
|
+
vector<CorrelatedColumnInfo> correlated_columns, JoinType type,
|
40
|
+
unique_ptr<Expression> condition);
|
41
|
+
void Serialize(FieldWriter &writer) const override;
|
42
|
+
};
|
43
|
+
} // namespace duckdb
|
@@ -11,6 +11,7 @@
|
|
11
11
|
#include "duckdb/function/table_function.hpp"
|
12
12
|
#include "duckdb/planner/logical_operator.hpp"
|
13
13
|
#include "duckdb/planner/table_filter.hpp"
|
14
|
+
#include "duckdb/common/extra_operator_info.hpp"
|
14
15
|
|
15
16
|
namespace duckdb {
|
16
17
|
|
@@ -49,6 +50,9 @@ public:
|
|
49
50
|
vector<string> input_table_names;
|
50
51
|
//! For a table-in-out function, the set of projected input columns
|
51
52
|
vector<column_t> projected_input;
|
53
|
+
//! Currently stores File Filters (as strings) applied by hive partitioning/complex filter pushdown
|
54
|
+
//! Stored so the can be included in explain output
|
55
|
+
ExtraOperatorInfo extra_info;
|
52
56
|
|
53
57
|
string GetName() const override;
|
54
58
|
string ParamsToString() const override;
|
@@ -0,0 +1,49 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/planner/operator/logical_materialized_cte.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/planner/logical_operator.hpp"
|
12
|
+
|
13
|
+
namespace duckdb {
|
14
|
+
|
15
|
+
class LogicalMaterializedCTE : public LogicalOperator {
|
16
|
+
LogicalMaterializedCTE(idx_t table_index)
|
17
|
+
: LogicalOperator(LogicalOperatorType::LOGICAL_MATERIALIZED_CTE), table_index(table_index) {
|
18
|
+
}
|
19
|
+
|
20
|
+
public:
|
21
|
+
static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_MATERIALIZED_CTE;
|
22
|
+
|
23
|
+
public:
|
24
|
+
LogicalMaterializedCTE(string ctename, idx_t table_index, idx_t column_count, unique_ptr<LogicalOperator> cte,
|
25
|
+
unique_ptr<LogicalOperator> child)
|
26
|
+
: LogicalOperator(LogicalOperatorType::LOGICAL_MATERIALIZED_CTE), table_index(table_index),
|
27
|
+
column_count(column_count), ctename(ctename) {
|
28
|
+
children.push_back(std::move(cte));
|
29
|
+
children.push_back(std::move(child));
|
30
|
+
}
|
31
|
+
|
32
|
+
idx_t table_index;
|
33
|
+
idx_t column_count;
|
34
|
+
string ctename;
|
35
|
+
|
36
|
+
public:
|
37
|
+
vector<ColumnBinding> GetColumnBindings() override {
|
38
|
+
return children[1]->GetColumnBindings();
|
39
|
+
}
|
40
|
+
void Serialize(FieldWriter &writer) const override;
|
41
|
+
static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
|
42
|
+
vector<idx_t> GetTableIndex() const override;
|
43
|
+
|
44
|
+
protected:
|
45
|
+
void ResolveTypes() override {
|
46
|
+
types = children[1]->types;
|
47
|
+
}
|
48
|
+
};
|
49
|
+
} // namespace duckdb
|
@@ -22,15 +22,16 @@ public:
|
|
22
22
|
static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_RECURSIVE_CTE;
|
23
23
|
|
24
24
|
public:
|
25
|
-
LogicalRecursiveCTE(idx_t table_index, idx_t column_count, bool union_all,
|
26
|
-
unique_ptr<LogicalOperator> bottom)
|
27
|
-
: LogicalOperator(LogicalOperatorType::LOGICAL_RECURSIVE_CTE), union_all(union_all),
|
28
|
-
column_count(column_count) {
|
25
|
+
LogicalRecursiveCTE(string ctename, idx_t table_index, idx_t column_count, bool union_all,
|
26
|
+
unique_ptr<LogicalOperator> top, unique_ptr<LogicalOperator> bottom)
|
27
|
+
: LogicalOperator(LogicalOperatorType::LOGICAL_RECURSIVE_CTE), union_all(union_all), ctename(ctename),
|
28
|
+
table_index(table_index), column_count(column_count) {
|
29
29
|
children.push_back(std::move(top));
|
30
30
|
children.push_back(std::move(bottom));
|
31
31
|
}
|
32
32
|
|
33
33
|
bool union_all;
|
34
|
+
string ctename;
|
34
35
|
idx_t table_index;
|
35
36
|
idx_t column_count;
|
36
37
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/planner/query_node/bound_cte_node.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/planner/binder.hpp"
|
12
|
+
#include "duckdb/planner/bound_query_node.hpp"
|
13
|
+
|
14
|
+
namespace duckdb {
|
15
|
+
|
16
|
+
class BoundCTENode : public BoundQueryNode {
|
17
|
+
public:
|
18
|
+
static constexpr const QueryNodeType TYPE = QueryNodeType::CTE_NODE;
|
19
|
+
|
20
|
+
public:
|
21
|
+
BoundCTENode() : BoundQueryNode(QueryNodeType::CTE_NODE) {
|
22
|
+
}
|
23
|
+
|
24
|
+
//! Keep track of the CTE name this node represents
|
25
|
+
string ctename;
|
26
|
+
|
27
|
+
//! The cte node
|
28
|
+
unique_ptr<BoundQueryNode> query;
|
29
|
+
//! The child node
|
30
|
+
unique_ptr<BoundQueryNode> child;
|
31
|
+
//! Index used by the set operation
|
32
|
+
idx_t setop_index;
|
33
|
+
//! The binder used by the query side of the CTE
|
34
|
+
shared_ptr<Binder> query_binder;
|
35
|
+
//! The binder used by the child side of the CTE
|
36
|
+
shared_ptr<Binder> child_binder;
|
37
|
+
|
38
|
+
public:
|
39
|
+
idx_t GetRootIndex() override {
|
40
|
+
return child->GetRootIndex();
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
} // namespace duckdb
|
@@ -23,7 +23,7 @@ struct FlattenDependentJoins {
|
|
23
23
|
|
24
24
|
//! Detects which Logical Operators have correlated expressions that they are dependent upon, filling the
|
25
25
|
//! has_correlated_expressions map.
|
26
|
-
bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false);
|
26
|
+
bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false, idx_t lateral_depth = 0);
|
27
27
|
|
28
28
|
//! Push the dependent join down a LogicalOperator
|
29
29
|
unique_ptr<LogicalOperator> PushDownDependentJoin(unique_ptr<LogicalOperator> plan);
|
@@ -43,7 +43,7 @@ struct FlattenDependentJoins {
|
|
43
43
|
|
44
44
|
private:
|
45
45
|
unique_ptr<LogicalOperator> PushDownDependentJoinInternal(unique_ptr<LogicalOperator> plan,
|
46
|
-
bool &parent_propagate_null_values);
|
46
|
+
bool &parent_propagate_null_values, idx_t lateral_depth);
|
47
47
|
};
|
48
48
|
|
49
49
|
} // namespace duckdb
|
@@ -16,7 +16,8 @@ namespace duckdb {
|
|
16
16
|
//! Helper class to recursively detect correlated expressions inside a single LogicalOperator
|
17
17
|
class HasCorrelatedExpressions : public LogicalOperatorVisitor {
|
18
18
|
public:
|
19
|
-
explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false
|
19
|
+
explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false,
|
20
|
+
idx_t lateral_depth = 0);
|
20
21
|
|
21
22
|
void VisitOperator(LogicalOperator &op) override;
|
22
23
|
|
@@ -28,6 +29,8 @@ protected:
|
|
28
29
|
unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
|
29
30
|
|
30
31
|
const vector<CorrelatedColumnInfo> &correlated_columns;
|
32
|
+
// Tracks number of nested laterals
|
33
|
+
idx_t lateral_depth;
|
31
34
|
};
|
32
35
|
|
33
36
|
} // namespace duckdb
|
@@ -0,0 +1,31 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/planner/subquery/recursive_dependent_join_planner.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/planner/logical_operator_visitor.hpp"
|
12
|
+
|
13
|
+
namespace duckdb {
|
14
|
+
|
15
|
+
class Binder;
|
16
|
+
|
17
|
+
/*
|
18
|
+
* Recursively plan subqueries and flatten dependent joins from outermost to innermost (like peeling an onion).
|
19
|
+
*/
|
20
|
+
class RecursiveDependentJoinPlanner : public LogicalOperatorVisitor {
|
21
|
+
public:
|
22
|
+
explicit RecursiveDependentJoinPlanner(Binder &binder) : binder(binder) {
|
23
|
+
}
|
24
|
+
void VisitOperator(LogicalOperator &op) override;
|
25
|
+
unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
|
26
|
+
|
27
|
+
private:
|
28
|
+
unique_ptr<LogicalOperator> root;
|
29
|
+
Binder &binder;
|
30
|
+
};
|
31
|
+
} // namespace duckdb
|
@@ -17,7 +17,8 @@ namespace duckdb {
|
|
17
17
|
//! Helper class to rewrite correlated expressions within a single LogicalOperator
|
18
18
|
class RewriteCorrelatedExpressions : public LogicalOperatorVisitor {
|
19
19
|
public:
|
20
|
-
RewriteCorrelatedExpressions(ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map
|
20
|
+
RewriteCorrelatedExpressions(ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map,
|
21
|
+
idx_t lateral_depth, bool recursive_rewrite = false);
|
21
22
|
|
22
23
|
void VisitOperator(LogicalOperator &op) override;
|
23
24
|
|
@@ -31,7 +32,7 @@ private:
|
|
31
32
|
public:
|
32
33
|
RewriteCorrelatedRecursive(BoundSubqueryExpression &parent, ColumnBinding base_binding,
|
33
34
|
column_binding_map_t<idx_t> &correlated_map);
|
34
|
-
|
35
|
+
void RewriteJoinRefRecursive(BoundTableRef &ref);
|
35
36
|
void RewriteCorrelatedSubquery(BoundSubqueryExpression &expr);
|
36
37
|
void RewriteCorrelatedExpressions(Expression &child);
|
37
38
|
|
@@ -43,6 +44,11 @@ private:
|
|
43
44
|
private:
|
44
45
|
ColumnBinding base_binding;
|
45
46
|
column_binding_map_t<idx_t> &correlated_map;
|
47
|
+
// To keep track of the number of dependent joins encountered
|
48
|
+
idx_t lateral_depth;
|
49
|
+
// This flag is used to determine if the rewrite should recursively update the bindings for all
|
50
|
+
// bound columns ref in the plan, and update the depths to match the new source
|
51
|
+
bool recursive_rewrite;
|
46
52
|
};
|
47
53
|
|
48
54
|
//! Helper class that rewrites COUNT aggregates into a CASE expression turning NULL into 0 after a LEFT OUTER JOIN
|
@@ -17,8 +17,9 @@ public:
|
|
17
17
|
static constexpr const TableReferenceType TYPE = TableReferenceType::CTE;
|
18
18
|
|
19
19
|
public:
|
20
|
-
BoundCTERef(idx_t bind_index, idx_t cte_index)
|
21
|
-
: BoundTableRef(TableReferenceType::CTE), bind_index(bind_index), cte_index(cte_index)
|
20
|
+
BoundCTERef(idx_t bind_index, idx_t cte_index, CTEMaterialize materialized_cte)
|
21
|
+
: BoundTableRef(TableReferenceType::CTE), bind_index(bind_index), cte_index(cte_index),
|
22
|
+
materialized_cte(materialized_cte) {
|
22
23
|
}
|
23
24
|
|
24
25
|
//! The set of columns bound to this base table reference
|
@@ -29,5 +30,7 @@ public:
|
|
29
30
|
idx_t bind_index;
|
30
31
|
//! The index of the cte
|
31
32
|
idx_t cte_index;
|
33
|
+
//! Is this a reference to a materialized CTE?
|
34
|
+
CTEMaterialize materialized_cte;
|
32
35
|
};
|
33
36
|
} // namespace duckdb
|
@@ -65,6 +65,9 @@ public:
|
|
65
65
|
//! Returns the number of free blocks
|
66
66
|
virtual idx_t FreeBlocks() = 0;
|
67
67
|
|
68
|
+
//! Truncate the underlying database file after a checkpoint
|
69
|
+
virtual void Truncate();
|
70
|
+
|
68
71
|
//! Register a block with the given block id in the base file
|
69
72
|
shared_ptr<BlockHandle> RegisterBlock(block_id_t block_id, bool is_meta_block = false);
|
70
73
|
//! Clear cached handles for meta blocks
|
@@ -74,9 +77,6 @@ public:
|
|
74
77
|
|
75
78
|
void UnregisterBlock(block_id_t block_id, bool can_destroy);
|
76
79
|
|
77
|
-
static BlockManager &GetBlockManager(ClientContext &context);
|
78
|
-
static BlockManager &GetBlockManager(DatabaseInstance &db);
|
79
|
-
|
80
80
|
private:
|
81
81
|
//! The lock for the set of blocks
|
82
82
|
mutex blocks_lock;
|
@@ -51,7 +51,7 @@ public:
|
|
51
51
|
const string &table, vector<ColumnDefinition> column_definitions_p,
|
52
52
|
unique_ptr<PersistentTableData> data = nullptr);
|
53
53
|
//! Constructs a DataTable as a delta on an existing data table with a newly added column
|
54
|
-
DataTable(ClientContext &context, DataTable &parent, ColumnDefinition &new_column, Expression
|
54
|
+
DataTable(ClientContext &context, DataTable &parent, ColumnDefinition &new_column, Expression &default_value);
|
55
55
|
//! Constructs a DataTable as a delta on an existing data table but with one column removed
|
56
56
|
DataTable(ClientContext &context, DataTable &parent, idx_t removed_column);
|
57
57
|
//! Constructs a DataTable as a delta on an existing data table but with one column changed type
|
@@ -47,11 +47,33 @@ public:
|
|
47
47
|
return std::static_pointer_cast<T, ObjectCacheEntry>(object);
|
48
48
|
}
|
49
49
|
|
50
|
+
template <class T, class... Args>
|
51
|
+
shared_ptr<T> GetOrCreate(const string &key, Args &&...args) {
|
52
|
+
lock_guard<mutex> glock(lock);
|
53
|
+
|
54
|
+
auto entry = cache.find(key);
|
55
|
+
if (entry == cache.end()) {
|
56
|
+
auto value = make_shared<T>(args...);
|
57
|
+
cache[key] = value;
|
58
|
+
return value;
|
59
|
+
}
|
60
|
+
auto object = entry->second;
|
61
|
+
if (!object || object->GetObjectType() != T::ObjectType()) {
|
62
|
+
return nullptr;
|
63
|
+
}
|
64
|
+
return std::static_pointer_cast<T, ObjectCacheEntry>(object);
|
65
|
+
}
|
66
|
+
|
50
67
|
void Put(string key, shared_ptr<ObjectCacheEntry> value) {
|
51
68
|
lock_guard<mutex> glock(lock);
|
52
69
|
cache[key] = std::move(value);
|
53
70
|
}
|
54
71
|
|
72
|
+
void Delete(const string &key) {
|
73
|
+
lock_guard<mutex> glock(lock);
|
74
|
+
cache.erase(key);
|
75
|
+
}
|
76
|
+
|
55
77
|
DUCKDB_API static ObjectCache &GetObjectCache(ClientContext &context);
|
56
78
|
DUCKDB_API static bool ObjectCacheEnabled(ClientContext &context);
|
57
79
|
|