duckdb 0.10.2-dev0.0 → 0.10.2-dev3.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 +22 -18
- package/binding.gyp.in +3 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +3 -1
- package/src/duckdb/extension/icu/icu_extension.cpp +6 -2
- package/src/duckdb/extension/json/buffered_json_reader.cpp +10 -3
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +13 -7
- package/src/duckdb/extension/json/include/json_serializer.hpp +5 -4
- package/src/duckdb/extension/json/include/json_structure.hpp +3 -3
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +15 -5
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +15 -6
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +21 -20
- package/src/duckdb/extension/json/json_functions/read_json.cpp +37 -3
- package/src/duckdb/extension/json/json_functions.cpp +7 -2
- package/src/duckdb/extension/json/json_scan.cpp +57 -33
- package/src/duckdb/extension/parquet/column_reader.cpp +12 -3
- package/src/duckdb/extension/parquet/column_writer.cpp +44 -7
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +5 -1
- package/src/duckdb/extension/parquet/parquet_extension.cpp +30 -3
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -2
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +1 -1
- package/src/duckdb/src/catalog/catalog.cpp +5 -1
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +21 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -9
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -7
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -7
- package/src/duckdb/src/catalog/catalog_entry.cpp +8 -0
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +2 -2
- package/src/duckdb/src/catalog/default/default_functions.cpp +6 -6
- package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
- package/src/duckdb/src/catalog/default/default_views.cpp +7 -7
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +2 -1
- package/src/duckdb/src/catalog/dependency_list.cpp +92 -8
- package/src/duckdb/src/catalog/dependency_manager.cpp +53 -68
- package/src/duckdb/src/catalog/duck_catalog.cpp +1 -1
- package/src/duckdb/src/common/adbc/adbc.cpp +287 -45
- package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -2
- package/src/duckdb/src/common/box_renderer.cpp +12 -12
- package/src/duckdb/src/common/crypto/md5.cpp +2 -1
- package/src/duckdb/src/common/enum_util.cpp +307 -1
- package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +1 -1
- package/src/duckdb/src/common/file_system.cpp +60 -13
- package/src/duckdb/src/common/filename_pattern.cpp +13 -13
- package/src/duckdb/src/common/gzip_file_system.cpp +1 -1
- package/src/duckdb/src/common/http_state.cpp +1 -1
- package/src/duckdb/src/common/local_file_system.cpp +72 -71
- package/src/duckdb/src/common/multi_file_reader.cpp +48 -28
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +13 -1
- package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +32 -13
- package/src/duckdb/src/common/string_util.cpp +2 -3
- package/src/duckdb/src/common/tree_renderer.cpp +32 -67
- package/src/duckdb/src/common/types/bit.cpp +6 -6
- package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +6 -6
- package/src/duckdb/src/common/types/hyperloglog.cpp +2 -0
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +13 -0
- package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +5 -7
- package/src/duckdb/src/common/types/uuid.cpp +1 -1
- package/src/duckdb/src/common/types/vector.cpp +22 -14
- package/src/duckdb/src/common/types.cpp +8 -1
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +20 -18
- package/src/duckdb/src/common/vector_operations/generators.cpp +1 -1
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +267 -110
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +52 -23
- package/src/duckdb/src/common/virtual_file_system.cpp +33 -20
- package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +2 -2
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +3 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +31 -16
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +3 -0
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -0
- package/src/duckdb/src/core_functions/core_functions.cpp +1 -1
- package/src/duckdb/src/core_functions/function_list.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/date/time_bucket.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +46 -17
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +82 -45
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -2
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -4
- package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +12 -21
- package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -10
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +133 -66
- package/src/duckdb/src/execution/expression_executor/execute_function.cpp +0 -2
- package/src/duckdb/src/execution/expression_executor.cpp +0 -4
- package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +2 -2
- package/src/duckdb/src/execution/index/unknown_index.cpp +13 -13
- package/src/duckdb/src/execution/join_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +0 -1
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +10 -7
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +32 -1
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +16 -2
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +7 -7
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +354 -159
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -2
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +22 -7
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +1 -1
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +10 -10
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +9 -18
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +180 -47
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +100 -58
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +88 -21
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +12 -13
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -0
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +118 -23
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +14 -5
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +5 -5
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +0 -9
- package/src/duckdb/src/execution/physical_plan/plan_vacuum.cpp +18 -0
- package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +81 -106
- package/src/duckdb/src/execution/reservoir_sample.cpp +1 -1
- package/src/duckdb/src/execution/window_executor.cpp +48 -28
- package/src/duckdb/src/execution/window_segment_tree.cpp +20 -23
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +20 -55
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +10 -9
- package/src/duckdb/src/function/cast_rules.cpp +9 -1
- package/src/duckdb/src/function/compression_config.cpp +1 -1
- package/src/duckdb/src/function/function_binder.cpp +45 -44
- package/src/duckdb/src/function/function_set.cpp +9 -9
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -2
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +21 -5
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_select.cpp +5 -2
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +5 -4
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +60 -32
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +1 -1
- package/src/duckdb/src/function/scalar/strftime_format.cpp +31 -25
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +6 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +23 -2
- package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +3 -3
- package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +1 -1
- package/src/duckdb/src/function/table/arrow.cpp +7 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +17 -13
- package/src/duckdb/src/function/table/read_csv.cpp +52 -39
- package/src/duckdb/src/function/table/sniff_csv.cpp +7 -13
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_databases.cpp +7 -1
- package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +12 -2
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -2
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
- package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +9 -2
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +10 -6
- package/src/duckdb/src/function/table/table_scan.cpp +1 -4
- package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +6 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/default/default_functions.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +26 -4
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +39 -6
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +19 -14
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +16 -16
- package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +0 -1
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +14 -10
- package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/exception.hpp +57 -58
- package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/file_open_flags.hpp +134 -0
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -6
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +35 -36
- package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +4 -6
- package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +13 -13
- package/src/duckdb/src/include/duckdb/common/helper.hpp +42 -47
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/index_vector.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +13 -10
- package/src/duckdb/src/include/duckdb/common/memory_safety.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +50 -24
- package/src/duckdb/src/include/duckdb/common/operator/abs.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/pipe_file_system.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/platform.h +1 -1
- package/src/duckdb/src/include/duckdb/common/printer.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/profiler.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/random_engine.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +7 -7
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -6
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +14 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +16 -0
- package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +24 -25
- package/src/duckdb/src/include/duckdb/common/typedefs.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +1 -2
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/constraint_conflict_info.hpp +1 -2
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/hash.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +10 -3
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +12 -12
- package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +21 -20
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +15 -7
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +14 -10
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/union_by_name.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +15 -14
- package/src/duckdb/src/include/duckdb/common/vector.hpp +21 -21
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +50 -32
- package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +10 -11
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +13 -1
- package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +2 -5
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/aggregate_object.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +0 -3
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +9 -6
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +40 -22
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +6 -4
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +0 -3
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +58 -17
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +4 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +16 -5
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +6 -6
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +5 -5
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +10 -13
- package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +24 -23
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/function_set.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +7 -7
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -3
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +12 -11
- package/src/duckdb/src/include/duckdb/function/udf_function.hpp +66 -60
- package/src/duckdb/src/include/duckdb/main/appender.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/client_properties.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/config.hpp +14 -5
- package/src/duckdb/src/include/duckdb/main/connection.hpp +27 -26
- package/src/duckdb/src/include/duckdb/main/database.hpp +19 -3
- package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +58 -0
- package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/error_manager.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +8 -8
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +2 -59
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +11 -7
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/settings.hpp +78 -70
- package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +45 -0
- package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +11 -13
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +7 -7
- package/src/duckdb/src/include/duckdb/optimizer/matcher/function_matcher.hpp +7 -7
- package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +32 -30
- package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parallel/pipeline_event.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -4
- package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +49 -8
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_database_info.hpp +40 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_pragma_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +2 -5
- package/src/duckdb/src/include/duckdb/parser/parser.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -5
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -9
- package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_expanded_expression.hpp +34 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +5 -8
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +3 -4
- package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +3 -5
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +6 -14
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_bind_state.hpp +52 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +4 -10
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +3 -6
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +4 -12
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_vacuum.hpp +52 -0
- package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +5 -4
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +5 -5
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/magic_bytes.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +24 -24
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +9 -6
- package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +10 -1
- package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_lock.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/delete_info.hpp +20 -1
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/transaction_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +1 -1
- package/src/duckdb/src/main/appender.cpp +1 -1
- package/src/duckdb/src/main/attached_database.cpp +11 -3
- package/src/duckdb/src/main/capi/arrow-c.cpp +6 -2
- package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
- package/src/duckdb/src/main/capi/duckdb-c.cpp +1 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +1 -1
- package/src/duckdb/src/main/capi/prepared-c.cpp +2 -2
- package/src/duckdb/src/main/capi/result-c.cpp +4 -4
- package/src/duckdb/src/main/client_context.cpp +4 -12
- package/src/duckdb/src/main/client_context_file_opener.cpp +15 -3
- package/src/duckdb/src/main/client_data.cpp +5 -0
- package/src/duckdb/src/main/config.cpp +82 -82
- package/src/duckdb/src/main/database.cpp +31 -7
- package/src/duckdb/src/main/database_manager.cpp +3 -2
- package/src/duckdb/src/main/database_path_and_type.cpp +4 -4
- package/src/duckdb/src/main/error_manager.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_alias.cpp +9 -9
- package/src/duckdb/src/main/extension/extension_helper.cpp +10 -5
- package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_load.cpp +111 -37
- package/src/duckdb/src/main/query_profiler.cpp +1 -118
- package/src/duckdb/src/main/secret/secret_manager.cpp +1 -2
- package/src/duckdb/src/main/secret/secret_storage.cpp +1 -1
- package/src/duckdb/src/main/settings/settings.cpp +81 -65
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +8 -1
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -0
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +26 -28
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +5 -5
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -6
- package/src/duckdb/src/optimizer/optimizer.cpp +14 -17
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +16 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +7 -4
- package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +2 -2
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +3 -3
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_between.cpp +8 -8
- package/src/duckdb/src/optimizer/statistics/expression/propagate_case.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +7 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +6 -6
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -10
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +14 -7
- package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +9 -9
- package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_projection.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +39 -18
- package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
- package/src/duckdb/src/parallel/task_scheduler.cpp +8 -1
- package/src/duckdb/src/parser/constraints/unique_constraint.cpp +4 -2
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +64 -0
- package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +13 -5
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -8
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -1
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +3 -0
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +5 -2
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -8
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +1 -6
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -2
- package/src/duckdb/src/parser/transformer.cpp +14 -2
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +40 -17
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +8 -3
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +32 -30
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +28 -17
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +146 -101
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -26
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +29 -0
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -10
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +23 -28
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +11 -12
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -11
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +10 -13
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +3 -3
- package/src/duckdb/src/planner/binder/statement/bind_set.cpp +3 -0
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +66 -65
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +54 -46
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +3 -0
- package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -5
- package/src/duckdb/src/planner/binder.cpp +78 -6
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +11 -3
- package/src/duckdb/src/planner/expression/bound_expanded_expression.cpp +22 -0
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +11 -58
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +5 -8
- package/src/duckdb/src/planner/expression_binder/group_binder.cpp +5 -4
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +5 -19
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +8 -8
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +42 -26
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -22
- package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +52 -0
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +43 -5
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +19 -7
- package/src/duckdb/src/planner/logical_operator.cpp +20 -3
- package/src/duckdb/src/planner/operator/logical_copy_database.cpp +4 -14
- package/src/duckdb/src/planner/operator/logical_delete.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_update.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_vacuum.cpp +65 -0
- package/src/duckdb/src/planner/planner.cpp +4 -4
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +26 -27
- package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
- package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +1 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +2 -10
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +2 -3
- package/src/duckdb/src/storage/checkpoint_manager.cpp +15 -8
- package/src/duckdb/src/storage/compression/bitpacking.cpp +6 -1
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
- package/src/duckdb/src/storage/data_pointer.cpp +1 -1
- package/src/duckdb/src/storage/data_table.cpp +18 -7
- package/src/duckdb/src/storage/local_storage.cpp +8 -5
- package/src/duckdb/src/storage/magic_bytes.cpp +6 -5
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -9
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +12 -10
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +23 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -19
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +21 -5
- package/src/duckdb/src/storage/statistics/array_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +2 -3
- package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +1 -1
- package/src/duckdb/src/storage/storage_info.cpp +19 -19
- package/src/duckdb/src/storage/storage_manager.cpp +18 -13
- package/src/duckdb/src/storage/table/chunk_info.cpp +11 -3
- package/src/duckdb/src/storage/table/column_data.cpp +88 -66
- package/src/duckdb/src/storage/table/row_group.cpp +7 -7
- package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
- package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -0
- package/src/duckdb/src/storage/table/update_segment.cpp +3 -1
- package/src/duckdb/src/storage/table_index_list.cpp +6 -1
- package/src/duckdb/src/storage/temporary_file_manager.cpp +1 -1
- package/src/duckdb/src/storage/wal_replay.cpp +8 -7
- package/src/duckdb/src/storage/write_ahead_log.cpp +3 -4
- package/src/duckdb/src/transaction/cleanup_state.cpp +10 -3
- package/src/duckdb/src/transaction/commit_state.cpp +11 -4
- package/src/duckdb/src/transaction/duck_transaction.cpp +23 -3
- package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
- package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
- package/src/duckdb/src/transaction/undo_buffer.cpp +3 -1
- package/src/duckdb/third_party/fmt/include/fmt/core.h +0 -5
- package/src/duckdb/third_party/fsst/fsst.h +1 -1
- package/src/duckdb/third_party/fsst/libfsst.cpp +1 -140
- package/src/duckdb/third_party/fsst/libfsst.hpp +0 -13
- package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +4 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +8 -1
- 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 +15401 -15354
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +299 -538
- package/src/duckdb/third_party/lz4/lz4.cpp +2605 -0
- package/src/duckdb/third_party/lz4/lz4.hpp +843 -0
- package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
- package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
- package/src/duckdb/third_party/re2/re2/bitmap256.cc +44 -0
- package/src/duckdb/third_party/re2/re2/bitmap256.h +3 -35
- package/src/duckdb/third_party/re2/re2/bitstate.cc +31 -24
- package/src/duckdb/third_party/re2/re2/compile.cc +146 -164
- package/src/duckdb/third_party/re2/re2/dfa.cc +174 -181
- package/src/duckdb/third_party/re2/re2/filtered_re2.cc +19 -3
- package/src/duckdb/third_party/re2/re2/filtered_re2.h +27 -23
- package/src/duckdb/third_party/re2/re2/mimics_pcre.cc +21 -11
- package/src/duckdb/third_party/re2/re2/nfa.cc +91 -131
- package/src/duckdb/third_party/re2/re2/onepass.cc +11 -10
- package/src/duckdb/third_party/re2/re2/parse.cc +171 -154
- package/src/duckdb/third_party/re2/re2/perl_groups.cc +35 -35
- package/src/duckdb/third_party/re2/re2/pod_array.h +55 -0
- package/src/duckdb/third_party/re2/re2/prefilter.cc +40 -40
- package/src/duckdb/third_party/re2/re2/prefilter.h +24 -2
- package/src/duckdb/third_party/re2/re2/prefilter_tree.cc +70 -84
- package/src/duckdb/third_party/re2/re2/prefilter_tree.h +5 -4
- package/src/duckdb/third_party/re2/re2/prog.cc +315 -58
- package/src/duckdb/third_party/re2/re2/prog.h +77 -44
- package/src/duckdb/third_party/re2/re2/re2.cc +333 -221
- package/src/duckdb/third_party/re2/re2/re2.h +277 -201
- package/src/duckdb/third_party/re2/re2/regexp.cc +137 -105
- package/src/duckdb/third_party/re2/re2/regexp.h +45 -40
- package/src/duckdb/third_party/re2/re2/set.cc +40 -17
- package/src/duckdb/third_party/re2/re2/set.h +11 -6
- package/src/duckdb/third_party/re2/re2/simplify.cc +50 -41
- package/src/duckdb/third_party/re2/re2/sparse_array.h +392 -0
- package/src/duckdb/third_party/re2/re2/sparse_set.h +264 -0
- package/src/duckdb/third_party/re2/re2/stringpiece.cc +1 -1
- package/src/duckdb/third_party/re2/re2/stringpiece.h +11 -8
- package/src/duckdb/third_party/re2/re2/tostring.cc +8 -6
- package/src/duckdb/third_party/re2/re2/unicode_casefold.cc +39 -10
- package/src/duckdb/third_party/re2/re2/unicode_casefold.h +1 -1
- package/src/duckdb/third_party/re2/re2/unicode_groups.cc +5019 -4566
- package/src/duckdb/third_party/re2/re2/unicode_groups.h +1 -1
- package/src/duckdb/third_party/re2/re2/walker-inl.h +21 -20
- package/src/duckdb/third_party/re2/util/logging.h +14 -18
- package/src/duckdb/third_party/re2/util/mix.h +4 -4
- package/src/duckdb/third_party/re2/util/mutex.h +48 -15
- package/src/duckdb/third_party/re2/util/rune.cc +5 -5
- package/src/duckdb/third_party/re2/util/strutil.cc +1 -16
- package/src/duckdb/third_party/re2/util/strutil.h +1 -3
- package/src/duckdb/third_party/re2/util/utf.h +1 -1
- package/src/duckdb/third_party/re2/util/util.h +9 -1
- package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +2 -0
- package/src/duckdb/third_party/utf8proc/utf8proc_wrapper.cpp +36 -1
- package/src/duckdb/ub_src_common.cpp +0 -2
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
|
@@ -20,9 +20,17 @@
|
|
|
20
20
|
#include "util/logging.h"
|
|
21
21
|
#include "util/mutex.h"
|
|
22
22
|
#include "util/utf.h"
|
|
23
|
+
#include "re2/pod_array.h"
|
|
23
24
|
#include "re2/stringpiece.h"
|
|
24
25
|
#include "re2/walker-inl.h"
|
|
25
26
|
|
|
27
|
+
#ifdef min
|
|
28
|
+
#undef min
|
|
29
|
+
#endif
|
|
30
|
+
#ifdef max
|
|
31
|
+
#undef max
|
|
32
|
+
#endif
|
|
33
|
+
|
|
26
34
|
namespace duckdb_re2 {
|
|
27
35
|
|
|
28
36
|
// Constructor. Allocates vectors as appropriate for operator.
|
|
@@ -34,7 +42,7 @@ Regexp::Regexp(RegexpOp op, ParseFlags parse_flags)
|
|
|
34
42
|
nsub_(0),
|
|
35
43
|
down_(NULL) {
|
|
36
44
|
subone_ = NULL;
|
|
37
|
-
memset(the_union_, 0, sizeof the_union_);
|
|
45
|
+
memset(arguments.the_union_, 0, sizeof arguments.the_union_);
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
// Destructor. Assumes already cleaned up children.
|
|
@@ -50,15 +58,15 @@ Regexp::~Regexp() {
|
|
|
50
58
|
default:
|
|
51
59
|
break;
|
|
52
60
|
case kRegexpCapture:
|
|
53
|
-
delete
|
|
61
|
+
delete arguments.capture.name_;
|
|
54
62
|
break;
|
|
55
63
|
case kRegexpLiteralString:
|
|
56
|
-
delete[]
|
|
64
|
+
delete[] arguments.literal_string.runes_;
|
|
57
65
|
break;
|
|
58
66
|
case kRegexpCharClass:
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
delete
|
|
67
|
+
if (arguments.char_class.cc_)
|
|
68
|
+
arguments.char_class.cc_->Delete();
|
|
69
|
+
delete arguments.char_class.ccb_;
|
|
62
70
|
break;
|
|
63
71
|
}
|
|
64
72
|
}
|
|
@@ -73,16 +81,27 @@ bool Regexp::QuickDestroy() {
|
|
|
73
81
|
return false;
|
|
74
82
|
}
|
|
75
83
|
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
// Similar to EmptyStorage in re2.cc.
|
|
85
|
+
struct RefStorage {
|
|
86
|
+
Mutex ref_mutex;
|
|
87
|
+
std::map<Regexp*, int> ref_map;
|
|
88
|
+
};
|
|
89
|
+
alignas(RefStorage) static char ref_storage[sizeof(RefStorage)];
|
|
90
|
+
|
|
91
|
+
static inline Mutex* ref_mutex() {
|
|
92
|
+
return &reinterpret_cast<RefStorage*>(ref_storage)->ref_mutex;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static inline std::map<Regexp*, int>* ref_map() {
|
|
96
|
+
return &reinterpret_cast<RefStorage*>(ref_storage)->ref_map;
|
|
97
|
+
}
|
|
79
98
|
|
|
80
99
|
int Regexp::Ref() {
|
|
81
100
|
if (ref_ < kMaxRef)
|
|
82
101
|
return ref_;
|
|
83
102
|
|
|
84
|
-
MutexLock l(ref_mutex);
|
|
85
|
-
return (*ref_map)[this];
|
|
103
|
+
MutexLock l(ref_mutex());
|
|
104
|
+
return (*ref_map())[this];
|
|
86
105
|
}
|
|
87
106
|
|
|
88
107
|
// Increments reference count, returns object as convenience.
|
|
@@ -90,18 +109,17 @@ Regexp* Regexp::Incref() {
|
|
|
90
109
|
if (ref_ >= kMaxRef-1) {
|
|
91
110
|
static std::once_flag ref_once;
|
|
92
111
|
std::call_once(ref_once, []() {
|
|
93
|
-
|
|
94
|
-
ref_map = new std::map<Regexp*, int>;
|
|
112
|
+
(void) new (ref_storage) RefStorage;
|
|
95
113
|
});
|
|
96
114
|
|
|
97
115
|
// Store ref count in overflow map.
|
|
98
|
-
MutexLock l(ref_mutex);
|
|
116
|
+
MutexLock l(ref_mutex());
|
|
99
117
|
if (ref_ == kMaxRef) {
|
|
100
118
|
// already overflowed
|
|
101
|
-
(*ref_map)[this]++;
|
|
119
|
+
(*ref_map())[this]++;
|
|
102
120
|
} else {
|
|
103
121
|
// overflowing now
|
|
104
|
-
(*ref_map)[this] = kMaxRef;
|
|
122
|
+
(*ref_map())[this] = kMaxRef;
|
|
105
123
|
ref_ = kMaxRef;
|
|
106
124
|
}
|
|
107
125
|
return this;
|
|
@@ -115,13 +133,13 @@ Regexp* Regexp::Incref() {
|
|
|
115
133
|
void Regexp::Decref() {
|
|
116
134
|
if (ref_ == kMaxRef) {
|
|
117
135
|
// Ref count is stored in overflow map.
|
|
118
|
-
MutexLock l(ref_mutex);
|
|
119
|
-
int r = (*ref_map)[this] - 1;
|
|
136
|
+
MutexLock l(ref_mutex());
|
|
137
|
+
int r = (*ref_map())[this] - 1;
|
|
120
138
|
if (r < kMaxRef) {
|
|
121
139
|
ref_ = static_cast<uint16_t>(r);
|
|
122
|
-
ref_map->erase(this);
|
|
140
|
+
ref_map()->erase(this);
|
|
123
141
|
} else {
|
|
124
|
-
(*ref_map)[this] = r;
|
|
142
|
+
(*ref_map())[this] = r;
|
|
125
143
|
}
|
|
126
144
|
return;
|
|
127
145
|
}
|
|
@@ -169,24 +187,24 @@ void Regexp::Destroy() {
|
|
|
169
187
|
|
|
170
188
|
void Regexp::AddRuneToString(Rune r) {
|
|
171
189
|
DCHECK(op_ == kRegexpLiteralString);
|
|
172
|
-
if (
|
|
190
|
+
if (arguments.literal_string.nrunes_ == 0) {
|
|
173
191
|
// start with 8
|
|
174
|
-
|
|
175
|
-
} else if (
|
|
192
|
+
arguments.literal_string.runes_ = new Rune[8];
|
|
193
|
+
} else if (arguments.literal_string.nrunes_ >= 8 && (arguments.literal_string.nrunes_ & (arguments.literal_string.nrunes_ - 1)) == 0) {
|
|
176
194
|
// double on powers of two
|
|
177
|
-
Rune *old =
|
|
178
|
-
|
|
179
|
-
for (int i = 0; i <
|
|
180
|
-
|
|
195
|
+
Rune *old = arguments.literal_string.runes_;
|
|
196
|
+
arguments.literal_string.runes_ = new Rune[arguments.literal_string.nrunes_ * 2];
|
|
197
|
+
for (int i = 0; i < arguments.literal_string.nrunes_; i++)
|
|
198
|
+
arguments.literal_string.runes_[i] = old[i];
|
|
181
199
|
delete[] old;
|
|
182
200
|
}
|
|
183
201
|
|
|
184
|
-
|
|
202
|
+
arguments.literal_string.runes_[arguments.literal_string.nrunes_++] = r;
|
|
185
203
|
}
|
|
186
204
|
|
|
187
205
|
Regexp* Regexp::HaveMatch(int match_id, ParseFlags flags) {
|
|
188
206
|
Regexp* re = new Regexp(kRegexpHaveMatch, flags);
|
|
189
|
-
re->match_id_ = match_id;
|
|
207
|
+
re->arguments.match_id_ = match_id;
|
|
190
208
|
return re;
|
|
191
209
|
}
|
|
192
210
|
|
|
@@ -243,16 +261,15 @@ Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub,
|
|
|
243
261
|
return new Regexp(kRegexpEmptyMatch, flags);
|
|
244
262
|
}
|
|
245
263
|
|
|
246
|
-
Regexp
|
|
264
|
+
PODArray<Regexp*> subcopy;
|
|
247
265
|
if (op == kRegexpAlternate && can_factor) {
|
|
248
266
|
// Going to edit sub; make a copy so we don't step on caller.
|
|
249
|
-
subcopy =
|
|
250
|
-
memmove(subcopy, sub, nsub * sizeof sub[0]);
|
|
251
|
-
sub = subcopy;
|
|
267
|
+
subcopy = PODArray<Regexp*>(nsub);
|
|
268
|
+
memmove(subcopy.data(), sub, nsub * sizeof sub[0]);
|
|
269
|
+
sub = subcopy.data();
|
|
252
270
|
nsub = FactorAlternation(sub, nsub, flags);
|
|
253
271
|
if (nsub == 1) {
|
|
254
272
|
Regexp* re = sub[0];
|
|
255
|
-
delete[] subcopy;
|
|
256
273
|
return re;
|
|
257
274
|
}
|
|
258
275
|
}
|
|
@@ -269,7 +286,6 @@ Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub,
|
|
|
269
286
|
subs[nbigsub - 1] = ConcatOrAlternate(op, sub+(nbigsub-1)*kMaxNsub,
|
|
270
287
|
nsub - (nbigsub-1)*kMaxNsub, flags,
|
|
271
288
|
false);
|
|
272
|
-
delete[] subcopy;
|
|
273
289
|
return re;
|
|
274
290
|
}
|
|
275
291
|
|
|
@@ -278,8 +294,6 @@ Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub,
|
|
|
278
294
|
Regexp** subs = re->sub();
|
|
279
295
|
for (int i = 0; i < nsub; i++)
|
|
280
296
|
subs[i] = sub[i];
|
|
281
|
-
|
|
282
|
-
delete[] subcopy;
|
|
283
297
|
return re;
|
|
284
298
|
}
|
|
285
299
|
|
|
@@ -299,7 +313,7 @@ Regexp* Regexp::Capture(Regexp* sub, ParseFlags flags, int cap) {
|
|
|
299
313
|
Regexp* re = new Regexp(kRegexpCapture, flags);
|
|
300
314
|
re->AllocSub(1);
|
|
301
315
|
re->sub()[0] = sub;
|
|
302
|
-
re->
|
|
316
|
+
re->arguments.capture.cap_ = cap;
|
|
303
317
|
return re;
|
|
304
318
|
}
|
|
305
319
|
|
|
@@ -307,14 +321,14 @@ Regexp* Regexp::Repeat(Regexp* sub, ParseFlags flags, int min, int max) {
|
|
|
307
321
|
Regexp* re = new Regexp(kRegexpRepeat, flags);
|
|
308
322
|
re->AllocSub(1);
|
|
309
323
|
re->sub()[0] = sub;
|
|
310
|
-
re->
|
|
311
|
-
re->
|
|
324
|
+
re->arguments.repeat.min_ = min;
|
|
325
|
+
re->arguments.repeat.max_ = max;
|
|
312
326
|
return re;
|
|
313
327
|
}
|
|
314
328
|
|
|
315
329
|
Regexp* Regexp::NewLiteral(Rune rune, ParseFlags flags) {
|
|
316
330
|
Regexp* re = new Regexp(kRegexpLiteral, flags);
|
|
317
|
-
re->rune_ = rune;
|
|
331
|
+
re->arguments.rune_ = rune;
|
|
318
332
|
return re;
|
|
319
333
|
}
|
|
320
334
|
|
|
@@ -331,7 +345,7 @@ Regexp* Regexp::LiteralString(Rune* runes, int nrunes, ParseFlags flags) {
|
|
|
331
345
|
|
|
332
346
|
Regexp* Regexp::NewCharClass(CharClass* cc, ParseFlags flags) {
|
|
333
347
|
Regexp* re = new Regexp(kRegexpCharClass, flags);
|
|
334
|
-
re->
|
|
348
|
+
re->arguments.char_class.cc_ = cc;
|
|
335
349
|
return re;
|
|
336
350
|
}
|
|
337
351
|
|
|
@@ -501,6 +515,7 @@ static const char *kErrorStrings[] = {
|
|
|
501
515
|
"invalid character class range",
|
|
502
516
|
"missing ]",
|
|
503
517
|
"missing )",
|
|
518
|
+
"unexpected )",
|
|
504
519
|
"trailing \\",
|
|
505
520
|
"no argument for repetition operator",
|
|
506
521
|
"invalid repetition size",
|
|
@@ -544,9 +559,12 @@ class NumCapturesWalker : public Regexp::Walker<Ignored> {
|
|
|
544
559
|
ncapture_++;
|
|
545
560
|
return ignored;
|
|
546
561
|
}
|
|
562
|
+
|
|
547
563
|
virtual Ignored ShortVisit(Regexp* re, Ignored ignored) {
|
|
548
|
-
// Should never be called: we use Walk not WalkExponential.
|
|
564
|
+
// Should never be called: we use Walk(), not WalkExponential().
|
|
565
|
+
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
|
549
566
|
LOG(DFATAL) << "NumCapturesWalker::ShortVisit called";
|
|
567
|
+
#endif
|
|
550
568
|
return ignored;
|
|
551
569
|
}
|
|
552
570
|
|
|
@@ -575,7 +593,7 @@ class NamedCapturesWalker : public Regexp::Walker<Ignored> {
|
|
|
575
593
|
return m;
|
|
576
594
|
}
|
|
577
595
|
|
|
578
|
-
Ignored PreVisit(Regexp* re, Ignored ignored, bool* stop) {
|
|
596
|
+
virtual Ignored PreVisit(Regexp* re, Ignored ignored, bool* stop) {
|
|
579
597
|
if (re->op() == kRegexpCapture && re->name() != NULL) {
|
|
580
598
|
// Allocate map once we find a name.
|
|
581
599
|
if (map_ == NULL)
|
|
@@ -584,15 +602,16 @@ class NamedCapturesWalker : public Regexp::Walker<Ignored> {
|
|
|
584
602
|
// Record first occurrence of each name.
|
|
585
603
|
// (The rule is that if you have the same name
|
|
586
604
|
// multiple times, only the leftmost one counts.)
|
|
587
|
-
|
|
588
|
-
(*map_)[*re->name()] = re->cap();
|
|
605
|
+
map_->insert({*re->name(), re->cap()});
|
|
589
606
|
}
|
|
590
607
|
return ignored;
|
|
591
608
|
}
|
|
592
609
|
|
|
593
610
|
virtual Ignored ShortVisit(Regexp* re, Ignored ignored) {
|
|
594
|
-
// Should never be called: we use Walk not WalkExponential.
|
|
611
|
+
// Should never be called: we use Walk(), not WalkExponential().
|
|
612
|
+
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
|
595
613
|
LOG(DFATAL) << "NamedCapturesWalker::ShortVisit called";
|
|
614
|
+
#endif
|
|
596
615
|
return ignored;
|
|
597
616
|
}
|
|
598
617
|
|
|
@@ -621,7 +640,7 @@ class CaptureNamesWalker : public Regexp::Walker<Ignored> {
|
|
|
621
640
|
return m;
|
|
622
641
|
}
|
|
623
642
|
|
|
624
|
-
Ignored PreVisit(Regexp* re, Ignored ignored, bool* stop) {
|
|
643
|
+
virtual Ignored PreVisit(Regexp* re, Ignored ignored, bool* stop) {
|
|
625
644
|
if (re->op() == kRegexpCapture && re->name() != NULL) {
|
|
626
645
|
// Allocate map once we find a name.
|
|
627
646
|
if (map_ == NULL)
|
|
@@ -633,8 +652,10 @@ class CaptureNamesWalker : public Regexp::Walker<Ignored> {
|
|
|
633
652
|
}
|
|
634
653
|
|
|
635
654
|
virtual Ignored ShortVisit(Regexp* re, Ignored ignored) {
|
|
636
|
-
// Should never be called: we use Walk not WalkExponential.
|
|
655
|
+
// Should never be called: we use Walk(), not WalkExponential().
|
|
656
|
+
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
|
637
657
|
LOG(DFATAL) << "CaptureNamesWalker::ShortVisit called";
|
|
658
|
+
#endif
|
|
638
659
|
return ignored;
|
|
639
660
|
}
|
|
640
661
|
|
|
@@ -651,78 +672,89 @@ std::map<int, std::string>* Regexp::CaptureNames() {
|
|
|
651
672
|
return w.TakeMap();
|
|
652
673
|
}
|
|
653
674
|
|
|
675
|
+
void ConvertRunesToBytes(bool latin1, Rune* runes, int nrunes,
|
|
676
|
+
std::string* bytes) {
|
|
677
|
+
if (latin1) {
|
|
678
|
+
bytes->resize(nrunes);
|
|
679
|
+
for (int i = 0; i < nrunes; i++)
|
|
680
|
+
(*bytes)[i] = static_cast<char>(runes[i]);
|
|
681
|
+
} else {
|
|
682
|
+
bytes->resize(nrunes * UTFmax); // worst case
|
|
683
|
+
char* p = &(*bytes)[0];
|
|
684
|
+
for (int i = 0; i < nrunes; i++)
|
|
685
|
+
p += runetochar(p, &runes[i]);
|
|
686
|
+
bytes->resize(p - &(*bytes)[0]);
|
|
687
|
+
bytes->shrink_to_fit();
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
654
691
|
// Determines whether regexp matches must be anchored
|
|
655
692
|
// with a fixed string prefix. If so, returns the prefix and
|
|
656
693
|
// the regexp that remains after the prefix. The prefix might
|
|
657
694
|
// be ASCII case-insensitive.
|
|
658
695
|
bool Regexp::RequiredPrefix(std::string* prefix, bool* foldcase,
|
|
659
696
|
Regexp** suffix) {
|
|
697
|
+
prefix->clear();
|
|
698
|
+
*foldcase = false;
|
|
699
|
+
*suffix = NULL;
|
|
700
|
+
|
|
660
701
|
// No need for a walker: the regexp must be of the form
|
|
661
702
|
// 1. some number of ^ anchors
|
|
662
703
|
// 2. a literal char or string
|
|
663
704
|
// 3. the rest
|
|
664
|
-
prefix->clear();
|
|
665
|
-
*foldcase = false;
|
|
666
|
-
*suffix = NULL;
|
|
667
705
|
if (op_ != kRegexpConcat)
|
|
668
706
|
return false;
|
|
669
|
-
|
|
670
|
-
// Some number of anchors, then a literal or concatenation.
|
|
671
707
|
int i = 0;
|
|
672
|
-
|
|
673
|
-
while (i < nsub_ && sub[i]->op_ == kRegexpBeginText)
|
|
708
|
+
while (i < nsub_ && sub()[i]->op_ == kRegexpBeginText)
|
|
674
709
|
i++;
|
|
675
710
|
if (i == 0 || i >= nsub_)
|
|
676
711
|
return false;
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
return false;
|
|
682
|
-
|
|
683
|
-
case kRegexpLiteralString:
|
|
684
|
-
// Convert to string in proper encoding.
|
|
685
|
-
if (re->parse_flags() & Latin1) {
|
|
686
|
-
prefix->resize(re->literal_string_.nrunes_);
|
|
687
|
-
for (int j = 0; j < re->literal_string_.nrunes_; j++)
|
|
688
|
-
(*prefix)[j] = static_cast<char>(re->literal_string_.runes_[j]);
|
|
689
|
-
} else {
|
|
690
|
-
// Convert to UTF-8 in place.
|
|
691
|
-
// Assume worst-case space and then trim.
|
|
692
|
-
prefix->resize(re->literal_string_.nrunes_ * UTFmax);
|
|
693
|
-
char *p = &(*prefix)[0];
|
|
694
|
-
for (int j = 0; j < re->literal_string_.nrunes_; j++) {
|
|
695
|
-
Rune r = re->literal_string_.runes_[j];
|
|
696
|
-
if (r < Runeself)
|
|
697
|
-
*p++ = static_cast<char>(r);
|
|
698
|
-
else
|
|
699
|
-
p += runetochar(p, &r);
|
|
700
|
-
}
|
|
701
|
-
prefix->resize(p - &(*prefix)[0]);
|
|
702
|
-
}
|
|
703
|
-
break;
|
|
704
|
-
|
|
705
|
-
case kRegexpLiteral:
|
|
706
|
-
if ((re->parse_flags() & Latin1) || re->rune_ < Runeself) {
|
|
707
|
-
prefix->append(1, static_cast<char>(re->rune_));
|
|
708
|
-
} else {
|
|
709
|
-
char buf[UTFmax];
|
|
710
|
-
prefix->append(buf, runetochar(buf, &re->rune_));
|
|
711
|
-
}
|
|
712
|
-
break;
|
|
713
|
-
}
|
|
714
|
-
*foldcase = (sub[i]->parse_flags() & FoldCase) != 0;
|
|
712
|
+
Regexp* re = sub()[i];
|
|
713
|
+
if (re->op_ != kRegexpLiteral &&
|
|
714
|
+
re->op_ != kRegexpLiteralString)
|
|
715
|
+
return false;
|
|
715
716
|
i++;
|
|
716
|
-
|
|
717
|
-
// The rest.
|
|
718
717
|
if (i < nsub_) {
|
|
719
718
|
for (int j = i; j < nsub_; j++)
|
|
720
|
-
sub[j]->Incref();
|
|
721
|
-
|
|
719
|
+
sub()[j]->Incref();
|
|
720
|
+
*suffix = Concat(sub() + i, nsub_ - i, parse_flags());
|
|
722
721
|
} else {
|
|
723
|
-
|
|
722
|
+
*suffix = new Regexp(kRegexpEmptyMatch, parse_flags());
|
|
724
723
|
}
|
|
725
|
-
|
|
724
|
+
|
|
725
|
+
bool latin1 = (re->parse_flags() & Latin1) != 0;
|
|
726
|
+
Rune* runes = re->op_ == kRegexpLiteral ? &re->arguments.rune_ : re->arguments.literal_string.runes_;
|
|
727
|
+
int nrunes = re->op_ == kRegexpLiteral ? 1 : re->arguments.literal_string.nrunes_;
|
|
728
|
+
ConvertRunesToBytes(latin1, runes, nrunes, prefix);
|
|
729
|
+
*foldcase = (re->parse_flags() & FoldCase) != 0;
|
|
730
|
+
return true;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
// Determines whether regexp matches must be unanchored
|
|
734
|
+
// with a fixed string prefix. If so, returns the prefix.
|
|
735
|
+
// The prefix might be ASCII case-insensitive.
|
|
736
|
+
bool Regexp::RequiredPrefixForAccel(std::string* prefix, bool* foldcase) {
|
|
737
|
+
prefix->clear();
|
|
738
|
+
*foldcase = false;
|
|
739
|
+
|
|
740
|
+
// No need for a walker: the regexp must either begin with or be
|
|
741
|
+
// a literal char or string. We "see through" capturing groups,
|
|
742
|
+
// but make no effort to glue multiple prefix fragments together.
|
|
743
|
+
Regexp* re = op_ == kRegexpConcat && nsub_ > 0 ? sub()[0] : this;
|
|
744
|
+
while (re->op_ == kRegexpCapture) {
|
|
745
|
+
re = re->sub()[0];
|
|
746
|
+
if (re->op_ == kRegexpConcat && re->nsub_ > 0)
|
|
747
|
+
re = re->sub()[0];
|
|
748
|
+
}
|
|
749
|
+
if (re->op_ != kRegexpLiteral &&
|
|
750
|
+
re->op_ != kRegexpLiteralString)
|
|
751
|
+
return false;
|
|
752
|
+
|
|
753
|
+
bool latin1 = (re->parse_flags() & Latin1) != 0;
|
|
754
|
+
Rune* runes = re->op_ == kRegexpLiteral ? &re->arguments.rune_ : re->arguments.literal_string.runes_;
|
|
755
|
+
int nrunes = re->op_ == kRegexpLiteral ? 1 : re->arguments.literal_string.nrunes_;
|
|
756
|
+
ConvertRunesToBytes(latin1, runes, nrunes, prefix);
|
|
757
|
+
*foldcase = (re->parse_flags() & FoldCase) != 0;
|
|
726
758
|
return true;
|
|
727
759
|
}
|
|
728
760
|
|
|
@@ -903,7 +935,7 @@ void CharClassBuilder::Negate() {
|
|
|
903
935
|
// The ranges are allocated in the same block as the header,
|
|
904
936
|
// necessitating a special allocator and Delete method.
|
|
905
937
|
|
|
906
|
-
CharClass* CharClass::New(
|
|
938
|
+
CharClass* CharClass::New(size_t maxranges) {
|
|
907
939
|
CharClass* cc;
|
|
908
940
|
uint8_t* data = new uint8_t[sizeof *cc + maxranges*sizeof cc->ranges_[0]];
|
|
909
941
|
cc = reinterpret_cast<CharClass*>(data);
|
|
@@ -920,7 +952,7 @@ void CharClass::Delete() {
|
|
|
920
952
|
}
|
|
921
953
|
|
|
922
954
|
CharClass* CharClass::Negate() {
|
|
923
|
-
CharClass* cc = CharClass::New(nranges_+1);
|
|
955
|
+
CharClass* cc = CharClass::New(static_cast<size_t>(nranges_+1));
|
|
924
956
|
cc->folds_ascii_ = folds_ascii_;
|
|
925
957
|
cc->nrunes_ = Runemax + 1 - nrunes_;
|
|
926
958
|
int n = 0;
|
|
@@ -939,7 +971,7 @@ CharClass* CharClass::Negate() {
|
|
|
939
971
|
return cc;
|
|
940
972
|
}
|
|
941
973
|
|
|
942
|
-
bool CharClass::Contains(Rune r) {
|
|
974
|
+
bool CharClass::Contains(Rune r) const {
|
|
943
975
|
RuneRange* rr = ranges_;
|
|
944
976
|
int n = nranges_;
|
|
945
977
|
while (n > 0) {
|
|
@@ -957,7 +989,7 @@ bool CharClass::Contains(Rune r) {
|
|
|
957
989
|
}
|
|
958
990
|
|
|
959
991
|
CharClass* CharClassBuilder::GetCharClass() {
|
|
960
|
-
CharClass* cc = CharClass::New(
|
|
992
|
+
CharClass* cc = CharClass::New(ranges_.size());
|
|
961
993
|
int n = 0;
|
|
962
994
|
for (iterator it = begin(); it != end(); ++it)
|
|
963
995
|
cc->ranges_[n++] = *it;
|
|
@@ -968,4 +1000,4 @@ CharClass* CharClassBuilder::GetCharClass() {
|
|
|
968
1000
|
return cc;
|
|
969
1001
|
}
|
|
970
1002
|
|
|
971
|
-
} // namespace
|
|
1003
|
+
} // namespace re2
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
// form accessible to clients, so that client code can analyze the
|
|
87
87
|
// parsed regular expressions.
|
|
88
88
|
|
|
89
|
+
#include <stddef.h>
|
|
89
90
|
#include <stdint.h>
|
|
90
91
|
#include <map>
|
|
91
92
|
#include <set>
|
|
@@ -177,6 +178,7 @@ enum RegexpStatusCode {
|
|
|
177
178
|
kRegexpBadCharRange, // bad character class range
|
|
178
179
|
kRegexpMissingBracket, // missing closing ]
|
|
179
180
|
kRegexpMissingParen, // missing closing )
|
|
181
|
+
kRegexpUnexpectedParen, // unexpected closing )
|
|
180
182
|
kRegexpTrailingBackslash, // at end of regexp
|
|
181
183
|
kRegexpRepeatArgument, // repeat argument missing, e.g. "*"
|
|
182
184
|
kRegexpRepeatSize, // bad repetition argument
|
|
@@ -252,13 +254,13 @@ class CharClass {
|
|
|
252
254
|
bool full() { return nrunes_ == Runemax+1; }
|
|
253
255
|
bool FoldsASCII() { return folds_ascii_; }
|
|
254
256
|
|
|
255
|
-
bool Contains(Rune r);
|
|
257
|
+
bool Contains(Rune r) const;
|
|
256
258
|
CharClass* Negate();
|
|
257
259
|
|
|
258
260
|
private:
|
|
259
261
|
CharClass(); // not implemented
|
|
260
262
|
~CharClass(); // not implemented
|
|
261
|
-
static CharClass* New(
|
|
263
|
+
static CharClass* New(size_t maxranges);
|
|
262
264
|
|
|
263
265
|
friend class CharClassBuilder;
|
|
264
266
|
|
|
@@ -271,29 +273,6 @@ class CharClass {
|
|
|
271
273
|
CharClass& operator=(const CharClass&) = delete;
|
|
272
274
|
};
|
|
273
275
|
|
|
274
|
-
struct repeat_t { // Repeat
|
|
275
|
-
int max_;
|
|
276
|
-
int min_;
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
struct capture_t { // Capture
|
|
280
|
-
int cap_;
|
|
281
|
-
std::string* name_;
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
struct literal_string_t{ // LiteralString
|
|
285
|
-
int nrunes_;
|
|
286
|
-
Rune* runes_;
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
struct char_class_t { // CharClass
|
|
290
|
-
// These two could be in separate union members,
|
|
291
|
-
// but it wouldn't save any space (there are other two-word structs)
|
|
292
|
-
// and keeping them separate avoids confusion during parsing.
|
|
293
|
-
CharClass* cc_;
|
|
294
|
-
CharClassBuilder* ccb_;
|
|
295
|
-
};
|
|
296
|
-
|
|
297
276
|
class Regexp {
|
|
298
277
|
public:
|
|
299
278
|
|
|
@@ -354,15 +333,15 @@ class Regexp {
|
|
|
354
333
|
return submany_;
|
|
355
334
|
}
|
|
356
335
|
|
|
357
|
-
int min() { DCHECK_EQ(op_, kRegexpRepeat); return
|
|
358
|
-
int max() { DCHECK_EQ(op_, kRegexpRepeat); return
|
|
359
|
-
Rune rune() { DCHECK_EQ(op_, kRegexpLiteral); return rune_; }
|
|
360
|
-
CharClass* cc() { DCHECK_EQ(op_, kRegexpCharClass); return
|
|
361
|
-
int cap() { DCHECK_EQ(op_, kRegexpCapture); return
|
|
362
|
-
const std::string* name() { DCHECK_EQ(op_, kRegexpCapture); return
|
|
363
|
-
Rune* runes() { DCHECK_EQ(op_, kRegexpLiteralString); return
|
|
364
|
-
int nrunes() { DCHECK_EQ(op_, kRegexpLiteralString); return
|
|
365
|
-
int match_id() { DCHECK_EQ(op_, kRegexpHaveMatch); return match_id_; }
|
|
336
|
+
int min() { DCHECK_EQ(op_, kRegexpRepeat); return arguments.repeat.min_; }
|
|
337
|
+
int max() { DCHECK_EQ(op_, kRegexpRepeat); return arguments.repeat.max_; }
|
|
338
|
+
Rune rune() { DCHECK_EQ(op_, kRegexpLiteral); return arguments.rune_; }
|
|
339
|
+
CharClass* cc() { DCHECK_EQ(op_, kRegexpCharClass); return arguments.char_class.cc_; }
|
|
340
|
+
int cap() { DCHECK_EQ(op_, kRegexpCapture); return arguments.capture.cap_; }
|
|
341
|
+
const std::string* name() { DCHECK_EQ(op_, kRegexpCapture); return arguments.capture.name_; }
|
|
342
|
+
Rune* runes() { DCHECK_EQ(op_, kRegexpLiteralString); return arguments.literal_string.runes_; }
|
|
343
|
+
int nrunes() { DCHECK_EQ(op_, kRegexpLiteralString); return arguments.literal_string.nrunes_; }
|
|
344
|
+
int match_id() { DCHECK_EQ(op_, kRegexpHaveMatch); return arguments.match_id_; }
|
|
366
345
|
|
|
367
346
|
// Increments reference count, returns object as convenience.
|
|
368
347
|
Regexp* Incref();
|
|
@@ -463,6 +442,17 @@ class Regexp {
|
|
|
463
442
|
bool RequiredPrefix(std::string* prefix, bool* foldcase,
|
|
464
443
|
Regexp** suffix);
|
|
465
444
|
|
|
445
|
+
// Whether every match of this regexp must be unanchored and
|
|
446
|
+
// begin with a non-empty fixed string (perhaps after ASCII
|
|
447
|
+
// case-folding). If so, returns the prefix.
|
|
448
|
+
// Callers should expect *prefix and *foldcase to be "zeroed"
|
|
449
|
+
// regardless of the return value.
|
|
450
|
+
bool RequiredPrefixForAccel(std::string* prefix, bool* foldcase);
|
|
451
|
+
|
|
452
|
+
// Controls the maximum repeat count permitted by the parser.
|
|
453
|
+
// FOR FUZZING ONLY.
|
|
454
|
+
static void FUZZING_ONLY_set_maximum_repeat_count(int i);
|
|
455
|
+
|
|
466
456
|
private:
|
|
467
457
|
// Constructor allocates vectors as appropriate for operator.
|
|
468
458
|
explicit Regexp(RegexpOp op, ParseFlags parse_flags);
|
|
@@ -581,14 +571,29 @@ class Regexp {
|
|
|
581
571
|
|
|
582
572
|
// Arguments to operator. See description of operators above.
|
|
583
573
|
union {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
574
|
+
struct { // Repeat
|
|
575
|
+
int max_;
|
|
576
|
+
int min_;
|
|
577
|
+
} repeat;
|
|
578
|
+
struct { // Capture
|
|
579
|
+
int cap_;
|
|
580
|
+
std::string* name_;
|
|
581
|
+
} capture;
|
|
582
|
+
struct { // LiteralString
|
|
583
|
+
int nrunes_;
|
|
584
|
+
Rune* runes_;
|
|
585
|
+
} literal_string;
|
|
586
|
+
struct { // CharClass
|
|
587
|
+
// These two could be in separate union members,
|
|
588
|
+
// but it wouldn't save any space (there are other two-word structs)
|
|
589
|
+
// and keeping them separate avoids confusion during parsing.
|
|
590
|
+
CharClass* cc_;
|
|
591
|
+
CharClassBuilder* ccb_;
|
|
592
|
+
} char_class;
|
|
588
593
|
Rune rune_; // Literal
|
|
589
594
|
int match_id_; // HaveMatch
|
|
590
595
|
void *the_union_[2]; // as big as any other element, for memset
|
|
591
|
-
};
|
|
596
|
+
} arguments;
|
|
592
597
|
|
|
593
598
|
Regexp(const Regexp&) = delete;
|
|
594
599
|
Regexp& operator=(const Regexp&) = delete;
|
|
@@ -655,6 +660,6 @@ inline Regexp::ParseFlags operator~(Regexp::ParseFlags a) {
|
|
|
655
660
|
~static_cast<int>(a) & static_cast<int>(Regexp::AllParseFlags));
|
|
656
661
|
}
|
|
657
662
|
|
|
658
|
-
} // namespace
|
|
663
|
+
} // namespace re2
|
|
659
664
|
|
|
660
665
|
#endif // RE2_REGEXP_H_
|