duckdb 0.8.2-dev145.0 → 0.8.2-dev1493.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 +42 -5
- 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/file_system.cpp +19 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
- package/src/duckdb/src/common/local_file_system.cpp +2 -2
- 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/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 +414 -283
- 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_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +22 -3
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +2 -2
- 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_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/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/table_scan.cpp +9 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -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/enum_util.hpp +8 -0
- 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/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/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/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 +2 -10
- 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/main/client_config.hpp +3 -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 +30 -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 +8 -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 +3 -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 +6 -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 +64 -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 +61 -26
- package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
- package/src/duckdb/src/planner/binder.cpp +5 -0
- 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/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_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 +8 -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
@@ -87,7 +87,8 @@ struct MultiFileReader {
|
|
87
87
|
DUCKDB_API static vector<string> GetFileList(ClientContext &context, const Value &input, const string &name,
|
88
88
|
FileGlobOptions options = FileGlobOptions::DISALLOW_EMPTY);
|
89
89
|
//! Parse the named parameters of a multi-file reader
|
90
|
-
DUCKDB_API static bool ParseOption(const string &key, const Value &val, MultiFileReaderOptions &options
|
90
|
+
DUCKDB_API static bool ParseOption(const string &key, const Value &val, MultiFileReaderOptions &options,
|
91
|
+
ClientContext &context);
|
91
92
|
//! Perform complex filter pushdown into the multi-file reader, potentially filtering out files that should be read
|
92
93
|
//! If "true" the first file has been eliminated
|
93
94
|
DUCKDB_API static bool ComplexFilterPushdown(ClientContext &context, vector<string> &files,
|
@@ -102,7 +103,7 @@ struct MultiFileReader {
|
|
102
103
|
const MultiFileReaderBindData &options, const string &filename,
|
103
104
|
const vector<string> &local_names, const vector<LogicalType> &global_types,
|
104
105
|
const vector<string> &global_names, const vector<column_t> &global_column_ids,
|
105
|
-
MultiFileReaderData &reader_data);
|
106
|
+
MultiFileReaderData &reader_data, ClientContext &context);
|
106
107
|
//! Create all required mappings from the global types/names to the file-local types/names
|
107
108
|
DUCKDB_API static void CreateMapping(const string &file_name, const vector<LogicalType> &local_types,
|
108
109
|
const vector<string> &local_names, const vector<LogicalType> &global_types,
|
@@ -157,9 +158,10 @@ struct MultiFileReader {
|
|
157
158
|
static void InitializeReader(READER_CLASS &reader, const MultiFileReaderOptions &options,
|
158
159
|
const MultiFileReaderBindData &bind_data, const vector<LogicalType> &global_types,
|
159
160
|
const vector<string> &global_names, const vector<column_t> &global_column_ids,
|
160
|
-
optional_ptr<TableFilterSet> table_filters, const string &initial_file
|
161
|
+
optional_ptr<TableFilterSet> table_filters, const string &initial_file,
|
162
|
+
ClientContext &context) {
|
161
163
|
FinalizeBind(options, bind_data, reader.GetFileName(), reader.GetNames(), global_types, global_names,
|
162
|
-
global_column_ids, reader.reader_data);
|
164
|
+
global_column_ids, reader.reader_data, context);
|
163
165
|
CreateMapping(reader.GetFileName(), reader.GetTypes(), reader.GetNames(), global_types, global_names,
|
164
166
|
global_column_ids, table_filters, reader.reader_data, initial_file);
|
165
167
|
reader.reader_data.filters = table_filters;
|
@@ -9,8 +9,9 @@
|
|
9
9
|
#pragma once
|
10
10
|
|
11
11
|
#include "duckdb/common/types.hpp"
|
12
|
+
#include "duckdb/common/case_insensitive_map.hpp"
|
12
13
|
#include "duckdb/common/hive_partitioning.hpp"
|
13
|
-
#include "
|
14
|
+
#include "duckdb/main/client_context.hpp"
|
14
15
|
|
15
16
|
namespace duckdb {
|
16
17
|
class Serializer;
|
@@ -22,51 +23,18 @@ struct MultiFileReaderOptions {
|
|
22
23
|
bool hive_partitioning = false;
|
23
24
|
bool auto_detect_hive_partitioning = true;
|
24
25
|
bool union_by_name = false;
|
26
|
+
bool hive_types_autocast = true;
|
27
|
+
case_insensitive_map_t<LogicalType> hive_types_schema;
|
25
28
|
|
26
29
|
DUCKDB_API void Serialize(Serializer &serializer) const;
|
27
30
|
DUCKDB_API static MultiFileReaderOptions Deserialize(Deserializer &source);
|
28
31
|
DUCKDB_API void AddBatchInfo(BindInfo &bind_info) const;
|
29
|
-
|
30
|
-
static bool
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
std::unordered_set<string> uset;
|
36
|
-
idx_t splits_size;
|
37
|
-
{
|
38
|
-
// front file
|
39
|
-
auto splits = StringUtil::Split(files.front(), FileSystem::PathSeparator());
|
40
|
-
splits_size = splits.size();
|
41
|
-
if (splits.size() < 2) {
|
42
|
-
return false;
|
43
|
-
}
|
44
|
-
for (auto it = splits.begin(); it != std::prev(splits.end()); it++) {
|
45
|
-
auto part = StringUtil::Split(*it, "=");
|
46
|
-
if (part.size() == 2) {
|
47
|
-
uset.insert(part.front());
|
48
|
-
}
|
49
|
-
}
|
50
|
-
}
|
51
|
-
if (uset.empty()) {
|
52
|
-
return false;
|
53
|
-
}
|
54
|
-
for (auto &file : files) {
|
55
|
-
auto splits = StringUtil::Split(file, FileSystem::PathSeparator());
|
56
|
-
if (splits.size() != splits_size) {
|
57
|
-
return false;
|
58
|
-
}
|
59
|
-
for (auto it = splits.begin(); it != std::prev(splits.end()); it++) {
|
60
|
-
auto part = StringUtil::Split(*it, "=");
|
61
|
-
if (part.size() == 2) {
|
62
|
-
if (uset.find(part.front()) == uset.end()) {
|
63
|
-
return false;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
}
|
67
|
-
}
|
68
|
-
return true;
|
69
|
-
}
|
32
|
+
DUCKDB_API void AutoDetectHivePartitioning(const vector<string> &files, ClientContext &context);
|
33
|
+
DUCKDB_API static bool AutoDetectHivePartitioningInternal(const vector<string> &files);
|
34
|
+
DUCKDB_API void AutoDetectHiveTypesInternal(const string &file, ClientContext &context);
|
35
|
+
DUCKDB_API void VerifyHiveTypesArePartitions(const std::map<string, string> &partitions) const;
|
36
|
+
DUCKDB_API LogicalType GetHiveLogicalType(const string &hive_partition_column) const;
|
37
|
+
DUCKDB_API Value GetHivePartitionValue(const string &base, const string &entry, ClientContext &context) const;
|
70
38
|
};
|
71
39
|
|
72
40
|
} // namespace duckdb
|
@@ -8,13 +8,18 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/common/assert.hpp"
|
11
12
|
#include "duckdb/common/constants.hpp"
|
13
|
+
#include "duckdb/common/hugeint.hpp"
|
12
14
|
#include "duckdb/common/limits.hpp"
|
13
15
|
#include "duckdb/common/exception.hpp"
|
16
|
+
#include "duckdb/common/typedefs.hpp"
|
14
17
|
#include "duckdb/common/types/string_type.hpp"
|
15
18
|
#include "duckdb/common/types.hpp"
|
16
19
|
#include "duckdb/common/operator/convert_to_string.hpp"
|
17
20
|
#include "duckdb/common/types/null_value.hpp"
|
21
|
+
#include "duckdb/common/types/bit.hpp"
|
22
|
+
#include "duckdb/common/types/vector.hpp"
|
18
23
|
|
19
24
|
namespace duckdb {
|
20
25
|
struct ValidityMask;
|
@@ -652,6 +657,15 @@ struct CastFromBlob {
|
|
652
657
|
template <>
|
653
658
|
duckdb::string_t CastFromBlob::Operation(duckdb::string_t input, Vector &vector);
|
654
659
|
|
660
|
+
struct CastFromBlobToBit {
|
661
|
+
template <class SRC>
|
662
|
+
static inline string_t Operation(SRC input, Vector &result) {
|
663
|
+
throw NotImplementedException("Cast from blob could not be performed!");
|
664
|
+
}
|
665
|
+
};
|
666
|
+
template <>
|
667
|
+
string_t CastFromBlobToBit::Operation(string_t input, Vector &result);
|
668
|
+
|
655
669
|
struct TryCastToBlob {
|
656
670
|
template <class SRC, class DST>
|
657
671
|
static inline bool Operation(SRC input, DST &result, Vector &result_vector, string *error_message,
|
@@ -659,7 +673,6 @@ struct TryCastToBlob {
|
|
659
673
|
throw InternalException("Unsupported type for try cast to blob");
|
660
674
|
}
|
661
675
|
};
|
662
|
-
|
663
676
|
template <>
|
664
677
|
bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, string *error_message,
|
665
678
|
bool strict);
|
@@ -667,14 +680,41 @@ bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_v
|
|
667
680
|
//===--------------------------------------------------------------------===//
|
668
681
|
// Bits
|
669
682
|
//===--------------------------------------------------------------------===//
|
670
|
-
struct
|
683
|
+
struct CastFromBitToString {
|
671
684
|
template <class SRC>
|
672
685
|
static inline string_t Operation(SRC input, Vector &result) {
|
673
686
|
throw duckdb::NotImplementedException("Cast from bit could not be performed!");
|
674
687
|
}
|
675
688
|
};
|
676
689
|
template <>
|
677
|
-
duckdb::string_t
|
690
|
+
duckdb::string_t CastFromBitToString::Operation(duckdb::string_t input, Vector &vector);
|
691
|
+
|
692
|
+
struct CastFromBitToNumeric {
|
693
|
+
template <class SRC = string_t, class DST>
|
694
|
+
static inline bool Operation(SRC input, DST &result, bool strict = false) {
|
695
|
+
D_ASSERT(input.GetSize() > 1);
|
696
|
+
|
697
|
+
// TODO: Allow conversion if the significant bytes of the bitstring can be cast to the target type
|
698
|
+
// Currently only allows bitstring -> numeric if the full bitstring fits inside the numeric type
|
699
|
+
if (input.GetSize() - 1 > sizeof(DST)) {
|
700
|
+
throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId<DST>());
|
701
|
+
}
|
702
|
+
Bit::BitToNumeric(input, result);
|
703
|
+
return (true);
|
704
|
+
}
|
705
|
+
};
|
706
|
+
template <>
|
707
|
+
bool CastFromBitToNumeric::Operation(string_t input, bool &result, bool strict);
|
708
|
+
template <>
|
709
|
+
bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, bool strict);
|
710
|
+
|
711
|
+
struct CastFromBitToBlob {
|
712
|
+
template <class SRC>
|
713
|
+
static inline string_t Operation(SRC input, Vector &result) {
|
714
|
+
D_ASSERT(input.GetSize() > 1);
|
715
|
+
return StringVector::AddStringOrBlob(result, Bit::BitToBlob(input));
|
716
|
+
}
|
717
|
+
};
|
678
718
|
|
679
719
|
struct TryCastToBit {
|
680
720
|
template <class SRC, class DST>
|
@@ -9,8 +9,11 @@
|
|
9
9
|
#pragma once
|
10
10
|
|
11
11
|
#include "duckdb/common/operator/cast_operators.hpp"
|
12
|
+
#include "duckdb/common/types/bit.hpp"
|
12
13
|
#include "duckdb/common/types/hugeint.hpp"
|
14
|
+
#include "duckdb/common/types/string_type.hpp"
|
13
15
|
#include "duckdb/common/types/value.hpp"
|
16
|
+
#include "duckdb/common/types/vector.hpp"
|
14
17
|
#include <cmath>
|
15
18
|
|
16
19
|
namespace duckdb {
|
@@ -442,6 +445,13 @@ bool TryCastWithOverflowCheck(hugeint_t value, double &result) {
|
|
442
445
|
return Hugeint::TryCast(value, result);
|
443
446
|
}
|
444
447
|
|
448
|
+
struct NumericTryCastToBit {
|
449
|
+
template <class SRC>
|
450
|
+
static inline string_t Operation(SRC input, Vector &result) {
|
451
|
+
return StringVector::AddStringOrBlob(result, Bit::NumericToBit(input));
|
452
|
+
}
|
453
|
+
};
|
454
|
+
|
445
455
|
struct NumericTryCast {
|
446
456
|
template <class SRC, class DST>
|
447
457
|
static inline bool Operation(SRC input, DST &result, bool strict = false) {
|
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/common/bswap.hpp"
|
11
12
|
#include "duckdb/common/common.hpp"
|
12
13
|
#include "duckdb/common/exception.hpp"
|
13
14
|
#include "duckdb/common/types.hpp"
|
@@ -20,18 +21,6 @@
|
|
20
21
|
|
21
22
|
namespace duckdb {
|
22
23
|
|
23
|
-
#define BSWAP16(x) ((uint16_t)((((uint16_t)(x)&0xff00) >> 8) | (((uint16_t)(x)&0x00ff) << 8)))
|
24
|
-
|
25
|
-
#define BSWAP32(x) \
|
26
|
-
((uint32_t)((((uint32_t)(x)&0xff000000) >> 24) | (((uint32_t)(x)&0x00ff0000) >> 8) | \
|
27
|
-
(((uint32_t)(x)&0x0000ff00) << 8) | (((uint32_t)(x)&0x000000ff) << 24)))
|
28
|
-
|
29
|
-
#define BSWAP64(x) \
|
30
|
-
((uint64_t)((((uint64_t)(x)&0xff00000000000000ull) >> 56) | (((uint64_t)(x)&0x00ff000000000000ull) >> 40) | \
|
31
|
-
(((uint64_t)(x)&0x0000ff0000000000ull) >> 24) | (((uint64_t)(x)&0x000000ff00000000ull) >> 8) | \
|
32
|
-
(((uint64_t)(x)&0x00000000ff000000ull) << 8) | (((uint64_t)(x)&0x0000000000ff0000ull) << 24) | \
|
33
|
-
(((uint64_t)(x)&0x000000000000ff00ull) << 40) | (((uint64_t)(x)&0x00000000000000ffull) << 56)))
|
34
|
-
|
35
24
|
struct Radix {
|
36
25
|
public:
|
37
26
|
static inline bool IsLittleEndian() {
|
@@ -134,19 +123,19 @@ inline void Radix::EncodeData(data_ptr_t dataptr, int8_t value) {
|
|
134
123
|
|
135
124
|
template <>
|
136
125
|
inline void Radix::EncodeData(data_ptr_t dataptr, int16_t value) {
|
137
|
-
Store<uint16_t>(
|
126
|
+
Store<uint16_t>(BSwap<uint16_t>(value), dataptr);
|
138
127
|
dataptr[0] = FlipSign(dataptr[0]);
|
139
128
|
}
|
140
129
|
|
141
130
|
template <>
|
142
131
|
inline void Radix::EncodeData(data_ptr_t dataptr, int32_t value) {
|
143
|
-
Store<uint32_t>(
|
132
|
+
Store<uint32_t>(BSwap<uint32_t>(value), dataptr);
|
144
133
|
dataptr[0] = FlipSign(dataptr[0]);
|
145
134
|
}
|
146
135
|
|
147
136
|
template <>
|
148
137
|
inline void Radix::EncodeData(data_ptr_t dataptr, int64_t value) {
|
149
|
-
Store<uint64_t>(
|
138
|
+
Store<uint64_t>(BSwap<uint64_t>(value), dataptr);
|
150
139
|
dataptr[0] = FlipSign(dataptr[0]);
|
151
140
|
}
|
152
141
|
|
@@ -157,17 +146,17 @@ inline void Radix::EncodeData(data_ptr_t dataptr, uint8_t value) {
|
|
157
146
|
|
158
147
|
template <>
|
159
148
|
inline void Radix::EncodeData(data_ptr_t dataptr, uint16_t value) {
|
160
|
-
Store<uint16_t>(
|
149
|
+
Store<uint16_t>(BSwap<uint16_t>(value), dataptr);
|
161
150
|
}
|
162
151
|
|
163
152
|
template <>
|
164
153
|
inline void Radix::EncodeData(data_ptr_t dataptr, uint32_t value) {
|
165
|
-
Store<uint32_t>(
|
154
|
+
Store<uint32_t>(BSwap<uint32_t>(value), dataptr);
|
166
155
|
}
|
167
156
|
|
168
157
|
template <>
|
169
158
|
inline void Radix::EncodeData(data_ptr_t dataptr, uint64_t value) {
|
170
|
-
Store<uint64_t>(
|
159
|
+
Store<uint64_t>(BSwap<uint64_t>(value), dataptr);
|
171
160
|
}
|
172
161
|
|
173
162
|
template <>
|
@@ -179,13 +168,13 @@ inline void Radix::EncodeData(data_ptr_t dataptr, hugeint_t value) {
|
|
179
168
|
template <>
|
180
169
|
inline void Radix::EncodeData(data_ptr_t dataptr, float value) {
|
181
170
|
uint32_t converted_value = EncodeFloat(value);
|
182
|
-
Store<uint32_t>(
|
171
|
+
Store<uint32_t>(BSwap<uint32_t>(converted_value), dataptr);
|
183
172
|
}
|
184
173
|
|
185
174
|
template <>
|
186
175
|
inline void Radix::EncodeData(data_ptr_t dataptr, double value) {
|
187
176
|
uint64_t converted_value = EncodeDouble(value);
|
188
|
-
Store<uint64_t>(
|
177
|
+
Store<uint64_t>(BSwap<uint64_t>(converted_value), dataptr);
|
189
178
|
}
|
190
179
|
|
191
180
|
template <>
|
@@ -22,6 +22,9 @@ struct SelectionVector;
|
|
22
22
|
//! Generic radix partitioning functions
|
23
23
|
struct RadixPartitioning {
|
24
24
|
public:
|
25
|
+
//! 4096 partitions ought to be enough to go out-of-core properly
|
26
|
+
static constexpr const idx_t MAX_RADIX_BITS = 12;
|
27
|
+
|
25
28
|
//! The number of partitions for a given number of radix bits
|
26
29
|
static inline constexpr idx_t NumberOfPartitions(idx_t radix_bits) {
|
27
30
|
return idx_t(1) << radix_bits;
|
@@ -38,10 +41,12 @@ public:
|
|
38
41
|
throw InternalException("RadixPartitioning::RadixBits unable to find partition count!");
|
39
42
|
}
|
40
43
|
|
44
|
+
//! Radix bits begin after uint16_t because these bits are used as salt in the aggregate HT
|
41
45
|
static inline constexpr idx_t Shift(idx_t radix_bits) {
|
42
|
-
return
|
46
|
+
return (sizeof(hash_t) - sizeof(uint16_t)) * 8 - radix_bits;
|
43
47
|
}
|
44
48
|
|
49
|
+
//! Mask of the radix bits of the hash
|
45
50
|
static inline constexpr hash_t Mask(idx_t radix_bits) {
|
46
51
|
return (hash_t(1 << radix_bits) - 1) << Shift(radix_bits);
|
47
52
|
}
|
@@ -49,26 +54,6 @@ public:
|
|
49
54
|
//! Select using a cutoff on the radix bits of the hash
|
50
55
|
static idx_t Select(Vector &hashes, const SelectionVector *sel, idx_t count, idx_t radix_bits, idx_t cutoff,
|
51
56
|
SelectionVector *true_sel, SelectionVector *false_sel);
|
52
|
-
|
53
|
-
//! Convert hashes to bins
|
54
|
-
static void HashesToBins(Vector &hashes, idx_t radix_bits, Vector &bins, idx_t count);
|
55
|
-
};
|
56
|
-
|
57
|
-
//! Templated radix partitioning constants, can be templated to the number of radix bits
|
58
|
-
template <idx_t radix_bits>
|
59
|
-
struct RadixPartitioningConstants {
|
60
|
-
public:
|
61
|
-
//! Bitmask of the upper bits of the 5th byte
|
62
|
-
static constexpr const idx_t NUM_PARTITIONS = RadixPartitioning::NumberOfPartitions(radix_bits);
|
63
|
-
static constexpr const idx_t SHIFT = RadixPartitioning::Shift(radix_bits);
|
64
|
-
static constexpr const hash_t MASK = RadixPartitioning::Mask(radix_bits);
|
65
|
-
|
66
|
-
public:
|
67
|
-
//! Apply bitmask and right shift to get a number between 0 and NUM_PARTITIONS
|
68
|
-
static inline hash_t ApplyMask(hash_t hash) {
|
69
|
-
D_ASSERT((hash & MASK) >> SHIFT < NUM_PARTITIONS);
|
70
|
-
return (hash & MASK) >> SHIFT;
|
71
|
-
}
|
72
57
|
};
|
73
58
|
|
74
59
|
//! RadixPartitionedColumnData is a PartitionedColumnData that partitions input based on the radix of a hash
|
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
namespace duckdb {
|
15
15
|
|
16
|
-
class
|
16
|
+
class ArenaAllocator;
|
17
17
|
struct AggregateObject;
|
18
18
|
struct AggregateFilterData;
|
19
19
|
class DataChunk;
|
@@ -26,10 +26,10 @@ class Vector;
|
|
26
26
|
struct UnifiedVectorFormat;
|
27
27
|
|
28
28
|
struct RowOperationsState {
|
29
|
-
RowOperationsState(
|
29
|
+
explicit RowOperationsState(ArenaAllocator &allocator) : allocator(allocator) {
|
30
30
|
}
|
31
31
|
|
32
|
-
|
32
|
+
ArenaAllocator &allocator;
|
33
33
|
};
|
34
34
|
|
35
35
|
// RowOperations contains a set of operations that operate on data using a RowLayout
|
@@ -53,9 +53,12 @@ public:
|
|
53
53
|
const vector<BoundOrderByNode> &order_bys, const Types &payload_types,
|
54
54
|
const vector<unique_ptr<BaseStatistics>> &partitions_stats, idx_t estimated_cardinality);
|
55
55
|
|
56
|
+
void SyncPartitioning(const PartitionGlobalSinkState &other);
|
57
|
+
|
56
58
|
void UpdateLocalPartition(GroupingPartition &local_partition, GroupingAppend &local_append);
|
57
59
|
void CombineLocalPartition(GroupingPartition &local_partition, GroupingAppend &local_append);
|
58
60
|
|
61
|
+
void BuildSortState(ColumnDataCollection &group_data, GlobalSortState &global_sort) const;
|
59
62
|
void BuildSortState(ColumnDataCollection &group_data, PartitionGlobalHashGroup &global_sort);
|
60
63
|
|
61
64
|
ClientContext &context;
|
@@ -67,6 +70,8 @@ public:
|
|
67
70
|
unique_ptr<RadixPartitionedColumnData> grouping_data;
|
68
71
|
//! Payload plus hash column
|
69
72
|
Types grouping_types;
|
73
|
+
//! The number of radix bits if this partition is being synced with another
|
74
|
+
idx_t fixed_bits;
|
70
75
|
|
71
76
|
// OVER(...) (sorting)
|
72
77
|
Orders partitions;
|
@@ -175,10 +180,18 @@ public:
|
|
175
180
|
|
176
181
|
class PartitionGlobalMergeStates {
|
177
182
|
public:
|
183
|
+
struct Callback {
|
184
|
+
virtual bool HasError() const {
|
185
|
+
return false;
|
186
|
+
}
|
187
|
+
};
|
188
|
+
|
178
189
|
using PartitionGlobalMergeStatePtr = unique_ptr<PartitionGlobalMergeState>;
|
179
190
|
|
180
191
|
explicit PartitionGlobalMergeStates(PartitionGlobalSinkState &sink);
|
181
192
|
|
193
|
+
bool ExecuteTask(PartitionLocalMergeState &local_state, Callback &callback);
|
194
|
+
|
182
195
|
vector<PartitionGlobalMergeStatePtr> states;
|
183
196
|
};
|
184
197
|
|
@@ -24,7 +24,7 @@ struct BatchedChunkScanState {
|
|
24
24
|
//! Scans over a BatchedDataCollection are ordered by batch index
|
25
25
|
class BatchedDataCollection {
|
26
26
|
public:
|
27
|
-
DUCKDB_API BatchedDataCollection(vector<LogicalType> types);
|
27
|
+
DUCKDB_API BatchedDataCollection(ClientContext &context, vector<LogicalType> types, bool buffer_managed = false);
|
28
28
|
|
29
29
|
//! Appends a datachunk with the given batch index to the batched collection
|
30
30
|
DUCKDB_API void Append(DataChunk &input, idx_t batch_index);
|
@@ -51,7 +51,9 @@ private:
|
|
51
51
|
ColumnDataAppendState append_state;
|
52
52
|
};
|
53
53
|
|
54
|
+
ClientContext &context;
|
54
55
|
vector<LogicalType> types;
|
56
|
+
bool buffer_managed;
|
55
57
|
//! The data of the batched chunk collection - a set of batch_index -> ColumnDataCollection pointers
|
56
58
|
map<idx_t, unique_ptr<ColumnDataCollection>> data;
|
57
59
|
//! The last batch collection that was inserted into
|
@@ -8,8 +8,12 @@
|
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
+
#include "duckdb/common/assert.hpp"
|
11
12
|
#include "duckdb/common/common.hpp"
|
13
|
+
#include "duckdb/common/hugeint.hpp"
|
14
|
+
#include "duckdb/common/limits.hpp"
|
12
15
|
#include "duckdb/common/types.hpp"
|
16
|
+
#include "duckdb/common/types/string_type.hpp"
|
13
17
|
|
14
18
|
namespace duckdb {
|
15
19
|
|
@@ -37,7 +41,33 @@ public:
|
|
37
41
|
//! Convert a string to a bit. This function should ONLY be called after calling GetBitSize, since it does NOT
|
38
42
|
//! perform data validation.
|
39
43
|
DUCKDB_API static void ToBit(string_t str, string_t &output);
|
44
|
+
|
40
45
|
DUCKDB_API static string ToBit(string_t str);
|
46
|
+
|
47
|
+
//! output needs to have enough space allocated before calling this function (blob size + 1)
|
48
|
+
DUCKDB_API static void BlobToBit(string_t blob, string_t &output);
|
49
|
+
|
50
|
+
DUCKDB_API static string BlobToBit(string_t blob);
|
51
|
+
|
52
|
+
//! output_str needs to have enough space allocated before calling this function (sizeof(T) + 1)
|
53
|
+
template <class T>
|
54
|
+
static void NumericToBit(T numeric, string_t &output_str);
|
55
|
+
|
56
|
+
template <class T>
|
57
|
+
static string NumericToBit(T numeric);
|
58
|
+
|
59
|
+
//! bit is expected to fit inside of output num (bit size <= sizeof(T) + 1)
|
60
|
+
template <class T>
|
61
|
+
static void BitToNumeric(string_t bit, T &output_num);
|
62
|
+
|
63
|
+
template <class T>
|
64
|
+
static T BitToNumeric(string_t bit);
|
65
|
+
|
66
|
+
//! bit is expected to fit inside of output_blob (bit size = output_blob + 1)
|
67
|
+
static void BitToBlob(string_t bit, string_t &output_blob);
|
68
|
+
|
69
|
+
static string BitToBlob(string_t bit);
|
70
|
+
|
41
71
|
//! Creates a new bitstring of determined length
|
42
72
|
DUCKDB_API static void BitString(const string_t &input, const idx_t &len, string_t &result);
|
43
73
|
DUCKDB_API static void SetEmptyBitString(string_t &target, string_t &input);
|
@@ -58,5 +88,56 @@ private:
|
|
58
88
|
static idx_t GetBitInternal(string_t bit_string, idx_t n);
|
59
89
|
static void SetBitInternal(string_t &bit_string, idx_t n, idx_t new_value);
|
60
90
|
static idx_t GetBitIndex(idx_t n);
|
91
|
+
static uint8_t GetFirstByte(const string_t &str);
|
61
92
|
};
|
93
|
+
|
94
|
+
//===--------------------------------------------------------------------===//
|
95
|
+
// Bit Template definitions
|
96
|
+
//===--------------------------------------------------------------------===//
|
97
|
+
template <class T>
|
98
|
+
void Bit::NumericToBit(T numeric, string_t &output_str) {
|
99
|
+
D_ASSERT(output_str.GetSize() >= sizeof(T) + 1);
|
100
|
+
|
101
|
+
auto output = output_str.GetDataWriteable();
|
102
|
+
auto data = const_data_ptr_cast(&numeric);
|
103
|
+
|
104
|
+
*output = 0; // set padding to 0
|
105
|
+
++output;
|
106
|
+
for (idx_t idx = 0; idx < sizeof(T); ++idx) {
|
107
|
+
output[idx] = data[sizeof(T) - idx - 1];
|
108
|
+
}
|
109
|
+
Bit::Finalize(output_str);
|
110
|
+
}
|
111
|
+
|
112
|
+
template <class T>
|
113
|
+
string Bit::NumericToBit(T numeric) {
|
114
|
+
auto bit_len = sizeof(T) + 1;
|
115
|
+
auto buffer = make_unsafe_uniq_array<char>(bit_len);
|
116
|
+
string_t output_str(buffer.get(), bit_len);
|
117
|
+
Bit::NumericToBit(numeric, output_str);
|
118
|
+
return output_str.GetString();
|
119
|
+
}
|
120
|
+
|
121
|
+
template <class T>
|
122
|
+
T Bit::BitToNumeric(string_t bit) {
|
123
|
+
T output;
|
124
|
+
Bit::BitToNumeric(bit, output);
|
125
|
+
return (output);
|
126
|
+
}
|
127
|
+
|
128
|
+
template <class T>
|
129
|
+
void Bit::BitToNumeric(string_t bit, T &output_num) {
|
130
|
+
D_ASSERT(bit.GetSize() <= sizeof(T) + 1);
|
131
|
+
|
132
|
+
output_num = 0;
|
133
|
+
auto data = const_data_ptr_cast(bit.GetData());
|
134
|
+
auto output = data_ptr_cast(&output_num);
|
135
|
+
|
136
|
+
idx_t padded_byte_idx = sizeof(T) - bit.GetSize() + 1;
|
137
|
+
output[sizeof(T) - 1 - padded_byte_idx] = GetFirstByte(bit);
|
138
|
+
for (idx_t idx = padded_byte_idx + 1; idx < sizeof(T); ++idx) {
|
139
|
+
output[sizeof(T) - 1 - idx] = data[1 + idx - padded_byte_idx];
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
62
143
|
} // namespace duckdb
|
@@ -53,7 +53,7 @@ public:
|
|
53
53
|
void Initialize(ColumnDataAllocator &other);
|
54
54
|
void InitializeChunkState(ChunkManagementState &state, ChunkMetaData &meta_data);
|
55
55
|
data_ptr_t GetDataPointer(ChunkManagementState &state, uint32_t block_id, uint32_t offset);
|
56
|
-
void UnswizzlePointers(ChunkManagementState &state, Vector &result,
|
56
|
+
void UnswizzlePointers(ChunkManagementState &state, Vector &result, idx_t v_offset, uint16_t count,
|
57
57
|
uint32_t block_id, uint32_t offset);
|
58
58
|
|
59
59
|
//! Deletes the block with the given id
|
@@ -143,7 +143,12 @@ public:
|
|
143
143
|
//! Initialize the column data collection
|
144
144
|
void Initialize(vector<LogicalType> types);
|
145
145
|
|
146
|
-
//! Get
|
146
|
+
//! Get references to the string heaps in this ColumnDataCollection
|
147
|
+
vector<shared_ptr<StringHeap>> GetHeapReferences();
|
148
|
+
//! Get the allocator type of this ColumnDataCollection
|
149
|
+
ColumnDataAllocatorType GetAllocatorType() const;
|
150
|
+
|
151
|
+
//! Get a vector of the segments in this ColumnDataCollection
|
147
152
|
const vector<unique_ptr<ColumnDataCollectionSegment>> &GetSegments() const;
|
148
153
|
|
149
154
|
private:
|
package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp
CHANGED
@@ -94,7 +94,7 @@ public:
|
|
94
94
|
//! The set of child indices
|
95
95
|
vector<VectorDataIndex> child_indices;
|
96
96
|
//! The string heap for the column data collection (only used for IN_MEMORY_ALLOCATOR)
|
97
|
-
StringHeap heap;
|
97
|
+
shared_ptr<StringHeap> heap;
|
98
98
|
|
99
99
|
public:
|
100
100
|
void AllocateNewChunk();
|
@@ -20,7 +20,9 @@ enum class ColumnDataAllocatorType : uint8_t {
|
|
20
20
|
BUFFER_MANAGER_ALLOCATOR,
|
21
21
|
//! Use an in-memory allocator, allocating data for every chunk
|
22
22
|
//! This causes the column data collection to allocate blocks that are not tied to a buffer manager
|
23
|
-
IN_MEMORY_ALLOCATOR
|
23
|
+
IN_MEMORY_ALLOCATOR,
|
24
|
+
//! Use a buffer manager to allocate vectors, but use a StringHeap for strings
|
25
|
+
HYBRID
|
24
26
|
};
|
25
27
|
|
26
28
|
enum class ColumnDataScanProperties : uint8_t {
|
@@ -72,13 +72,13 @@ struct date_t { // NOLINT
|
|
72
72
|
};
|
73
73
|
|
74
74
|
// special values
|
75
|
-
static inline date_t infinity() {
|
75
|
+
static inline date_t infinity() { // NOLINT
|
76
76
|
return date_t(NumericLimits<int32_t>::Maximum());
|
77
|
-
}
|
78
|
-
static inline date_t ninfinity() {
|
77
|
+
} // NOLINT
|
78
|
+
static inline date_t ninfinity() { // NOLINT
|
79
79
|
return date_t(-NumericLimits<int32_t>::Maximum());
|
80
|
-
}
|
81
|
-
static inline date_t epoch() {
|
80
|
+
} // NOLINT
|
81
|
+
static inline date_t epoch() { // NOLINT
|
82
82
|
return date_t(0);
|
83
83
|
} // NOLINT
|
84
84
|
};
|
@@ -158,6 +158,8 @@ public:
|
|
158
158
|
DUCKDB_API static int64_t EpochNanoseconds(date_t date);
|
159
159
|
//! Extract the epoch from the date (microseconds since 1970-01-01)
|
160
160
|
DUCKDB_API static int64_t EpochMicroseconds(date_t date);
|
161
|
+
//! Extract the epoch from the date (milliseconds since 1970-01-01)
|
162
|
+
DUCKDB_API static int64_t EpochMilliseconds(date_t date);
|
161
163
|
//! Convert the epoch (seconds since 1970-01-01) to a date_t
|
162
164
|
DUCKDB_API static date_t EpochToDate(int64_t epoch);
|
163
165
|
|