From cbf2cf15100fda592033bcafafd9b614fb3ae65d Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 11:56:33 +0800 Subject: [PATCH 01/10] [feature](be) Read Lance datasets with FileScannerV2 ### What problem does this PR solve? Issue Number: None Related PR: #65730 #66608 #66805 #66841 #66999 #67005 #67011 #67110 #67268 #67289 #67325 #67650 #67921 #68028 #68335 #68375 #68615 #68690 Problem Summary: Port the Lance BE read path of branch-4.1/4.2 (as of branch-4.2 cabcf45c1af) to master. Master links liblance_c but has no Lance reader: file_scan_operator keeps FORMAT_LANCE off FileScannerV2 and V1 has no Lance path, so every FORMAT_LANCE scan fails today. This change is BE only. The FE connector plugin and the regression suites follow separately, so nothing on master plans a Lance scan yet and the BE unit tests carry the proof. - Reader: be/src/format_v2/lance/* and format_v2/table/lance_reader.* (plain scans, vector and full-text search, Substrait and runtime filter pushdown, scalar index segments, COUNT(*) from metadata, LIMIT, profiles), copied from branch-4.2 except one local renamed for -Wshadow. - Hooks: FileFormat::LANCE and its exhaustive switches, FileScannerV2 dispatch, and fetch_table_schema for FORMAT_LANCE. Lance queries use FileScannerV2 whatever enable_file_scanner_v2 says, as ADBC and fluss do: there is no V1 Lance reader. The second phase of TopN lazy materialization reads Lance rows through dataset take_rows. - Row locations: GlobalRowLoacationV2 gets a version 1 layout with a 64-bit Lance row id (the version 0 layout is unchanged), PRequestBlockDesc.row_id becomes uint64 (varint, wire compatible), and the materialization operator and RowIdStorageReader decode and validate by version. - Thrift: the external search request body, TLanceFileDesc 4-6 and TExternalSearchRequest 2-4 with the branch-4.1/4.2 ids. - Core: PTypeDesc keeps NULL_TYPE for a NULL literal type, and the nullable serde reads an Arrow Null array as NULLs. - Nine lance_* BE configs, a BE-wide Lance session with an optional Foyer data cache and 10 lance_session_* metrics; macOS links IOKit. - Tests: the Lance BE unit tests and their fixtures, including the docker fixture all_types.lance that one of them reads. Under master's -ffile-prefix-map the session test locates its fixture from the repository root, and the reader tests shrink the data cache to 64 MiB under the UT temp dir: the default 100 GiB disk tier is 51200 block files that stay open for the rest of the test process. Not included: the MaterializationOperator::push timer fix (#69579), the Lance index metadata scanner, the FE side, regression suites, and the 4.x changes after cabcf45c1af (#68707, #68813, #68815). ### Release note Add nine lance_* BE configs and lance_session_* BE metrics. They take effect once the FE can plan Lance scans. ### Check List (For Author) - Test: Unit Test - BE UT: the Lance reader, nested Null, runtime filter and session suites, plus the row-location protocol and FileScannerV2 cases - Behavior changed: Yes. PRequestBlockDesc.row_id is uint64, and the second phase of TopN lazy materialization rejects row locations of an unknown version or size. - Does this need documentation: No (documented with the FE connector) Co-authored-by: zhangstar333 Co-authored-by: Gabriel Co-authored-by: zhaobo wang Co-authored-by: jay Co-authored-by: FANNG Co-Authored-By: Claude Opus 5.5 (1M context) --- be/CMakeLists.txt | 2 + be/src/common/config.cpp | 20 + be/src/common/config.h | 15 + be/src/core/data_type/data_type.cpp | 4 +- .../data_type_nullable_serde.cpp | 12 + be/src/exec/operator/file_scan_operator.cpp | 12 +- .../exec/operator/materialization_opertor.cpp | 93 +- be/src/exec/rowid_fetcher.cpp | 207 +- be/src/exec/rowid_fetcher.h | 20 +- be/src/exec/scan/file_scanner_v2.cpp | 12 + be/src/format_v2/file_reader.h | 1 + .../format_v2/lance/lance_reader_helper.cpp | 750 ++++ be/src/format_v2/lance/lance_reader_helper.h | 119 + .../lance/lance_record_batch_converter.cpp | 261 ++ .../lance/lance_record_batch_converter.h | 91 + .../lance/lance_runtime_filter_helper.cpp | 537 +++ .../lance/lance_runtime_filter_helper.h | 59 + .../format_v2/lance/lance_session_manager.cpp | 239 ++ .../format_v2/lance/lance_session_manager.h | 71 + be/src/format_v2/table/iceberg_reader.cpp | 2 + be/src/format_v2/table/lance_reader.cpp | 1321 ++++++ be/src/format_v2/table/lance_reader.h | 132 + be/src/format_v2/table_reader.cpp | 2 + be/src/format_v2/table_reader.h | 1 + be/src/service/internal_service.cpp | 34 + be/src/storage/utils.h | 85 +- .../materialization_shared_state_test.cpp | 107 +- be/test/exec/rowid_fetcher_test.cpp | 84 + be/test/exec/scan/file_scanner_v2_test.cpp | 22 +- be/test/format/orc/orc_read_lines.cpp | 4 +- be/test/format/parquet/parquet_read_lines.cpp | 4 +- .../lance/lance_nested_null_test.cpp | 293 ++ .../lance_runtime_filter_helper_test.cpp | 303 ++ .../lance/lance_session_manager_test.cpp | 131 + be/test/format_v2/orc/orc_reader_test.cpp | 4 +- .../parquet/parquet_reader_control_test.cpp | 12 +- .../format_v2/parquet/parquet_reader_test.cpp | 4 +- .../format_v2/parquet/parquet_scan_test.cpp | 4 +- ...0-2e8be81c-130f-4554-a180-287e92c2b147.txn | Bin 0 -> 1659 bytes ...1-e24b25eb-06e7-419b-9c18-221403eb2d56.txn | Bin 0 -> 183 bytes ...2-fb9b3e03-5fe0-450c-83a9-03188bbf2250.txn | Bin 0 -> 183 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 2201 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 2060 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 3395 bytes .../_versions/latest_version_hint.json | 1 + ...001000110180a7144d7db2f7c78bf34cc2cf.lance | Bin 0 -> 7072 bytes ...0001110101291a4b4f979304cbfebff43a09.lance | Bin 0 -> 8410 bytes ...00110100012fbe664385be58923eb65eaa10.lance | Bin 0 -> 6638 bytes .../metadata.lance | Bin 0 -> 734 bytes .../part_0_docs.lance | Bin 0 -> 701 bytes .../part_0_invert.lance | Bin 0 -> 2565 bytes .../part_0_tokens.lance | Bin 0 -> 1155 bytes ...0-4a942168-96d8-4f07-bce0-e3049c8ea6c5.txn | Bin 0 -> 253 bytes ...1-b311fe36-9353-4f41-ae19-5054d4a73009.txn | Bin 0 -> 126 bytes ...2-76e69d8c-04b7-402e-8620-7f9a772a2224.txn | Bin 0 -> 278 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 934 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 541 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 583 bytes .../_versions/latest_version_hint.json | 1 + ...0000000001ee52754ad1a1da89dd0efa4379.lance | Bin 0 -> 1412 bytes ...0100010000fd779442f589c03379a2858ea8.lance | Bin 0 -> 1348 bytes .../auxiliary.idx | Bin 0 -> 833 bytes .../index.idx | Bin 0 -> 333 bytes .../auxiliary.idx | Bin 0 -> 829 bytes .../index.idx | Bin 0 -> 333 bytes .../auxiliary.idx | Bin 0 -> 894 bytes .../index.idx | Bin 0 -> 333 bytes .../auxiliary.idx | Bin 0 -> 819 bytes .../index.idx | Bin 0 -> 333 bytes ...0-98248c30-74fc-4328-955b-93ad3a6572c5.txn | Bin 0 -> 546 bytes ...1-2bdf0c85-4f23-47ac-b2c4-ae0bc3ba00e2.txn | Bin 0 -> 378 bytes ...2-2f0814cd-23f1-409f-97a7-f11802ae0000.txn | Bin 0 -> 378 bytes ...3-85968aa2-1806-42ac-8528-a49e4ac9f753.txn | Bin 0 -> 378 bytes ...4-f91c85f5-89bd-4744-9cee-4386e21a8734.txn | Bin 0 -> 382 bytes ...5-8f686607-2ffa-4f37-b5ba-e9afa8748b3b.txn | Bin 0 -> 130 bytes .../_versions/18446744073709551609.manifest | Bin 0 -> 2188 bytes .../_versions/18446744073709551610.manifest | Bin 0 -> 2351 bytes .../_versions/18446744073709551611.manifest | Bin 0 -> 2009 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 1675 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1341 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 1168 bytes .../_versions/latest_version_hint.json | 1 + ...1101010111d600654aa4bf152143f353ff5a.lance | Bin 0 -> 2508 bytes ...101011010140ce1040debed650850b651125.lance | Bin 0 -> 2512 bytes ...0-0d81521a-dd03-451f-96a6-81f50ff5edec.txn | Bin 0 -> 1238 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 2553 bytes .../_versions/latest_version_hint.json | 1 + ...010111001031383243dc838910cb0b1e7016.lance | Bin 0 -> 25966 bytes ...0-efbaaf9c-8337-4ad8-af21-1b1274f3067e.txn | Bin 0 -> 354 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 784 bytes .../_versions/latest_version_hint.json | 1 + ...101001000111cfaa495a9857e3b9afc0daee.lance | Bin 0 -> 1309 bytes ...0-d5ed3155-d19a-4ab9-bb2a-9f1aa804ebd9.txn | Bin 0 -> 788 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 1652 bytes .../_versions/latest_version_hint.json | 1 + ...10001111001c07dd49c690bdc468eac853df.lance | Bin 0 -> 3769 bytes .../auxiliary.idx | Bin 0 -> 329407 bytes .../index.idx | Bin 0 -> 2390 bytes .../auxiliary.idx | Bin 0 -> 332361 bytes .../index.idx | Bin 0 -> 2390 bytes ...0-b0e5a832-c817-4b1a-b7fa-b1bb52c0eea9.txn | Bin 0 -> 299 bytes ...1-5f2b5ed1-20aa-4902-9e98-08608d0f16a9.txn | Bin 0 -> 377 bytes ...2-b1eca4c0-481a-43d9-b1cd-5d9b69e69c94.txn | Bin 0 -> 128 bytes ...3-4c0638b9-b006-43ee-b556-81b6d0172760.txn | Bin 0 -> 377 bytes ...4-626d52d7-f751-41ec-aba6-4c26d7fc984b.txn | Bin 0 -> 128 bytes .../_versions/18446744073709551610.manifest | Bin 0 -> 1351 bytes .../_versions/18446744073709551611.manifest | Bin 0 -> 1513 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 931 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1093 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 675 bytes .../_versions/latest_version_hint.json | 1 + ...101010111193f4f74d719dca683e57a6fe9f.lance | Bin 0 -> 338911 bytes ...01110101011d7b8c41c18a187301e7e13396.lance | Bin 0 -> 338911 bytes ...0001101010db50ff47508cb03308b653c236.lance | Bin 0 -> 338911 bytes .../auxiliary.idx | Bin 0 -> 15754 bytes .../index.idx | Bin 0 -> 2388 bytes .../auxiliary.idx | Bin 0 -> 12800 bytes .../index.idx | Bin 0 -> 2388 bytes ...0-c28d1916-321e-48b7-a496-97da54424c30.txn | Bin 0 -> 299 bytes ...1-cb87fcf7-76e1-4c7e-865c-a191e2f9180a.txn | Bin 0 -> 463 bytes ...2-b0ac79bc-4068-4cb9-97de-7c27c89e8534.txn | Bin 0 -> 128 bytes ...3-b7e0ec94-3dc6-4fa7-bc0d-ff28f50e359d.txn | Bin 0 -> 463 bytes ...4-f99159cc-0549-4cc1-9919-fdecb1aa7f3b.txn | Bin 0 -> 128 bytes .../_versions/18446744073709551610.manifest | Bin 0 -> 1522 bytes .../_versions/18446744073709551611.manifest | Bin 0 -> 1770 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 1016 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1264 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 675 bytes .../_versions/latest_version_hint.json | 1 + ...011000001059c95649db97fb49f2a95dffb0.lance | Bin 0 -> 338911 bytes ...1011111111f440e6407e88010674ae90f980.lance | Bin 0 -> 338911 bytes ...00011011014b3ee846deabcc7ffc48955629.lance | Bin 0 -> 338911 bytes .../auxiliary.idx | Bin 0 -> 819 bytes .../index.idx | Bin 0 -> 333 bytes ...0-8e3d8793-6052-45e0-b1ab-43cc9438e25b.txn | Bin 0 -> 224 bytes ...1-5ddfb769-46bb-4370-91f7-34cc271f6ff7.txn | Bin 0 -> 376 bytes ...2-5512f591-b4c5-4159-88b5-8973be1a07ca.txn | Bin 0 -> 122 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 843 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1016 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 525 bytes .../_versions/latest_version_hint.json | 1 + ...0001100111eeb02d4d5c92691235fbf98a81.lance | Bin 0 -> 757 bytes ...111101001099e8aa4d8dbb19533ad5d162fe.lance | Bin 0 -> 617 bytes be/test/format_v2/table/lance_reader_test.cpp | 3750 +++++++++++++++++ ...0-4d80709b-dcb0-4dea-8c7f-99828f67f781.txn | Bin 0 -> 3222 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 6521 bytes .../_versions/latest_version_hint.json | 1 + ...11100111105b710547dc82de2df5345c7ab9.lance | Bin 0 -> 18756 bytes gensrc/proto/internal_service.proto | 4 +- gensrc/thrift/PlanNodes.thrift | 145 + 150 files changed, 8919 insertions(+), 64 deletions(-) create mode 100644 be/src/format_v2/lance/lance_reader_helper.cpp create mode 100644 be/src/format_v2/lance/lance_reader_helper.h create mode 100644 be/src/format_v2/lance/lance_record_batch_converter.cpp create mode 100644 be/src/format_v2/lance/lance_record_batch_converter.h create mode 100644 be/src/format_v2/lance/lance_runtime_filter_helper.cpp create mode 100644 be/src/format_v2/lance/lance_runtime_filter_helper.h create mode 100644 be/src/format_v2/lance/lance_session_manager.cpp create mode 100644 be/src/format_v2/lance/lance_session_manager.h create mode 100644 be/src/format_v2/table/lance_reader.cpp create mode 100644 be/src/format_v2/table/lance_reader.h create mode 100644 be/test/format_v2/lance/lance_nested_null_test.cpp create mode 100644 be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp create mode 100644 be/test/format_v2/lance/lance_session_manager_test.cpp create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_transactions/0-2e8be81c-130f-4554-a180-287e92c2b147.txn create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_transactions/1-e24b25eb-06e7-419b-9c18-221403eb2d56.txn create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_transactions/2-fb9b3e03-5fe0-450c-83a9-03188bbf2250.txn create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/data/10000001000101001000110180a7144d7db2f7c78bf34cc2cf.lance create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/data/100100101111110001110101291a4b4f979304cbfebff43a09.lance create mode 100644 be/test/format_v2/table/lance/data/all_types.lance/data/1011110000010000110100012fbe664385be58923eb65eaa10.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/metadata.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/part_0_docs.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/part_0_invert.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/part_0_tokens.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/0-4a942168-96d8-4f07-bce0-e3049c8ea6c5.txn create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/1-b311fe36-9353-4f41-ae19-5054d4a73009.txn create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/2-76e69d8c-04b7-402e-8620-7f9a772a2224.txn create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/data/000100011001100000000001ee52754ad1a1da89dd0efa4379.lance create mode 100644 be/test/format_v2/table/lance/data/fts_indexed.lance/data/100101010010010100010000fd779442f589c03379a2858ea8.lance create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/3b5436e9-4e0b-4db4-abaa-6b34a4ec78ea/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/3b5436e9-4e0b-4db4-abaa-6b34a4ec78ea/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/54a5446e-5740-4741-9a84-2c3661ca9dac/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/54a5446e-5740-4741-9a84-2c3661ca9dac/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/0-98248c30-74fc-4328-955b-93ad3a6572c5.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/1-2bdf0c85-4f23-47ac-b2c4-ae0bc3ba00e2.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/2-2f0814cd-23f1-409f-97a7-f11802ae0000.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/3-85968aa2-1806-42ac-8528-a49e4ac9f753.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/4-f91c85f5-89bd-4744-9cee-4386e21a8734.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_transactions/5-8f686607-2ffa-4f37-b5ba-e9afa8748b3b.txn create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551609.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551610.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551611.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/data/010011011000011101010111d600654aa4bf152143f353ff5a.lance create mode 100644 be/test/format_v2/table/lance/data/multivector.lance/data/01101110111001101011010140ce1040debed650850b651125.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_dimensions.lance/_transactions/0-0d81521a-dd03-451f-96a6-81f50ff5edec.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_dimensions.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_dimensions.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_dimensions.lance/data/10000010100100010111001031383243dc838910cb0b1e7016.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid.lance/_transactions/0-efbaaf9c-8337-4ad8-af21-1b1274f3067e.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid.lance/data/01001111100111101001000111cfaa495a9857e3b9afc0daee.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid_types.lance/_transactions/0-d5ed3155-d19a-4ab9-bb2a-9f1aa804ebd9.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid_types.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid_types.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_invalid_types.lance/data/0001001110011010001111001c07dd49c690bdc468eac853df.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/e6359049-3830-4e8d-93ac-2993bad0837f/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/e6359049-3830-4e8d-93ac-2993bad0837f/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/0-b0e5a832-c817-4b1a-b7fa-b1bb52c0eea9.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/1-5f2b5ed1-20aa-4902-9e98-08608d0f16a9.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/2-b1eca4c0-481a-43d9-b1cd-5d9b69e69c94.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/3-4c0638b9-b006-43ee-b556-81b6d0172760.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/4-626d52d7-f751-41ec-aba6-4c26d7fc984b.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551610.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551611.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/data/00011101001010101010111193f4f74d719dca683e57a6fe9f.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/data/0101001000011001110101011d7b8c41c18a187301e7e13396.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/data/111011100000010001101010db50ff47508cb03308b653c236.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/f243db3b-18a5-4182-8c37-7481361bf628/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/f243db3b-18a5-4182-8c37-7481361bf628/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/0-c28d1916-321e-48b7-a496-97da54424c30.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/1-cb87fcf7-76e1-4c7e-865c-a191e2f9180a.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/2-b0ac79bc-4068-4cb9-97de-7c27c89e8534.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/3-b7e0ec94-3dc6-4fa7-bc0d-ff28f50e359d.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/4-f99159cc-0549-4cc1-9919-fdecb1aa7f3b.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551610.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551611.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/data/00011100100001011000001059c95649db97fb49f2a95dffb0.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/data/001110010001001011111111f440e6407e88010674ae90f980.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/data/1100100111001100011011014b3ee846deabcc7ffc48955629.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_indices/b623b1e5-7461-4a30-880f-394fd4b16617/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_indices/b623b1e5-7461-4a30-880f-394fd4b16617/index.idx create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_transactions/0-8e3d8793-6052-45e0-b1ab-43cc9438e25b.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_transactions/1-5ddfb769-46bb-4370-91f7-34cc271f6ff7.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_transactions/2-5512f591-b4c5-4159-88b5-8973be1a07ca.txn create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/data/001011001101000001100111eeb02d4d5c92691235fbf98a81.lance create mode 100644 be/test/format_v2/table/lance/data/multivector_zero.lance/data/10010111100110111101001099e8aa4d8dbb19533ad5d162fe.lance create mode 100644 be/test/format_v2/table/lance_reader_test.cpp create mode 100644 docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_transactions/0-4d80709b-dcb0-4dea-8c7f-99828f67f781.txn create mode 100644 docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_versions/18446744073709551614.manifest create mode 100644 docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_versions/latest_version_hint.json create mode 100644 docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/data/0000001100111011100111105b710547dc82de2df5345c7ab9.lance diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt index 13f6ebe986c887..fcdd403a43ba29 100644 --- a/be/CMakeLists.txt +++ b/be/CMakeLists.txt @@ -894,6 +894,8 @@ else() "-framework Foundation" "-framework SystemConfiguration" "-framework Security" + # liblance_c.a pulls in the Rust `sysinfo` crate, whose macOS backend calls IOKit. + "-framework IOKit" ) if (USE_JEMALLOC OR (NOT CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND NOT CMAKE_BUILD_TYPE STREQUAL "RELEASE")) set(DORIS_LINK_LIBS diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index 4c9957dfdfa173..55f26dbc28efd3 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1232,6 +1232,26 @@ DEFINE_Validator(variant_max_json_key_length, DEFINE_Validator(variant_storage_parse_mode, [](const int config) -> bool { return config >= 0 && config <= 2; }); +// Lance uses one BE-wide session so metadata/index caches and the optional Foyer data-file cache +// can be shared by all Lance dataset readers. +DEFINE_Int64(lance_index_cache_size_bytes, "10737418240"); // 10 GiB +DEFINE_Int64(lance_metadata_cache_size_bytes, "1073741824"); // 1GB +DEFINE_Bool(enable_lance_data_cache, "true"); +DEFINE_String(lance_data_cache_path, "${DORIS_HOME}/lance_data_cache"); +DEFINE_Int64(lance_data_cache_disk_capacity_bytes, "107374182400"); // 100GB +DEFINE_Int64(lance_data_cache_read_block_size_bytes, "1048576"); // 1MB + +// I/O buffering budget per Lance scanner, not a cap on its total memory usage. +// Runtime changes apply to newly created scanners. +DEFINE_mInt64(lance_io_buffer_size_bytes, "2147483648"); // 2 GiB +DEFINE_Validator(lance_io_buffer_size_bytes, [](int64_t value) { return value > 0; }); + +// Read-ahead limits per Lance scanner. Runtime changes apply to newly created scanners. +DEFINE_mInt32(lance_batch_readahead, "5"); +DEFINE_Validator(lance_batch_readahead, [](int32_t value) { return value > 0; }); +DEFINE_mInt32(lance_fragment_readahead, "5"); +DEFINE_Validator(lance_fragment_readahead, [](int32_t value) { return value > 0; }); + // block file cache DEFINE_Bool(enable_file_cache, "true"); // ATTENTION: For test only. Keep this enabled in production. diff --git a/be/src/common/config.h b/be/src/common/config.h index 62becc90f28a1e..cd72cc2f5fb5b5 100644 --- a/be/src/common/config.h +++ b/be/src/common/config.h @@ -1286,6 +1286,21 @@ DECLARE_Bool(enable_debug_points); DECLARE_Int32(pipeline_executor_size); DECLARE_Int32(blocking_pipeline_executor_size); +// Lance shared session and optional Foyer data-file cache. +DECLARE_Int64(lance_index_cache_size_bytes); +DECLARE_Int64(lance_metadata_cache_size_bytes); +DECLARE_Bool(enable_lance_data_cache); +DECLARE_String(lance_data_cache_path); +DECLARE_Int64(lance_data_cache_disk_capacity_bytes); +DECLARE_Int64(lance_data_cache_read_block_size_bytes); + +// I/O buffering budget per Lance scanner, applied when a new scanner is created. +DECLARE_mInt64(lance_io_buffer_size_bytes); + +// Read-ahead limits per Lance scanner, applied when a new scanner is created. +DECLARE_mInt32(lance_batch_readahead); +DECLARE_mInt32(lance_fragment_readahead); + // block file cache DECLARE_Bool(enable_file_cache); DECLARE_mBool(enable_file_cache_write_from_s3_file_writer); diff --git a/be/src/core/data_type/data_type.cpp b/be/src/core/data_type/data_type.cpp index 88b6e473a2be9c..1b0a50ef8cd0fd 100644 --- a/be/src/core/data_type/data_type.cpp +++ b/be/src/core/data_type/data_type.cpp @@ -84,7 +84,9 @@ void IDataType::to_protobuf(PTypeDesc* ptype) const { auto node = ptype->add_types(); node->set_type(TTypeNodeType::SCALAR); auto scalar_type = node->mutable_scalar_type(); - scalar_type->set_type(doris::to_thrift(get_primitive_type())); + // NULL uses UInt8 internally; preserve its logical type even inside complex schemas. + scalar_type->set_type(is_null_literal() ? TPrimitiveType::NULL_TYPE + : doris::to_thrift(get_primitive_type())); to_protobuf(ptype, node, scalar_type); } diff --git a/be/src/core/data_type_serde/data_type_nullable_serde.cpp b/be/src/core/data_type_serde/data_type_nullable_serde.cpp index e354d423f0b2f6..4c4d0472f48720 100644 --- a/be/src/core/data_type_serde/data_type_nullable_serde.cpp +++ b/be/src/core/data_type_serde/data_type_nullable_serde.cpp @@ -410,6 +410,18 @@ Status DataTypeNullableSerDe::read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start, int64_t end, const cctz::time_zone& ctz) const { + if (arrow_array->type_id() == arrow::Type::NA) { + // Arrow Null has neither a validity bitmap nor values, even when sliced. Avoid the + // physical SerDe for Doris's UInt8 placeholder and keep nested values and nulls aligned. + if (arrow_array->offset() < 0 || start < 0 || end < start || end > arrow_array->length()) { + return Status::InvalidArgument( + "Invalid Arrow Null read range: start={}, end={}, " + "length={}, offset={}", + start, end, arrow_array->length(), arrow_array->offset()); + } + column.insert_many_defaults(end - start); + return Status::OK(); + } if (config::enable_arrow_input_validation) { check_arrow_array_range(*arrow_array, start, end); check_arrow_validity_bitmap(*arrow_array); diff --git a/be/src/exec/operator/file_scan_operator.cpp b/be/src/exec/operator/file_scan_operator.cpp index e439f308ef4f16..871b62e700d960 100644 --- a/be/src/exec/operator/file_scan_operator.cpp +++ b/be/src/exec/operator/file_scan_operator.cpp @@ -197,9 +197,12 @@ bool FileScanLocalState::should_use_file_scanner_v2(const TQueryOptions& query_o // fluss scan carries that same format -- log ranges and wrapped lake splits alike -- and is // dispatched inside FlussHybridReader, which only FileScannerV2 builds. Loads are left alone for // the same reason as adbc: there is no fluss load path. - if (!is_load && scan_params.__isset.table_format_params && - (scan_params.table_format_params.table_format_type == "adbc" || - scan_params.table_format_params.table_format_type == "fluss")) { + // Lance has no v1 reader either. Its scans carry FORMAT_LANCE at scan level, whether they come + // from a Lance catalog or from a file TVF, and there is no Lance load path. + if (!is_load && (scan_params.format_type == TFileFormatType::FORMAT_LANCE || + (scan_params.__isset.table_format_params && + (scan_params.table_format_params.table_format_type == "adbc" || + scan_params.table_format_params.table_format_type == "fluss")))) { return true; } const bool is_transactional_hive = @@ -224,8 +227,7 @@ bool FileScanLocalState::should_use_file_scanner_v2(const TQueryOptions& query_o // after scanner construction. Keep versioned Iceberg scans on V2 without eagerly listing // every file. return scanner_v2_requested && !is_load && - scan_params.format_type != TFileFormatType::FORMAT_ES_HTTP && - scan_params.format_type != TFileFormatType::FORMAT_LANCE && !is_transactional_hive; + scan_params.format_type != TFileFormatType::FORMAT_ES_HTTP && !is_transactional_hive; } Status FileScanLocalState::_init_scanners(std::list* scanners) { diff --git a/be/src/exec/operator/materialization_opertor.cpp b/be/src/exec/operator/materialization_opertor.cpp index f8871c533c5c2d..60c31ecb019777 100644 --- a/be/src/exec/operator/materialization_opertor.cpp +++ b/be/src/exec/operator/materialization_opertor.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -72,6 +73,57 @@ constexpr const char* TOPN_LAZY_MAT_PHASE2_PER_BACKEND_REMOTE_IO_TIME = constexpr const char* TOPN_LAZY_MAT_PHASE2_PER_BACKEND_WRITE_CACHE_IO_TIME = "TopNLazyMaterializationSecondPhasePerBackendWriteCacheIOTime"; +struct MaterializationRowLocation { + ROW_VERSION version = ROW_VERSION::FILE_LOCAL_ROW_ID; + int64_t backend_id = 0; + uint32_t file_id = 0; + uint64_t row_id = 0; +}; + +Status decode_global_row_location_v2(const StringRef& encoded, ROW_VERSION version, + MaterializationRowLocation* decoded) { + if (encoded.size != sizeof(GlobalRowLoacationV2)) { + return Status::InternalError( + "invalid global row location size for version {}: actual={}, expected={}", + static_cast(version), encoded.size, sizeof(GlobalRowLoacationV2)); + } + GlobalRowLoacationV2 location(GlobalRowLoacationV2::VERSION, 0, 0, 0); + std::memcpy(&location, encoded.data, sizeof(location)); + decoded->version = version; + decoded->backend_id = location.backend_id; + switch (version) { + case ROW_VERSION::FILE_LOCAL_ROW_ID: + decoded->file_id = location.file_local.file_id; + decoded->row_id = location.file_local.row_id; + return Status::OK(); + case ROW_VERSION::LANCE_DATASET_ROW_ID: + decoded->file_id = location.lance_file_id; + decoded->row_id = location.lance_row_id; + return Status::OK(); + } + return Status::NotSupported("unsupported V2 global row location version: {}", + static_cast(version)); +} + +Status decode_materialization_row_location(const StringRef& encoded, + MaterializationRowLocation* decoded) { + if (encoded.size < sizeof(uint8_t)) { + return Status::InternalError("global row location is empty"); + } + + const auto version_value = static_cast(encoded.data[0]); + const auto version = static_cast(version_value); + // Keep size validation inside each version-family decoder. A future version can therefore + // use a different encoded size without being rejected by the current 24-byte V2 contract. + switch (version) { + case ROW_VERSION::FILE_LOCAL_ROW_ID: + case ROW_VERSION::LANCE_DATASET_ROW_ID: + return decode_global_row_location_v2(encoded, version, decoded); + } + return Status::NotSupported("unsupported global row location version: {}, encoded_size={}", + static_cast(version_value), encoded.size); +} + void update_counter(RuntimeProfile* profile, const std::string& name, TUnit::type unit, int64_t value) { COUNTER_UPDATE(ADD_COUNTER_WITH_LEVEL(profile, name, unit, 2), value); @@ -403,16 +455,20 @@ Status MaterializationSharedState::validate_rpc_results(int node_id) { void MaterializationSharedState::_update_profile_info(int64_t backend_id, RuntimeProfile* response_profile) { + DORIS_CHECK(response_profile != nullptr); if (!backend_profile_info_string.contains(backend_id)) { backend_profile_info_string.emplace(backend_id, std::map {}); } auto& info_map = backend_profile_info_string[backend_id]; - auto update_profile_info_key = [&](const std::string& info_key) { + auto update_profile_info_key = [&](const std::string& info_key, bool warn_if_missing = true) { const auto* info_value = response_profile->get_info_string(info_key); if (info_value == nullptr) [[unlikely]] { - LOG(WARNING) << "Get row id fetch rpc profile success, but no info key :" << info_key; + if (warn_if_missing) { + LOG(WARNING) << "Get row id fetch rpc profile success, but no info key :" + << info_key; + } return; } if (!info_map.contains(info_key)) { @@ -427,6 +483,13 @@ void MaterializationSharedState::_update_profile_info(int64_t backend_id, update_profile_info_key(RowIdStorageReader::FileReadLinesProfile); update_profile_info_key(FileScanner::FileReadBytesProfile); update_profile_info_key(FileScanner::FileReadTimeProfile); + update_profile_info_key(RowIdStorageReader::LanceDatasetOpenTimeProfile, false); + update_profile_info_key(RowIdStorageReader::LanceRowIdTakeReadTimeProfile, false); + update_profile_info_key(RowIdStorageReader::LanceArrowToDorisBlockTimeProfile, false); + update_profile_info_key(RowIdStorageReader::LanceRowIdFetchTotalTimeProfile, false); + for (const auto& [name, unit] : RowIdStorageReader::LanceFetchCountersProfile) { + update_profile_info_key(name, false); + } } Status MaterializationSharedState::create_muiltget_result(const Columns& columns, bool child_eos) { @@ -451,19 +514,28 @@ Status MaterializationSharedState::create_muiltget_result(const Columns& columns for (int j = 0; j < rows; ++j) { if (!null_map || !null_map[j]) { - DCHECK(column_rowid->get_data_at(j).size == sizeof(GlobalRowLoacationV2)); - GlobalRowLoacationV2 row_location = - *((GlobalRowLoacationV2*)column_rowid->get_data_at(j).data); + MaterializationRowLocation row_location; + RETURN_IF_ERROR(decode_materialization_row_location(column_rowid->get_data_at(j), + &row_location)); auto rpc_struct = rpc_struct_map.find(row_location.backend_id); if (UNLIKELY(rpc_struct == rpc_struct_map.end())) { return Status::InternalError( "MaterializationSinkOperatorX failed to find rpc_struct, backend_id={}", row_location.backend_id); } - rpc_struct->second.request.mutable_request_block_descs(i)->add_row_id( - row_location.row_id); - rpc_struct->second.request.mutable_request_block_descs(i)->add_file_id( - row_location.file_id); + auto* request_block_desc = + rpc_struct->second.request.mutable_request_block_descs(i); + const auto row_location_version = static_cast(row_location.version); + if (request_block_desc->row_id_size() == 0) { + request_block_desc->set_row_location_version(row_location_version); + } else if (request_block_desc->row_location_version() != row_location_version) { + return Status::InternalError( + "mixed row location versions in one materialization request: " + "actual={}, expected={}", + row_location_version, request_block_desc->row_location_version()); + } + request_block_desc->add_row_id(row_location.row_id); + request_block_desc->add_file_id(row_location.file_id); block_order[j] = row_location.backend_id; // Count rows per backend @@ -593,8 +665,7 @@ Status MaterializationOperator::pull(RuntimeState* state, Block* output_block, b local_state._materialization_state.backend_profile_info_string) { auto* child_profile = local_state.operator_profile()->create_child( "RowIDFetcher: BackendId:" + std::to_string(backend_id)); - for (const auto& [info_key, info_value] : - local_state._materialization_state.backend_profile_info_string[backend_id]) { + for (const auto& [info_key, info_value] : child_info) { child_profile->add_info_string(info_key, "{" + fmt::to_string(info_value) + "}"); } local_state.operator_profile()->add_child(child_profile, true); diff --git a/be/src/exec/rowid_fetcher.cpp b/be/src/exec/rowid_fetcher.cpp index 3f9c0efc82ebd9..6cac9778d0ec95 100644 --- a/be/src/exec/rowid_fetcher.cpp +++ b/be/src/exec/rowid_fetcher.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,7 @@ #include "exec/scan/file_scanner_v2.h" #include "format/orc/vorc_reader.h" #include "format/parquet/vparquet_reader.h" +#include "format_v2/table/lance_reader.h" #include "io/io_common.h" #include "runtime/descriptors.h" #include "runtime/exec_env.h" // ExecEnv @@ -61,6 +63,7 @@ #include "storage/tablet/tablet_schema.h" #include "storage/utils.h" #include "util/jsonb/serialize.h" +#include "util/pretty_printer.h" namespace doris { @@ -244,6 +247,27 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequestV2& request, const auto& request_block_desc = request.request_block_descs(i); PMultiGetBlockV2* pblock = response->add_blocks(); if (request_block_desc.row_id_size() >= 1) { + // Every row is addressed by the pair (file_id(j), row_id(j)). A sender that + // appended 2 row IDs but 1 file ID would make the per-row lookups below read + // file_id(1), which does not exist. + if (request_block_desc.file_id_size() != request_block_desc.row_id_size()) { + return Status::InvalidArgument( + "Row-id fetch has mismatched file_id and row_id counts: " + "file_ids={}, row_ids={}", + request_block_desc.file_id_size(), request_block_desc.row_id_size()); + } + // A version this binary does not know (for example 2 from a newer sender) may use + // a different row ID meaning; reading it as FILE_LOCAL_ROW_ID would return + // unrelated rows instead of failing. + const auto row_location_version = request_block_desc.row_location_version(); + switch (row_location_version) { + case static_cast(ROW_VERSION::FILE_LOCAL_ROW_ID): + case static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID): + break; + default: + return Status::NotSupported("unsupported row location version in fetch: {}", + row_location_version); + } // Since this block belongs to the same table, we only need to take the first type for judgment. auto first_file_id = request_block_desc.file_id(0); auto first_file_mapping = id_file_map->get_file_mapping(first_file_id); @@ -253,6 +277,14 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequestV2& request, BackendOptions::get_localhost(), print_id(request.query_id()), first_file_id); } + // Only a Lance scan produces LANCE_DATASET_ROW_ID, and Lance mappings are external. + // An internal segment never has a dataset row ID to take. + if (first_file_mapping->type != FileMappingType::EXTERNAL && + row_location_version == + static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID)) { + return Status::InvalidArgument( + "Lance dataset row IDs require an external file mapping"); + } file_type_counts[first_file_mapping->type] += request_block_desc.row_id_size(); // prepare slots to build block @@ -359,6 +391,13 @@ Status RowIdStorageReader::read_batch_doris_format_row( std::vector> row_id_block_idx(request_block_desc.row_id_size()); for (int j = 0; j < request_block_desc.row_id_size(); ++j) { auto file_id = request_block_desc.file_id(j); + // The wire row ID is uint64 for every row location version. An internal segment ordinal + // is a FILE_LOCAL_ROW_ID that the sender zero-extended from uint32, so a value such as + // 2^32 can only come from a malformed request and must not be truncated to row 0. + const auto row_id = request_block_desc.row_id(j); + if (row_id > std::numeric_limits::max()) { + return Status::InvalidArgument("internal row id exceeds uint32 range: {}", row_id); + } auto file_mapping = id_file_map->get_file_mapping(file_id); if (!file_mapping) { return Status::InternalError( @@ -377,8 +416,8 @@ Status RowIdStorageReader::read_batch_doris_format_row( scan_batches.back().file_mapping = file_mapping; } // Record (row_id, original_request_index) for later sorting and scattering. - scan_batches[it->second].row_ids_with_positions.emplace_back(request_block_desc.row_id(j), - j); + scan_batches[it->second].row_ids_with_positions.emplace_back( + static_cast(row_id), j); } // Phase 2: For each segment, sort row_ids ascending (required by ColumnIterator), @@ -422,6 +461,17 @@ const std::string RowIdStorageReader::ScannersRunningTimeProfile = "ScannersRunn const std::string RowIdStorageReader::InitReaderAvgTimeProfile = "InitReaderAvgTime"; const std::string RowIdStorageReader::GetBlockAvgTimeProfile = "GetBlockAvgTime"; const std::string RowIdStorageReader::FileReadLinesProfile = "FileReadLines"; +const std::string RowIdStorageReader::LanceDatasetOpenTimeProfile = "LanceDatasetOpenTime"; +const std::string RowIdStorageReader::LanceRowIdTakeReadTimeProfile = "LanceRowIdTakeReadTime"; +const std::string RowIdStorageReader::LanceArrowToDorisBlockTimeProfile = + "LanceArrowToDorisBlockTime"; +const std::string RowIdStorageReader::LanceRowIdFetchTotalTimeProfile = "LanceRowIdFetchTotalTime"; +const std::map RowIdStorageReader::LanceFetchCountersProfile = { + {"LanceRowIdFetchRows", TUnit::UNIT}, + {"LanceRowIdFetchCalls", TUnit::UNIT}, + {"LanceDataCacheBytesReadFromCache", TUnit::BYTES}, + {"LanceDataCacheBytesReadFromRemote", TUnit::BYTES}, +}; const std::string RowIdStorageReader::TopNLazyMaterializationSecondPhaseLocalIOCount = "TopNLazyMaterializationSecondPhaseLocalIOCount"; const std::string RowIdStorageReader::TopNLazyMaterializationSecondPhaseLocalIOBytes = @@ -467,8 +517,66 @@ TFileRangeDesc RowIdStorageReader::build_external_fetch_range(const TFileRangeDe return range; } +Status RowIdStorageReader::read_lance_rows_by_row_ids( + const TFileRangeDesc& scan_range_desc, const std::vector& row_ids, + const std::vector& slots, RuntimeState* runtime_state, + RuntimeProfile* runtime_profile, const TFileScanRangeParams& scan_params, Block* block, + RowIdStorageReader::ExternalFetchStatistics* fetch_statistics) { + // Unlike Parquet/ORC, a Lance row ID is a native uint64 ID in a fixed dataset snapshot, + // rather than a row ordinal interpreted by a reader for one physical file range. Phase-two + // fetch therefore opens that dataset snapshot and uses dataset-level take_rows directly. It + // does not create a FileScanner or rescan the fragment split that produced the row ID. + std::vector projected_columns; + projected_columns.reserve(slots.size()); + for (const auto& slot : slots) { + format::ColumnDefinition column; + column.identifier = Field::create_field(slot.col_name()); + column.name = slot.col_name(); + column.type = slot.type(); + projected_columns.emplace_back(std::move(column)); + } + + format::lance::LanceTableReader reader; + auto lance_scan_params = scan_params; + RETURN_IF_ERROR(scope_timer_run( + [&]() { + return reader.init({ + .projected_columns = projected_columns, + .conjuncts = {}, + .format = format::FileFormat::LANCE, + .scan_params = &lance_scan_params, + .io_ctx = nullptr, + .runtime_state = runtime_state, + .scanner_profile = runtime_profile, + }); + }, + &fetch_statistics->init_reader_ms)); + RETURN_IF_ERROR(scope_timer_run( + [&]() { return reader.read_by_row_ids(scan_range_desc, row_ids, block); }, + &fetch_statistics->get_block_ms)); + RETURN_IF_ERROR(reader.close()); + + const auto collect_lance_fetch_time = [&](const std::string& timer_name) { + if (const auto* counter = runtime_profile->get_counter(timer_name); counter != nullptr) { + fetch_statistics->lance_fetch_times_ns.emplace(timer_name, counter->value()); + } + }; + collect_lance_fetch_time(LanceDatasetOpenTimeProfile); + collect_lance_fetch_time(LanceRowIdTakeReadTimeProfile); + collect_lance_fetch_time(LanceArrowToDorisBlockTimeProfile); + collect_lance_fetch_time(LanceRowIdFetchTotalTimeProfile); + // close() publishes dataset-handle cache statistics; collect after it and preserve the + // units across the RPC instead of formatting byte/count values as nanoseconds. + for (const auto& [name, unit] : LanceFetchCountersProfile) { + if (const auto* counter = runtime_profile->get_counter(name); counter != nullptr) { + fetch_statistics->lance_fetch_counters.emplace(name, counter->value()); + } + } + return Status::OK(); +} + Status RowIdStorageReader::read_external_row_from_file_mapping( - size_t idx, const std::multimap& row_ids, + size_t idx, const std::multimap& row_ids, const std::shared_ptr& file_mapping, const std::vector& scan_slots, const TUniqueId& query_id, const std::shared_ptr& runtime_state, std::vector& scan_blocks, @@ -485,8 +593,8 @@ Status RowIdStorageReader::read_external_row_from_file_mapping( // the caller, so the status is always published before the waiter is woken. Defer defer([&] { semaphore.release(); }); - std::list read_ids; - //Generate an ordered list with the help of the orderliness of the map. + std::vector read_ids; + // Generate an ordered, deduplicated list with the help of the multimap ordering. for (const auto& [row_id, result_block_idx] : row_ids) { if (read_ids.empty() || read_ids.back() != row_id) { read_ids.emplace_back(row_id); @@ -501,15 +609,31 @@ Status RowIdStorageReader::read_external_row_from_file_mapping( std::unique_ptr sub_runtime_profile = std::make_unique("ExternalRowIDFetcher"); - { + const auto format_type = scan_range_desc.__isset.format_type ? scan_range_desc.format_type + : rpc_scan_params.format_type; + if (format_type == TFileFormatType::FORMAT_LANCE) { + RETURN_IF_ERROR(read_lance_rows_by_row_ids(scan_range_desc, read_ids, scan_slots, + runtime_state.get(), sub_runtime_profile.get(), + rpc_scan_params, &scan_blocks[idx], + &fetch_statistics[idx])); + } else { + // Parquet/ORC IDs remain signed physical file positions; Lance keeps native uint64 IDs. + std::list legacy_read_ids; + for (const auto row_id : read_ids) { + if (row_id > static_cast(std::numeric_limits::max())) { + return Status::InvalidArgument("legacy external row id exceeds int64 range: {}", + row_id); + } + legacy_read_ids.emplace_back(static_cast(row_id)); + } if (should_use_file_scanner_v2(runtime_state->query_options(), rpc_scan_params, scan_range_desc)) { auto file_scanner = FileScannerV2::create_unique( runtime_state.get(), sub_runtime_profile.get(), &rpc_scan_params, &colname_to_slot_id, &tuple_desc); - RETURN_IF_ERROR(file_scanner->read_by_rows(scan_range_desc, read_ids, &scan_blocks[idx], - &fetch_statistics[idx].init_reader_ms, - &fetch_statistics[idx].get_block_ms)); + RETURN_IF_ERROR(file_scanner->read_by_rows( + scan_range_desc, legacy_read_ids, &scan_blocks[idx], + &fetch_statistics[idx].init_reader_ms, &fetch_statistics[idx].get_block_ms)); } else { // Phase one can still use V1 for table-format variants unsupported by V2, so keep the // matching phase-two path instead of turning a previously valid query into an error. @@ -518,7 +642,7 @@ Status RowIdStorageReader::read_external_row_from_file_mapping( &rpc_scan_params, &colname_to_slot_id, &tuple_desc); RETURN_IF_ERROR(file_scanner->prepare_for_read_lines(scan_range_desc)); RETURN_IF_ERROR(file_scanner->read_lines_from_range( - scan_range_desc, read_ids, &scan_blocks[idx], external_info, + scan_range_desc, legacy_read_ids, &scan_blocks[idx], external_info, &fetch_statistics[idx].init_reader_ms, &fetch_statistics[idx].get_block_ms)); } } @@ -717,6 +841,19 @@ Status RowIdStorageReader::read_batch_external_row( DCHECK(id_file_map->get_external_scan_params().contains(plan_node_id)); const auto* old_scan_params = &(id_file_map->get_external_scan_params().at(plan_node_id)); + // A Lance dataset row ID is meaningful only to Lance take_rows. Paired with a Parquet or + // ORC mapping it would be read as a physical row position of that file. + if (request_block_desc.row_location_version() == + static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID)) { + const auto format_type = first_scan_range_desc.__isset.format_type + ? first_scan_range_desc.format_type + : old_scan_params->format_type; + if (format_type != TFileFormatType::FORMAT_LANCE) { + return Status::InvalidArgument( + "Lance dataset row IDs cannot be fetched with file format {}", + static_cast(format_type)); + } + } std::unordered_map source_column_to_scan_idx; result_column_to_scan_column.reserve(slots.size()); @@ -759,9 +896,9 @@ Status RowIdStorageReader::read_batch_external_row( } // Hash(TFileRangeDesc) => { all the rows that need to be read and their positions in the result block. } + file mapping - // std::multimap : The reason for using multimap is: may need the same row of data multiple times. - std::map, std::shared_ptr>> + // The multimap retains duplicate row IDs because the same source row can appear more than once + // in the materialized result. + std::map, std::shared_ptr>> scan_rows; // Block corresponding to the order of `scan_rows` map. @@ -773,7 +910,21 @@ Status RowIdStorageReader::read_batch_external_row( // Count the time/bytes it takes to read each TFileRangeDesc. (for profile) std::vector fetch_statistics; - auto hash_file_range = [](const TFileRangeDesc& file_range_desc) { + auto hash_file_range = [&rpc_scan_params](const ExternalFileMappingInfo& external_info) { + const auto& file_range_desc = external_info.scan_range_desc; + const auto format_type = file_range_desc.__isset.format_type ? file_range_desc.format_type + : rpc_scan_params.format_type; + if (format_type == TFileFormatType::FORMAT_LANCE) { + // Parquet and ORC row IDs are offsets within a physical file range, so their fetch + // path must keep each path/start_offset pair separate. Lance row IDs instead belong + // to a fixed dataset snapshot. Although phase one registers one file mapping per + // fragment split, phase two uses dataset-level take_rows and can fetch row IDs from + // all of those fragments together. Group the mappings by scan node, snapshot, and + // dataset URI; the plan node keeps independent scans of the same snapshot isolated. + const auto& lance_params = file_range_desc.table_format_params.lance_params; + return fmt::format("lance:{}:{}:{}", external_info.plan_node_id, lance_params.version, + lance_params.dataset_uri); + } std::string value; value.resize(file_range_desc.path.size() + sizeof(file_range_desc.start_offset)); auto* ptr = value.data(); @@ -794,14 +945,12 @@ Status RowIdStorageReader::read_batch_external_row( } const auto& external_info = file_mapping->get_external_file_info(); - const auto& scan_range_desc = external_info.scan_range_desc; - - auto scan_range_hash = hash_file_range(scan_range_desc); + const auto& scan_range_hash = hash_file_range(external_info); if (scan_rows.contains(scan_range_hash)) { scan_rows.at(scan_range_hash).first.emplace(request_block_desc.row_id(j), j); } else { - std::multimap tmp {{request_block_desc.row_id(j), j}}; - scan_rows.emplace(scan_range_hash, std::make_pair(tmp, file_mapping)); + std::multimap rows {{request_block_desc.row_id(j), j}}; + scan_rows.emplace(scan_range_hash, std::make_pair(std::move(rows), file_mapping)); } } @@ -825,8 +974,8 @@ Status RowIdStorageReader::read_batch_external_row( //semaphore: Limit the number of scan tasks submitted at one time std::counting_semaphore semaphore {max_file_scanners}; - std::vector, - std::shared_ptr>> + std::vector< + std::pair, std::shared_ptr>> scan_info_list; scan_info_list.reserve(scan_rows.size()); for (const auto& [_, scan_info] : scan_rows) { @@ -899,6 +1048,8 @@ Status RowIdStorageReader::read_batch_external_row( fmt::memory_buffer file_read_times_buffer; format_to(file_read_times_buffer, "["); + std::map lance_fetch_times_ns; + std::map lance_fetch_counters; size_t idx = 0; for (const auto& [_, scan_info] : scan_rows) { format_to(file_read_lines_buffer, "{}, ", scan_info.first.size()); @@ -906,6 +1057,12 @@ Status RowIdStorageReader::read_batch_external_row( *get_block_avg_ms += fetch_statistics[idx].get_block_ms; format_to(file_read_bytes_buffer, "{}, ", fetch_statistics[idx].file_read_bytes); format_to(file_read_times_buffer, "{}, ", fetch_statistics[idx].file_read_times); + for (const auto& [time_name, time_value] : fetch_statistics[idx].lance_fetch_times_ns) { + lance_fetch_times_ns[time_name] += time_value; + } + for (const auto& [name, value] : fetch_statistics[idx].lance_fetch_counters) { + lance_fetch_counters[name] += value; + } idx++; } @@ -925,6 +1082,14 @@ Status RowIdStorageReader::read_batch_external_row( fmt::to_string(file_read_bytes_buffer)); runtime_profile->add_info_string(FileScannerV2::FileReadTimeProfile, fmt::to_string(file_read_times_buffer)); + for (const auto& [name, value] : lance_fetch_counters) { + runtime_profile->add_info_string( + name, PrettyPrinter::print(value, LanceFetchCountersProfile.at(name))); + } + for (const auto& [time_name, time_value] : lance_fetch_times_ns) { + runtime_profile->add_info_string(time_name, + PrettyPrinter::print(time_value, TUnit::TIME_NS)); + } } runtime_profile->to_proto(pprofile, 2); diff --git a/be/src/exec/rowid_fetcher.h b/be/src/exec/rowid_fetcher.h index 916b77ff214a62..56a75b9098d27f 100644 --- a/be/src/exec/rowid_fetcher.h +++ b/be/src/exec/rowid_fetcher.h @@ -21,9 +21,11 @@ #include #include +#include #include #include #include +#include #include #include @@ -35,6 +37,7 @@ namespace doris { +class RuntimeProfile; class RuntimeState; class TQueryOptions; class TupleDescriptor; @@ -68,6 +71,11 @@ class RowIdStorageReader { static const std::string InitReaderAvgTimeProfile; static const std::string GetBlockAvgTimeProfile; static const std::string FileReadLinesProfile; + static const std::string LanceDatasetOpenTimeProfile; + static const std::string LanceRowIdTakeReadTimeProfile; + static const std::string LanceArrowToDorisBlockTimeProfile; + static const std::string LanceRowIdFetchTotalTimeProfile; + static const std::map LanceFetchCountersProfile; static const std::string TopNLazyMaterializationSecondPhaseLocalIOCount; static const std::string TopNLazyMaterializationSecondPhaseLocalIOBytes; static const std::string TopNLazyMaterializationSecondPhaseRemoteIOCount; @@ -120,8 +128,16 @@ class RowIdStorageReader { Block& result_block, PRuntimeProfileTree* pprofile, int64_t* init_reader_avg_ms, int64_t* get_block_avg_ms, size_t* scan_range_cnt); + static Status read_lance_rows_by_row_ids(const TFileRangeDesc& scan_range_desc, + const std::vector& row_ids, + const std::vector& slots, + RuntimeState* runtime_state, + RuntimeProfile* runtime_profile, + const TFileScanRangeParams& scan_params, Block* block, + ExternalFetchStatistics* fetch_statistics); + static Status read_external_row_from_file_mapping( - size_t idx, const std::multimap& row_ids, + size_t idx, const std::multimap& row_ids, const std::shared_ptr& file_mapping, const std::vector& scan_slots, const TUniqueId& query_id, const std::shared_ptr& runtime_state, std::vector& scan_blocks, @@ -151,6 +167,8 @@ class RowIdStorageReader { struct ExternalFetchStatistics { int64_t init_reader_ms = 0; int64_t get_block_ms = 0; + std::map lance_fetch_times_ns; + std::map lance_fetch_counters; std::string file_read_bytes; std::string file_read_times; }; diff --git a/be/src/exec/scan/file_scanner_v2.cpp b/be/src/exec/scan/file_scanner_v2.cpp index 15a71f2c2d1017..3dac8169042c61 100644 --- a/be/src/exec/scan/file_scanner_v2.cpp +++ b/be/src/exec/scan/file_scanner_v2.cpp @@ -65,6 +65,7 @@ #include "format_v2/table/hudi_reader.h" #include "format_v2/table/iceberg_position_delete_sys_table_reader.h" #include "format_v2/table/iceberg_reader.h" +#include "format_v2/table/lance_reader.h" #include "format_v2/table/load_reader.h" #include "format_v2/table/paimon_reader.h" #include "format_v2/table/remote_doris_reader.h" @@ -142,6 +143,10 @@ bool is_supported_arrow_table_format(const TFileRangeDesc& range) { return table_format == "remote_doris" || table_format == "adbc"; } +bool is_supported_lance_table_format(const TFileRangeDesc& range) { + return table_format_name(range) == "lance"; +} + bool is_supported_paimon_jni_payload(const TFileRangeDesc& range) { if (!range.__isset.table_format_params || !range.table_format_params.__isset.paimon_params) { return false; @@ -358,6 +363,8 @@ bool FileScannerV2::is_supported(const TFileScanRangeParams& params, const TFile return is_supported_table_format(range); } else if (format_type == TFileFormatType::FORMAT_ARROW) { return is_supported_arrow_table_format(range); + } else if (format_type == TFileFormatType::FORMAT_LANCE) { + return is_supported_lance_table_format(range); } else if (format_type == TFileFormatType::FORMAT_JNI) { return is_supported_jni_table_format(range); } else if (is_wal_format(format_type)) { @@ -786,6 +793,8 @@ Status FileScannerV2::_create_table_reader_for_format( } else { *reader = std::make_unique(); } + } else if (table_format == "lance") { + *reader = std::make_unique(); } else if (table_format == "paimon") { *reader = std::make_unique(); } else if (table_format == "hudi") { @@ -1095,6 +1104,9 @@ Status FileScannerV2::_to_file_format(TFileFormatType::type format_type, case TFileFormatType::FORMAT_WAL: *file_format = format::FileFormat::WAL; return Status::OK(); + case TFileFormatType::FORMAT_LANCE: + *file_format = format::FileFormat::LANCE; + return Status::OK(); default: return Status::NotSupported("FileScannerV2 does not support file format {}", to_string(format_type)); diff --git a/be/src/format_v2/file_reader.h b/be/src/format_v2/file_reader.h index 98258447a03249..e00a476df0bdc0 100644 --- a/be/src/format_v2/file_reader.h +++ b/be/src/format_v2/file_reader.h @@ -60,6 +60,7 @@ enum class FileFormat { JNI, ARROW, WAL, + LANCE, }; struct FileScanRequest { diff --git a/be/src/format_v2/lance/lance_reader_helper.cpp b/be/src/format_v2/lance/lance_reader_helper.cpp new file mode 100644 index 00000000000000..aecd4adf550f31 --- /dev/null +++ b/be/src/format_v2/lance/lance_reader_helper.cpp @@ -0,0 +1,750 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_reader_helper.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "common/config.h" +#include "common/logging.h" +#include "core/data_type/data_type_array.h" +#include "core/data_type/data_type_factory.hpp" +#include "core/data_type/data_type_map.h" +#include "core/data_type/data_type_nothing.h" +#include "core/data_type/data_type_nullable.h" +#include "core/data_type/data_type_struct.h" +#include "core/data_type_serde/arrow_validation.h" +#include "exec/common/endian.h" + +namespace doris::format::lance { +namespace { + +constexpr std::string_view ARROW_EXTENSION_NAME = "ARROW:extension:name"; +constexpr std::string_view ARROW_JSON_EXTENSION = "arrow.json"; +constexpr std::string_view LANCE_JSON_EXTENSION = "lance.json"; +constexpr std::string_view LANCE_BFLOAT16_EXTENSION = "lance.bfloat16"; + +enum class LanceExtensionKind { + NONE, + JSON, + BFLOAT16, +}; + +int arrow_time_precision(arrow::TimeUnit::type unit) { + switch (unit) { + case arrow::TimeUnit::SECOND: + return 0; + case arrow::TimeUnit::MILLI: + return 3; + case arrow::TimeUnit::MICRO: + case arrow::TimeUnit::NANO: + return 6; + } + return 6; +} + +// Extract and validate extension names from metadata and registered Arrow types. +Status get_lance_extension(const std::shared_ptr& field, + LanceExtensionKind* extension_kind, + std::shared_ptr* storage_type) { + DORIS_CHECK(field != nullptr); + DORIS_CHECK(extension_kind != nullptr); + DORIS_CHECK(storage_type != nullptr); + *extension_kind = LanceExtensionKind::NONE; + *storage_type = field->type(); + + std::optional extension_name; + if (field->HasMetadata()) { + const auto metadata_name = field->metadata()->Get(ARROW_EXTENSION_NAME); + if (metadata_name.ok() && !metadata_name.ValueUnsafe().empty()) { + extension_name = metadata_name.ValueUnsafe(); + } + } + if (field->type()->id() == arrow::Type::EXTENSION) { + const auto extension_type = std::dynamic_pointer_cast(field->type()); + if (extension_type == nullptr) { + return Status::InvalidArgument("invalid Arrow extension type for Lance field '{}'", + field->name()); + } + if (extension_name.has_value() && *extension_name != extension_type->extension_name()) { + return Status::InvalidArgument( + "conflicting Arrow extension names for Lance field '{}': '{}' and '{}'", + field->name(), *extension_name, extension_type->extension_name()); + } + extension_name = extension_type->extension_name(); + *storage_type = extension_type->storage_type(); + } + if (!extension_name.has_value()) { + return Status::OK(); + } + + if (*extension_name == ARROW_JSON_EXTENSION) { + if ((*storage_type)->id() != arrow::Type::STRING && + (*storage_type)->id() != arrow::Type::LARGE_STRING) { + return Status::NotSupported( + "Arrow JSON extension for Lance field '{}' requires UTF8 storage, got {}", + field->name(), (*storage_type)->ToString()); + } + *extension_kind = LanceExtensionKind::JSON; + return Status::OK(); + } + if (*extension_name == LANCE_JSON_EXTENSION) { + if ((*storage_type)->id() != arrow::Type::LARGE_BINARY) { + return Status::NotSupported( + "Lance JSON extension for field '{}' requires LARGE_BINARY storage, got {}", + field->name(), (*storage_type)->ToString()); + } + *extension_kind = LanceExtensionKind::JSON; + return Status::OK(); + } + if (*extension_name == LANCE_BFLOAT16_EXTENSION) { + if ((*storage_type)->id() != arrow::Type::FIXED_SIZE_BINARY || + std::static_pointer_cast(*storage_type)->byte_width() != + 2) { + return Status::NotSupported( + "Lance BFloat16 extension for field '{}' requires FIXED_SIZE_BINARY(2) " + "storage, got {}", + field->name(), (*storage_type)->ToString()); + } + *extension_kind = LanceExtensionKind::BFLOAT16; + return Status::OK(); + } + return Status::NotSupported("unsupported Lance Arrow extension type '{}' for field '{}'", + *extension_name, field->name()); +} + +// Map Arrow fields recursively, preserving Null leaves in complex types. +Status arrow_field_to_doris_type(const std::shared_ptr& field, + DataTypePtr* doris_type) { + const auto nullable_primitive = [&](PrimitiveType type, int precision = 0, int scale = 0, + int len = -1) { + *doris_type = + DataTypeFactory::instance().create_data_type(type, true, precision, scale, len); + return Status::OK(); + }; + + LanceExtensionKind extension_kind; + std::shared_ptr arrow_type; + RETURN_IF_ERROR(get_lance_extension(field, &extension_kind, &arrow_type)); + switch (extension_kind) { + case LanceExtensionKind::JSON: + return nullable_primitive(TYPE_JSONB); + case LanceExtensionKind::BFLOAT16: + return nullable_primitive(TYPE_FLOAT); + case LanceExtensionKind::NONE: + break; + } + if (arrow_type->id() == arrow::Type::DICTIONARY) { + return Status::NotSupported("unsupported Lance Arrow dictionary type for field '{}': {}", + field->name(), arrow_type->ToString()); + } + + switch (arrow_type->id()) { + case arrow::Type::NA: + // Required Null leaves can bypass NullableSerDe through FE schema reconstruction. + // Reject them before Arrow NA buffers reach the Boolean-backed physical SerDe. + if (!field->nullable()) { + return Status::NotSupported("non-nullable Lance Arrow Null field: {}", field->name()); + } + return nullable_primitive(TYPE_NULL); + case arrow::Type::BOOL: + return nullable_primitive(TYPE_BOOLEAN); + case arrow::Type::INT8: + return nullable_primitive(TYPE_TINYINT); + case arrow::Type::UINT8: + case arrow::Type::INT16: + return nullable_primitive(TYPE_SMALLINT); + case arrow::Type::UINT16: + case arrow::Type::INT32: + return nullable_primitive(TYPE_INT); + case arrow::Type::UINT32: + case arrow::Type::INT64: + return nullable_primitive(TYPE_BIGINT); + case arrow::Type::UINT64: + return nullable_primitive(TYPE_LARGEINT); + case arrow::Type::HALF_FLOAT: + case arrow::Type::FLOAT: + return nullable_primitive(TYPE_FLOAT); + case arrow::Type::DOUBLE: + return nullable_primitive(TYPE_DOUBLE); + case arrow::Type::STRING: + case arrow::Type::LARGE_STRING: + return nullable_primitive(TYPE_STRING); + case arrow::Type::BINARY: + case arrow::Type::LARGE_BINARY: + return nullable_primitive(TYPE_VARBINARY, 0, 0, std::numeric_limits::max()); + case arrow::Type::FIXED_SIZE_BINARY: { + const auto binary = std::static_pointer_cast(arrow_type); + return nullable_primitive(TYPE_VARBINARY, 0, 0, binary->byte_width()); + } + case arrow::Type::DATE32: + case arrow::Type::DATE64: + return nullable_primitive(TYPE_DATEV2); + case arrow::Type::TIME32: + case arrow::Type::TIME64: { + const auto time = std::static_pointer_cast(arrow_type); + return nullable_primitive(TYPE_TIMEV2, 0, arrow_time_precision(time->unit())); + } + case arrow::Type::TIMESTAMP: { + const auto timestamp = std::static_pointer_cast(arrow_type); + const auto timestamp_type = + timestamp->timezone().empty() ? TYPE_DATETIMEV2 : TYPE_TIMESTAMPTZ; + return nullable_primitive(timestamp_type, 0, arrow_time_precision(timestamp->unit())); + } + case arrow::Type::DURATION: + return nullable_primitive(TYPE_BIGINT); + case arrow::Type::DECIMAL128: + case arrow::Type::DECIMAL256: { + const auto decimal = std::static_pointer_cast(arrow_type); + const int precision = decimal->precision(); + const int scale = decimal->scale(); + if (precision <= 0 || precision > arrow::Decimal256Type::kMaxPrecision || scale < 0 || + scale > precision) { + return Status::NotSupported( + "unsupported Lance Arrow decimal type for field '{}': precision={}, scale={}", + field->name(), precision, scale); + } + const PrimitiveType doris_decimal_type = precision <= 9 ? TYPE_DECIMAL32 + : precision <= 18 ? TYPE_DECIMAL64 + : precision <= 38 ? TYPE_DECIMAL128I + : TYPE_DECIMAL256; + return nullable_primitive(doris_decimal_type, precision, scale); + } + case arrow::Type::LIST: + case arrow::Type::LARGE_LIST: + case arrow::Type::FIXED_SIZE_LIST: { + const auto list = std::static_pointer_cast(arrow_type); + DataTypePtr value_type; + RETURN_IF_ERROR(arrow_field_to_doris_type(list->value_field(), &value_type)); + *doris_type = make_nullable(std::make_shared(value_type)); + return Status::OK(); + } + case arrow::Type::MAP: { + const auto map = std::static_pointer_cast(arrow_type); + DataTypePtr key_type; + DataTypePtr item_type; + RETURN_IF_ERROR(arrow_field_to_doris_type(map->key_field(), &key_type)); + RETURN_IF_ERROR(arrow_field_to_doris_type(map->item_field(), &item_type)); + *doris_type = make_nullable(std::make_shared(key_type, item_type)); + return Status::OK(); + } + case arrow::Type::STRUCT: { + const auto struct_type = std::static_pointer_cast(arrow_type); + DataTypes field_types; + Strings field_names; + field_types.reserve(struct_type->num_fields()); + field_names.reserve(struct_type->num_fields()); + for (const auto& child : struct_type->fields()) { + DataTypePtr field_type; + RETURN_IF_ERROR(arrow_field_to_doris_type(child, &field_type)); + field_types.emplace_back(std::move(field_type)); + field_names.emplace_back(child->name()); + } + *doris_type = make_nullable(std::make_shared(field_types, field_names)); + return Status::OK(); + } + default: + return Status::NotSupported("unsupported Lance Arrow type: {}", arrow_type->ToString()); + } +} + +// Widen little-endian Lance BFloat16 values to Arrow Float32 without precision loss. +Status convert_bfloat16_array(const std::shared_ptr& array, + arrow::MemoryPool* memory_pool, + std::shared_ptr* normalized) { + DORIS_CHECK(array != nullptr); + DORIS_CHECK(memory_pool != nullptr); + DORIS_CHECK(normalized != nullptr); + const auto fixed_binary = std::dynamic_pointer_cast(array); + if (fixed_binary == nullptr || fixed_binary->byte_width() != 2) { + return Status::InvalidArgument("invalid Lance BFloat16 array storage: {}", + array->type()->ToString()); + } + if (config::enable_arrow_input_validation) { + check_arrow_fixed_width_buffer(*fixed_binary, sizeof(uint16_t)); + } + + arrow::FloatBuilder builder(memory_pool); + auto arrow_status = builder.Reserve(fixed_binary->length()); + if (!arrow_status.ok()) { + return Status::InternalError("reserve Lance BFloat16 output failed: {}", + arrow_status.message()); + } + for (int64_t row = 0; row < fixed_binary->length(); ++row) { + if (fixed_binary->IsNull(row)) { + arrow_status = builder.AppendNull(); + } else { + const auto bits = LittleEndian::Load16(fixed_binary->GetValue(row)); + arrow_status = builder.Append(std::bit_cast(static_cast(bits) << 16)); + } + if (!arrow_status.ok()) { + return Status::InternalError("append Lance BFloat16 value failed: {}", + arrow_status.message()); + } + } + std::shared_ptr result; + arrow_status = builder.Finish(&result); + if (!arrow_status.ok()) { + return Status::InternalError("finish Lance BFloat16 conversion failed: {}", + arrow_status.message()); + } + *normalized = std::move(result); + return Status::OK(); +} + +// Rebuild a nested Arrow type after one or more child arrays changed physical type. +Status set_lance_nested_type(std::string_view field_name, + const std::shared_ptr& source_type, + const arrow::FieldVector& child_fields, + std::shared_ptr* data) { + switch (source_type->id()) { + case arrow::Type::LIST: + (*data)->type = arrow::list(child_fields[0]); + break; + case arrow::Type::LARGE_LIST: + (*data)->type = arrow::large_list(child_fields[0]); + break; + case arrow::Type::FIXED_SIZE_LIST: + (*data)->type = arrow::fixed_size_list( + child_fields[0], + std::static_pointer_cast(source_type)->list_size()); + break; + case arrow::Type::STRUCT: + (*data)->type = arrow::struct_(child_fields); + break; + case arrow::Type::MAP: { + const auto map_type = std::static_pointer_cast(source_type); + auto normalized_type = arrow::MapType::Make(child_fields[0], map_type->keys_sorted()); + if (!normalized_type.ok()) { + return Status::InvalidArgument("normalize Lance map field '{}' failed: {}", field_name, + normalized_type.status().message()); + } + (*data)->type = std::move(normalized_type).ValueUnsafe(); + break; + } + default: + return Status::InvalidArgument("Lance field '{}' has unexpected child-bearing type {}", + field_name, source_type->ToString()); + } + return Status::OK(); +} + +// Materialize the visible range into an offset-zero Arrow array for Doris SerDes. +Status compact_lance_array(const std::shared_ptr& array, + arrow::MemoryPool* memory_pool, + std::shared_ptr* compacted) { + DORIS_CHECK(memory_pool != nullptr); + const auto validation = array->ValidateFull(); + if (!validation.ok()) { + return Status::InvalidArgument("validate sliced Lance array failed: {}", + validation.message()); + } + auto builder_result = arrow::MakeBuilder(array->type(), memory_pool); + if (!builder_result.ok()) { + return Status::InternalError("create sliced Lance array builder failed: {}", + builder_result.status().message()); + } + auto builder = std::move(builder_result).ValueUnsafe(); + auto arrow_status = builder->Reserve(array->length()); + if (!arrow_status.ok()) { + return Status::InternalError("reserve sliced Lance array builder failed: {}", + arrow_status.message()); + } + arrow_status = builder->AppendArraySlice(*array->data(), 0, array->length()); + if (!arrow_status.ok()) { + return Status::InternalError("copy sliced Lance array failed: {}", arrow_status.message()); + } + arrow_status = builder->Finish(compacted); + if (!arrow_status.ok()) { + return Status::InternalError("finish sliced Lance array copy failed: {}", + arrow_status.message()); + } + if ((*compacted)->offset() != 0) { + return Status::InternalError("compacted Lance array retained offset {}", + (*compacted)->offset()); + } + return Status::OK(); +} + +// Compact a sliced variable-offset parent and all of its visible descendants. +template +Status compact_lance_offset_array(const std::shared_ptr& array, + arrow::MemoryPool* memory_pool, + std::shared_ptr* compacted) { + const auto offset_array = std::dynamic_pointer_cast(array); + if (offset_array == nullptr) { + return Status::InvalidArgument("invalid sliced Lance offset array: {}", + array->type()->ToString()); + } + const auto child_begin = static_cast(offset_array->value_offset(0)); + const auto child_end = static_cast(offset_array->value_offset(offset_array->length())); + const auto& values = offset_array->values(); + if (child_begin < 0 || child_end < child_begin || child_end > values->length()) { + return Status::InvalidArgument("invalid sliced Lance offsets [{}, {}) for child length {}", + child_begin, child_end, values->length()); + } + if (array->offset() == 0 && child_begin == 0 && child_end == values->length()) { + *compacted = array; + return Status::OK(); + } + return compact_lance_array(array, memory_pool, compacted); +} + +// Compact sliced arrays and nested children only when Doris cannot consume their current layout. +Status compact_lance_array_if_needed(const std::shared_ptr& array, + arrow::MemoryPool* memory_pool, + std::shared_ptr* compacted) { + switch (array->type_id()) { + case arrow::Type::LIST: + return compact_lance_offset_array(array, memory_pool, compacted); + case arrow::Type::LARGE_LIST: + return compact_lance_offset_array(array, memory_pool, compacted); + case arrow::Type::MAP: + return compact_lance_offset_array(array, memory_pool, compacted); + case arrow::Type::FIXED_SIZE_LIST: { + const auto list = std::dynamic_pointer_cast(array); + if (list == nullptr) { + return Status::InvalidArgument("invalid sliced Lance fixed-size list array: {}", + array->type()->ToString()); + } + const auto child_begin = list->value_offset(0); + const auto child_length = list->length() * list->value_length(); + const auto& values = list->values(); + if (child_begin < 0 || child_length < 0 || child_begin > values->length() - child_length) { + return Status::InvalidArgument( + "invalid sliced Lance fixed-size list range [{}, {}) for child length {}", + child_begin, child_begin + child_length, values->length()); + } + if (array->offset() == 0 && child_begin == 0 && child_length == values->length()) { + *compacted = array; + return Status::OK(); + } + return compact_lance_array(array, memory_pool, compacted); + } + case arrow::Type::STRUCT: { + const auto struct_array = std::dynamic_pointer_cast(array); + if (struct_array == nullptr) { + return Status::InvalidArgument("invalid sliced Lance struct array: {}", + array->type()->ToString()); + } + bool requires_compaction = array->offset() != 0; + for (const auto& child : array->data()->child_data) { + requires_compaction |= child->length != array->length(); + } + if (!requires_compaction) { + *compacted = array; + return Status::OK(); + } + return compact_lance_array(array, memory_pool, compacted); + } + default: + if (array->offset() == 0) { + *compacted = array; + return Status::OK(); + } + return compact_lance_array(array, memory_pool, compacted); + } +} + +} // namespace + +Status LanceArrowArrayNormalizer::create(const std::shared_ptr& field, + LanceArrowArrayNormalizer* normalizer) { + DORIS_CHECK(field != nullptr); + DORIS_CHECK(normalizer != nullptr); + + LanceExtensionKind extension_kind; + std::shared_ptr storage_type; + RETURN_IF_ERROR(get_lance_extension(field, &extension_kind, &storage_type)); + + LanceArrowArrayNormalizer result; + result._field_name = field->name(); + result._storage_type = std::move(storage_type); + result._unwrap_registered_extension = field->type()->id() == arrow::Type::EXTENSION; + result._convert_bfloat16 = extension_kind == LanceExtensionKind::BFLOAT16; + result._requires_special_handling = + result._unwrap_registered_extension || result._convert_bfloat16; + result._child_normalizers.reserve(result._storage_type->num_fields()); + for (const auto& child_field : result._storage_type->fields()) { + LanceArrowArrayNormalizer child_normalizer; + RETURN_IF_ERROR(create(child_field, &child_normalizer)); + result._requires_special_handling |= child_normalizer._requires_special_handling; + result._child_normalizers.emplace_back(std::move(child_normalizer)); + } + *normalizer = std::move(result); + return Status::OK(); +} + +Status LanceArrowArrayNormalizer::normalize_for_doris( + const std::shared_ptr& array, arrow::MemoryPool* memory_pool, + std::shared_ptr* normalized) const { + DORIS_CHECK(array != nullptr); + DORIS_CHECK(memory_pool != nullptr); + DORIS_CHECK(normalized != nullptr); + + // The schema binding already resolved extension metadata and nested special types. For common + // arrays, runtime work is limited to checking whether the visible slice needs compaction. + if (!_requires_special_handling) { + return compact_lance_array_if_needed(array, memory_pool, normalized); + } + + auto storage_array = array; + if (_unwrap_registered_extension && array->type_id() == arrow::Type::EXTENSION) { + const auto extension_array = std::dynamic_pointer_cast(array); + if (extension_array == nullptr) { + return Status::InvalidArgument("invalid Arrow extension array: {}", + array->type()->ToString()); + } + storage_array = extension_array->storage(); + } + // Extension and BFloat16 arrays are first converted to their physical storage representation. + if (storage_array->type_id() != _storage_type->id()) { + return Status::InvalidArgument( + "Lance field '{}' storage type {} does not match array type {}", _field_name, + _storage_type->ToString(), storage_array->type()->ToString()); + } + if (_convert_bfloat16) { + return convert_bfloat16_array(storage_array, memory_pool, normalized); + } + + // Normalize extension children before compacting the parent. Arrow cannot create a builder + // for list/struct types whose child is still an ExtensionType (Arrow 24 returns + // NotImplemented), while the rebuilt physical type can be compacted normally. + const auto& child_data = storage_array->data()->child_data; + if (_child_normalizers.size() != child_data.size()) { + return Status::InvalidArgument( + "Lance field '{}' has {} child fields but its Arrow array has {} children", + _field_name, _child_normalizers.size(), child_data.size()); + } + + arrow::FieldVector normalized_fields; + std::shared_ptr normalized_data; + for (size_t child_idx = 0; child_idx < _child_normalizers.size(); ++child_idx) { + const auto& child_normalizer = _child_normalizers[child_idx]; + if (!child_normalizer._requires_special_handling) { + continue; + } + auto child_array = arrow::MakeArray(child_data[child_idx]); + std::shared_ptr normalized_child; + RETURN_IF_ERROR( + child_normalizer.normalize_for_doris(child_array, memory_pool, &normalized_child)); + if (normalized_child.get() == child_array.get()) { + continue; + } + if (normalized_data == nullptr) { + normalized_data = storage_array->data()->Copy(); + normalized_fields = storage_array->type()->fields(); + } + normalized_data->child_data[child_idx] = normalized_child->data(); + normalized_fields[child_idx] = + normalized_fields[child_idx]->WithType(normalized_child->type()); + } + if (normalized_data != nullptr) { + RETURN_IF_ERROR(set_lance_nested_type(_field_name, storage_array->type(), normalized_fields, + &normalized_data)); + storage_array = arrow::MakeArray(std::move(normalized_data)); + } + + // Compact only after child types are physical, so MakeBuilder never sees a nested + // ExtensionType. This also preserves the existing zero-copy path when no slice is present. + return compact_lance_array_if_needed(storage_array, memory_pool, normalized); +} + +#ifdef BE_TEST +// Expose Lance Arrow normalization for allocation-sensitive unit tests. +Status normalize_lance_arrow_array_for_test(const std::shared_ptr& field, + const std::shared_ptr& array, + std::shared_ptr* normalized, + arrow::MemoryPool* memory_pool) { + LanceArrowArrayNormalizer normalizer; + RETURN_IF_ERROR(LanceArrowArrayNormalizer::create(field, &normalizer)); + return normalizer.normalize_for_doris( + array, memory_pool != nullptr ? memory_pool : arrow::default_memory_pool(), normalized); +} +#endif + +Status import_lance_dataset_schema(LanceDataset* dataset, std::shared_ptr* schema) { + DORIS_CHECK(dataset != nullptr); + DORIS_CHECK(schema != nullptr); + + ArrowSchema arrow_schema {}; + if (lance_dataset_schema(dataset, &arrow_schema) != 0) { + return lance_error("get Lance dataset schema"); + } + auto imported_schema = arrow::ImportSchema(&arrow_schema); + if (!imported_schema.ok()) { + if (arrow_schema.release != nullptr) { + arrow_schema.release(&arrow_schema); + } + return Status::InternalError("import Lance Arrow schema failed: {}", + imported_schema.status().message()); + } + *schema = std::move(imported_schema).ValueUnsafe(); + return Status::OK(); +} + +void LanceDatasetDeleter::operator()(LanceDataset* dataset) const { + lance_dataset_close(dataset); +} + +void LanceScannerDeleter::operator()(LanceScanner* scanner) const { + lance_scanner_close(scanner); +} + +void LanceBatchDeleter::operator()(LanceBatch* batch) const { + lance_batch_free(batch); +} + +size_t lance_vector_element_width(TVectorElementType::type type) { + switch (type) { + case TVectorElementType::FLOAT16: + return sizeof(uint16_t); + case TVectorElementType::FLOAT32: + return sizeof(float); + case TVectorElementType::FLOAT64: + return sizeof(double); + case TVectorElementType::UINT8: + case TVectorElementType::INT8: + return sizeof(uint8_t); + } + return 0; +} + +Status parse_fragment_ids(const TLanceFileDesc& lance_params, std::vector* fragment_ids) { + DORIS_CHECK(fragment_ids != nullptr); + fragment_ids->clear(); + if (!lance_params.__isset.fragment_ids || lance_params.fragment_ids.empty()) { + return Status::OK(); + } + fragment_ids->reserve(lance_params.fragment_ids.size()); + for (const auto fragment_id : lance_params.fragment_ids) { + if (fragment_id < 0) { + return Status::InvalidArgument("Lance fragment id must be non-negative: {}", + fragment_id); + } + fragment_ids->emplace_back(static_cast(fragment_id)); + } + return Status::OK(); +} + +Status parse_index_segment_uuids(const TLanceFileDesc& lance_params, + std::vector* segment_uuids, size_t* segment_count) { + DORIS_CHECK(segment_uuids != nullptr); + DORIS_CHECK(segment_count != nullptr); + segment_uuids->clear(); + *segment_count = 0; + if (!lance_params.__isset.index_segment_uuids || lance_params.index_segment_uuids.empty()) { + return Status::OK(); + } + constexpr size_t UUID_SIZE = 16; + if (lance_params.index_segment_uuids.size() > std::numeric_limits::max() / UUID_SIZE) { + return Status::InvalidArgument("too many Lance index segment UUIDs"); + } + segment_uuids->reserve(lance_params.index_segment_uuids.size() * UUID_SIZE); + for (const auto& uuid : lance_params.index_segment_uuids) { + if (uuid.size() != UUID_SIZE) { + return Status::InvalidArgument("Lance index segment UUID must contain 16 bytes, got {}", + uuid.size()); + } + segment_uuids->insert(segment_uuids->end(), uuid.begin(), uuid.end()); + } + *segment_count = lance_params.index_segment_uuids.size(); + return Status::OK(); +} + +Status convert_arrow_schema_to_doris(const std::shared_ptr& arrow_schema, + std::vector* column_names, + std::vector* column_types) { + DORIS_CHECK(arrow_schema != nullptr); + DORIS_CHECK(column_names != nullptr); + DORIS_CHECK(column_types != nullptr); + + std::vector parsed_names; + std::vector parsed_types; + parsed_names.reserve(arrow_schema->num_fields()); + parsed_types.reserve(arrow_schema->num_fields()); + std::unordered_set unique_names; + unique_names.reserve(arrow_schema->num_fields()); + for (const auto& field : arrow_schema->fields()) { + if (!unique_names.emplace(field->name()).second) { + return Status::InvalidArgument("duplicate Lance schema column: {}", field->name()); + } + DataTypePtr doris_type; + const auto type_status = arrow_field_to_doris_type(field, &doris_type); + if (type_status.is()) { + parsed_types.emplace_back(std::make_shared()); + } else { + RETURN_IF_ERROR(type_status); + DORIS_CHECK(doris_type != nullptr); + parsed_types.emplace_back(std::move(doris_type)); + } + parsed_names.emplace_back(field->name()); + } + *column_names = std::move(parsed_names); + *column_types = std::move(parsed_types); + return Status::OK(); +} + +Status build_lance_storage_options(const TFileScanRangeParams* scan_params, + std::vector* options) { + DORIS_CHECK(options != nullptr); + options->clear(); + if (scan_params == nullptr || !scan_params->__isset.lance_scan_params || + !scan_params->lance_scan_params.__isset.lance_storage_options) { + return Status::OK(); + } + const auto& storage_options = scan_params->lance_scan_params.lance_storage_options; + options->reserve(storage_options.size() * 2); + for (const auto& [key, value] : storage_options) { + // Both values cross a C-string boundary. Reject embedded NULs instead of silently opening + // a different dataset configuration from the one validated and used by the FE. + if (key.find('\0') != std::string::npos || value.find('\0') != std::string::npos) { + return Status::InvalidArgument( + "Lance storage option '{}' contains a NUL and cannot reach lance-c", + key.substr(0, key.find('\0'))); + } + options->emplace_back(key); + options->emplace_back(value); + } + return Status::OK(); +} + +Status lance_error(std::string_view operation) { + const char* raw_message = lance_last_error_message(); + std::string message = raw_message == nullptr ? "" : raw_message; + if (raw_message != nullptr) { + lance_free_string(raw_message); + } + if (message.empty()) { + message = fmt::format("error_code={}", static_cast(lance_last_error_code())); + } + return Status::InternalError("{} failed: {}", operation, message); +} + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_reader_helper.h b/be/src/format_v2/lance/lance_reader_helper.h new file mode 100644 index 00000000000000..c2f67e201bedce --- /dev/null +++ b/be/src/format_v2/lance/lance_reader_helper.h @@ -0,0 +1,119 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "common/status.h" +#include "core/data_type/data_type.h" +#include "gen_cpp/PlanNodes_types.h" + +struct LanceBatch; +struct LanceDataset; +struct LanceScanner; + +namespace arrow { +class Array; +class DataType; +class Field; +class MemoryPool; +class Schema; +} // namespace arrow + +namespace doris::format::lance { + +inline constexpr std::string_view LANCE_DISTANCE_COLUMN = "_distance"; +inline constexpr std::string_view LANCE_SCORE_COLUMN = "_score"; +inline constexpr std::string_view LANCE_ROW_ID_COLUMN = "_rowid"; +inline constexpr const char* LANCE_READER_PROFILE = "LanceReader"; + +struct LanceDatasetDeleter { + void operator()(LanceDataset* dataset) const; +}; + +struct LanceScannerDeleter { + void operator()(LanceScanner* scanner) const; +}; + +struct LanceBatchDeleter { + void operator()(LanceBatch* batch) const; +}; + +size_t lance_vector_element_width(TVectorElementType::type type); + +// Import the physical Arrow schema owned by a Lance dataset. The caller owns the resulting +// shared schema and may cache it for operations that need physical Arrow types. +Status import_lance_dataset_schema(LanceDataset* dataset, std::shared_ptr* schema); + +// Validate and convert the fragment and index-segment identifiers carried by the FE into the +// unsigned and packed representations expected by lance-c. +Status parse_fragment_ids(const TLanceFileDesc& lance_params, std::vector* fragment_ids); +Status parse_index_segment_uuids(const TLanceFileDesc& lance_params, + std::vector* segment_uuids, size_t* segment_count); + +// Resolves one Arrow field once when a stream schema is bound. Runtime conversion then reuses this +// plan instead of rescanning extension metadata and nested fields for every array. +class LanceArrowArrayNormalizer { +public: + static Status create(const std::shared_ptr& field, + LanceArrowArrayNormalizer* normalizer); + + // Return an Arrow array whose physical layout and type can be consumed by Doris SerDes. The + // input is returned unchanged when no compaction or type adaptation is required. + Status normalize_for_doris(const std::shared_ptr& array, + arrow::MemoryPool* memory_pool, + std::shared_ptr* normalized) const; + +private: + std::string _field_name; + std::shared_ptr _storage_type; + std::vector _child_normalizers; + bool _unwrap_registered_extension = false; + bool _convert_bfloat16 = false; + bool _requires_special_handling = false; +}; + +#ifdef BE_TEST +// Expose Lance Arrow normalization for allocation-sensitive unit tests. +Status normalize_lance_arrow_array_for_test(const std::shared_ptr& field, + const std::shared_ptr& array, + std::shared_ptr* normalized, + arrow::MemoryPool* memory_pool = nullptr); +#endif + +// Convert every top-level field without discarding unsupported columns. Malformed schemas still +// return an error and leave both output vectors unchanged. DataTypeNothing is the local sentinel +// for a valid Arrow field whose logical type Doris does not support. +Status convert_arrow_schema_to_doris(const std::shared_ptr& arrow_schema, + std::vector* column_names, + std::vector* column_types); + +// The FE sends storage options in Lance's own vocabulary. Preserve the key-value sequence exactly +// while validating that every value can cross the C-string boundary into lance-c. +Status build_lance_storage_options(const TFileScanRangeParams* scan_params, + std::vector* options); + +// Copy and release lance-c's thread-local error message before returning a Doris status. +Status lance_error(std::string_view operation); + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_record_batch_converter.cpp b/be/src/format_v2/lance/lance_record_batch_converter.cpp new file mode 100644 index 00000000000000..7f0bf848a08dcd --- /dev/null +++ b/be/src/format_v2/lance/lance_record_batch_converter.cpp @@ -0,0 +1,261 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_record_batch_converter.h" + +#include +#include +#include +#include + +#include + +#include "common/consts.h" +#include "common/exception.h" +#include "core/block/block.h" +#include "core/column/column_nullable.h" +#include "core/column/column_string.h" +#include "core/data_type/data_type_nullable.h" +#include "format_v2/lance/lance_reader_helper.h" +#include "runtime/exec_env.h" +#include "runtime/runtime_state.h" +#include "storage/utils.h" + +namespace doris::format::lance { +namespace { + +constexpr size_t IGNORED_OUTPUT_INDEX = std::numeric_limits::max(); + +} // namespace + +arrow::MemoryPool* LanceRecordBatchConverter::_query_arrow_memory_pool( + RuntimeState* runtime_state) { + DORIS_CHECK(runtime_state != nullptr); + if (runtime_state->exec_env() != nullptr) { + if (auto* memory_pool = runtime_state->exec_env()->arrow_memory_pool(); + memory_pool != nullptr) { + return memory_pool; + } + } + return arrow::default_memory_pool(); +} + +Status LanceRecordBatchConverter::init(RuntimeState* runtime_state, + const std::vector& projected_columns, + SearchKind search_kind) { + DORIS_CHECK(runtime_state != nullptr); + _search_kind = search_kind; + _timezone = runtime_state->timezone_obj(); + _memory_pool = _query_arrow_memory_pool(runtime_state); + _output_columns.clear(); + _output_columns.reserve(projected_columns.size()); + _output_index_by_input_name.clear(); + _output_index_by_input_name.reserve(projected_columns.size()); + _global_rowid_output_index.reset(); + reset_schema(); + + for (const auto& column : projected_columns) { + if (column.type == nullptr) { + return Status::InvalidArgument("Lance projected column '{}' has no type", column.name); + } + if (column.name.starts_with(BeConsts::GLOBAL_ROWID_COL)) { + if (_search_kind == SearchKind::NORMAL) { + return Status::NotSupported( + "Lance global row id is currently supported only for external search"); + } + if (_global_rowid_output_index.has_value()) { + return Status::InvalidArgument("duplicate Lance global row id projected column: {}", + column.name); + } + if (remove_nullable(column.type)->get_primitive_type() != TYPE_STRING) { + return Status::InvalidArgument( + "Lance global row id column '{}' must have Doris STRING type, but was {}", + column.name, column.type->get_name()); + } + _global_rowid_output_index = _output_columns.size(); + // Lance returns the native `_rowid`, while Doris exposes it through a generated + // global-rowid column. One input column cannot also satisfy a regular `_rowid` + // projection, so reject an existing binding instead of silently replacing it. + if (!_output_index_by_input_name + .emplace(LANCE_ROW_ID_COLUMN, *_global_rowid_output_index) + .second) { + return Status::InvalidArgument( + "Lance global row id cannot be combined with projected column '{}'", + LANCE_ROW_ID_COLUMN); + } + _output_columns.push_back({column.name, nullptr}); + continue; + } + const auto output_index = _output_columns.size(); + if (!_output_index_by_input_name.emplace(column.name, output_index).second) { + return Status::InvalidArgument("duplicate Lance projected column: {}", column.name); + } + if (_search_kind == SearchKind::VECTOR && column.name == LANCE_DISTANCE_COLUMN && + remove_nullable(column.type)->get_primitive_type() != TYPE_FLOAT) { + return Status::InvalidArgument( + "Lance vector search column '{}' must have Doris FLOAT type, but was {}", + LANCE_DISTANCE_COLUMN, column.type->get_name()); + } + if (_search_kind == SearchKind::FULL_TEXT && column.name == LANCE_SCORE_COLUMN && + remove_nullable(column.type)->get_primitive_type() != TYPE_FLOAT) { + return Status::InvalidArgument( + "Lance full-text search column '{}' must have Doris FLOAT type, but was {}", + LANCE_SCORE_COLUMN, column.type->get_name()); + } + _output_columns.push_back({column.name, column.type->get_serde()}); + } + return Status::OK(); +} + +Status LanceRecordBatchConverter::_bind_schema(const std::shared_ptr& schema) { + DORIS_CHECK(schema != nullptr); + if (_bound_schema == schema || + (_bound_schema != nullptr && _bound_schema->Equals(*schema, true))) { + return Status::OK(); + } + + std::vector arrow_column_to_output(static_cast(schema->num_fields()), + IGNORED_OUTPUT_INDEX); + std::vector array_normalizer_for_arrow_column( + static_cast(schema->num_fields())); + std::vector output_has_source_column(_output_columns.size(), false); + for (int arrow_index = 0; arrow_index < schema->num_fields(); ++arrow_index) { + const auto& field = schema->field(arrow_index); + const auto output = _output_index_by_input_name.find(field->name()); + if (output == _output_index_by_input_name.end()) { + const bool is_omitted_search_result = + (_search_kind == SearchKind::VECTOR && + field->name() == LANCE_DISTANCE_COLUMN) || + (_search_kind == SearchKind::FULL_TEXT && field->name() == LANCE_SCORE_COLUMN); + // Lance may return this generated result even when Doris did not project it. + if (is_omitted_search_result) { + continue; + } + return Status::InternalError("Lance returned unknown column '{}'", field->name()); + } + const auto output_index = output->second; + if (output_has_source_column[output_index]) { + return Status::InternalError("Lance returned duplicate column '{}'", field->name()); + } + output_has_source_column[output_index] = true; + arrow_column_to_output[arrow_index] = output_index; + RETURN_IF_ERROR(LanceArrowArrayNormalizer::create( + field, &array_normalizer_for_arrow_column[static_cast(arrow_index)])); + } + for (size_t output_index = 0; output_index < _output_columns.size(); ++output_index) { + if (!output_has_source_column[output_index]) { + return Status::InternalError("Lance did not return requested column '{}'", + _output_columns[output_index].name); + } + } + _bound_schema = schema; + _arrow_column_to_output_index = std::move(arrow_column_to_output); + _array_normalizer_for_arrow_column = std::move(array_normalizer_for_arrow_column); + return Status::OK(); +} + +Status LanceRecordBatchConverter::convert_record_batch_to_block( + const std::shared_ptr& record_batch, Block* block, + const std::optional& global_rowid_context, size_t* rows) { + DORIS_CHECK(record_batch != nullptr); + DORIS_CHECK(block != nullptr); + DORIS_CHECK(rows != nullptr); + RETURN_IF_ERROR(_bind_schema(record_batch->schema())); + + const auto row_count = static_cast(record_batch->num_rows()); + auto columns_guard = block->mutate_columns_scoped(); + auto& columns = columns_guard.mutable_columns(); + for (int arrow_index = 0; arrow_index < record_batch->num_columns(); ++arrow_index) { + const auto output_index = _arrow_column_to_output_index[static_cast(arrow_index)]; + if (output_index == IGNORED_OUTPUT_INDEX) { + continue; + } + const auto& output = _output_columns[output_index]; + const auto& arrow_column = record_batch->column(arrow_index); + if (is_global_rowid_output(output_index)) { + if (!global_rowid_context.has_value()) { + return Status::InvalidArgument( + "Lance global row id requested without global row id context"); + } + RETURN_IF_ERROR(_append_global_row_ids(arrow_column, columns[output_index], + *global_rowid_context)); + continue; + } + const auto& field = record_batch->schema()->field(arrow_index); + try { + if (arrow_column->type_id() == arrow::Type::NA) { + columns[output_index]->insert_many_defaults(row_count); + continue; + } + std::shared_ptr normalized_column; + RETURN_IF_ERROR( + _array_normalizer_for_arrow_column[static_cast(arrow_index)] + .normalize_for_doris(arrow_column, _memory_pool, &normalized_column)); + RETURN_IF_ERROR(output.serde->read_column_from_arrow( + *columns[output_index], normalized_column.get(), 0, row_count, _timezone)); + } catch (const Exception& e) { + return Status::InternalError("convert Lance Arrow column '{}' failed: {}", + field->name(), e.what()); + } + } + *rows = row_count; + return Status::OK(); +} + +void LanceRecordBatchConverter::reset_schema() { + _bound_schema.reset(); + _arrow_column_to_output_index.clear(); + _array_normalizer_for_arrow_column.clear(); +} + +Status LanceRecordBatchConverter::_append_global_row_ids( + const std::shared_ptr& row_ids, MutableColumnPtr& output_column, + const GlobalRowIdContext& context) const { + if (row_ids->type_id() != arrow::Type::UINT64) { + return Status::InternalError("Lance row id column must be Arrow UINT64, but was {}", + row_ids->type()->ToString()); + } + + ColumnString* data_column = nullptr; + ColumnUInt8::Container* null_map = nullptr; + if (auto* nullable = check_and_get_column(*output_column)) { + data_column = check_and_get_column(nullable->get_nested_column()); + null_map = &nullable->get_null_map_data(); + } else { + data_column = check_and_get_column(*output_column); + } + if (data_column == nullptr) { + return Status::InternalError("Lance global row id output column must be STRING"); + } + + const auto typed_row_ids = std::static_pointer_cast(row_ids); + if (typed_row_ids->null_count() != 0) { + return Status::InternalError("Lance returned null row id"); + } + const auto row_count = static_cast(typed_row_ids->length()); + if (null_map != nullptr) { + null_map->resize_fill(null_map->size() + row_count, 0); + } + for (size_t row = 0; row < row_count; ++row) { + const GlobalRowLoacationV2 location(ROW_VERSION::LANCE_DATASET_ROW_ID, context.backend_id, + context.file_id, typed_row_ids->Value(row)); + data_column->insert_data(reinterpret_cast(&location), sizeof(location)); + } + return Status::OK(); +} + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_record_batch_converter.h b/be/src/format_v2/lance/lance_record_batch_converter.h new file mode 100644 index 00000000000000..69ebd4618a9e30 --- /dev/null +++ b/be/src/format_v2/lance/lance_record_batch_converter.h @@ -0,0 +1,91 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +#include "common/status.h" +#include "core/data_type_serde/data_type_serde.h" +#include "format_v2/lance/lance_reader_helper.h" +#include "format_v2/table_reader.h" + +namespace arrow { +class Array; +class MemoryPool; +class RecordBatch; +class Schema; +} // namespace arrow + +namespace doris { +class RuntimeState; +} + +namespace doris::format::lance { + +enum class SearchKind { NORMAL, VECTOR, FULL_TEXT }; + +// Bridges one Lance Arrow record-batch stream into an existing Doris Block. It owns the stable +// output-column metadata and lazily binds an incoming Arrow schema once, so ordinary batches only +// perform positional conversion. Each Arrow stream has an independent schema binding. +class LanceRecordBatchConverter { +public: + Status init(RuntimeState* runtime_state, const std::vector& projected_columns, + SearchKind search_kind); + + Status convert_record_batch_to_block( + const std::shared_ptr& record_batch, Block* block, + const std::optional& global_rowid_context, size_t* rows); + + bool requires_global_rowid() const { return _global_rowid_output_index.has_value(); } + bool is_global_rowid_output(size_t output_index) const { + return _global_rowid_output_index.has_value() && + *_global_rowid_output_index == output_index; + } + void reset_schema(); + +private: + struct OutputColumn { + std::string name; + DataTypeSerDeSPtr serde; + }; + + static arrow::MemoryPool* _query_arrow_memory_pool(RuntimeState* runtime_state); + Status _bind_schema(const std::shared_ptr& schema); + Status _append_global_row_ids(const std::shared_ptr& row_ids, + MutableColumnPtr& output_column, + const GlobalRowIdContext& context) const; + + SearchKind _search_kind = SearchKind::NORMAL; + cctz::time_zone _timezone; + arrow::MemoryPool* _memory_pool = nullptr; + std::vector _output_columns; + std::unordered_map _output_index_by_input_name; + std::optional _global_rowid_output_index; + std::shared_ptr _bound_schema; + std::vector _arrow_column_to_output_index; + std::vector _array_normalizer_for_arrow_column; +}; + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_runtime_filter_helper.cpp b/be/src/format_v2/lance/lance_runtime_filter_helper.cpp new file mode 100644 index 00000000000000..d72a98bb8d947b --- /dev/null +++ b/be/src/format_v2/lance/lance_runtime_filter_helper.cpp @@ -0,0 +1,537 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_runtime_filter_helper.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common/logging.h" +#include "core/data_type/data_type_nullable.h" +#include "core/field.h" +#include "exprs/hybrid_set.h" +#include "exprs/runtime_filter_expr.h" +#include "exprs/vdirect_in_predicate.h" +#include "exprs/vexpr_context.h" +#include "exprs/vliteral.h" +#include "exprs/vslot_ref.h" +#include "format/format_common.h" +#include "runtime/runtime_profile.h" +#include "util/utf8_check.h" + +namespace doris::format::lance { +namespace { + +constexpr std::string_view LANCE_RUNTIME_FILTER_CACHE_KEY_PREFIX = "lance-runtime-filter-sql:"; + +std::string format_filter_ids(const std::vector& filter_ids) { + std::string result; + for (const auto filter_id : filter_ids) { + if (!result.empty()) { + result.append(","); + } + result.append(std::to_string(filter_id)); + } + return result; +} + +std::string quote_sql_identifier(std::string_view identifier) { + // Lance SQL uses backticks for delimited identifiers. Escape an embedded backtick by doubling + // it, matching the SQL parser's quoted-identifier syntax. + std::string quoted("`"); + quoted.reserve(identifier.size() + 2); + for (const char ch : identifier) { + if (ch == '`') { + quoted.append("``"); + } else { + quoted.push_back(ch); + } + } + quoted.push_back('`'); + return quoted; +} + +const RuntimeFilterExpr* get_runtime_filter(const VExprContextSPtr& conjunct) { + if (conjunct == nullptr || conjunct->root() == nullptr) { + return nullptr; + } + return dynamic_cast(conjunct->root().get()); +} + +std::string lowercase_ascii(std::string value) { + std::ranges::transform(value, value.begin(), [](const unsigned char ch) { + return static_cast(std::tolower(ch)); + }); + return value; +} + +std::string quote_string_value(std::string_view value) { + std::string quoted("'"); + quoted.reserve(value.size() + 2); + for (const char ch : value) { + if (ch == '\'') { + quoted.append("''"); + } else { + quoted.push_back(ch); + } + } + quoted.push_back('\''); + return quoted; +} + +std::shared_ptr find_unique_physical_type(const arrow::Schema& schema, + std::string_view column_name) { + const auto fields = schema.GetAllFieldsByName(column_name); + return fields.size() == 1 ? fields.front()->type() : nullptr; +} + +std::optional parse_int64(std::string_view value) { + int64_t parsed = 0; + const auto* begin = value.data(); + const auto* end = begin + value.size(); + const auto result = std::from_chars(begin, end, parsed); + if (result.ec != std::errc() || result.ptr != end) { + return std::nullopt; + } + return parsed; +} + +bool integer_literal_fits_decimal_precision(std::string_view value, int32_t precision) { + if (!value.empty() && (value.front() == '-' || value.front() == '+')) { + value.remove_prefix(1); + } + const auto first_nonzero = value.find_first_not_of('0'); + if (first_nonzero == std::string_view::npos) { + return true; + } + return value.size() - first_nonzero <= static_cast(precision); +} + +// This checks Lance planner coercion, not whether stored Lance values fit their own Arrow type. +// Unsigned Arrow columns map to wider signed Doris types (for example UInt8 -> SMALLINT), so an RF +// produced from another input may contain a valid Doris value that cannot be coerced back to the +// narrower physical type. +bool integer_literal_fits_physical_type(std::string_view value, + const arrow::DataType& physical_type) { + const auto parsed = parse_int64(value); + if (!parsed.has_value()) { + return false; + } + const auto literal = *parsed; + switch (physical_type.id()) { + case arrow::Type::INT8: + return literal >= std::numeric_limits::min() && + literal <= std::numeric_limits::max(); + case arrow::Type::UINT8: + return literal >= 0 && literal <= std::numeric_limits::max(); + case arrow::Type::INT16: + return literal >= std::numeric_limits::min() && + literal <= std::numeric_limits::max(); + case arrow::Type::UINT16: + return literal >= 0 && literal <= std::numeric_limits::max(); + case arrow::Type::INT32: + return literal >= std::numeric_limits::min() && + literal <= std::numeric_limits::max(); + case arrow::Type::UINT32: + return literal >= 0 && literal <= std::numeric_limits::max(); + case arrow::Type::INT64: + return true; + case arrow::Type::UINT64: + // The pinned Lance SQL parser first parses a bare integer as i64. Values above INT64_MAX + // become Float64, which cannot be safely coerced to UInt64. + return literal >= 0; + default: + return false; + } +} + +bool physical_type_supports_literal(PrimitiveType logical_type, std::string_view value, + const arrow::DataType& physical_type) { + switch (logical_type) { + case TYPE_BOOLEAN: + return physical_type.id() == arrow::Type::BOOL; + case TYPE_TINYINT: + case TYPE_SMALLINT: + case TYPE_INT: + case TYPE_BIGINT: + case TYPE_LARGEINT: + return integer_literal_fits_physical_type(value, physical_type); + case TYPE_FLOAT: + // Arrow HALF_FLOAT and FLOAT both materialize as Doris FLOAT, but the pinned Lance planner + // cannot coerce an SQL Int64/Float64 literal to Float16. + return physical_type.id() == arrow::Type::FLOAT; + case TYPE_DOUBLE: + return physical_type.id() == arrow::Type::DOUBLE; + case TYPE_DECIMALV2: + case TYPE_DECIMAL32: + case TYPE_DECIMAL64: + case TYPE_DECIMAL128I: + case TYPE_DECIMAL256: { + if (physical_type.id() != arrow::Type::DECIMAL128 && + physical_type.id() != arrow::Type::DECIMAL256) { + return false; + } + const auto& decimal = static_cast(physical_type); + // A scale-bearing bare SQL token is parsed as Float64, which the pinned planner cannot + // coerce to Decimal. Scale-zero values are safe only while they parse exactly as i64. + return decimal.scale() == 0 && parse_int64(value).has_value() && + integer_literal_fits_decimal_precision(value, decimal.precision()); + } + case TYPE_CHAR: + case TYPE_VARCHAR: + case TYPE_STRING: + return (physical_type.id() == arrow::Type::STRING || + physical_type.id() == arrow::Type::LARGE_STRING) && + value.find('\0') == std::string_view::npos && + validate_utf8(value.data(), value.size()); + case TYPE_DATE: + case TYPE_DATEV2: + // Date64 is only specified to contain a millisecond count that should be day-aligned. + // Doris materialization discards any sub-day remainder, so only Date32 is unconditionally + // comparison-equivalent. + return physical_type.id() == arrow::Type::DATE32; + case TYPE_DATETIME: + case TYPE_DATETIMEV2: { + if (physical_type.id() != arrow::Type::TIMESTAMP) { + return false; + } + const auto& timestamp = static_cast(physical_type); + // Doris DATETIMEV2 stores at most microseconds, so a nanosecond predicate is not equivalent + // to evaluating the residual after Arrow-to-Doris materialization. + return timestamp.timezone().empty() && timestamp.unit() != arrow::TimeUnit::NANO; + } + default: + return false; + } +} + +std::optional to_lance_sql_literal(const VLiteral& literal, + const arrow::DataType& physical_type) { + const auto type = remove_nullable(literal.get_data_type()); + auto options = DataTypeSerDe::get_default_format_options(); + auto timezone = cctz::utc_time_zone(); + options.timezone = &timezone; + const auto value = literal.value(options); + if (!physical_type_supports_literal(type->get_primitive_type(), value, physical_type)) { + // The SQL literal would either fail Lance planning or compare different physical values + // from the Doris residual. Keep the RF residual-only in either case. + return std::nullopt; + } + switch (type->get_primitive_type()) { + case TYPE_BOOLEAN: { + const auto normalized = lowercase_ascii(value); + if (normalized == "0" || normalized == "false") { + return "FALSE"; + } + if (normalized == "1" || normalized == "true") { + return "TRUE"; + } + // Do not pass an implementation-specific boolean spelling through to Lance SQL. + return std::nullopt; + } + case TYPE_TINYINT: + case TYPE_SMALLINT: + case TYPE_INT: + case TYPE_BIGINT: + case TYPE_LARGEINT: + return value; + case TYPE_FLOAT: + case TYPE_DOUBLE: { + const auto normalized = lowercase_ascii(value); + if (normalized.find("nan") != std::string::npos || + normalized.find("inf") != std::string::npos) { + // Lance SQL has no portable scalar spelling with Doris-equivalent NaN/Inf semantics. + return std::nullopt; + } + return value; + } + case TYPE_DECIMALV2: + case TYPE_DECIMAL32: + case TYPE_DECIMAL64: + case TYPE_DECIMAL128I: + case TYPE_DECIMAL256: + return value; + case TYPE_CHAR: + case TYPE_VARCHAR: + case TYPE_STRING: + return quote_string_value(value); + case TYPE_DATE: + case TYPE_DATEV2: + return "DATE " + quote_string_value(value); + case TYPE_DATETIME: + case TYPE_DATETIMEV2: + return "TIMESTAMP " + quote_string_value(value); + default: + return std::nullopt; + } +} + +template +std::optional in_value_to_lance_sql_literal(const void* raw_value, + const DataTypePtr& data_type, + const arrow::DataType& physical_type) { + if (raw_value == nullptr || data_type == nullptr) { + // A null set entry needs SQL three-valued semantics and cannot be serialized as a scalar. + return std::nullopt; + } + Field field; + if constexpr (is_string_type(PT)) { + const auto* value = static_cast(raw_value); + using CppType = typename PrimitiveTypeTraits::CppType; + field = Field::create_field(CppType(value->data, value->size)); + } else { + using CppType = typename PrimitiveTypeTraits::CppType; + field = Field::create_field(*static_cast(raw_value)); + } + return to_lance_sql_literal(VLiteral(data_type, field), physical_type); +} + +std::optional in_value_to_lance_sql_literal(PrimitiveType primitive_type, + const void* raw_value, + const DataTypePtr& data_type, + const arrow::DataType& physical_type) { +#define DISPATCH_IN_VALUE(TYPE) \ + case TYPE: \ + return in_value_to_lance_sql_literal(raw_value, data_type, physical_type) + switch (primitive_type) { + DISPATCH_IN_VALUE(TYPE_BOOLEAN); + DISPATCH_IN_VALUE(TYPE_TINYINT); + DISPATCH_IN_VALUE(TYPE_SMALLINT); + DISPATCH_IN_VALUE(TYPE_INT); + DISPATCH_IN_VALUE(TYPE_BIGINT); + DISPATCH_IN_VALUE(TYPE_LARGEINT); + DISPATCH_IN_VALUE(TYPE_FLOAT); + DISPATCH_IN_VALUE(TYPE_DOUBLE); + DISPATCH_IN_VALUE(TYPE_DATE); + DISPATCH_IN_VALUE(TYPE_DATETIME); + DISPATCH_IN_VALUE(TYPE_DATEV2); + DISPATCH_IN_VALUE(TYPE_DATETIMEV2); + DISPATCH_IN_VALUE(TYPE_CHAR); + DISPATCH_IN_VALUE(TYPE_VARCHAR); + DISPATCH_IN_VALUE(TYPE_STRING); + DISPATCH_IN_VALUE(TYPE_DECIMALV2); + DISPATCH_IN_VALUE(TYPE_DECIMAL32); + DISPATCH_IN_VALUE(TYPE_DECIMAL64); + DISPATCH_IN_VALUE(TYPE_DECIMAL128I); + DISPATCH_IN_VALUE(TYPE_DECIMAL256); + default: + return std::nullopt; + } +#undef DISPATCH_IN_VALUE +} + +std::optional build_in_filter_sql(const VDirectInPredicate& predicate, + const arrow::Schema& physical_schema) { + if (predicate.get_num_children() != 1) { + return std::nullopt; + } + const auto slot = std::dynamic_pointer_cast(predicate.get_child(0)); + const auto values = predicate.get_set_func(); + if (slot == nullptr || slot->data_type() == nullptr || values == nullptr) { + // Only a direct slot-backed IN set has a stable Lance column/literal representation. + return std::nullopt; + } + if (values->contain_null()) { + // Dropping NULL would change the Doris IN-filter semantics. + return std::nullopt; + } + + const auto data_type = remove_nullable(slot->data_type()); + const auto physical_type = find_unique_physical_type(physical_schema, slot->column_name()); + if (physical_type == nullptr) { + // A missing or ambiguous top-level field cannot be bound safely by column name. + return std::nullopt; + } + std::string expression("(" + quote_sql_identifier(slot->column_name()) + " IN ("); + auto* iterator = values->begin(); + bool first_value = true; + while (iterator != nullptr && iterator->has_next()) { + auto value = in_value_to_lance_sql_literal( + data_type->get_primitive_type(), iterator->get_value(), data_type, *physical_type); + if (!value.has_value()) { + // Partially pushing an IN set would introduce false negatives, so reject it as a unit. + return std::nullopt; + } + if (!first_value) { + expression.append(", "); + } + expression.append(*value); + first_value = false; + iterator->next(); + } + if (first_value) { + // An empty IN set has no direct Lance SQL representation. + return std::nullopt; + } + expression.append("))"); + return expression; +} + +std::optional build_range_filter_sql(const VExpr& predicate, + const arrow::Schema& physical_schema) { + if ((predicate.op() != TExprOpcode::GE && predicate.op() != TExprOpcode::LE) || + predicate.get_num_children() != 2) { + return std::nullopt; + } + const auto slot = std::dynamic_pointer_cast(predicate.get_child(0)); + const auto literal = std::dynamic_pointer_cast(predicate.get_child(1)); + if (slot == nullptr || literal == nullptr) { + // Computed operands are intentionally left to Doris instead of reconstructing expression + // SQL. + return std::nullopt; + } + const auto physical_type = find_unique_physical_type(physical_schema, slot->column_name()); + if (physical_type == nullptr) { + // A missing or ambiguous top-level field cannot be bound safely by column name. + return std::nullopt; + } + const auto sql_literal = to_lance_sql_literal(*literal, *physical_type); + if (!sql_literal.has_value()) { + // Preserve the Doris residual when its bound has no proven-equivalent physical literal. + return std::nullopt; + } + const auto* sql_operator = predicate.op() == TExprOpcode::GE ? ">=" : "<="; + return "(" + quote_sql_identifier(slot->column_name()) + " " + sql_operator + " " + + *sql_literal + ")"; +} + +std::optional runtime_filter_to_lance_sql(const RuntimeFilterExpr& runtime_filter, + const arrow::Schema& physical_schema) { + if (runtime_filter.is_null_aware()) { + // Doris restores probe NULLs to true for null-aware wrappers; ordinary Lance comparisons + // would discard those rows before the residual can restore them. + return std::nullopt; + } + const auto impl = runtime_filter.get_impl(); + if (impl == nullptr) { + // A published wrapper without an implementation has nothing safe to translate. + return std::nullopt; + } + if (const auto* in_predicate = dynamic_cast(impl.get()); + in_predicate != nullptr) { + return build_in_filter_sql(*in_predicate, physical_schema); + } + return build_range_filter_sql(*impl, physical_schema); +} + +std::shared_ptr build_runtime_filter_sql( + const VExprContextSPtrs& conjuncts, const arrow::Schema& physical_schema) { + auto result = std::make_shared(); + std::set seen_filter_ids; + std::set pushed_filter_ids; + for (const auto& conjunct : conjuncts) { + const auto* runtime_filter = get_runtime_filter(conjunct); + if (runtime_filter == nullptr) { + continue; + } + const auto filter_id = runtime_filter->filter_id(); + seen_filter_ids.emplace(filter_id); + + const auto expression = runtime_filter_to_lance_sql(*runtime_filter, physical_schema); + if (!expression.has_value()) { + continue; + } + if (!result->expression.empty()) { + result->expression.append(" AND "); + } + result->expression.append(*expression); + pushed_filter_ids.emplace(filter_id); + } + + result->pushable_filter_ids.assign(pushed_filter_ids.begin(), pushed_filter_ids.end()); + for (const auto filter_id : seen_filter_ids) { + if (!pushed_filter_ids.contains(filter_id)) { + result->skipped_filter_ids.emplace_back(filter_id); + } + } + return result; +} + +std::optional build_cache_key(const VExprContextSPtrs& conjuncts) { + // This cache is scoped to one FileScanLocalState. An RF is immutable after it is published, so + // its sorted IDs identify the snapshot shared by parallel readers. + std::set filter_ids; + for (const auto& conjunct : conjuncts) { + if (const auto* runtime_filter = get_runtime_filter(conjunct); runtime_filter != nullptr) { + filter_ids.emplace(runtime_filter->filter_id()); + } + } + if (filter_ids.empty()) { + // Avoid allocating a cache entry for conjunct snapshots that contain no runtime filters. + return std::nullopt; + } + + std::string key(LANCE_RUNTIME_FILTER_CACHE_KEY_PREFIX); + for (const auto filter_id : filter_ids) { + key.append(std::to_string(filter_id)).append(","); + } + return key; +} + +} // namespace + +bool has_lance_runtime_filters(const VExprContextSPtrs& conjuncts) { + return std::ranges::any_of(conjuncts, [](const auto& conjunct) { + return get_runtime_filter(conjunct) != nullptr; + }); +} + +std::shared_ptr get_or_create_lance_runtime_filter_sql( + const VExprContextSPtrs& conjuncts, const arrow::Schema& physical_schema, + ShardedKVCache* cache) { + const auto cache_key = build_cache_key(conjuncts); + if (!cache_key.has_value()) { + return nullptr; + } + if (cache == nullptr) { + return build_runtime_filter_sql(conjuncts, physical_schema); + } + + auto* cached = cache->get>( + *cache_key, [&]() -> std::shared_ptr* { + return new std::shared_ptr( + build_runtime_filter_sql(conjuncts, physical_schema)); + }); + return cached == nullptr ? nullptr : *cached; +} + +void record_lance_runtime_filter_pushdown(RuntimeProfile* profile, + const LanceRuntimeFilterSql& runtime_filter_sql) { + DORIS_CHECK(profile != nullptr); + const auto pushed_ids = format_filter_ids(runtime_filter_sql.pushable_filter_ids); + const auto skipped_ids = format_filter_ids(runtime_filter_sql.skipped_filter_ids); + + if (!pushed_ids.empty()) { + profile->add_info_string("LanceRuntimeFilterPushedIds", pushed_ids); + } + if (!skipped_ids.empty()) { + profile->add_info_string("LanceRuntimeFilterSkippedIds", skipped_ids); + } + VLOG_DEBUG << "Lance runtime filter pushdown: pushed_ids=[" << pushed_ids << "], skipped_ids=[" + << skipped_ids << "]"; +} + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_runtime_filter_helper.h b/be/src/format_v2/lance/lance_runtime_filter_helper.h new file mode 100644 index 00000000000000..40529951ccc7c8 --- /dev/null +++ b/be/src/format_v2/lance/lance_runtime_filter_helper.h @@ -0,0 +1,59 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include +#include +#include + +#include "exprs/vexpr_fwd.h" + +namespace arrow { +class Schema; +} + +namespace doris { + +class ShardedKVCache; +class RuntimeProfile; + +namespace format::lance { + +struct LanceRuntimeFilterSql { + std::string expression; + std::vector pushable_filter_ids; + std::vector skipped_filter_ids; +}; + +// Return whether the conjunct list contains at least one Doris runtime filter. This lets callers +// avoid importing Lance's physical Arrow schema when no runtime-filter SQL can be produced. +bool has_lance_runtime_filters(const VExprContextSPtrs& conjuncts); + +// Build one immutable SQL snapshot for all supported Doris runtime filters. When cache is non-null, +// equivalent RF snapshots from parallel Lance readers in the same FileScanLocalState share the +// conversion result. The returned snapshot also identifies RFs that cannot be represented exactly +// by Lance SQL. A null result means that conjuncts contain no Doris runtime filter. +std::shared_ptr get_or_create_lance_runtime_filter_sql( + const VExprContextSPtrs& conjuncts, const arrow::Schema& physical_schema, + ShardedKVCache* cache); + +void record_lance_runtime_filter_pushdown(RuntimeProfile* profile, + const LanceRuntimeFilterSql& runtime_filter_sql); + +} // namespace format::lance +} // namespace doris diff --git a/be/src/format_v2/lance/lance_session_manager.cpp b/be/src/format_v2/lance/lance_session_manager.cpp new file mode 100644 index 00000000000000..884eb5db18c5e7 --- /dev/null +++ b/be/src/format_v2/lance/lance_session_manager.cpp @@ -0,0 +1,239 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_session_manager.h" + +#include + +#include +#include +#include +#include +#include + +#include "common/config.h" +#include "common/logging.h" +#include "common/metrics/doris_metrics.h" +#include "common/metrics/metrics.h" +#include "format_v2/lance/lance_reader_helper.h" + +namespace doris::format::lance { +namespace { + +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_index_cache_capacity_bytes, MetricUnit::BYTES); +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_index_cache_usage_bytes, MetricUnit::BYTES); +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_index_cache_entries, MetricUnit::NOUNIT); +DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(lance_session_index_cache_hits_total, MetricUnit::OPERATIONS); +DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(lance_session_index_cache_misses_total, + MetricUnit::OPERATIONS); +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_metadata_cache_capacity_bytes, MetricUnit::BYTES); +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_metadata_cache_usage_bytes, MetricUnit::BYTES); +DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(lance_session_metadata_cache_entries, MetricUnit::NOUNIT); +DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(lance_session_metadata_cache_hits_total, + MetricUnit::OPERATIONS); +DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(lance_session_metadata_cache_misses_total, + MetricUnit::OPERATIONS); + +constexpr std::string_view LANCE_SESSION_CACHE_METRICS_HOOK = "lance_session_cache"; + +int64_t metric_value(uint64_t value) { + return static_cast( + std::min(value, static_cast(std::numeric_limits::max()))); +} + +LanceSessionManager::Config load_lance_session_config() { + return { + .lance_index_cache_size_bytes = config::lance_index_cache_size_bytes, + .lance_metadata_cache_size_bytes = config::lance_metadata_cache_size_bytes, + .enable_lance_data_cache = config::enable_lance_data_cache, + .lance_data_cache_path = config::lance_data_cache_path, + .lance_data_cache_disk_capacity_bytes = config::lance_data_cache_disk_capacity_bytes, + .lance_data_cache_read_block_size_bytes = + config::lance_data_cache_read_block_size_bytes, + }; +} + +} // namespace + +class LanceSessionMetrics final { +public: + LanceSessionMetrics(LanceSession* session, const LanceSessionManager::Config& config) + : _session(session), _entity(DorisMetrics::instance()->server_entity()) { + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_index_cache_capacity_bytes); + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_index_cache_usage_bytes); + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_index_cache_entries); + INT_COUNTER_METRIC_REGISTER(_entity, lance_session_index_cache_hits_total); + INT_COUNTER_METRIC_REGISTER(_entity, lance_session_index_cache_misses_total); + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_metadata_cache_capacity_bytes); + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_metadata_cache_usage_bytes); + INT_GAUGE_METRIC_REGISTER(_entity, lance_session_metadata_cache_entries); + INT_COUNTER_METRIC_REGISTER(_entity, lance_session_metadata_cache_hits_total); + INT_COUNTER_METRIC_REGISTER(_entity, lance_session_metadata_cache_misses_total); + + lance_session_index_cache_capacity_bytes->set_value(config.lance_index_cache_size_bytes); + lance_session_metadata_cache_capacity_bytes->set_value( + config.lance_metadata_cache_size_bytes); + _entity->register_hook(std::string(LANCE_SESSION_CACHE_METRICS_HOOK), + [this]() { update(); }); + update(); + } + + ~LanceSessionMetrics() { + _entity->deregister_hook(std::string(LANCE_SESSION_CACHE_METRICS_HOOK)); + METRIC_DEREGISTER(_entity, lance_session_index_cache_capacity_bytes); + METRIC_DEREGISTER(_entity, lance_session_index_cache_usage_bytes); + METRIC_DEREGISTER(_entity, lance_session_index_cache_entries); + METRIC_DEREGISTER(_entity, lance_session_index_cache_hits_total); + METRIC_DEREGISTER(_entity, lance_session_index_cache_misses_total); + METRIC_DEREGISTER(_entity, lance_session_metadata_cache_capacity_bytes); + METRIC_DEREGISTER(_entity, lance_session_metadata_cache_usage_bytes); + METRIC_DEREGISTER(_entity, lance_session_metadata_cache_entries); + METRIC_DEREGISTER(_entity, lance_session_metadata_cache_hits_total); + METRIC_DEREGISTER(_entity, lance_session_metadata_cache_misses_total); + } + +private: + void update() { + // Session caches are shared across queries, so publish one process-wide snapshot instead + // of attributing concurrent cache activity to an individual query profile. + LanceSessionCacheStats stats {}; + if (lance_session_get_cache_stats(_session, &stats) != 0) { + LOG_EVERY_N(WARNING, 100) + << lance_error("collect Lance session cache statistics").to_string(); + return; + } + lance_session_index_cache_usage_bytes->set_value( + metric_value(stats.index_cache_size_bytes)); + lance_session_index_cache_entries->set_value(metric_value(stats.index_cache_entries)); + lance_session_index_cache_hits_total->set_value(metric_value(stats.index_cache_hits)); + lance_session_index_cache_misses_total->set_value(metric_value(stats.index_cache_misses)); + lance_session_metadata_cache_usage_bytes->set_value( + metric_value(stats.metadata_cache_size_bytes)); + lance_session_metadata_cache_entries->set_value(metric_value(stats.metadata_cache_entries)); + lance_session_metadata_cache_hits_total->set_value(metric_value(stats.metadata_cache_hits)); + lance_session_metadata_cache_misses_total->set_value( + metric_value(stats.metadata_cache_misses)); + } + + LanceSession* _session; + MetricEntity* _entity; + IntGauge* lance_session_index_cache_capacity_bytes = nullptr; + IntGauge* lance_session_index_cache_usage_bytes = nullptr; + IntGauge* lance_session_index_cache_entries = nullptr; + IntCounter* lance_session_index_cache_hits_total = nullptr; + IntCounter* lance_session_index_cache_misses_total = nullptr; + IntGauge* lance_session_metadata_cache_capacity_bytes = nullptr; + IntGauge* lance_session_metadata_cache_usage_bytes = nullptr; + IntGauge* lance_session_metadata_cache_entries = nullptr; + IntCounter* lance_session_metadata_cache_hits_total = nullptr; + IntCounter* lance_session_metadata_cache_misses_total = nullptr; +}; + +LanceSessionManager& LanceSessionManager::instance() { + // Function-local static initialization is thread safe. Cache configuration is process scoped, + // so changing it requires a BE restart. + static LanceSessionManager manager(load_lance_session_config()); + return manager; +} + +LanceSessionManager::LanceSessionManager(Config config) : _config(std::move(config)) { + LOG(INFO) << "Creating BE-wide Lance session manager: lance_index_cache_size_bytes=" + << _config.lance_index_cache_size_bytes + << ", lance_metadata_cache_size_bytes=" << _config.lance_metadata_cache_size_bytes + << ", enable_lance_data_cache=" << _config.enable_lance_data_cache + << ", lance_data_cache_path=" << _config.lance_data_cache_path + << ", lance_data_cache_disk_capacity_bytes=" + << _config.lance_data_cache_disk_capacity_bytes + << ", lance_data_cache_read_block_size_bytes=" + << _config.lance_data_cache_read_block_size_bytes + << ", foyer_memory_capacity_bytes=" << _config.lance_data_cache_read_block_size_bytes; +} + +LanceSessionManager::~LanceSessionManager() { + _metrics.reset(); + lance_session_close(_session); +} + +Status LanceSessionManager::_initialize() { + if (_config.enable_lance_data_cache) { + // Treat the configured cache mode as a process-level requirement. If an enabled + // data cache cannot initialize, report the failure instead of silently creating a + // session without it. This keeps directory/configuration/device failures visible + // to the operator. Disabling the cache is an explicit configuration change. + const LanceDataCacheOptions data_cache_options { + .directory = _config.lance_data_cache_path.c_str(), + // Foyer's HybridCache requires a memory tier. Keep it at the minimum useful + // capacity of exactly one range-cache block; WriteOnInsertion enqueues disk + // writes on insertion rather than waiting for memory-tier eviction. + .memory_capacity_bytes = + static_cast(_config.lance_data_cache_read_block_size_bytes), + .disk_capacity_bytes = + static_cast(_config.lance_data_cache_disk_capacity_bytes), + .read_block_size_bytes = + static_cast(_config.lance_data_cache_read_block_size_bytes), + }; + _session = lance_session_new_with_data_cache( + static_cast(_config.lance_index_cache_size_bytes), + static_cast(_config.lance_metadata_cache_size_bytes), + &data_cache_options); + } else { + _session = + lance_session_new(static_cast(_config.lance_index_cache_size_bytes), + static_cast(_config.lance_metadata_cache_size_bytes)); + } + if (_session == nullptr) { + // Capture the Lance-C error on the initializing thread before another FFI call can + // replace it. Keep the original cause (including Foyer's directory/I/O details) and + // explain how to recover from the initialization status retained by call_once below. + auto status = lance_error("create shared Lance session"); + if (_config.enable_lance_data_cache) { + status.append( + "; Check the Lance data cache configuration and storage. After fixing the " + "issue, restart this BE. Alternatively, set enable_lance_data_cache=false " + "in be.conf and restart this BE. Session initialization will not be retried " + "in this BE process."); + } + return status; + } + _metrics = std::make_unique(_session, _config); + return Status::OK(); +} + +Status LanceSessionManager::open_dataset(const char* uri, const char* const* storage_options, + uint64_t version, LanceDataset** dataset) { + if (uri == nullptr || dataset == nullptr) { + return Status::InvalidArgument("Lance dataset URI and output must not be null"); + } + *dataset = nullptr; + + // Initialize lazily on the first dataset open, not at BE startup. A failed Status is a + // normal return from this lambda, so call_once completes and retains that failure just + // like a successful initialization. All subsequent readers receive the same copied + // error; fixing the cache directory alone does not trigger another attempt. This is + // intentional: repair the cache configuration/storage (or disable the data cache), then + // restart the BE to recreate the process-wide manager and session. + std::call_once(_initialize_once, [this] { _initialize_status = _initialize(); }); + RETURN_IF_ERROR(_initialize_status); + + *dataset = lance_dataset_open_with_session(uri, storage_options, version, _session); + if (*dataset == nullptr) { + return lance_error("open Lance dataset with shared session"); + } + return Status::OK(); +} + +} // namespace doris::format::lance diff --git a/be/src/format_v2/lance/lance_session_manager.h b/be/src/format_v2/lance/lance_session_manager.h new file mode 100644 index 00000000000000..45dc62acad4442 --- /dev/null +++ b/be/src/format_v2/lance/lance_session_manager.h @@ -0,0 +1,71 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include +#include +#include +#include + +#include "common/status.h" + +struct LanceDataset; +struct LanceSession; + +namespace doris::format::lance { + +class LanceSessionMetrics; + +// Owns the single Lance session shared by all queries in one BE process. The session always owns +// Lance's metadata/index caches and optionally installs the Foyer data-file cache. Readers only +// open datasets through this class and do not depend on the selected data-cache implementation. +class LanceSessionManager final { +public: + struct Config { + int64_t lance_index_cache_size_bytes = 0; + int64_t lance_metadata_cache_size_bytes = 0; + bool enable_lance_data_cache = false; + std::string lance_data_cache_path; + int64_t lance_data_cache_disk_capacity_bytes = 0; + int64_t lance_data_cache_read_block_size_bytes = 0; + }; + + static LanceSessionManager& instance(); + + // The explicit configuration constructor keeps the process-global config out of focused + // manager tests. Production readers use instance(). + explicit LanceSessionManager(Config config); + ~LanceSessionManager(); + + LanceSessionManager(const LanceSessionManager&) = delete; + LanceSessionManager& operator=(const LanceSessionManager&) = delete; + + Status open_dataset(const char* uri, const char* const* storage_options, uint64_t version, + LanceDataset** dataset); + +private: + Status _initialize(); + + Config _config; + std::once_flag _initialize_once; + LanceSession* _session = nullptr; + std::unique_ptr _metrics; + Status _initialize_status = Status::OK(); +}; + +} // namespace doris::format::lance diff --git a/be/src/format_v2/table/iceberg_reader.cpp b/be/src/format_v2/table/iceberg_reader.cpp index 151744480eec95..1c9260d2aa3f1c 100644 --- a/be/src/format_v2/table/iceberg_reader.cpp +++ b/be/src/format_v2/table/iceberg_reader.cpp @@ -156,6 +156,8 @@ const char* file_format_name(FileFormat format) { return "ARROW"; case FileFormat::WAL: return "WAL"; + case FileFormat::LANCE: + return "LANCE"; } return "UNKNOWN"; } diff --git a/be/src/format_v2/table/lance_reader.cpp b/be/src/format_v2/table/lance_reader.cpp new file mode 100644 index 00000000000000..b9e5054a2a6e81 --- /dev/null +++ b/be/src/format_v2/table/lance_reader.cpp @@ -0,0 +1,1321 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/table/lance_reader.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "common/config.h" +#include "common/logging.h" +#include "exec/common/endian.h" +#include "format_v2/lance/lance_reader_helper.h" +#include "format_v2/lance/lance_runtime_filter_helper.h" +#include "format_v2/lance/lance_session_manager.h" +#include "runtime/file_scan_profile.h" +#include "runtime/runtime_state.h" + +namespace doris::format::lance { + +LanceTableReader::~LanceTableReader() { + static_cast(close()); +} + +Status LanceTableReader::fetch_schema(const TFileRangeDesc& range, + const TFileScanRangeParams& scan_params, + std::vector* column_names, + std::vector* column_types) const { + if (column_names == nullptr || column_types == nullptr) { + return Status::InvalidArgument("Lance schema output must not be null"); + } + const auto& params = range.table_format_params.lance_params; + std::vector storage_options; + RETURN_IF_ERROR(build_lance_storage_options(&scan_params, &storage_options)); + std::vector storage_option_ptrs; + storage_option_ptrs.reserve(storage_options.size() + 1); + for (const auto& option : storage_options) { + storage_option_ptrs.emplace_back(option.c_str()); + } + storage_option_ptrs.emplace_back(nullptr); + + std::unique_ptr dataset( + lance_dataset_open(params.dataset_uri.c_str(), + storage_options.empty() ? nullptr : storage_option_ptrs.data(), + static_cast(params.version))); + if (dataset == nullptr) { + return lance_error("open Lance dataset for schema"); + } + + std::shared_ptr schema; + RETURN_IF_ERROR(import_lance_dataset_schema(dataset.get(), &schema)); + return convert_arrow_schema_to_doris(schema, column_names, column_types); +} + +Status LanceTableReader::init(TableReadOptions&& options) { + RETURN_IF_ERROR(TableReader::init(std::move(options))); + DORIS_CHECK(_runtime_state != nullptr); + DORIS_CHECK(_scanner_profile != nullptr); + DORIS_CHECK(_scan_params != nullptr); + RETURN_IF_ERROR(_resolve_search_kind()); + + const auto& lance_scan_params = _scan_params->lance_scan_params; + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, LANCE_READER_PROFILE, + file_scan_profile::TABLE_READER, 1); + _dataset_open_time = ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceDatasetOpenTime", + LANCE_READER_PROFILE, 1); + _arrow_to_doris_block_time = ADD_CHILD_TIMER_WITH_LEVEL( + _scanner_profile, "LanceArrowToDorisBlockTime", LANCE_READER_PROFILE, 1); + _data_cache_bytes_read_from_cache = + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceDataCacheBytesReadFromCache", + TUnit::BYTES, LANCE_READER_PROFILE, 1); + _data_cache_bytes_read_from_remote = + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceDataCacheBytesReadFromRemote", + TUnit::BYTES, LANCE_READER_PROFILE, 1); + if (_search_kind != SearchKind::NORMAL) { + RETURN_IF_ERROR(_validate_external_search_request()); + const auto& request = lance_scan_params.external_search_request; + int64_t top_k; + int64_t offset; + if (_search_kind == SearchKind::VECTOR) { + const auto& vector = request.search_query.vector_search; + top_k = vector.top_k; + offset = vector.offset; + _scanner_profile->add_info_string("LanceSearchType", "VECTOR"); + } else { + DORIS_CHECK(_search_kind == SearchKind::FULL_TEXT); + const auto& full_text = request.search_query.full_text_search; + top_k = full_text.top_k; + offset = full_text.offset; + _scanner_profile->add_info_string("LanceSearchType", "FULL_TEXT"); + _scanner_profile->add_info_string( + "LanceFtsCoverageMode", + full_text.coverage_mode == TFtsCoverageMode::STRICT ? "STRICT" : "INDEX_ONLY"); + if (full_text.query_type == TFtsQueryType::MATCH) { + _scanner_profile->add_info_string("LanceFtsQueryType", "MATCH"); + _scanner_profile->add_info_string( + "LanceFtsMatchOperator", + full_text.match_operator == TFtsMatchOperator::AND ? "AND" : "OR"); + _scanner_profile->add_info_string("LanceFtsMaxFuzzyDistance", + std::to_string(full_text.max_fuzzy_distance)); + } else { + _scanner_profile->add_info_string("LanceFtsQueryType", "PHRASE"); + _scanner_profile->add_info_string("LanceFtsPhraseSlop", + std::to_string(full_text.phrase_slop)); + } + } + _scanner_profile->add_info_string("LanceTopK", std::to_string(top_k)); + _scanner_profile->add_info_string("LanceOffset", std::to_string(offset)); + _scanner_profile->add_info_string("LanceTopKPlusOffset", std::to_string(top_k + offset)); + } + if (_scan_params->__isset.lance_scan_params && + lance_scan_params.__isset.lance_substrait_filter) { + _scanner_profile->add_info_string("LancePushdownFormat", "SUBSTRAIT"); + _scanner_profile->add_info_string( + "LanceSubstraitFilterBytes", + std::to_string(lance_scan_params.lance_substrait_filter.size())); + } + + return _record_batch_converter.init(_runtime_state, _projected_columns, _search_kind); +} + +Status LanceTableReader::prepare_split(const SplitReadOptions& options) { + _close_scanner(); + _eof = false; + _runtime_filter_cache = options.cache; + + RETURN_IF_ERROR(TableReader::prepare_split(options)); + if (current_split_pruned()) { + return Status::OK(); + } + // COUNT(*)/COUNT(1) with no filter is served from Lance metadata. The base class already set + // _remaining_table_level_count from the split's table_level_row_count, so skip opening any + // dataset scanner; get_block() synthesizes the counted rows. + if (_is_table_level_count_active()) { + return Status::OK(); + } + if (_record_batch_converter.requires_global_rowid() && !_global_rowid_context.has_value()) { + return Status::InvalidArgument( + "Lance global row id requested without global row id context"); + } + + RETURN_IF_ERROR(_ensure_dataset_open(options.current_range)); + RETURN_IF_ERROR(_open_scanner(options.current_range)); + return Status::OK(); +} + +Status LanceTableReader::get_block(Block* block, bool* eos) { + DORIS_CHECK(block != nullptr); + DORIS_CHECK(eos != nullptr); + DORIS_CHECK(block->columns() == _projected_columns.size()); + *eos = false; + + if (_eof) { + *eos = true; + return Status::OK(); + } + // Metadata COUNT(*) split: no scanner is opened. Emit synthetic rows for the upper COUNT + // operator directly from the row count the base class parsed out of the split. + if (_is_table_level_count_active()) { + return _read_table_level_count(block, eos); + } + if (_scanner == nullptr) { + return Status::InternalError("Lance scanner is not initialized for the current split"); + } + + const auto target_rows = std::max(1, _scanner_batch_size); + while (true) { + block->clear_column_data(_projected_columns.size()); + size_t raw_rows = 0; + while (raw_rows < target_rows) { + if (_io_ctx != nullptr && _io_ctx->should_stop) { + _eof = true; + _close_scanner(); + *eos = true; + return Status::OK(); + } + + LanceBatch* raw_batch = nullptr; + int32_t scan_status = 0; + { + SCOPED_TIMER(_scanner_read_time); + scan_status = lance_scanner_next(_scanner, &raw_batch); + } + if (scan_status == 1) { + _eof = true; + _close_scanner(); + break; + } + if (scan_status != 0 || raw_batch == nullptr) { + return lance_error("read next Lance batch"); + } + + std::unique_ptr batch(raw_batch); + size_t rows = 0; + { + SCOPED_TIMER(_arrow_to_doris_block_time); + RETURN_IF_ERROR(_fill_block_from_lance_batch(batch.get(), block, &rows)); + } + _record_scan_rows(rows); + raw_rows += rows; + } + + if (raw_rows == 0) { + DORIS_CHECK(_eof); + *eos = true; + return Status::OK(); + } + + if (block->rows() > 0) { + // Preserve a non-empty final block. The next get_block() observes `_eof` and reports + // split EOF, matching the generic reader contract. + return Status::OK(); + } + if (_eof) { + *eos = true; + return Status::OK(); + } + } +} + +Status LanceTableReader::read_by_row_ids(const TFileRangeDesc& range, + const std::vector& row_ids, Block* block) { + DORIS_CHECK(block != nullptr); + DORIS_CHECK(block->columns() == _projected_columns.size()); + if (row_ids.empty()) { + return Status::OK(); + } + if (_row_id_take_read_time == nullptr) { + _row_id_take_read_time = ADD_CHILD_TIMER_WITH_LEVEL( + _scanner_profile, "LanceRowIdTakeReadTime", LANCE_READER_PROFILE, 1); + } + if (_row_id_fetch_total_time == nullptr) { + _row_id_fetch_total_time = ADD_CHILD_TIMER_WITH_LEVEL( + _scanner_profile, "LanceRowIdFetchTotalTime", LANCE_READER_PROFILE, 1); + } + auto* fetch_calls = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowIdFetchCalls", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + auto* fetch_rows = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowIdFetchRows", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + SCOPED_TIMER(_row_id_fetch_total_time); + + // Phase-two row fetch does not execute FTS, so a reader created only for take_rows must not + // collect query-specific global statistics. + RETURN_IF_ERROR(_ensure_dataset_open(range, false)); + std::vector columns; + columns.reserve(_projected_columns.size() + 1); + for (const auto& column : _projected_columns) { + columns.emplace_back(column.name.c_str()); + } + columns.emplace_back(nullptr); + + ArrowArrayStream stream {}; + int32_t take_rows_status = 0; + { + SCOPED_TIMER(_row_id_take_read_time); + COUNTER_UPDATE(fetch_calls, 1); + take_rows_status = lance_dataset_take_rows(_dataset, row_ids.data(), row_ids.size(), + columns.data(), &stream); + } + if (take_rows_status != 0) { + if (stream.release != nullptr) { + stream.release(&stream); + } + return lance_error("take Lance rows by row id"); + } + auto imported_reader = arrow::ImportRecordBatchReader(&stream); + if (!imported_reader.ok()) { + if (stream.release != nullptr) { + stream.release(&stream); + } + return Status::InternalError("import Lance take-rows stream failed: {}", + imported_reader.status().message()); + } + + size_t fetched_rows = 0; + auto batch_reader = std::move(imported_reader).ValueUnsafe(); + while (true) { + std::shared_ptr record_batch; + arrow::Status read_status; + { + // Lance may materialize take_rows lazily while its Arrow stream is consumed. + SCOPED_TIMER(_row_id_take_read_time); + read_status = batch_reader->ReadNext(&record_batch); + } + if (!read_status.ok()) { + return Status::InternalError("read Lance take-rows batch failed: {}", + read_status.message()); + } + if (record_batch == nullptr) { + break; + } + size_t rows = 0; + { + SCOPED_TIMER(_arrow_to_doris_block_time); + RETURN_IF_ERROR(_record_batch_converter.convert_record_batch_to_block( + record_batch, block, _global_rowid_context, &rows)); + } + fetched_rows += rows; + COUNTER_UPDATE(fetch_rows, rows); + } + if (fetched_rows != row_ids.size()) { + return Status::InternalError("Lance row-id fetch returned {} rows for {} requested row ids", + fetched_rows, row_ids.size()); + } + return Status::OK(); +} + +Status LanceTableReader::abort_split() { + _close_scanner(); + _eof = true; + return TableReader::abort_split(); +} + +Status LanceTableReader::close() { + _close_scanner(); + _close_dataset(); + _opened_dataset_key.reset(); + _eof = true; + return TableReader::close(); +} + +Status LanceTableReader::_resolve_search_kind() { + DORIS_CHECK(_scan_params != nullptr); + _search_kind = SearchKind::NORMAL; + if (!_scan_params->__isset.lance_scan_params) { + return Status::OK(); + } + const auto& lance_scan_params = _scan_params->lance_scan_params; + if (!lance_scan_params.__isset.external_search_request) { + return Status::OK(); + } + const auto& request = lance_scan_params.external_search_request; + if (!request.__isset.search_query) { + return Status::InvalidArgument("external search request requires search_query"); + } + const bool has_vector = request.search_query.__isset.vector_search; + const bool has_full_text = request.search_query.__isset.full_text_search; + if (has_vector == has_full_text) { + return Status::InvalidArgument("external search query must set exactly one search kind"); + } + _search_kind = has_vector ? SearchKind::VECTOR : SearchKind::FULL_TEXT; + return Status::OK(); +} + +Status LanceTableReader::_validate_external_search_request() const { + // FE validates requests produced by the search TVFs, but this reader consumes a deserialized + // Thrift boundary. Recheck structural invariants and values used for allocation, pointer + // arithmetic, C-string calls, and narrowing conversions before accessing them below. + DORIS_CHECK(_scan_params != nullptr); + DORIS_CHECK(_scan_params->__isset.lance_scan_params); + const auto& lance_scan_params = _scan_params->lance_scan_params; + DORIS_CHECK(lance_scan_params.__isset.external_search_request); + if (lance_scan_params.__isset.lance_substrait_filter) { + return Status::InvalidArgument( + "Lance external search cannot combine its pre-search filter with " + "lance_substrait_filter"); + } + + const auto& request = lance_scan_params.external_search_request; + if (request.schema_version != 1) { + return Status::NotSupported("unsupported external search schema version: {}", + request.schema_version); + } + DORIS_CHECK(request.__isset.search_query); + DORIS_CHECK(_search_kind != SearchKind::NORMAL); + constexpr auto UINT32_MAX_VALUE = static_cast(std::numeric_limits::max()); + if (_search_kind == SearchKind::VECTOR) { + const auto& vector = request.search_query.vector_search; + if (!vector.__isset.column || vector.column.empty() || + vector.column.find('\0') != std::string::npos) { + return Status::InvalidArgument("Lance vector search requires a non-empty column"); + } + if (!vector.__isset.query_vector) { + return Status::InvalidArgument("Lance vector search requires a query vector"); + } + const auto& query_vector = vector.query_vector; + if (!query_vector.__isset.element_type || !query_vector.__isset.dimension || + !query_vector.__isset.values) { + return Status::InvalidArgument( + "Lance query vector requires element_type, dimension, and values"); + } + if (query_vector.dimension <= 0) { + return Status::InvalidArgument("Lance query vector dimension must be positive: {}", + query_vector.dimension); + } + const auto element_width = lance_vector_element_width(query_vector.element_type); + if (element_width == 0) { + return Status::NotSupported("unsupported Lance query vector element type: {}", + static_cast(query_vector.element_type)); + } + const bool multi_vector = query_vector.__isset.num_vectors; + // The optional count distinguishes a query matrix, including a one-row matrix. + if (multi_vector && query_vector.num_vectors <= 0) { + return Status::InvalidArgument( + "Lance multi-vector queries require positive num_vectors"); + } + if (multi_vector && (query_vector.element_type == TVectorElementType::UINT8 || + query_vector.element_type == TVectorElementType::INT8 || + (vector.__isset.metric && vector.metric == TVectorMetric::HAMMING))) { + return Status::NotSupported( + "Lance multi-vector search requires floating-point vectors and l2, cosine, or " + "dot"); + } + const auto dimension = static_cast(query_vector.dimension); + const auto count = multi_vector ? static_cast(query_vector.num_vectors) : 1; + if (dimension > std::numeric_limits::max() / count / element_width || + query_vector.values.size() != dimension * count * element_width) { + return Status::InvalidArgument( + "Lance query vector byte size {} does not match {} vectors of dimension {} and " + "element width {}", + query_vector.values.size(), count, dimension, element_width); + } + if (!vector.__isset.top_k || vector.top_k <= 0) { + return Status::InvalidArgument("Lance vector search top_k must be positive"); + } + if (!vector.__isset.offset || vector.offset < 0) { + return Status::InvalidArgument("Lance vector search offset must be non-negative"); + } + if (vector.offset > UINT32_MAX_VALUE || vector.top_k > UINT32_MAX_VALUE - vector.offset) { + return Status::InvalidArgument( + "Lance vector search top_k + offset exceeds uint32 range"); + } + // Match FE/C API limits before constructing the per-subvector ANN plan branches. + constexpr int MAX_QUERY_VECTORS = 128; + constexpr int64_t MAX_QUERY_VECTOR_CANDIDATES = 100000; + const auto refine_factor = + request.__isset.vector_search_options && + request.vector_search_options.__isset.refine_factor + ? request.vector_search_options.refine_factor + : 1; + if (multi_vector && + (query_vector.num_vectors > MAX_QUERY_VECTORS || refine_factor <= 0 || + vector.top_k + vector.offset > MAX_QUERY_VECTOR_CANDIDATES / refine_factor || + query_vector.num_vectors > + MAX_QUERY_VECTOR_CANDIDATES / (vector.top_k + vector.offset))) { + return Status::InvalidArgument( + "multi-vector query exceeds 128 subvectors or 100000 subvector-candidates"); + } + } else { + DORIS_CHECK(_search_kind == SearchKind::FULL_TEXT); + const auto& full_text = request.search_query.full_text_search; + if (!full_text.__isset.column || full_text.column.empty() || + full_text.column.find('\0') != std::string::npos) { + return Status::InvalidArgument("Lance full-text search requires a non-empty column"); + } + if (!full_text.__isset.query || full_text.query.empty() || + full_text.query.find('\0') != std::string::npos) { + return Status::InvalidArgument("Lance full-text search requires a non-empty query"); + } + if (!full_text.__isset.top_k || full_text.top_k <= 0) { + return Status::InvalidArgument("Lance full-text search top_k must be positive"); + } + if (!full_text.__isset.offset || full_text.offset < 0) { + return Status::InvalidArgument("Lance full-text search offset must be non-negative"); + } + if (full_text.offset > UINT32_MAX_VALUE || + full_text.top_k > UINT32_MAX_VALUE - full_text.offset) { + return Status::InvalidArgument( + "Lance full-text search top_k + offset exceeds uint32 range"); + } + if (!full_text.__isset.coverage_mode || + (full_text.coverage_mode != TFtsCoverageMode::STRICT && + full_text.coverage_mode != TFtsCoverageMode::INDEX_ONLY)) { + return Status::InvalidArgument( + "Lance full-text search requires STRICT or INDEX_ONLY coverage_mode"); + } + if (full_text.__isset.global_statistics && full_text.global_statistics.empty()) { + return Status::InvalidArgument( + "Lance full-text search global_statistics must not be empty when set"); + } + if (!full_text.__isset.query_type || (full_text.query_type != TFtsQueryType::MATCH && + full_text.query_type != TFtsQueryType::PHRASE)) { + return Status::InvalidArgument( + "Lance full-text search requires MATCH or PHRASE query_type"); + } + if (full_text.query_type == TFtsQueryType::MATCH) { + if (!full_text.__isset.match_operator || + (full_text.match_operator != TFtsMatchOperator::OR && + full_text.match_operator != TFtsMatchOperator::AND)) { + return Status::InvalidArgument( + "Lance MATCH query requires OR or AND match_operator"); + } + if (!full_text.__isset.max_fuzzy_distance || full_text.max_fuzzy_distance < 0) { + return Status::InvalidArgument( + "Lance MATCH query max_fuzzy_distance must be non-negative"); + } + if (full_text.max_fuzzy_distance != 0) { + return Status::NotSupported( + "Lance prepared FTS does not yet support max_fuzzy_distance={}", + full_text.max_fuzzy_distance); + } + if (full_text.__isset.phrase_slop) { + return Status::InvalidArgument("Lance MATCH query cannot set phrase_slop"); + } + } else { + if (!full_text.__isset.phrase_slop || full_text.phrase_slop < 0) { + return Status::InvalidArgument( + "Lance PHRASE query phrase_slop must be non-negative"); + } + if (full_text.__isset.match_operator || full_text.__isset.max_fuzzy_distance) { + return Status::InvalidArgument( + "Lance PHRASE query cannot set MATCH-only parameters"); + } + } + if (request.__isset.vector_search_options) { + return Status::InvalidArgument( + "Lance full-text search cannot set vector_search_options"); + } + } + + if (request.__isset.search_filter) { + const auto& filter = request.search_filter; + if (!filter.__isset.format || !filter.__isset.payload || filter.payload.empty()) { + return Status::InvalidArgument( + "external search filter requires format and non-empty payload"); + } + if (filter.format != TSearchFilterFormat::SQL) { + return Status::NotSupported("unsupported external search filter format: {}", + static_cast(filter.format)); + } + if (filter.payload.find('\0') != std::string::npos) { + return Status::InvalidArgument("Lance SQL search filter contains an embedded NUL byte"); + } + } + + if (_search_kind == SearchKind::VECTOR && request.__isset.vector_search_options) { + const auto& options = request.vector_search_options; + if (options.__isset.query_parallelism && options.query_parallelism < -1) { + return Status::InvalidArgument("Lance query_parallelism must be -1, 0, or positive"); + } + if (options.__isset.nprobes && options.nprobes <= 0) { + return Status::InvalidArgument("Lance nprobes must be positive"); + } + if (options.__isset.refine_factor && options.refine_factor <= 0) { + return Status::InvalidArgument("Lance refine_factor must be positive"); + } + if (options.__isset.ef && options.ef <= 0) { + return Status::InvalidArgument("Lance ef must be positive"); + } + } + return Status::OK(); +} + +Status LanceTableReader::_ensure_dataset_open(const TFileRangeDesc& range, + bool prepare_fts_context) { + DatasetKey key; + RETURN_IF_ERROR(_dataset_key(range, &key)); + if (_dataset == nullptr) { + RETURN_IF_ERROR(_open_dataset(key)); + _opened_dataset_key = key; + } else if (!_opened_dataset_key.has_value() || *_opened_dataset_key != key) { + return Status::InvalidArgument( + "Lance reader cannot mix dataset snapshots or storage options"); + } + if (_search_kind == SearchKind::FULL_TEXT && prepare_fts_context && + _fts_query_context == nullptr) { + RETURN_IF_ERROR(_prepare_fts_query_context()); + } + return Status::OK(); +} + +Status LanceTableReader::_open_dataset(const DatasetKey& key) { + std::vector storage_option_ptrs; + storage_option_ptrs.reserve(key.storage_options.size() + 1); + for (const auto& option : key.storage_options) { + storage_option_ptrs.emplace_back(option.c_str()); + } + storage_option_ptrs.emplace_back(nullptr); + + std::unique_ptr dataset; + { + SCOPED_TIMER(_dataset_open_time); + LanceDataset* raw_dataset = nullptr; + RETURN_IF_ERROR(LanceSessionManager::instance().open_dataset( + key.uri.c_str(), key.storage_options.empty() ? nullptr : storage_option_ptrs.data(), + static_cast(key.version), &raw_dataset)); + dataset.reset(raw_dataset); + } + _dataset = dataset.release(); + return Status::OK(); +} + +Status LanceTableReader::_prepare_fts_query_context() { + DORIS_CHECK(_dataset != nullptr); + DORIS_CHECK(_fts_query_context == nullptr); + DORIS_CHECK(_scan_params != nullptr); + const auto& full_text = + _scan_params->lance_scan_params.external_search_request.search_query.full_text_search; + if (full_text.__isset.global_statistics) { + return Status::NotSupported( + "Lance FE-provided FTS global statistics require a lance-c consumer API"); + } + const auto coverage_mode = full_text.coverage_mode == TFtsCoverageMode::STRICT + ? LANCE_FTS_COVERAGE_STRICT + : LANCE_FTS_COVERAGE_INDEX_ONLY; + // Keep statistics preparation at the reader/scanner lifetime today. A future FE-provided + // opaque statistics payload should enter through this boundary and create the same context, + // leaving segment-scoped scanner execution unchanged. + if (full_text.query_type == TFtsQueryType::MATCH) { + const auto match_operator = full_text.match_operator == TFtsMatchOperator::AND + ? LANCE_FTS_MATCH_OPERATOR_AND + : LANCE_FTS_MATCH_OPERATOR_OR; + _fts_query_context = lance_dataset_prepare_fts_match_query( + _dataset, full_text.column.c_str(), full_text.query.c_str(), match_operator, + static_cast(full_text.max_fuzzy_distance), coverage_mode); + } else { + DORIS_CHECK(full_text.query_type == TFtsQueryType::PHRASE); + _fts_query_context = lance_dataset_prepare_fts_phrase_query( + _dataset, full_text.column.c_str(), full_text.query.c_str(), full_text.phrase_slop, + coverage_mode); + } + if (_fts_query_context == nullptr) { + return lance_error("prepare Lance FTS query context"); + } + return Status::OK(); +} + +void LanceTableReader::_init_scanner_profile() { + if (_scanner_configure_time != nullptr) { + return; + } + + _scanner_configure_time = ADD_CHILD_TIMER_WITH_LEVEL( + _scanner_profile, "LanceScannerConfigureTime", LANCE_READER_PROFILE, 1); + _runtime_filter_sql_time = ADD_CHILD_TIMER_WITH_LEVEL( + _scanner_profile, "LanceRuntimeFilterSqlTime", LANCE_READER_PROFILE, 1); + _scanner_read_time = ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScannerReadTime", + LANCE_READER_PROFILE, 1); + _execution_iops = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceExecutionIOOps", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + _execution_requests = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceExecutionIORequests", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + _execution_bytes_read = ADD_CHILD_COUNTER_WITH_LEVEL( + _scanner_profile, "LanceExecutionIOBytesRead", TUnit::BYTES, LANCE_READER_PROFILE, 1); + _index_partition_cache_miss_loads = + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionCacheMissLoads", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + _index_comparisons = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIndexComparisons", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + + // Prefilter counters isolate row-id materialization. The generic scan counts below come + // from Lance's FilteredRead execution node and are scan inputs, not ANN result counts. + _lance_count_metrics = { + {"prefilter_loads", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterLoads", TUnit::UNIT, + LANCE_READER_PROFILE, 1)}, + {"prefilter_input_rows", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputRows", TUnit::UNIT, + LANCE_READER_PROFILE, 1)}, + {"prefilter_input_batches", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputBatches", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"prefilter_row_ids", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterRowIds", TUnit::UNIT, + LANCE_READER_PROFILE, 1)}, + {"fragments_scanned", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceFragmentsScanned", TUnit::UNIT, + LANCE_READER_PROFILE, 1)}, + {"ranges_scanned", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowOffsetRangesScanned", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"rows_scanned", ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowsScanned", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"partitions_ranked", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionsRanked", TUnit::UNIT, + LANCE_READER_PROFILE, 1)}, + {"partitions_searched", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionsSearched", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"deltas_searched", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceVectorIndexSegmentsSearched", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"scalar_segments_requested", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentsRequested", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"scalar_segments_searched", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentsSearched", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"scalar_segment_fallbacks", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentFallbacks", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + {"scalar_segment_candidate_rows", + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexCandidateRows", + TUnit::UNIT, LANCE_READER_PROFILE, 1)}, + }; + _lance_time_metrics = { + // Partition stages accumulate across concurrent work and overlap their parent timers. + // DistanceTopK includes fused candidate filtering, scoring, and heap updates. + {"index_open_time", ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexOpenTime", + LANCE_READER_PROFILE, 1)}, + {"index_partition_load_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionLoadTime", + LANCE_READER_PROFILE, 1)}, + {"index_partition_prepare_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionPrepareTime", + LANCE_READER_PROFILE, 1)}, + {"index_prefilter_wait_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPrefilterWaitTime", + LANCE_READER_PROFILE, 1)}, + {"index_cpu_queue_wait_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexCpuQueueWaitTime", + LANCE_READER_PROFILE, 1)}, + {"index_search_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexSearchTime", + LANCE_READER_PROFILE, 1)}, + {"index_query_prepare_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexQueryPrepareTime", + LANCE_READER_PROFILE, 1)}, + {"index_distance_topk_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexDistanceTopKTime", + LANCE_READER_PROFILE, 1)}, + {"index_result_materialize_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexResultMaterializeTime", + LANCE_READER_PROFILE, 1)}, + {"ANNIVFPartitionExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNPartitionExecTime", + LANCE_READER_PROFILE, 1)}, + {"ANNSubIndexExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNSubIndexExecTime", + LANCE_READER_PROFILE, 1)}, + {"ANNIvfBatchExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNBatchExecTime", + LANCE_READER_PROFILE, 1)}, + {"SortExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceSortComputeTime", + LANCE_READER_PROFILE, 1)}, + {"SortPreservingMergeExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceSortMergeComputeTime", + LANCE_READER_PROFILE, 1)}, + {"TakeExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceTakeExecTime", LANCE_READER_PROFILE, + 1)}, + {"KNNVectorDistanceExec_elapsed_compute", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceVectorDistanceComputeTime", + LANCE_READER_PROFILE, 1)}, + // These are wall times in the ANN row-id loader. LoadTime includes input polling + // and set construction; it must not be added to its component timers. + {"prefilter_load_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterLoadTime", + LANCE_READER_PROFILE, 1)}, + {"prefilter_input_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputTime", + LANCE_READER_PROFILE, 1)}, + {"prefilter_build_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterBuildTime", + LANCE_READER_PROFILE, 1)}, + + // This is wait time reported by the same Lance scan execution node described above, + // rather than Doris scanner scheduling wait time. + {"task_wait_time", ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceTaskWaitTime", + LANCE_READER_PROFILE, 1)}, + {"find_partitions_elapsed", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionRankingTime", + LANCE_READER_PROFILE, 1)}, + {"scalar_segment_prepare_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentPrepareTime", + LANCE_READER_PROFILE, 1)}, + {"scalar_segment_search_time", + ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentSearchTime", + LANCE_READER_PROFILE, 1)}, + }; + if (_search_kind != SearchKind::NORMAL) { + _planned_index_segment_count = + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePlannedIndexSegmentCount", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + _planned_indexed_fragment_count = + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePlannedIndexedFragmentCount", + TUnit::UNIT, LANCE_READER_PROFILE, 1); + _planned_flat_search_fragment_count = ADD_CHILD_COUNTER_WITH_LEVEL( + _scanner_profile, "LancePlannedFlatSearchFragmentCount", TUnit::UNIT, + LANCE_READER_PROFILE, 1); + } +} + +Status LanceTableReader::_open_scanner(const TFileRangeDesc& range) { + _init_scanner_profile(); + SCOPED_TIMER(_scanner_configure_time); + std::vector columns; + columns.reserve(_projected_columns.size() + 1); + for (size_t idx = 0; idx < _projected_columns.size(); ++idx) { + if (_record_batch_converter.is_global_rowid_output(idx)) { + continue; + } + const auto& column = _projected_columns[idx]; + columns.emplace_back(column.name.c_str()); + } + if (_search_kind != SearchKind::NORMAL && columns.empty()) { + // Keep an explicit empty user projection from becoming `nullptr`, which means all dataset + // columns to lance-c. Search execution already returns its generated result column. + columns.emplace_back(_search_kind == SearchKind::VECTOR ? LANCE_DISTANCE_COLUMN.data() + : LANCE_SCORE_COLUMN.data()); + } + columns.emplace_back(nullptr); + + const auto& lance_scan_params = _scan_params->lance_scan_params; + std::string sql_filter; + std::shared_ptr runtime_filter_sql; + if (_search_kind == SearchKind::NORMAL) { + if (has_lance_runtime_filters(_conjuncts)) { + if (_dataset_schema == nullptr) { + RETURN_IF_ERROR(import_lance_dataset_schema(_dataset, &_dataset_schema)); + } + SCOPED_TIMER(_runtime_filter_sql_time); + runtime_filter_sql = get_or_create_lance_runtime_filter_sql( + _conjuncts, *_dataset_schema, _runtime_filter_cache); + } + } else { + const auto& request = lance_scan_params.external_search_request; + if (request.__isset.search_filter && + request.search_filter.format == TSearchFilterFormat::SQL) { + sql_filter = request.search_filter.payload; + } + } + LanceScanner* scanner = lance_scanner_new(_dataset, columns.data(), + sql_filter.empty() ? nullptr : sql_filter.c_str()); + if (scanner == nullptr) { + return lance_error("create Lance scanner"); + } + std::unique_ptr scanner_guard(scanner); + const auto collect_scan_statistics = [](void* callback_ctx, + const LanceScanStatistics* statistics) { + LanceTableReader::_collect_scan_statistics(callback_ctx, statistics); + }; + if (lance_scanner_set_statistics_callback(scanner, collect_scan_statistics, this) != 0) { + return lance_error("set Lance scanner statistics callback"); + } + + if (_record_batch_converter.requires_global_rowid() && + lance_scanner_with_row_id(scanner, true) != 0) { + return lance_error("enable Lance row id output"); + } + + if (lance_scan_params.__isset.lance_substrait_filter && + lance_scanner_set_substrait_filter( + scanner, + reinterpret_cast(lance_scan_params.lance_substrait_filter.data()), + lance_scan_params.lance_substrait_filter.size()) != 0) { + return lance_error("set Lance Substrait filter"); + } + if (runtime_filter_sql != nullptr) { + if (!runtime_filter_sql->expression.empty()) { + if (lance_scanner_additional_sql_filter(scanner, + runtime_filter_sql->expression.c_str()) != 0) { + return lance_error("set Lance additional SQL filter"); + } + } + record_lance_runtime_filter_pushdown(_scanner_profile, *runtime_filter_sql); + } + + const auto batch_size = _batch_size > 0 ? _batch_size : _runtime_state->batch_size(); + if (lance_scanner_set_batch_size(scanner, static_cast(batch_size)) != 0) { + return lance_error("set Lance scanner batch size"); + } + RETURN_IF_ERROR(_configure_scan_options(scanner)); + + const auto& lance_params = range.table_format_params.lance_params; + switch (_search_kind) { + case SearchKind::NORMAL: + RETURN_IF_ERROR(_configure_normal_scan(scanner, lance_params)); + break; + case SearchKind::VECTOR: + RETURN_IF_ERROR(_configure_vector_search(scanner, lance_params)); + break; + case SearchKind::FULL_TEXT: + RETURN_IF_ERROR(_configure_full_text_search(scanner, lance_params)); + break; + } + _scanner = scanner_guard.release(); + _scanner_batch_size = batch_size; + return Status::OK(); +} + +Status LanceTableReader::_configure_scan_options(LanceScanner* scanner) const { + DORIS_CHECK(scanner != nullptr); + // Doris runs multiple scanners concurrently. Limit each scanner's read-ahead; + // the I/O budget does not cap its total memory usage. + const auto io_buffer_size = static_cast(config::lance_io_buffer_size_bytes); + const auto batch_readahead = static_cast(config::lance_batch_readahead); + const auto fragment_readahead = static_cast(config::lance_fragment_readahead); + constexpr bool scan_in_order = false; + + if (lance_scanner_set_io_buffer_size(scanner, io_buffer_size) != 0) { + return lance_error("set Lance scanner I/O buffer size"); + } + if (lance_scanner_set_batch_readahead(scanner, batch_readahead) != 0) { + return lance_error("set Lance scanner batch readahead"); + } + if (lance_scanner_set_fragment_readahead(scanner, fragment_readahead) != 0) { + return lance_error("set Lance scanner fragment readahead"); + } + // Storage order is not required; query ordering is enforced by Sort/TopN operators. + if (lance_scanner_set_scan_in_order(scanner, scan_in_order) != 0) { + return lance_error("set Lance scanner scan order"); + } + + return Status::OK(); +} + +Status LanceTableReader::_configure_normal_scan(LanceScanner* scanner, + const TLanceFileDesc& lance_params) const { + DORIS_CHECK(scanner != nullptr); + std::vector fragment_ids; + RETURN_IF_ERROR(parse_fragment_ids(lance_params, &fragment_ids)); + if (!fragment_ids.empty() && + lance_scanner_set_fragment_ids(scanner, fragment_ids.data(), fragment_ids.size()) != 0) { + return lance_error("set Lance scanner fragment ids"); + } + std::vector segment_uuids; + size_t segment_count = 0; + RETURN_IF_ERROR(parse_index_segment_uuids(lance_params, &segment_uuids, &segment_count)); + if (segment_count > 1) { + return Status::InvalidArgument("normal Lance scan accepts only one scalar index segment"); + } + if (segment_count == 1) { + if (fragment_ids.empty() || !lance_params.__isset.version || lance_params.version <= 0) { + return Status::InvalidArgument( + "Lance scalar index segment requires a fixed version and nonempty fragment " + "ids"); + } + if (lance_params.__isset.use_scalar_index && !lance_params.use_scalar_index) { + return Status::InvalidArgument( + "Lance scalar index segment cannot be combined with use_scalar_index=false"); + } + if (lance_scanner_set_scalar_index_segment(scanner, segment_uuids.data()) != 0) { + return lance_error("set Lance scanner scalar index segment"); + } + } else if (lance_params.__isset.use_scalar_index && + lance_scanner_set_use_scalar_index(scanner, lance_params.use_scalar_index) != 0) { + return lance_error("set Lance scanner scalar index usage"); + } + // FE sets this only when every predicate has been pushed into Lance. + if (lance_params.__isset.limit && lance_params.limit > 0 && + lance_scanner_set_limit(scanner, lance_params.limit) != 0) { + return lance_error("set Lance scanner limit"); + } + return Status::OK(); +} + +Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, + const TLanceFileDesc& lance_params) const { + DORIS_CHECK(scanner != nullptr); + DORIS_CHECK(_scan_params != nullptr); + DORIS_CHECK(_scan_params->__isset.lance_scan_params); + std::vector fragment_ids; + RETURN_IF_ERROR(parse_fragment_ids(lance_params, &fragment_ids)); + if (!fragment_ids.empty() && + lance_scanner_set_fragment_ids(scanner, fragment_ids.data(), fragment_ids.size()) != 0) { + return lance_error("set Lance vector scanner fragment ids"); + } + std::vector segment_uuids; + size_t segment_count = 0; + RETURN_IF_ERROR(parse_index_segment_uuids(lance_params, &segment_uuids, &segment_count)); + if (segment_count > 0 && + lance_scanner_set_index_segments(scanner, segment_uuids.data(), segment_count) != 0) { + return lance_error("set Lance vector scanner index segments"); + } + // Fragment-scoped nearest queries require prefiltering before installing the query. The same + // path applies the TVF search filter, when present. + if (lance_scanner_set_prefilter(scanner, true) != 0) { + return lance_error("enable Lance vector prefilter"); + } + const auto& lance_scan_params = _scan_params->lance_scan_params; + DORIS_CHECK(lance_scan_params.__isset.external_search_request); + const auto& request = lance_scan_params.external_search_request; + const auto& vector = request.search_query.vector_search; + const auto& query = vector.query_vector; + const auto dimension = static_cast(query.dimension); + const auto count = query.__isset.num_vectors ? static_cast(query.num_vectors) : 1; + const auto num_elements = dimension * count; + const auto* bytes = query.values.data(); + const auto candidate_k = static_cast(vector.top_k + vector.offset); + + const auto set_nearest = [&](const void* values, LanceDataType type) -> Status { + const int result = + query.__isset.num_vectors + ? lance_scanner_nearest_multivector(scanner, vector.column.c_str(), values, + dimension, count, type, candidate_k) + : lance_scanner_nearest(scanner, vector.column.c_str(), values, dimension, + type, candidate_k); + if (result != 0) { + return lance_error("set Lance nearest query"); + } + return Status::OK(); + }; + + switch (query.element_type) { + case TVectorElementType::FLOAT16: { + std::vector values(num_elements); + for (size_t i = 0; i < num_elements; ++i) { + values[i] = LittleEndian::Load16(bytes + i * sizeof(uint16_t)); + } + RETURN_IF_ERROR(set_nearest(values.data(), LANCE_DTYPE_FLOAT16)); + break; + } + case TVectorElementType::FLOAT32: { + std::vector values(num_elements); + for (size_t i = 0; i < num_elements; ++i) { + const auto bits = LittleEndian::Load32(bytes + i * sizeof(uint32_t)); + values[i] = std::bit_cast(bits); + } + RETURN_IF_ERROR(set_nearest(values.data(), LANCE_DTYPE_FLOAT32)); + break; + } + case TVectorElementType::FLOAT64: { + std::vector values(num_elements); + for (size_t i = 0; i < num_elements; ++i) { + const auto bits = LittleEndian::Load64(bytes + i * sizeof(uint64_t)); + values[i] = std::bit_cast(bits); + } + RETURN_IF_ERROR(set_nearest(values.data(), LANCE_DTYPE_FLOAT64)); + break; + } + case TVectorElementType::UINT8: { + std::vector values(num_elements); + std::memcpy(values.data(), bytes, num_elements); + RETURN_IF_ERROR(set_nearest(values.data(), LANCE_DTYPE_UINT8)); + break; + } + case TVectorElementType::INT8: { + std::vector values(num_elements); + std::memcpy(values.data(), bytes, num_elements); + RETURN_IF_ERROR(set_nearest(values.data(), LANCE_DTYPE_INT8)); + break; + } + default: + return Status::NotSupported("unsupported Lance query vector element type: {}", + static_cast(query.element_type)); + } + + { + // FE plans an omitted metric as L2; never let indexed splits choose another default. + const auto requested_metric = + !vector.__isset.metric || vector.metric == TVectorMetric::DEFAULT + ? TVectorMetric::L2 + : vector.metric; + LanceMetricType metric; + switch (requested_metric) { + case TVectorMetric::L2: + metric = LANCE_METRIC_L2; + break; + case TVectorMetric::COSINE: + metric = LANCE_METRIC_COSINE; + break; + case TVectorMetric::DOT_PRODUCT: + metric = LANCE_METRIC_DOT; + break; + case TVectorMetric::HAMMING: + metric = LANCE_METRIC_HAMMING; + break; + default: + return Status::NotSupported("unsupported Lance vector metric: {}", + static_cast(vector.metric)); + } + if (lance_scanner_set_metric(scanner, metric) != 0) { + return lance_error("set Lance vector metric"); + } + } + + // Exact refinement validates stored elements and gives indexed and unindexed candidates + // the same row-level score before either path truncates its results. + if (query.__isset.num_vectors && lance_scanner_set_refine_factor(scanner, 1) != 0) { + return lance_error("enable Lance multi-vector refinement"); + } + if (request.__isset.vector_search_options) { + const auto& options = request.vector_search_options; + if (options.__isset.query_parallelism && + lance_scanner_set_query_parallelism(scanner, options.query_parallelism) != 0) { + return lance_error("set Lance vector query parallelism"); + } + if (options.__isset.nprobes && + lance_scanner_set_nprobes(scanner, static_cast(options.nprobes)) != 0) { + return lance_error("set Lance vector nprobes"); + } + if (options.__isset.refine_factor && + lance_scanner_set_refine_factor(scanner, + static_cast(options.refine_factor)) != 0) { + return lance_error("set Lance vector refine factor"); + } + if (options.__isset.ef && + lance_scanner_set_ef(scanner, static_cast(options.ef)) != 0) { + return lance_error("set Lance vector ef"); + } + if (options.__isset.use_index && + lance_scanner_set_use_index(scanner, options.use_index) != 0) { + return lance_error("set Lance vector use_index"); + } + } + if (lance_scanner_set_offset(scanner, vector.offset) != 0) { + return lance_error("set Lance vector offset"); + } + if (lance_scanner_set_limit(scanner, vector.top_k) != 0) { + return lance_error("set Lance vector result limit"); + } + const auto fragment_count = static_cast(fragment_ids.size()); + if (segment_count > 0) { + COUNTER_UPDATE(_planned_index_segment_count, static_cast(segment_count)); + COUNTER_UPDATE(_planned_indexed_fragment_count, fragment_count); + } else { + COUNTER_UPDATE(_planned_flat_search_fragment_count, fragment_count); + } + return Status::OK(); +} + +Status LanceTableReader::_configure_full_text_search(LanceScanner* scanner, + const TLanceFileDesc& lance_params) const { + DORIS_CHECK(scanner != nullptr); + DORIS_CHECK(_fts_query_context != nullptr); + DORIS_CHECK(_scan_params != nullptr); + // FTS fragment IDs describe the selected segment's coverage for planning and profiling. They + // are not installed as a generic fragment filter because lance-c rejects combining one with a + // prepared FTS context; the segment UUID is the execution boundary. + std::vector fragment_ids; + RETURN_IF_ERROR(parse_fragment_ids(lance_params, &fragment_ids)); + std::vector segment_uuids; + size_t segment_count = 0; + RETURN_IF_ERROR(parse_index_segment_uuids(lance_params, &segment_uuids, &segment_count)); + if (segment_count == 0) { + return Status::InvalidArgument( + "Lance full-text search split requires at least one FTS index segment UUID"); + } + const auto& full_text = + _scan_params->lance_scan_params.external_search_request.search_query.full_text_search; + if (lance_scanner_set_fts_query_context(scanner, _fts_query_context) != 0) { + return lance_error("attach Lance FTS query context"); + } + if (lance_scanner_set_fts_index_segments(scanner, segment_uuids.data(), segment_count) != 0) { + return lance_error("set Lance FTS scanner index segments"); + } + if (lance_scanner_set_limit(scanner, full_text.top_k) != 0) { + return lance_error("set Lance FTS scanner candidate limit"); + } + COUNTER_UPDATE(_planned_index_segment_count, static_cast(segment_count)); + COUNTER_UPDATE(_planned_indexed_fragment_count, static_cast(fragment_ids.size())); + return Status::OK(); +} + +void LanceTableReader::_collect_scan_statistics(void* callback_ctx, const void* opaque_statistics) { + const auto* statistics = static_cast(opaque_statistics); + if (callback_ctx == nullptr || statistics == nullptr) { + LOG(WARNING) << "Lance scan statistics callback received a null argument"; + return; + } + + auto* reader = static_cast(callback_ctx); + const auto update_counter = [](RuntimeProfile::Counter* counter, uint64_t value, + std::string_view metric_name) { + if (counter == nullptr) { + return; + } + if (value > static_cast(std::numeric_limits::max())) { + LOG(WARNING) << "Ignoring Lance scan metric '" << metric_name << "' with value " + << value << " because it exceeds INT64_MAX"; + return; + } + COUNTER_UPDATE(counter, static_cast(value)); + }; + + update_counter(reader->_execution_iops, statistics->iops, "iops"); + update_counter(reader->_execution_requests, statistics->requests, "requests"); + update_counter(reader->_execution_bytes_read, statistics->bytes_read, "bytes_read"); + update_counter(reader->_index_partition_cache_miss_loads, statistics->index_partitions_loaded, + "index_partitions_loaded"); + update_counter(reader->_index_comparisons, statistics->index_comparisons, "index_comparisons"); + + if (statistics->metrics_len != 0 && statistics->metrics == nullptr) { + LOG(WARNING) << "Ignoring malformed Lance scan statistics: metrics is NULL while " + << "metrics_len is " << statistics->metrics_len; + return; + } + for (size_t index = 0; index < statistics->metrics_len; ++index) { + const auto& metric = statistics->metrics[index]; + if (metric.name_len != 0 && metric.name == nullptr) { + LOG(WARNING) << "Ignoring malformed Lance scan metric at index " << index + << ": name is NULL while name_len is " << metric.name_len; + continue; + } + const std::string_view name(metric.name == nullptr ? "" : metric.name, metric.name_len); + RuntimeProfile::Counter* counter = nullptr; + switch (metric.kind) { + case LANCE_SCAN_METRIC_COUNT: { + const auto found = reader->_lance_count_metrics.find(name); + if (found != reader->_lance_count_metrics.end()) { + counter = found->second; + } + break; + } + case LANCE_SCAN_METRIC_TIME_NANOSECONDS: { + const auto found = reader->_lance_time_metrics.find(name); + if (found != reader->_lance_time_metrics.end()) { + counter = found->second; + } else if (name == "search_time") { + // Scalar-index metrics exist only when Lance includes the corresponding + // execution node in this scan plan. + counter = ADD_CHILD_TIMER_WITH_LEVEL(reader->_scanner_profile, + "LanceScalarIndexQueryTime", + LANCE_READER_PROFILE, 1); + } else if (name == "serialization_time") { + counter = ADD_CHILD_TIMER_WITH_LEVEL(reader->_scanner_profile, + "LanceScalarIndexResultSerializationTime", + LANCE_READER_PROFILE, 1); + } + break; + } + default: + break; + } + if (counter != nullptr) { + update_counter(counter, metric.value, name); + } + } +} + +void LanceTableReader::_close_scanner() { + if (_scanner != nullptr) { + lance_scanner_close(_scanner); + _scanner = nullptr; + } + _scanner_batch_size = 0; +} + +void LanceTableReader::_close_dataset() { + if (_fts_query_context != nullptr) { + lance_fts_query_context_close(_fts_query_context); + _fts_query_context = nullptr; + } + if (_dataset != nullptr) { + _collect_data_cache_statistics(); + lance_dataset_close(_dataset); + _dataset = nullptr; + } + _dataset_schema.reset(); + _record_batch_converter.reset_schema(); +} + +void LanceTableReader::_collect_data_cache_statistics() { + if (_dataset == nullptr || (_data_cache_bytes_read_from_cache == nullptr && + _data_cache_bytes_read_from_remote == nullptr)) { + return; + } + + LanceDataCacheStatistics statistics {}; + if (lance_dataset_get_data_cache_statistics(_dataset, &statistics) != 0) { + const auto status = lance_error("get Lance data cache statistics"); + LOG(WARNING) << "Failed to collect Lance data cache statistics: " << status.to_string(); + return; + } + + const auto set_counter = [](RuntimeProfile::Counter* counter, uint64_t value, + std::string_view metric_name) { + if (counter == nullptr) { + return; + } + if (value > static_cast(std::numeric_limits::max())) { + LOG(WARNING) << "Ignoring Lance data cache metric '" << metric_name << "' with value " + << value << " because it exceeds INT64_MAX"; + return; + } + COUNTER_SET(counter, static_cast(value)); + }; + set_counter(_data_cache_bytes_read_from_cache, statistics.bytes_read_from_cache, + "bytes_read_from_cache"); + set_counter(_data_cache_bytes_read_from_remote, statistics.bytes_read_from_remote, + "bytes_read_from_remote"); +} + +Status LanceTableReader::_fill_block_from_lance_batch(LanceBatch* batch, Block* block, + size_t* rows) { + DORIS_CHECK(batch != nullptr); + DORIS_CHECK(block != nullptr); + DORIS_CHECK(rows != nullptr); + ArrowArray array {}; + ArrowSchema schema {}; + if (lance_batch_to_arrow(batch, &array, &schema) != 0) { + return lance_error("export Lance batch to Arrow"); + } + auto result = arrow::ImportRecordBatch(&array, &schema); + if (!result.ok()) { + if (array.release != nullptr) { + array.release(&array); + } + if (schema.release != nullptr) { + schema.release(&schema); + } + return Status::InternalError("import Lance Arrow batch failed: {}", + result.status().message()); + } + + return _record_batch_converter.convert_record_batch_to_block( + std::move(result).ValueUnsafe(), block, _global_rowid_context, rows); +} + +Status LanceTableReader::_dataset_key(const TFileRangeDesc& range, DatasetKey* key) const { + const auto& params = range.table_format_params.lance_params; + key->uri = params.dataset_uri; + key->version = params.version; + return build_lance_storage_options(_scan_params, &key->storage_options); +} + +} // namespace doris::format::lance diff --git a/be/src/format_v2/table/lance_reader.h b/be/src/format_v2/table/lance_reader.h new file mode 100644 index 00000000000000..88deea610b301a --- /dev/null +++ b/be/src/format_v2/table/lance_reader.h @@ -0,0 +1,132 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common/status.h" +#include "format_v2/lance/lance_record_batch_converter.h" +#include "format_v2/table_reader.h" +#include "runtime/runtime_profile.h" + +struct LanceBatch; +struct LanceDataset; +struct LanceFtsQueryContext; +struct LanceScanner; + +namespace doris { +class ShardedKVCache; +} + +namespace doris::format::lance { + +// A FORMAT_LANCE table reader. Unlike file formats such as Parquet, a Lance split is not a +// physical-file range. It either selects fragments from a fixed snapshot or scans the whole +// latest snapshot, so the dataset is owned by this table reader and each split owns its scanner. +class LanceTableReader final : public TableReader { +public: + ~LanceTableReader() override; + + // Fetch the schema of a Lance dataset without initializing the scan path. Version zero opens + // the latest snapshot, which is used by backend-local TVF schema discovery. + Status fetch_schema(const TFileRangeDesc& range, const TFileScanRangeParams& scan_params, + std::vector* column_names, + std::vector* column_types) const; + + Status init(TableReadOptions&& options) override; + Status prepare_split(const SplitReadOptions& options) override; + Status get_block(Block* block, bool* eos) override; + // Fetch top-level projected columns by native Lance row IDs from one fixed dataset snapshot. + // Input order and duplicates are preserved by lance-c. Missing rows are rejected because row + // IDs produced by phase one must still exist in the same snapshot during materialization. + Status read_by_row_ids(const TFileRangeDesc& range, const std::vector& row_ids, + Block* block); + Status abort_split() override; + Status close() override; + +private: + struct DatasetKey { + std::string uri; + int64_t version = 0; + std::vector storage_options; + bool operator==(const DatasetKey&) const = default; + }; + + Status _resolve_search_kind(); + Status _validate_external_search_request() const; + Status _ensure_dataset_open(const TFileRangeDesc& range, bool prepare_fts_context = true); + Status _open_dataset(const DatasetKey& key); + Status _prepare_fts_query_context(); + Status _open_scanner(const TFileRangeDesc& range); + void _init_scanner_profile(); + Status _configure_scan_options(LanceScanner* scanner) const; + Status _configure_normal_scan(LanceScanner* scanner, const TLanceFileDesc& lance_params) const; + Status _configure_vector_search(LanceScanner* scanner, + const TLanceFileDesc& lance_params) const; + Status _configure_full_text_search(LanceScanner* scanner, + const TLanceFileDesc& lance_params) const; + // Collect the cumulative statistics owned by this dataset handle. The Lance-C API returns an + // absolute snapshot, so this method replaces rather than increments the profile counters. + void _collect_data_cache_statistics(); + // Keep lance-c's anonymous statistics typedef out of this header. _open_scanner installs the + // strongly typed C callback adapter before forwarding the borrowed value here. + static void _collect_scan_statistics(void* callback_ctx, const void* opaque_statistics); + void _close_scanner(); + void _close_dataset(); + Status _fill_block_from_lance_batch(LanceBatch* batch, Block* block, size_t* rows); + Status _dataset_key(const TFileRangeDesc& range, DatasetKey* key) const; + + LanceDataset* _dataset = nullptr; + std::shared_ptr _dataset_schema; + LanceScanner* _scanner = nullptr; + ShardedKVCache* _runtime_filter_cache = nullptr; + std::optional _opened_dataset_key; + LanceRecordBatchConverter _record_batch_converter; + size_t _scanner_batch_size = 0; + RuntimeProfile::Counter* _planned_index_segment_count = nullptr; + RuntimeProfile::Counter* _planned_indexed_fragment_count = nullptr; + RuntimeProfile::Counter* _planned_flat_search_fragment_count = nullptr; + RuntimeProfile::Counter* _dataset_open_time = nullptr; + RuntimeProfile::Counter* _scanner_configure_time = nullptr; + RuntimeProfile::Counter* _runtime_filter_sql_time = nullptr; + RuntimeProfile::Counter* _scanner_read_time = nullptr; + RuntimeProfile::Counter* _arrow_to_doris_block_time = nullptr; + RuntimeProfile::Counter* _row_id_take_read_time = nullptr; + RuntimeProfile::Counter* _row_id_fetch_total_time = nullptr; + RuntimeProfile::Counter* _execution_iops = nullptr; + RuntimeProfile::Counter* _execution_requests = nullptr; + RuntimeProfile::Counter* _execution_bytes_read = nullptr; + RuntimeProfile::Counter* _data_cache_bytes_read_from_cache = nullptr; + RuntimeProfile::Counter* _data_cache_bytes_read_from_remote = nullptr; + RuntimeProfile::Counter* _index_partition_cache_miss_loads = nullptr; + RuntimeProfile::Counter* _index_comparisons = nullptr; + std::unordered_map _lance_count_metrics; + std::unordered_map _lance_time_metrics; + LanceFtsQueryContext* _fts_query_context = nullptr; + SearchKind _search_kind = SearchKind::NORMAL; + bool _eof = false; +}; + +} // namespace doris::format::lance diff --git a/be/src/format_v2/table_reader.cpp b/be/src/format_v2/table_reader.cpp index 5a8d5dea5e7765..fba778818a7724 100644 --- a/be/src/format_v2/table_reader.cpp +++ b/be/src/format_v2/table_reader.cpp @@ -111,6 +111,8 @@ std::string file_format_to_string(FileFormat format) { return "ARROW"; case FileFormat::WAL: return "WAL"; + case FileFormat::LANCE: + return "LANCE"; } return "UNKNOWN"; } diff --git a/be/src/format_v2/table_reader.h b/be/src/format_v2/table_reader.h index 154ba5e64310d4..264ab5524eb0b0 100644 --- a/be/src/format_v2/table_reader.h +++ b/be/src/format_v2/table_reader.h @@ -230,6 +230,7 @@ class TableReader { _current_file_description->is_immutable); return _current_task->data_file->is_immutable; } + bool TEST_conjuncts_empty() const { return _conjuncts.empty(); } #endif // Prepare for reading a new split/task. diff --git a/be/src/service/internal_service.cpp b/be/src/service/internal_service.cpp index d64349a6d297f6..e7e8ebade3fbb6 100644 --- a/be/src/service/internal_service.cpp +++ b/be/src/service/internal_service.cpp @@ -77,6 +77,7 @@ #include "format/text/text_reader.h" #include "format_v2/column_data.h" #include "format_v2/schema_reader.h" +#include "format_v2/table/lance_reader.h" #include "io/fs/local_file_system.h" #include "io/fs/stream_load_pipe.h" #include "io/io_common.h" @@ -927,6 +928,39 @@ void PInternalService::fetch_table_schema(google::protobuf::RpcController* contr fetch_schema_batch_size, io_ctx.get(), io_ctx); break; } + case TFileFormatType::FORMAT_LANCE: { + std::vector lance_col_names; + std::vector lance_col_types; + auto lance_reader = std::make_unique(); + st = lance_reader->fetch_schema(range, params, &lance_col_names, &lance_col_types); + if (!st.ok()) { + LOG(WARNING) << "fetch Lance table schema failed, errmsg=" << st; + st.to_protobuf(result->mutable_status()); + return; + } + DORIS_CHECK_EQ(lance_col_names.size(), lance_col_types.size()); + result->set_column_nums(lance_col_names.size()); + for (const auto& col_name : lance_col_names) { + result->add_column_names(col_name); + } + for (const auto& col_type : lance_col_types) { + DORIS_CHECK(col_type != nullptr); + PTypeDesc* type_desc = result->add_column_types(); + if (col_type->is_null_literal()) { + PTypeNode* node = type_desc->add_types(); + node->set_type(TTypeNodeType::SCALAR); + node->mutable_scalar_type()->set_type(TPrimitiveType::NULL_TYPE); + } else if (col_type->get_primitive_type() == INVALID_TYPE) { + PTypeNode* node = type_desc->add_types(); + node->set_type(TTypeNodeType::SCALAR); + node->mutable_scalar_type()->set_type(TPrimitiveType::UNSUPPORTED); + } else { + col_type->to_protobuf(type_desc); + } + } + st.to_protobuf(result->mutable_status()); + return; + } default: st = Status::InternalError("Not supported file format in fetch table schema: {}", params.format_type); diff --git a/be/src/storage/utils.h b/be/src/storage/utils.h index fdeea6cad10c2d..73c171457c33cb 100644 --- a/be/src/storage/utils.h +++ b/be/src/storage/utils.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -228,15 +229,89 @@ struct RowLocation { using RowLocationSet = std::set; using RowLocationPairList = std::list>; +// Wire-protocol values: never reorder or reuse an existing value. A new value may use a new +// encoded structure and size, provided its decoder keeps supporting all older values. +enum class ROW_VERSION : uint8_t { + // The row ID is a uint32 ordinal local to the FileMapping identified by file_id. + FILE_LOCAL_ROW_ID = 0, + // The row ID is an opaque uint64 ID in a fixed Lance dataset snapshot. + LANCE_DATASET_ROW_ID = 1, +}; + +/* + * A serialized global row location has a fixed size of 24 bytes. The version determines how the + * bytes at offsets 4..7 and 16..23 must be interpreted: + * + * FILE_LOCAL_ROW_ID (version = 0), used by Doris, Parquet, and ORC: + * + * byte offset 0 1..7 8..15 16..19 20..23 + * +--------+----------------+---------------+-----------+-----------+ + * | ver=0 | reserved | backend_id | file_id | row_id | + * +--------+----------------+---------------+-----------+-----------+ + * uint8 7 bytes int64 uint32 uint32 + * + * row_id is an ordinal local to the FileMapping selected by file_id. + * + * LANCE_DATASET_ROW_ID (version = 1), used by Lance: + * + * byte offset 0 1..3 4..7 8..15 16..23 + * +--------+----------+-------------+---------------+----------------+ + * | ver=1 | reserved | file_id | backend_id | lance_row_id | + * +--------+----------+-------------+---------------+----------------+ + * uint8 3 bytes uint32 int64 uint64 + * + * lance_row_id is an opaque row ID in the fixed dataset snapshot recorded by the FileMapping. + * + * The first union reuses four bytes that are padding in version 0 as Lance's file_id in version 1. + * The second union reuses the original {uint32 file_id, uint32 row_id} payload as one uint64 Lance + * row ID. Therefore, always check version before reading either union. + */ struct GlobalRowLoacationV2 { + static constexpr uint8_t VERSION = static_cast(ROW_VERSION::FILE_LOCAL_ROW_ID); + + struct FileLocalRowId { + uint32_t file_id; + uint32_t row_id; + }; + GlobalRowLoacationV2(uint8_t ver, uint64_t bid, uint32_t fid, uint32_t rid) - : version(ver), backend_id(bid), file_id(fid), row_id(rid) {} + : version(ver), + reserved_for_file_local(0), + backend_id(bid), + file_local {.file_id = fid, .row_id = rid} {} + GlobalRowLoacationV2(ROW_VERSION ver, uint64_t bid, uint32_t fid, uint64_t rid) + : version(static_cast(ver)), + lance_file_id(fid), + backend_id(bid), + lance_row_id(rid) {} + uint8_t version; + uint8_t reserved_before_file_id[3] {}; + union { + // version 0: offsets 4..7 remain reserved, preserving the original V2 layout. + uint32_t reserved_for_file_local; + // version 1: offsets 4..7 identify the FileMapping for lance_row_id. + uint32_t lance_file_id; + }; int64_t backend_id; - uint32_t file_id; - uint32_t row_id; - - auto operator<=>(const GlobalRowLoacationV2&) const = default; + union { + // version 0: file_id is at offset 16 and its uint32 row ordinal is at offset 20. + FileLocalRowId file_local; + // version 1: offsets 16..23 are one opaque uint64 Lance row ID. + uint64_t lance_row_id; + }; }; +static_assert(sizeof(GlobalRowLoacationV2) == 24); +static_assert(sizeof(GlobalRowLoacationV2::FileLocalRowId) == 8); +static_assert(offsetof(GlobalRowLoacationV2, version) == 0); +static_assert(offsetof(GlobalRowLoacationV2, reserved_before_file_id) == 1); +static_assert(offsetof(GlobalRowLoacationV2, reserved_for_file_local) == 4); +static_assert(offsetof(GlobalRowLoacationV2, lance_file_id) == 4); +static_assert(offsetof(GlobalRowLoacationV2, backend_id) == 8); +static_assert(offsetof(GlobalRowLoacationV2, file_local) == 16); +static_assert(offsetof(GlobalRowLoacationV2::FileLocalRowId, file_id) == 0); +static_assert(offsetof(GlobalRowLoacationV2::FileLocalRowId, row_id) == 4); +static_assert(offsetof(GlobalRowLoacationV2, lance_row_id) == 16); + } // namespace doris diff --git a/be/test/exec/operator/materialization_shared_state_test.cpp b/be/test/exec/operator/materialization_shared_state_test.cpp index fb3c31493a6471..4859612d62990a 100644 --- a/be/test/exec/operator/materialization_shared_state_test.cpp +++ b/be/test/exec/operator/materialization_shared_state_test.cpp @@ -17,6 +17,9 @@ #include +#include +#include + #include "core/column/column_vector.h" #include "core/data_type/data_type_number.h" #include "core/data_type/data_type_string.h" @@ -29,11 +32,30 @@ namespace doris { namespace { -void add_request_row(PRequestBlockDesc* request_block_desc, uint32_t row_id, uint32_t file_id) { +void add_request_row(PRequestBlockDesc* request_block_desc, uint64_t row_id, uint32_t file_id) { request_block_desc->add_row_id(row_id); request_block_desc->add_file_id(file_id); } +void set_lance_fetch_profile(PMultiGetBlockV2* response_block, int64_t scale) { + RuntimeProfile profile("ExternalRowIDFetcher"); + profile.add_info_string("LanceDatasetOpenTime", std::to_string(scale) + "ns"); + profile.add_info_string("LanceRowIdTakeReadTime", std::to_string(2 * scale) + "ns"); + profile.add_info_string("LanceArrowToDorisBlockTime", std::to_string(3 * scale) + "ns"); + profile.add_info_string("LanceRowIdFetchTotalTime", std::to_string(4 * scale) + "ns"); + profile.add_info_string("LanceRowIdFetchRows", std::to_string(5 * scale)); + profile.add_info_string("LanceRowIdFetchCalls", "1"); + profile.add_info_string("LanceDataCacheBytesReadFromCache", "64.00 KB"); + profile.add_info_string("LanceDataCacheBytesReadFromRemote", "32.00 KB"); + profile.add_info_string("ScannersRunningTime", "0ms"); + profile.add_info_string("InitReaderAvgTime", "0ms"); + profile.add_info_string("GetBlockAvgTime", "0ms"); + profile.add_info_string("FileReadLines", "[]"); + profile.add_info_string("FileReadBytes", "[]"); + profile.add_info_string("FileReadTime", "[]"); + profile.to_proto(response_block->mutable_profile(), 2); +} + } // namespace class MaterializationSharedStateTest : public testing::Test { @@ -125,6 +147,73 @@ TEST_F(MaterializationSharedStateTest, TestCreateMultiGetResult) { // Verify block_order_results EXPECT_EQ(_shared_state->block_order_results.size(), columns.size()); EXPECT_EQ(_shared_state->eos, true); + const auto& backend1_request = + _shared_state->rpc_struct_map[_backend_id1].request.request_block_descs(0); + ASSERT_EQ(backend1_request.row_id_size(), 1); + EXPECT_EQ(backend1_request.row_id(0), 1); + const auto& backend2_request = + _shared_state->rpc_struct_map[_backend_id2].request.request_block_descs(0); + ASSERT_EQ(backend2_request.row_id_size(), 1); + EXPECT_EQ(backend2_request.row_id(0), 2); +} + +TEST_F(MaterializationSharedStateTest, TestCreateMultiGetResultWithUint64RowId) { + Columns columns; + auto rowid_col = _string_type->create_column(); + auto* col_data = reinterpret_cast(rowid_col.get()); + + constexpr uint64_t large_row_id = + static_cast(std::numeric_limits::max()) + 17; + GlobalRowLoacationV2 location(ROW_VERSION::LANCE_DATASET_ROW_ID, _backend_id1, 7, large_row_id); + col_data->insert_data(reinterpret_cast(&location), sizeof(location)); + columns.push_back(std::move(rowid_col)); + + ASSERT_TRUE(_shared_state->create_muiltget_result(columns, false).ok()); + + const auto& request = _shared_state->rpc_struct_map[_backend_id1].request; + ASSERT_EQ(request.request_block_descs_size(), 1); + const auto& request_block = request.request_block_descs(0); + ASSERT_EQ(request_block.row_id_size(), 1); + EXPECT_EQ(request_block.row_id(0), large_row_id); + ASSERT_EQ(request_block.file_id_size(), 1); + EXPECT_EQ(request_block.file_id(0), 7); + EXPECT_EQ(request_block.row_location_version(), + static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID)); + EXPECT_EQ(_shared_state->block_order_results[0][0], _backend_id1); +} + +TEST_F(MaterializationSharedStateTest, TestRejectUnknownRowLocationVersionWithFutureSize) { + Columns columns; + auto rowid_col = _string_type->create_column(); + auto* col_data = reinterpret_cast(rowid_col.get()); + + std::array future_location {}; + future_location[0] = 99; + col_data->insert_data(future_location.data(), future_location.size()); + columns.push_back(std::move(rowid_col)); + + const Status st = _shared_state->create_muiltget_result(columns, false); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("unsupported global row location version: 99"), + std::string::npos); + EXPECT_NE(st.to_string().find("encoded_size=32"), std::string::npos); +} + +TEST_F(MaterializationSharedStateTest, TestRejectKnownRowLocationVersionWithInvalidSize) { + Columns columns; + auto rowid_col = _string_type->create_column(); + auto* col_data = reinterpret_cast(rowid_col.get()); + + std::array invalid_location {}; + invalid_location[0] = static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID); + col_data->insert_data(invalid_location.data(), invalid_location.size()); + columns.push_back(std::move(rowid_col)); + + const Status st = _shared_state->create_muiltget_result(columns, false); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("invalid global row location size for version 1"), + std::string::npos); + EXPECT_NE(st.to_string().find("actual=25, expected=24"), std::string::npos); } TEST_F(MaterializationSharedStateTest, TestMergeMultiResponse) { @@ -172,6 +261,7 @@ TEST_F(MaterializationSharedStateTest, TestMergeMultiResponse) { auto s = resp_block1.serialize(0, serialized_block, &uncompressed_size, &compressed_size, &compress_time, CompressionTypePB::LZ4); EXPECT_TRUE(s.ok()); + set_lance_fetch_profile(response_.mutable_blocks(0), 10); _shared_state->rpc_struct_map[_backend_id1].response = std::move(response_); // init the response blocks @@ -198,6 +288,7 @@ TEST_F(MaterializationSharedStateTest, TestMergeMultiResponse) { auto s = resp_block2.serialize(0, serialized_block, &uncompressed_size, &compressed_size, &compress_time, CompressionTypePB::LZ4); EXPECT_TRUE(s.ok()); + set_lance_fetch_profile(response_.mutable_blocks(0), 1); _shared_state->rpc_struct_map[_backend_id2].response = std::move(response_); } @@ -224,6 +315,20 @@ TEST_F(MaterializationSharedStateTest, TestMergeMultiResponse) { EXPECT_EQ(merged_value_col->get_data_at(1).data, nullptr); // Second value from BE1, replace by null EXPECT_EQ(*((int*)merged_value_col->get_data_at(2).data), 200); // Third value from BE2 + const auto& backend1_info = _shared_state->backend_profile_info_string.at(_backend_id1); + EXPECT_EQ("10ns, ", fmt::to_string(backend1_info.at("LanceDatasetOpenTime"))); + EXPECT_EQ("20ns, ", fmt::to_string(backend1_info.at("LanceRowIdTakeReadTime"))); + EXPECT_EQ("30ns, ", fmt::to_string(backend1_info.at("LanceArrowToDorisBlockTime"))); + EXPECT_EQ("40ns, ", fmt::to_string(backend1_info.at("LanceRowIdFetchTotalTime"))); + EXPECT_EQ("50, ", fmt::to_string(backend1_info.at("LanceRowIdFetchRows"))); + EXPECT_EQ("1, ", fmt::to_string(backend1_info.at("LanceRowIdFetchCalls"))); + EXPECT_EQ("64.00 KB, ", fmt::to_string(backend1_info.at("LanceDataCacheBytesReadFromCache"))); + EXPECT_EQ("32.00 KB, ", fmt::to_string(backend1_info.at("LanceDataCacheBytesReadFromRemote"))); + const auto& backend2_info = _shared_state->backend_profile_info_string.at(_backend_id2); + EXPECT_EQ("1ns, ", fmt::to_string(backend2_info.at("LanceDatasetOpenTime"))); + EXPECT_EQ("2ns, ", fmt::to_string(backend2_info.at("LanceRowIdTakeReadTime"))); + EXPECT_EQ("3ns, ", fmt::to_string(backend2_info.at("LanceArrowToDorisBlockTime"))); + EXPECT_EQ("4ns, ", fmt::to_string(backend2_info.at("LanceRowIdFetchTotalTime"))); } TEST_F(MaterializationSharedStateTest, TestMergeMultiResponseMultiBlocks) { diff --git a/be/test/exec/rowid_fetcher_test.cpp b/be/test/exec/rowid_fetcher_test.cpp index b0478cfc4abd74..c90dbf37d196a1 100644 --- a/be/test/exec/rowid_fetcher_test.cpp +++ b/be/test/exec/rowid_fetcher_test.cpp @@ -19,6 +19,8 @@ #include +#include +#include #include #include @@ -146,6 +148,8 @@ TEST_F(RowIdStorageReaderTest, ExternalScannerSelectionKeepsUnsupportedFormatsOn TFileRangeDesc range; range.__set_format_type(TFileFormatType::FORMAT_JNI); EXPECT_FALSE(RowIdStorageReader::should_use_file_scanner_v2(options, params, range)); + range.__set_format_type(TFileFormatType::FORMAT_LANCE); + EXPECT_FALSE(RowIdStorageReader::should_use_file_scanner_v2(options, params, range)); range.__set_format_type(TFileFormatType::FORMAT_ORC); TTableFormatFileDesc table; table.__set_table_format_type("transactional_hive"); @@ -501,4 +505,84 @@ TEST_F(RowIdStorageReaderTest, RpcHelperReportsThrownExceptionOnThreadPoolPath) EXPECT_NE(response.status().error_msgs(0).find("invalid TTypeNodeType"), std::string::npos); } +// Phase-two row fetch decodes a PRequestBlockDesc built by another BE. Each case below is a request +// that a newer sender (an unknown ROW_VERSION) or a malformed one could send; it must fail before +// any per-row lookup instead of being read as a FILE_LOCAL_ROW_ID request. +class RowIdFetchRequestValidationTest : public RowIdStorageReaderTest { +protected: + void SetUp() override { + _saved_id_manager = ExecEnv::GetInstance()->get_id_manager(); + ExecEnv::GetInstance()->set_id_manager(&_id_manager); + _request.mutable_query_id()->set_hi(37); + _request.mutable_query_id()->set_lo(1); + _id_file_map = _id_manager.add_id_file_map(_request.query_id(), 1024); + _internal_file_id = _id_file_map->get_file_mapping_id( + std::make_shared(/*tablet_id=*/1, RowsetId(), /*segment_id=*/0)); + _block_desc = _request.add_request_block_descs(); + make_slot({}).to_protobuf(_block_desc->add_slots()); + } + + void TearDown() override { ExecEnv::GetInstance()->set_id_manager(_saved_id_manager); } + + Status fetch() const { + PMultiGetResponseV2 response; + return RowIdStorageReader::read_by_rowids(_request, &response); + } + + IdManager _id_manager; + IdManager* _saved_id_manager = nullptr; + PMultiGetRequestV2 _request; + std::shared_ptr _id_file_map; + PRequestBlockDesc* _block_desc = nullptr; + uint32_t _internal_file_id = 0; +}; + +TEST_F(RowIdFetchRequestValidationTest, RejectsMismatchedFileIdAndRowIdCounts) { + _block_desc->add_file_id(_internal_file_id); + _block_desc->add_row_id(0); + _block_desc->add_row_id(1); + + const Status st = fetch(); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("file_ids=1, row_ids=2"), std::string::npos) << st; +} + +TEST_F(RowIdFetchRequestValidationTest, RejectsUnknownRowLocationVersion) { + _block_desc->add_file_id(_internal_file_id); + _block_desc->add_row_id(0); + _block_desc->set_row_location_version(99); + + const Status st = fetch(); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("unsupported row location version in fetch: 99"), + std::string::npos) + << st; +} + +TEST_F(RowIdFetchRequestValidationTest, RejectsLanceRowIdForInternalMapping) { + _block_desc->add_file_id(_internal_file_id); + _block_desc->add_row_id(0); + _block_desc->set_row_location_version(static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID)); + + const Status st = fetch(); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("Lance dataset row IDs require an external file mapping"), + std::string::npos) + << st; +} + +TEST_F(RowIdFetchRequestValidationTest, RejectsInternalRowIdBeyondUint32) { + // 2^32 is representable on the uint64 wire but is not a segment ordinal. Truncating it would + // fetch row 0 of the segment. + constexpr uint64_t row_id = static_cast(std::numeric_limits::max()) + 1; + _block_desc->add_file_id(_internal_file_id); + _block_desc->add_row_id(row_id); + + const Status st = fetch(); + EXPECT_FALSE(st.ok()); + EXPECT_NE(st.to_string().find("internal row id exceeds uint32 range: 4294967296"), + std::string::npos) + << st; +} + } // namespace doris diff --git a/be/test/exec/scan/file_scanner_v2_test.cpp b/be/test/exec/scan/file_scanner_v2_test.cpp index b38caa0a7bcebe..86abaf86958c80 100644 --- a/be/test/exec/scan/file_scanner_v2_test.cpp +++ b/be/test/exec/scan/file_scanner_v2_test.cpp @@ -477,9 +477,10 @@ TEST(FileScannerV2Test, FileScanLocalStateSelectsV2ForSupportedQueriesAndLoads) EXPECT_TRUE(FileScanLocalState::TEST_should_use_file_scanner_v2(query_options, false, params)); params.__set_format_type(TFileFormatType::FORMAT_JNI); EXPECT_TRUE(FileScanLocalState::TEST_should_use_file_scanner_v2(query_options, false, params)); + params.__set_format_type(TFileFormatType::FORMAT_LANCE); + EXPECT_TRUE(FileScanLocalState::TEST_should_use_file_scanner_v2(query_options, false, params)); - const std::vector unsupported_formats {TFileFormatType::FORMAT_ES_HTTP, - TFileFormatType::FORMAT_LANCE}; + const std::vector unsupported_formats {TFileFormatType::FORMAT_ES_HTTP}; for (const auto format : unsupported_formats) { params.__set_format_type(format); EXPECT_FALSE( @@ -525,6 +526,22 @@ TEST(FileScannerV2Test, FileScanLocalStateSelectsV2ForSupportedQueriesAndLoads) EXPECT_FALSE(FileScanLocalState::TEST_should_use_file_scanner_v2(query_options, false, params)); } +// enable_file_scanner_v2 is fuzzy=true, and Lance has no v1 reader, so a Lance query must reach v2 +// whatever the session says, as ADBC and fluss do. Loads choose by format instead of the flag, +// and Lance is not a load format, so a Lance load never selects v2. +TEST(FileScannerV2Test, LanceQueriesAlwaysUseScannerV2) { + TFileScanRangeParams params; + params.__set_format_type(TFileFormatType::FORMAT_LANCE); + + TQueryOptions disabled; + disabled.__set_enable_file_scanner_v2(false); + EXPECT_TRUE(FileScanLocalState::TEST_should_use_file_scanner_v2(disabled, false, params)); + EXPECT_FALSE(FileScanLocalState::TEST_should_use_file_scanner_v2(disabled, true, params)); + + TQueryOptions absent; + EXPECT_TRUE(FileScanLocalState::TEST_should_use_file_scanner_v2(absent, false, params)); +} + TEST(FileScannerV2Test, IcebergOrcDefaultCannotHideDeferredParquetRanges) { TQueryOptions options; options.__set_enable_file_scanner_v2(false); @@ -871,6 +888,7 @@ TEST(FileScannerV2Test, FileFormatConversionMatrix) { {TFileFormatType::FORMAT_JSON, format::FileFormat::JSON}, {TFileFormatType::FORMAT_ARROW, format::FileFormat::ARROW}, {TFileFormatType::FORMAT_WAL, format::FileFormat::WAL}, + {TFileFormatType::FORMAT_LANCE, format::FileFormat::LANCE}, {TFileFormatType::FORMAT_ORC, format::FileFormat::ORC}, }; diff --git a/be/test/format/orc/orc_read_lines.cpp b/be/test/format/orc/orc_read_lines.cpp index 25bffa06e8c12a..ee9daa1b424e3f 100644 --- a/be/test/format/orc/orc_read_lines.cpp +++ b/be/test/format/orc/orc_read_lines.cpp @@ -170,8 +170,8 @@ static void read_orc_line(int64_t line, std::string block_dump, for (auto i = 0; i < row_id_string_column.size(); i++) { GlobalRowLoacationV2 info = *((GlobalRowLoacationV2*)row_id_string_column.get_data_at(i).data); - EXPECT_EQ(info.file_id, 10); - EXPECT_EQ(info.row_id, line); + EXPECT_EQ(info.file_local.file_id, 10); + EXPECT_EQ(info.file_local.row_id, line); EXPECT_EQ(info.backend_id, BackendOptions::get_backend_id()); EXPECT_EQ(info.version, IdManager::ID_VERSION); } diff --git a/be/test/format/parquet/parquet_read_lines.cpp b/be/test/format/parquet/parquet_read_lines.cpp index 2769b94531c85e..66a5b5a166ea5b 100644 --- a/be/test/format/parquet/parquet_read_lines.cpp +++ b/be/test/format/parquet/parquet_read_lines.cpp @@ -184,8 +184,8 @@ static void read_parquet_lines(std::vector numeric_types, for (auto i = 0; i < row_id_string_column.size(); i++) { GlobalRowLoacationV2 info = *((GlobalRowLoacationV2*)row_id_string_column.get_data_at(i).data); - EXPECT_EQ(info.file_id, 10); - EXPECT_EQ(info.row_id, read_lines_tmp.front()); + EXPECT_EQ(info.file_local.file_id, 10); + EXPECT_EQ(info.file_local.row_id, read_lines_tmp.front()); read_lines_tmp.pop_front(); EXPECT_EQ(info.backend_id, BackendOptions::get_backend_id()); EXPECT_EQ(info.version, IdManager::ID_VERSION); diff --git a/be/test/format_v2/lance/lance_nested_null_test.cpp b/be/test/format_v2/lance/lance_nested_null_test.cpp new file mode 100644 index 00000000000000..c36b936de6527a --- /dev/null +++ b/be/test/format_v2/lance/lance_nested_null_test.cpp @@ -0,0 +1,293 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include +#include + +#include "common/config.h" +#include "core/column/column_array.h" +#include "core/column/column_map.h" +#include "core/column/column_nullable.h" +#include "core/column/column_struct.h" +#include "core/data_type/data_type_array.h" +#include "core/data_type/data_type_factory.hpp" +#include "core/data_type/data_type_map.h" +#include "core/data_type/data_type_nullable.h" +#include "core/data_type/data_type_struct.h" +#include "format_v2/lance/lance_reader_helper.h" + +namespace doris::format::lance { +namespace { + +class LanceNestedNullTest : public testing::Test { +protected: + void SetUp() override { + _old_validation = config::enable_arrow_input_validation; + config::enable_arrow_input_validation = true; + } + void TearDown() override { config::enable_arrow_input_validation = _old_validation; } + + DataTypePtr null_type() { + return DataTypeFactory::instance().create_data_type(TYPE_NULL, true); + } + + void expect_nulls(const IColumn& column, size_t count) { + const auto& nullable = assert_cast(column); + ASSERT_EQ(count, nullable.size()); + ASSERT_EQ(count, nullable.get_nested_column().size()); + for (size_t row = 0; row < count; ++row) { + EXPECT_TRUE(nullable.is_null_at(row)); + } + } + + void read(const std::shared_ptr& array, const DataTypePtr& type, + MutableColumnPtr* column) { + std::shared_ptr normalized; + ASSERT_TRUE(normalize_lance_arrow_array_for_test(arrow::field("value", array->type()), + array, &normalized, + arrow::default_memory_pool()) + .ok()); + *column = type->create_column(); + ASSERT_TRUE(type->get_serde() + ->read_column_from_arrow(**column, normalized.get(), 0, + normalized->length(), cctz::time_zone {}) + .ok()); + } + +private: + bool _old_validation; +}; + +TEST_F(LanceNestedNullTest, MapsNestedNullSchemas) { + const auto null_field = arrow::field("value", arrow::null()); + const auto schema = arrow::schema({ + arrow::field("list", arrow::list(null_field)), + arrow::field("large_list", arrow::large_list(null_field)), + arrow::field("fixed_list", arrow::fixed_size_list(null_field, 2)), + arrow::field("struct", arrow::struct_({null_field})), + arrow::field("map", arrow::map(arrow::utf8(), null_field)), + arrow::field("nested", arrow::list(arrow::struct_({null_field}))), + arrow::field("list_list", arrow::list(arrow::list(null_field))), + arrow::field("struct_list", + arrow::struct_({arrow::field("list", arrow::list(null_field))})), + arrow::field("list_map", arrow::list(arrow::map(arrow::utf8(), null_field))), + }); + std::vector names; + std::vector types; + ASSERT_TRUE(convert_arrow_schema_to_doris(schema, &names, &types).ok()); + ASSERT_EQ(9, types.size()); + for (const auto& type : types) { + EXPECT_NE(INVALID_TYPE, type->get_primitive_type()); + } + for (size_t i = 0; i < 3; ++i) { + ASSERT_EQ(TYPE_ARRAY, types[i]->get_primitive_type()); + EXPECT_TRUE(assert_cast(*remove_nullable(types[i])) + .get_nested_type() + ->is_null_literal()); + } +} + +TEST_F(LanceNestedNullTest, RejectsNonNullableNullLeaves) { + const auto leaf = arrow::field("item", arrow::null(), false); + for (const auto& type : std::vector> { + arrow::null(), arrow::list(leaf), arrow::large_list(leaf), + arrow::fixed_size_list(leaf, 2), arrow::struct_({leaf}), + arrow::map(arrow::null(), arrow::utf8()), arrow::map(arrow::utf8(), leaf), + arrow::list(arrow::map(arrow::utf8(), leaf))}) { + SCOPED_TRACE(type->ToString()); + std::vector names; + std::vector types; + ASSERT_TRUE(convert_arrow_schema_to_doris( + arrow::schema({arrow::field("value", type, false)}), &names, &types) + .ok()); + ASSERT_EQ(1, types.size()); + EXPECT_EQ(INVALID_TYPE, types[0]->get_primitive_type()); + } +} + +TEST_F(LanceNestedNullTest, PreservesNullTypeInNestedSchemaRpc) { + const auto null = null_type(); + const auto type = make_nullable(std::make_shared( + DataTypes {null, make_nullable(std::make_shared(null)), + make_nullable(std::make_shared( + DataTypeFactory::instance().create_data_type(TYPE_STRING, true), + null))}, + Strings {"scalar", "list", "map"})); + PTypeDesc descriptor; + type->to_protobuf(&descriptor); + ASSERT_EQ(7, descriptor.types_size()); + for (int index : {1, 3, 6}) { + EXPECT_EQ(TPrimitiveType::NULL_TYPE, descriptor.types(index).scalar_type().type()); + } +} + +TEST_F(LanceNestedNullTest, ReadsNullLeafRangesWithoutPhysicalBuffers) { + const auto type = null_type(); + const auto source = std::make_shared(7)->Slice(2, 4); + for (bool validation : {false, true}) { + config::enable_arrow_input_validation = validation; + auto column = type->create_column(); + column->insert_default(); + ASSERT_TRUE( + type->get_serde() + ->read_column_from_arrow(*column, source.get(), 1, 3, cctz::time_zone {}) + .ok()); + expect_nulls(*column, 3); + ASSERT_TRUE( + type->get_serde() + ->read_column_from_arrow(*column, source.get(), 4, 4, cctz::time_zone {}) + .ok()); + expect_nulls(*column, 3); + } +} + +TEST_F(LanceNestedNullTest, RejectsInvalidNullRangesBeforeAppending) { + const auto type = null_type(); + const arrow::NullArray source(3); + for (bool validation : {false, true}) { + config::enable_arrow_input_validation = validation; + auto column = type->create_column(); + column->insert_default(); + for (const auto& [start, end] : + std::vector> {{-1, 1}, {2, 1}, {0, 4}}) { + EXPECT_FALSE(type->get_serde() + ->read_column_from_arrow(*column, &source, start, end, + cctz::time_zone {}) + .ok()); + expect_nulls(*column, 1); + } + } +} + +TEST_F(LanceNestedNullTest, ReadsNullStructParents) { + const std::vector validity {0x05}; + const auto source = std::make_shared( + arrow::struct_({arrow::field("empty", arrow::null())}), 3, + arrow::ArrayVector {std::make_shared(3)}, + arrow::Buffer::Wrap(validity), 1); + const auto type = make_nullable( + std::make_shared(DataTypes {null_type()}, Strings {"empty"})); + MutableColumnPtr column; + read(source->Slice(1, 2), type, &column); + ASSERT_NE(nullptr, column.get()); + const auto& parent = assert_cast(*column); + EXPECT_EQ((NullMap {1, 0}), parent.get_null_map_data()); + const auto& structure = assert_cast(parent.get_nested_column()); + expect_nulls(structure.get_column(0), 2); +} + +TEST_F(LanceNestedNullTest, ReadsNullListElementsAndPreservesParentShape) { + const auto null = null_type(); + const auto type = make_nullable(std::make_shared(null)); + const auto values = std::make_shared(5); + const std::vector offsets {0, 2, 2, 2, 5}; + const std::vector large_offsets {0, 2, 2, 2, 5}; + const std::vector validity {0x0d}; + const std::vector> arrays { + std::make_shared(arrow::list(arrow::null()), 4, + arrow::Buffer::Wrap(offsets), values, + arrow::Buffer::Wrap(validity), 1), + std::make_shared(arrow::large_list(arrow::null()), 4, + arrow::Buffer::Wrap(large_offsets), values, + arrow::Buffer::Wrap(validity), 1), + }; + for (const auto& source : arrays) { + for (bool sliced : {false, true}) { + MutableColumnPtr column; + read(sliced ? source->Slice(1, 3) : source, type, &column); + ASSERT_NE(nullptr, column.get()); + const auto& parent = assert_cast(*column); + EXPECT_EQ((sliced ? NullMap {1, 0, 0} : NullMap {0, 1, 0, 0}), + parent.get_null_map_data()); + const auto& list = assert_cast(parent.get_nested_column()); + EXPECT_EQ((sliced ? ColumnArray::Offsets64 {0, 0, 3} + : ColumnArray::Offsets64 {2, 2, 2, 5}), + list.get_offsets()); + expect_nulls(list.get_data(), sliced ? 3 : 5); + } + } +} + +TEST_F(LanceNestedNullTest, ReadsFixedNullLists) { + const std::vector validity {0x05}; + const auto source = std::make_shared( + arrow::fixed_size_list(arrow::null(), 2), 3, std::make_shared(6), + arrow::Buffer::Wrap(validity), 1); + const auto type = make_nullable(std::make_shared(null_type())); + MutableColumnPtr column; + read(source->Slice(1, 2), type, &column); + ASSERT_NE(nullptr, column.get()); + const auto& parent = assert_cast(*column); + EXPECT_EQ((NullMap {1, 0}), parent.get_null_map_data()); + const auto& list = assert_cast(parent.get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {2, 4}), list.get_offsets()); + expect_nulls(list.get_data(), 4); +} + +TEST_F(LanceNestedNullTest, ReadsNullStructFieldsInsideLists) { + const auto nulls = std::make_shared(3); + const std::vector ids {10, 20, 30}; + const auto id_array = std::make_shared(3, arrow::Buffer::Wrap(ids)); + const auto struct_type = arrow::struct_( + {arrow::field("empty", arrow::null()), arrow::field("id", arrow::int32())}); + const auto structs = std::make_shared(struct_type, 3, + arrow::ArrayVector {nulls, id_array}); + const std::vector offsets {0, 1, 3}; + const auto source = std::make_shared(arrow::list(struct_type), 2, + arrow::Buffer::Wrap(offsets), structs); + const auto doris_struct = make_nullable(std::make_shared( + DataTypes {null_type(), DataTypeFactory::instance().create_data_type(TYPE_INT, true)}, + Strings {"empty", "id"})); + MutableColumnPtr column; + read(source->Slice(1, 1), make_nullable(std::make_shared(doris_struct)), + &column); + ASSERT_NE(nullptr, column.get()); + const auto& list = assert_cast( + assert_cast(*column).get_nested_column()); + const auto& result = assert_cast( + assert_cast(list.get_data()).get_nested_column()); + expect_nulls(result.get_column(0), 2); + const auto& id_column = assert_cast( + assert_cast(result.get_column(1)).get_nested_column()); + EXPECT_EQ((ColumnInt32::Container {20, 30}), id_column.get_data()); +} + +TEST_F(LanceNestedNullTest, ReadsNullMapValues) { + const std::vector keys {10, 20, 30}; + const std::vector offsets {0, 1, 1, 3}; + const std::vector validity {0x05}; + const auto source = std::make_shared( + arrow::map(arrow::int32(), arrow::null()), 3, arrow::Buffer::Wrap(offsets), + std::make_shared(3, arrow::Buffer::Wrap(keys)), + std::make_shared(3), arrow::Buffer::Wrap(validity), 1); + const auto type = make_nullable(std::make_shared( + DataTypeFactory::instance().create_data_type(TYPE_INT, true), null_type())); + MutableColumnPtr column; + read(source->Slice(1, 2), type, &column); + ASSERT_NE(nullptr, column.get()); + const auto& parent = assert_cast(*column); + EXPECT_EQ((NullMap {1, 0}), parent.get_null_map_data()); + const auto& map = assert_cast(parent.get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {0, 2}), map.get_offsets()); + expect_nulls(map.get_values(), 2); + const auto& key_column = assert_cast( + assert_cast(map.get_keys()).get_nested_column()); + EXPECT_EQ((ColumnInt32::Container {20, 30}), key_column.get_data()); +} + +} // namespace +} // namespace doris::format::lance diff --git a/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp b/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp new file mode 100644 index 00000000000000..c1b7bdcc1af085 --- /dev/null +++ b/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp @@ -0,0 +1,303 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_runtime_filter_helper.h" + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "core/data_type/data_type_date_or_datetime_v2.h" +#include "core/data_type/data_type_decimal.h" +#include "core/data_type/data_type_nullable.h" +#include "core/data_type/data_type_number.h" +#include "core/data_type/data_type_string.h" +#include "core/field.h" +#include "exprs/create_predicate_function.h" +#include "exprs/hybrid_set.h" +#include "exprs/runtime_filter_expr.h" +#include "exprs/vbloom_predicate.h" +#include "exprs/vdirect_in_predicate.h" +#include "exprs/vectorized_fn_call.h" +#include "exprs/vexpr_context.h" +#include "exprs/vliteral.h" +#include "exprs/vslot_ref.h" +#include "format/format_common.h" + +namespace doris::format::lance { +namespace { + +TExprNode runtime_in_node() { + TExprNode node; + node.__set_type(std::make_shared()->to_thrift()); + node.__set_node_type(TExprNodeType::IN_PRED); + node.in_predicate.__set_is_not_in(false); + node.__set_opcode(TExprOpcode::FILTER_IN); + node.__set_is_nullable(false); + return node; +} + +VExprContextSPtr wrap_runtime_filter(VExprSPtr impl, const TExprNode& node, int filter_id, + bool null_aware = false) { + return VExprContext::create_shared( + RuntimeFilterExpr::create_shared(node, std::move(impl), 0.0, null_aware, filter_id)); +} + +VExprContextSPtr int64_runtime_in(std::string column_name, std::vector values, + int filter_id) { + std::shared_ptr filter(create_set(TYPE_BIGINT, false)); + for (const auto value : values) { + filter->insert(&value); + } + auto node = runtime_in_node(); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child(VSlotRef::create_shared( + 0, 0, -1, make_nullable(std::make_shared()), std::move(column_name))); + return wrap_runtime_filter(std::move(predicate), node, filter_id); +} + +VExprContextSPtr string_runtime_in(std::string column_name, const std::string& value, + int filter_id) { + std::shared_ptr filter(create_set(TYPE_STRING, false)); + StringRef value_ref(value.data(), value.size()); + filter->insert(&value_ref); + auto node = runtime_in_node(); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child(VSlotRef::create_shared( + 0, 0, -1, make_nullable(std::make_shared()), std::move(column_name))); + return wrap_runtime_filter(std::move(predicate), node, filter_id); +} + +template +VExprContextSPtr typed_runtime_in(std::string column_name, + const typename PrimitiveTypeTraits::CppType& value, + DataTypePtr value_type, int filter_id) { + std::shared_ptr filter(create_set(PT, false)); + filter->insert(&value); + auto node = runtime_in_node(); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child( + VSlotRef::create_shared(0, 0, -1, make_nullable(value_type), std::move(column_name))); + return wrap_runtime_filter(std::move(predicate), node, filter_id); +} + +template +VExprContextSPtr typed_runtime_range(std::string column_name, TExprOpcode::type opcode, + const typename PrimitiveTypeTraits::CppType& value, + DataTypePtr value_type, int filter_id, + bool null_aware = false) { + const auto nullable_value_type = make_nullable(value_type); + const auto result_type = make_nullable(std::make_shared()); + + TFunctionName function_name; + function_name.__set_function_name(opcode == TExprOpcode::GE ? "ge" : "le"); + TFunction function; + function.__set_name(function_name); + function.__set_binary_type(TFunctionBinaryType::BUILTIN); + function.__set_arg_types({nullable_value_type->to_thrift(), value_type->to_thrift()}); + function.__set_ret_type(result_type->to_thrift()); + function.__set_has_var_args(false); + + TExprNode predicate_node; + predicate_node.__set_node_type(TExprNodeType::BINARY_PRED); + predicate_node.__set_opcode(opcode); + predicate_node.__set_type(result_type->to_thrift()); + predicate_node.__set_fn(function); + predicate_node.__set_num_children(2); + predicate_node.__set_is_nullable(true); + auto predicate = VectorizedFnCall::create_shared(predicate_node); + predicate->add_child( + VSlotRef::create_shared(0, 0, -1, nullable_value_type, std::move(column_name))); + predicate->add_child(VLiteral::create_shared(value_type, Field::create_field(value))); + + TExprNode wrapper_node; + wrapper_node.__set_type(std::make_shared()->to_thrift()); + wrapper_node.__set_is_nullable(false); + return wrap_runtime_filter(std::move(predicate), wrapper_node, filter_id, null_aware); +} + +VExprContextSPtr int64_runtime_range(std::string column_name, TExprOpcode::type opcode, + int64_t value, int filter_id, bool null_aware = false) { + return typed_runtime_range(std::move(column_name), opcode, value, + std::make_shared(), filter_id, + null_aware); +} + +VExprContextSPtr unsupported_bloom_runtime_filter(std::string column_name, int filter_id) { + auto node = runtime_in_node(); + node.__set_node_type(TExprNodeType::BLOOM_PRED); + node.__set_opcode(TExprOpcode::RT_FILTER); + auto predicate = VBloomPredicate::create_shared(node); + predicate->add_child(VSlotRef::create_shared( + 0, 0, -1, make_nullable(std::make_shared()), std::move(column_name))); + return wrap_runtime_filter(std::move(predicate), node, filter_id); +} + +TEST(LanceRuntimeFilterHelperTest, ConvertsSupportedFiltersToLanceSql) { + const VExprContextSPtrs conjuncts { + int64_runtime_in("order`key", {7}, 3), + string_runtime_in("author", "O'Reilly", 5), + int64_runtime_range("score", TExprOpcode::GE, 10, 7), + int64_runtime_range("score", TExprOpcode::LE, 20, 7), + }; + + const auto schema = arrow::schema({arrow::field("order`key", arrow::int64()), + arrow::field("author", arrow::utf8()), + arrow::field("score", arrow::int64())}); + const auto result = get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr); + ASSERT_NE(result, nullptr); + EXPECT_EQ( + "(`order``key` IN (7)) AND (`author` IN ('O''Reilly')) AND " + "(`score` >= 10) AND (`score` <= 20)", + result->expression); + EXPECT_EQ((std::vector {3, 5, 7}), result->pushable_filter_ids); + EXPECT_TRUE(result->skipped_filter_ids.empty()); +} + +TEST(LanceRuntimeFilterHelperTest, SeparatesSupportedAndUnsupportedRuntimeFilters) { + const VExprContextSPtrs conjuncts { + int64_runtime_in("id", {2}, 3), + unsupported_bloom_runtime_filter("id", 8), + }; + + const auto schema = arrow::schema({arrow::field("id", arrow::int64())}); + const auto result = get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr); + ASSERT_NE(result, nullptr); + EXPECT_EQ("(`id` IN (2))", result->expression); + EXPECT_EQ((std::vector {3}), result->pushable_filter_ids); + EXPECT_EQ((std::vector {8}), result->skipped_filter_ids); +} + +TEST(LanceRuntimeFilterHelperTest, IgnoresNonRuntimeFilterConjuncts) { + const VExprContextSPtrs conjuncts {VExprContext::create_shared(VSlotRef::create_shared( + 0, 0, -1, std::make_shared(), "ordinary_column"))}; + + const auto schema = arrow::schema({arrow::field("ordinary_column", arrow::int64())}); + EXPECT_EQ(nullptr, get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr)); +} + +TEST(LanceRuntimeFilterHelperTest, SkipsNullAwareRangeFilters) { + const VExprContextSPtrs conjuncts { + int64_runtime_range("id", TExprOpcode::GE, 10, 21, true), + int64_runtime_range("id", TExprOpcode::LE, 20, 21, true), + }; + const auto schema = arrow::schema({arrow::field("id", arrow::int64())}); + + const auto result = get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr); + ASSERT_NE(result, nullptr); + EXPECT_TRUE(result->expression.empty()); + EXPECT_TRUE(result->pushable_filter_ids.empty()); + EXPECT_EQ((std::vector {21}), result->skipped_filter_ids); +} + +TEST(LanceRuntimeFilterHelperTest, SkipsStringsThatAreUnsafeAcrossLanceCStringBoundary) { + const VExprContextSPtrs conjuncts { + string_runtime_in("embedded_nul", std::string("a\0b", 3), 22), + string_runtime_in("invalid_utf8", std::string(1, static_cast(0xff)), 23), + }; + const auto schema = arrow::schema({arrow::field("embedded_nul", arrow::utf8()), + arrow::field("invalid_utf8", arrow::utf8())}); + + const auto result = get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr); + ASSERT_NE(result, nullptr); + EXPECT_TRUE(result->expression.empty()); + EXPECT_TRUE(result->pushable_filter_ids.empty()); + EXPECT_EQ((std::vector {22, 23}), result->skipped_filter_ids); +} + +TEST(LanceRuntimeFilterHelperTest, SkipsTimestampNanoRuntimeFilter) { + DateV2Value value; + value.unchecked_set_time(2024, 2, 29, 12, 34, 56, 123456); + const VExprContextSPtrs conjuncts { + typed_runtime_range("timestamp_value", TExprOpcode::LE, value, + std::make_shared(6), 24)}; + const auto nano_schema = arrow::schema( + {arrow::field("timestamp_value", arrow::timestamp(arrow::TimeUnit::NANO))}); + const auto micro_schema = arrow::schema( + {arrow::field("timestamp_value", arrow::timestamp(arrow::TimeUnit::MICRO))}); + + const auto skipped = get_or_create_lance_runtime_filter_sql(conjuncts, *nano_schema, nullptr); + ASSERT_NE(skipped, nullptr); + EXPECT_TRUE(skipped->expression.empty()); + EXPECT_EQ((std::vector {24}), skipped->skipped_filter_ids); + + const auto pushed = get_or_create_lance_runtime_filter_sql(conjuncts, *micro_schema, nullptr); + ASSERT_NE(pushed, nullptr); + EXPECT_EQ("(`timestamp_value` <= TIMESTAMP '2024-02-29 12:34:56.123456')", pushed->expression); +} + +TEST(LanceRuntimeFilterHelperTest, SkipsPhysicalNumericTypesUnsupportedByPinnedPlanner) { + const auto wide_uint64 = static_cast(std::numeric_limits::max()) + 1; + const VExprContextSPtrs conjuncts { + typed_runtime_in("half_float", 1.5F, std::make_shared(), + 25), + typed_runtime_in("scaled_decimal", Decimal32(12345), + std::make_shared(9, 2), 26), + typed_runtime_in("wide_decimal", Decimal128V3(wide_uint64), + std::make_shared(38, 0), 27), + typed_runtime_in("wide_uint64", wide_uint64, + std::make_shared(), 28), + }; + const auto schema = arrow::schema({ + arrow::field("half_float", arrow::float16()), + arrow::field("scaled_decimal", arrow::decimal128(9, 2)), + arrow::field("wide_decimal", arrow::decimal128(38, 0)), + arrow::field("wide_uint64", arrow::uint64()), + }); + + const auto result = get_or_create_lance_runtime_filter_sql(conjuncts, *schema, nullptr); + ASSERT_NE(result, nullptr); + EXPECT_TRUE(result->expression.empty()); + EXPECT_TRUE(result->pushable_filter_ids.empty()); + EXPECT_EQ((std::vector {25, 26, 27, 28}), result->skipped_filter_ids); +} + +TEST(LanceRuntimeFilterHelperTest, ReusesSnapshotAcrossParallelReaders) { + ShardedKVCache cache(2); + const VExprContextSPtrs first_conjuncts { + int64_runtime_in("id", {2}, 12), + int64_runtime_range("score", TExprOpcode::GE, 10, 13), + }; + const VExprContextSPtrs reordered_conjuncts { + int64_runtime_range("score", TExprOpcode::GE, 10, 13), + int64_runtime_in("id", {2}, 12), + }; + + const auto schema = arrow::schema( + {arrow::field("id", arrow::int64()), arrow::field("score", arrow::int64())}); + const auto first = get_or_create_lance_runtime_filter_sql(first_conjuncts, *schema, &cache); + const auto reused = + get_or_create_lance_runtime_filter_sql(reordered_conjuncts, *schema, &cache); + ASSERT_NE(first, nullptr); + ASSERT_NE(reused, nullptr); + EXPECT_EQ(first.get(), reused.get()); + EXPECT_EQ("(`id` IN (2)) AND (`score` >= 10)", reused->expression); + + const auto different = get_or_create_lance_runtime_filter_sql({int64_runtime_in("id", {2}, 14)}, + *schema, &cache); + ASSERT_NE(different, nullptr); + EXPECT_NE(first.get(), different.get()); +} + +} // namespace +} // namespace doris::format::lance diff --git a/be/test/format_v2/lance/lance_session_manager_test.cpp b/be/test/format_v2/lance/lance_session_manager_test.cpp new file mode 100644 index 00000000000000..5672913245a5a5 --- /dev/null +++ b/be/test/format_v2/lance/lance_session_manager_test.cpp @@ -0,0 +1,131 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/lance/lance_session_manager.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include "common/metrics/doris_metrics.h" +#include "common/metrics/metrics.h" + +namespace doris::format::lance { +namespace { + +using LanceDatasetPtr = std::unique_ptr; + +std::filesystem::path lance_fixture_path() { + // __FILE__ is relative under -ffile-prefix-map; UTs run from the repository root. + return "./be/test/format_v2/table/lance/data/all_types.lance"; +} + +std::filesystem::path unique_cache_path() { + const auto suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + return std::filesystem::temp_directory_path() / + ("doris_lance_foyer_cache_" + std::to_string(suffix)); +} + +TEST(LanceSessionManagerTest, SessionAndDataCacheConfigurationsAreIndependent) { + LanceSessionManager::Config config { + .lance_index_cache_size_bytes = 0, + .lance_metadata_cache_size_bytes = 0, + .enable_lance_data_cache = false, + // These are deliberately invalid and must be ignored while the data cache is off. + .lance_data_cache_path = "", + .lance_data_cache_disk_capacity_bytes = -1, + .lance_data_cache_read_block_size_bytes = -1, + }; + LanceSessionManager manager(std::move(config)); + LanceDataset* raw_dataset = nullptr; + ASSERT_TRUE(manager.open_dataset(lance_fixture_path().c_str(), nullptr, 0, &raw_dataset).ok()); + LanceDatasetPtr dataset(raw_dataset, lance_dataset_close); + ASSERT_NE(dataset, nullptr); +} + +TEST(LanceSessionManagerTest, PublishesSessionCacheMetrics) { + constexpr int64_t INDEX_CACHE_CAPACITY = 8 * 1024 * 1024; + constexpr int64_t METADATA_CACHE_CAPACITY = 4 * 1024 * 1024; + LanceSessionManager::Config config { + .lance_index_cache_size_bytes = INDEX_CACHE_CAPACITY, + .lance_metadata_cache_size_bytes = METADATA_CACHE_CAPACITY, + .enable_lance_data_cache = false, + .lance_data_cache_path = "", + .lance_data_cache_disk_capacity_bytes = 0, + .lance_data_cache_read_block_size_bytes = 0, + }; + LanceSessionManager manager(std::move(config)); + LanceDataset* raw_dataset = nullptr; + ASSERT_TRUE(manager.open_dataset(lance_fixture_path().c_str(), nullptr, 0, &raw_dataset).ok()); + LanceDatasetPtr dataset(raw_dataset, lance_dataset_close); + ASSERT_NE(dataset, nullptr); + + auto* entity = DorisMetrics::instance()->server_entity(); + const auto gauge = [entity](const char* name) { + return static_cast(entity->get_metric(name)); + }; + auto* index_capacity = gauge("lance_session_index_cache_capacity_bytes"); + auto* metadata_capacity = gauge("lance_session_metadata_cache_capacity_bytes"); + ASSERT_NE(index_capacity, nullptr); + ASSERT_NE(metadata_capacity, nullptr); + EXPECT_EQ(index_capacity->value(), INDEX_CACHE_CAPACITY); + EXPECT_EQ(metadata_capacity->value(), METADATA_CACHE_CAPACITY); + EXPECT_NE(gauge("lance_session_index_cache_usage_bytes"), nullptr); + EXPECT_NE(gauge("lance_session_index_cache_entries"), nullptr); + EXPECT_NE(gauge("lance_session_metadata_cache_usage_bytes"), nullptr); + EXPECT_NE(gauge("lance_session_metadata_cache_entries"), nullptr); + EXPECT_NE(entity->get_metric("lance_session_index_cache_hits_total"), nullptr); + EXPECT_NE(entity->get_metric("lance_session_index_cache_misses_total"), nullptr); + EXPECT_NE(entity->get_metric("lance_session_metadata_cache_hits_total"), nullptr); + EXPECT_NE(entity->get_metric("lance_session_metadata_cache_misses_total"), nullptr); +} + +TEST(LanceSessionManagerTest, CreatesFoyerBackedSession) { + const auto cache_path = unique_cache_path(); + std::filesystem::create_directories(cache_path); + const auto cleanup = [&cache_path] { + std::error_code error; + std::filesystem::remove_all(cache_path, error); + }; + + LanceSessionManager::Config config { + .lance_index_cache_size_bytes = 0, + .lance_metadata_cache_size_bytes = 0, + .enable_lance_data_cache = true, + .lance_data_cache_path = cache_path.string(), + .lance_data_cache_disk_capacity_bytes = 32 * 1024 * 1024, + .lance_data_cache_read_block_size_bytes = 64 * 1024, + }; + { + LanceSessionManager manager(std::move(config)); + LanceDataset* raw_dataset = nullptr; + const auto status = + manager.open_dataset(lance_fixture_path().c_str(), nullptr, 0, &raw_dataset); + LanceDatasetPtr dataset(raw_dataset, lance_dataset_close); + EXPECT_TRUE(status.ok()) << status; + EXPECT_NE(dataset, nullptr); + } + cleanup(); +} + +} // namespace +} // namespace doris::format::lance diff --git a/be/test/format_v2/orc/orc_reader_test.cpp b/be/test/format_v2/orc/orc_reader_test.cpp index a2cb3123af7086..e79d13a916bb2e 100644 --- a/be/test/format_v2/orc/orc_reader_test.cpp +++ b/be/test/format_v2/orc/orc_reader_test.cpp @@ -5412,8 +5412,8 @@ TEST_F(NewOrcReaderTest, ReadGlobalRowIdVirtualColumn) { std::memcpy(&location, rowid.data, sizeof(location)); EXPECT_EQ(location.version, context.version); EXPECT_EQ(location.backend_id, context.backend_id); - EXPECT_EQ(location.file_id, context.file_id); - EXPECT_EQ(location.row_id, row); + EXPECT_EQ(location.file_local.file_id, context.file_id); + EXPECT_EQ(location.file_local.row_id, row); } } diff --git a/be/test/format_v2/parquet/parquet_reader_control_test.cpp b/be/test/format_v2/parquet/parquet_reader_control_test.cpp index 37deb32d5bf37b..fde32ee81ad025 100644 --- a/be/test/format_v2/parquet/parquet_reader_control_test.cpp +++ b/be/test/format_v2/parquet/parquet_reader_control_test.cpp @@ -520,10 +520,10 @@ TEST(ParquetVirtualColumnReaderTest, GlobalRowIdReadSkipSelectAndInvalidArgs) { const auto first = decode_rowid(strings, 0); EXPECT_EQ(first.version, context.version); EXPECT_EQ(first.backend_id, context.backend_id); - EXPECT_EQ(first.file_id, context.file_id); - EXPECT_EQ(first.row_id, 10); - EXPECT_EQ(decode_rowid(strings, 1).row_id, 11); - EXPECT_EQ(decode_rowid(strings, 2).row_id, 14); + EXPECT_EQ(first.file_local.file_id, context.file_id); + EXPECT_EQ(first.file_local.row_id, 10); + EXPECT_EQ(decode_rowid(strings, 1).file_local.row_id, 11); + EXPECT_EQ(decode_rowid(strings, 2).file_local.row_id, 14); GlobalRowIdColumnReader select_reader(context, 20); SelectionVector selection(2); @@ -533,8 +533,8 @@ TEST(ParquetVirtualColumnReaderTest, GlobalRowIdReadSkipSelectAndInvalidArgs) { ASSERT_TRUE(select_reader.select(selection, 2, 5, selected_column).ok()); const auto& selected_strings = assert_cast(*selected_column); ASSERT_EQ(selected_strings.size(), 2); - EXPECT_EQ(decode_rowid(selected_strings, 0).row_id, 21); - EXPECT_EQ(decode_rowid(selected_strings, 1).row_id, 23); + EXPECT_EQ(decode_rowid(selected_strings, 0).file_local.row_id, 21); + EXPECT_EQ(decode_rowid(selected_strings, 1).file_local.row_id, 23); MutableColumnPtr null_column; EXPECT_FALSE(reader.read(1, null_column, &rows_read).ok()); diff --git a/be/test/format_v2/parquet/parquet_reader_test.cpp b/be/test/format_v2/parquet/parquet_reader_test.cpp index 027f20ae89fe23..4aa64afd2f53d4 100644 --- a/be/test/format_v2/parquet/parquet_reader_test.cpp +++ b/be/test/format_v2/parquet/parquet_reader_test.cpp @@ -4210,8 +4210,8 @@ TEST_F(NewParquetReaderTest, GlobalRowIdSchemaAndSelectionUseFileRowPosition) { const auto location = decode_rowid(rowids, row); EXPECT_EQ(location.version, context.version); EXPECT_EQ(location.backend_id, context.backend_id); - EXPECT_EQ(location.file_id, context.file_id); - EXPECT_EQ(location.row_id, static_cast(row + 2)); + EXPECT_EQ(location.file_local.file_id, context.file_id); + EXPECT_EQ(location.file_local.row_id, static_cast(row + 2)); } } diff --git a/be/test/format_v2/parquet/parquet_scan_test.cpp b/be/test/format_v2/parquet/parquet_scan_test.cpp index c8ac9506387ee4..888e9255ddad2c 100644 --- a/be/test/format_v2/parquet/parquet_scan_test.cpp +++ b/be/test/format_v2/parquet/parquet_scan_test.cpp @@ -2518,8 +2518,8 @@ TEST_F(ParquetScanTest, GlobalRowIdUsesFileLocalPositionForScanRange) { const auto location = decode_rowid(rowid_column, row); EXPECT_EQ(location.version, context.version); EXPECT_EQ(location.backend_id, context.backend_id); - EXPECT_EQ(location.file_id, context.file_id); - row_ids.push_back(location.row_id); + EXPECT_EQ(location.file_local.file_id, context.file_id); + row_ids.push_back(location.file_local.row_id); } } diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_transactions/0-2e8be81c-130f-4554-a180-287e92c2b147.txn b/be/test/format_v2/table/lance/data/all_types.lance/_transactions/0-2e8be81c-130f-4554-a180-287e92c2b147.txn new file mode 100644 index 0000000000000000000000000000000000000000..df90ebaf40ec875f9549d0cc72f89a8acc962efe GIT binary patch literal 1659 zcmZ{k*>c)26ozZoumz&9C}eXWkTf%--oVDUeTDYgBikaQsj(T`q@lOH>0|U6`X+s% zR+jBVq>W()M(6wWpG7jbRXz>5gvLD^+tG#aZ2Z$agTfd?yr&rE;ZuP^&kZ zt;2Tb2psp|$?4gpIG#*zhW`b+z5W263{TI_FT}!aLHenS0yqPeF!*W_SNxMd!d;p8 z@j^2MFa~uy2t4Z%d0Pwxo+%{(Nubaav|{4#s3zkIdmLRi7V4HD=$EKa+N)dMHqGinr^VQJ)9L$<+(~4V&DhR zaIr&ZC6;VS@POyqS;UkT!<0?wwP0x}u=b{4X{MFQG?m;zq84>t(b=<*G7ny2SQ>1+ zEiufrFT7+)U7Bx8mYItRT6tosVaXC~@tPw(GnLk#me2X9OPbmtuX(OUnJ-LrnWe`0 z=nG3VV4K%G`y?8j%F^RC0reO^p+Zac%&ufcow8^AZ>{EsU1F?UX^kD16;20FY;2nhG zfGyFs(5Cc3Ilba1bUC?*nU4snn=n`r55pmEl5HjlR9SLJyo0CWFyD{5vmHJBh&^~l z1Kf^NP|(TFU0da_0(;H9x%KVFZSH7K*!yNC?J<28}p}g4r+L9W7nl~fj2xgSdk~}S`qn%t)y8ddv%#=(yhPQpGqkJ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_transactions/1-e24b25eb-06e7-419b-9c18-221403eb2d56.txn b/be/test/format_v2/table/lance/data/all_types.lance/_transactions/1-e24b25eb-06e7-419b-9c18-221403eb2d56.txn new file mode 100644 index 0000000000000000000000000000000000000000..736aa2f3f2341f1e7830753eef670f2a2f876818 GIT binary patch literal 183 zcmd;J6jDhwGD$KrO-<4@FiSPpH8HeI(zQ%Bw9qv&GBhzTPE9gOF*RGn*3HP(!6?+s z$Yo(@UTAOI$TY!Gc|l$MlgW@ch+VVaa`YGG*v)M{p$nwV&4pqG=Fmz*jj&%nsU z%)-jX&cVsW&BM#bFCZu+EGi)>EhDd>tg5Cig;jxwsF=8fq?ELbtegUq29v=%V+BS4 DZJ8g} literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_transactions/2-fb9b3e03-5fe0-450c-83a9-03188bbf2250.txn b/be/test/format_v2/table/lance/data/all_types.lance/_transactions/2-fb9b3e03-5fe0-450c-83a9-03188bbf2250.txn new file mode 100644 index 0000000000000000000000000000000000000000..333ab4adb9c2b575fefc424c575bc82e88331a09 GIT binary patch literal 183 zcmZvSOAf*y6h#HK*7`@Q{b`%{onRh?Mi{yjXkcXAgcB2Y;j&zfrekl;Y_M^+Bj>R z6I_Ej-}Jq;tpoVXaEQ}17 z`i%O%feEtuA(^-g991N_TB|pjttDl-y|TL2SqB?kxU;u^q@JE%T<*RXu-V<(hC91^ z`v-@rd?lk_U#ap>%}Pbt2aRd;#tA(2@A8ta>%k-$8m6S20)<9V=-iQT#-Jo(YH0vT z9CQIzl3+6DoB}5=;P|?k;jX}HJSJiI1gwg{R8$*g$WyTN1gbp;VZD%T)8OU_SAUKh z8X4{!Ec;;F97pU2K)#p9!bjM07O_8z`E^`dDdYAtR=yi z#R(bT7Ta!!_|9Y0p2ha(pS{jlC;2HS(eA-{H&Y zi&*HWpm{ru{2*j-R}?8WLlS4!+#s35J$1L-kE>@phU|`oaGwW+9WOxRE{KC9h6mz? z%W1~_++yZ_vq=0LG2iHyxEi_K{Rn<=0+1QhAPJh!dIXZyU~=z z4xKx3G@H5%9*Y*S-3O4{O`7%t7oDI71TpQc~LGzVexbh zz!Do%=6Sp?@KQu=`@uc)oH%&PoU~YW_Sa?Ov|8Y4sPIXW4wiJ36gT|NL}a8HhBxx4 z?vLD&Nqua%uI~CDbf|ncQYG+>)G8-jI@(e{nIS&la$~wr*>GrJb3oa^v~9>|CezKt9HBf^TVING&+C$_3)egg-oyY-hcUS=qLA+FIN?QcG3@ky4gp4 b^tN3-SM|RBgH-vEe~9FlT>0eHr?3A3qob$8 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551613.manifest b/be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551613.manifest new file mode 100644 index 0000000000000000000000000000000000000000..90de3f8f2e17b326fe4a755485bf2aed8c79932e GIT binary patch literal 2060 zcmd6oyKdt~6oy4zZA!M~v1O0%^xbPfTHZvF1X3)v4N@gQI%0+#8Qi5vgQUFHwrPUR zO9ZL%23w@a8>C2)R|t?I<+hvQkd#N>HIO1jrjV$a@1OsiGee#Cl}cqv0B1ziu{tEU zFB@dk*A)x*Emtx7s;cO+MzHD)jh~u72;%nw_)ZW_MONsLv%x;;bM~#MV@wP~*UTX% zL(@{J)EE+k6nPM!&?VrgB2;VjMzgiFEVerG{Rw?q`9`-qtqU z+1=YeIFzbaRrzmC6253vD&jt9#?c$c_oR>I5Uv}3m>Rk%h^IirQ4~0LD3}r`@Ju~h zkOc}|fR)q_XH-*g)dh~un~b{xtH}ff!2?+1!OT=K743Q+T$QXWpK>}jIA*25_G(1iUU$4(c-ygzQn-ipzRUYrkDAM#K31j^iWz}2f$-&K~rrH&DaU+U@i40 zBuUZaw%B%q=ezS&dz#qaeEpKCPV!rh;uy`~CePOcKS>$W19d+o6WEhB*;`rM{SzRf zl;(t|DM{cKudPkcZ6R%ukTMk5mbR|58cf|(+yJ%LWCo$M&8BEsXi>I6BY(wr=ydiX z7CsVa-Nw<_4+z}lO^VHAfhy~+pU&W(v|H{+-Pw)-xg!DGrwiPU7od6PCw`j11AfDH zmhm7Dkww2*Bz`Czl%eNtx9EnzBk6F#?HF{uX^c`o3Y~=Jm)hw!<=ok+)}ds(7=x#Y4*y(ozdw}kL_GK<71FOBS4rI<$^cnZ|4v! zlL;oCN6!Ub^3?X&zbBrP_-~1m70YISUAC503(T9!yrHmm!a53lGG#PUbln?ySRIet zk%`Be?z*Zw{!g3Ak0VI{?*!To|0f*|R_)HxZ|^_+-t7MM>mPqszZLMc(*HNDdXV0S muU18RTv^X;m;-qrzwMO2YwAG#S*ZL%dw)Kvl`mg>_3|Hf)R5x< literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/all_types.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..63211bc6fc61e7ee062564fd16ace95946447258 GIT binary patch literal 3395 zcmd6qOK48A+D_6ooi^?C?%qqK2H%=E-l4NatUzLC`7)^tPF%%KX%36CI4sW3 zI7^m@4dPEAaef3pfh~N#wd0bK;jC~YrSZJ)yx)9dKbF6*mrD3lp}I|V*}0ZgX>hIG z+-TR9tV`F5-lKiRQEXZ3{apXOiQWnLt$=h{N{;wThQIhD$?%^pSv^_P+@5PIgPzmV z?SZN}j^YeDzBO_vJ}e34O0`yBSX@Gl=JLvFYYnfr$@cEvp?Gq3ez7xCu+iS!BHKH= zd;14s`LZm%?}-B5!}W3So$0yaU-=B(fT|d-HBEL{!>f@u zq+w(Y@3LvvS$*qq)R=_ES6{wLT*v8EZjHy*lx(p2s_%tSqG{u*7ttYUiyO&ZnO*zG z7+Ddl$(}?sB%7?aGPLe8>jE8t1_WE;=2hH-i4);Kejx7WrKf3k)-5H6;z1$p2)EqH*owShWQNoUMs7$%&@jQ5xD`6V zn1-f3HN#*sb|^VwOPJNTWAP|Y&l`6l9_P`p%y!` zSLY30qC=ayF6;}rU{zZK?}55z=)I<9+$nlyd+2emE^2}i{yx5pUg+{f`yOd1q&a^5kpvRlCwFSBxiHDNe=tWL-Kf^ zxk!%qNsc~>*~T#>&l^`DIcT#-V1eY1+g2nwv~v#0(Z`V-|9@T$h+s4qfBWUn5B1g$ zzkc|m{B_B`f_E8?cbrc2F#2W%L5Jd(m73m>I@0TA{=1@dlplrC8+c}=N4fO*XJ5Sf E8_JKRF#rGn literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/all_types.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..f93d3984472d99 --- /dev/null +++ b/be/test/format_v2/table/lance/data/all_types.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":3} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/all_types.lance/data/10000001000101001000110180a7144d7db2f7c78bf34cc2cf.lance b/be/test/format_v2/table/lance/data/all_types.lance/data/10000001000101001000110180a7144d7db2f7c78bf34cc2cf.lance new file mode 100644 index 0000000000000000000000000000000000000000..0ee8bfd602b955270d45a02c85e41f0736891cda GIT binary patch literal 7072 zcmc&(O>7%Q6y9BL9A}&#cbcDVk~Z74`E8r}CrKT*fZI?hv;hTZY1ISP+TNtwuDy}h zPGcm%0)Y?*B(4QPIdDK6iUda_e5kne&I!Z?4)lOfRq-Q4;LYxAI(B1iHdg3Z>)p5S zd+&R1-kVuxBXArSfP)h*4NatAi7Pk|FT34GYmZfuZD_Q25#$C{?zFm>&^YO)r!*UiQ+15d3- zZxV^0)Zd98!8PfL?Rsf8ey9Ihfs+h!KBH>awEW7pLP!FBTfhdOt?Cy7pQL_Qjht$# zN+EN#fic`}Hh*H@*t@%iRL&jM7?Es}f2;Z13qE_`FbXS5Udt%i#`I0kU%1Km$^Jvu zEa^j@?l1j92-Q%8DF@tk1en?FHG)x5 zU3bbHVlDh;u>cPxsD^-`&S@>L6w0*Dduo8T$^uSclvRpOJ75-ODPqw?Rw-K*p2l58 z4W2heCAUi5?q%_zO>LrNCN5r>x2%TkE>{W#r7U%`cv08PqJ`b8YnrJQ zO=&;tFi0|Pz7Pnl}Q$Y)JS1`InXH7hbtPhCwn99bz+-3x4IS5& zd`6v8^BIGVqmij4nBPUEY?O+)3wKQNd^F%Z zC%uqFfaDlHf+pNZ0@zPTcuy&K_FnN4dlX`y!bj1hTkLJPmBcP^p4?A^`!JqDN8Q{9 zaT{?j!o%GY!A=Y8iDU;^-1^2#6+CBQ{|0*Ci6jZNIE51^?pBLF+(T*+`osB^M9*F_ z@=V6hs&`nv-6b1*@cBOs+wPKaA6{O3X6U}dx65SG+TY*DOaBuY$5nqQ{r=X;@~4-+ zyz`Zp%$A@V7x6i?;MR>}c!YGLOm^nVXE$%1eDUiwoxk11){kVn>*Us&`|a9$ombv{ z=k4!q_FXvt!Jp^uE&qBs_R}w3$fps{VZIykpTy&6)GhxO?1TJ05+rw*!0WE=wLaeW z!^*|;e|cN@%phiDR^59GvGUdkE3I5zS}V(zM~>} zwdZBIK@ltds=w0u*ov4$Vzsprz=9}3wox2LQ*POI;NYas#|u%h#e2HdK&7qP_Sn*W z0VW((Q6&fw$fRdaGsHX%Z z+xyLidiv3oK)`2hOEUb85$6~9CH_2lX$V8LPuv$&ewoUh9rlGI>r_rr{aq?6R6g2i zUpW5Wr?R8JU#Gv+W#e1~d{{Sw9hZ+C? literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/all_types.lance/data/100100101111110001110101291a4b4f979304cbfebff43a09.lance b/be/test/format_v2/table/lance/data/all_types.lance/data/100100101111110001110101291a4b4f979304cbfebff43a09.lance new file mode 100644 index 0000000000000000000000000000000000000000..8b31f62a7c4f24fa340459cc5ce71a0d229c118f GIT binary patch literal 8410 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 N=*^%wU%q~O_8WmO*suTq literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/part_0_docs.lance b/be/test/format_v2/table/lance/data/fts_indexed.lance/_indices/59b9c9af-09f0-499a-a888-06036eeec27a/part_0_docs.lance new file mode 100644 index 0000000000000000000000000000000000000000..9b336efbb78855046967f6f36d80be1cbd00637a GIT binary patch literal 701 zcmZo*@Sq4VFgP&$0|EvpV1&|4P?{Mg0i;24Fbt9hu|e`6np{UXkgXG9BLjm1*!>`P zumCYD5X0CY8pH>=6_@+CT)AY0*y4-w%QI6H{=)#H7F%g%UWu8B1tXV=5O;iDX>NQ; zes*eJu>>QADq|xHMga~kO(AtIRW5n`oW#83RK3)^p?C|okE~nzMZuR0zc=&Vy!U2y zXOij2_<@6YK@E;21aoPJva>0bTGuxUu2p zC>nQ*S7D=h!L}dY_iumZL=Mt5#Cm$~T~5>y91rTxtav^K|DgUz zU(1Qwf^oJR5BdZjc!I|cO3=0!eO}s&*Y-Y=)GaZo)uQJ^drE7kT8Xq?S`YOFWksQ{ zEGsQf`VX8xE=72L+Dq|VD6p)=z4+T#?pxNi-8^=-4@gz%E?*11lfm~Z+!ya{&_|4s z?_S$;n#AP=_!4{tz5$!y2XGbq1bzY6z;*B|_znCHZh$|)U*IO_Er8dh(n7fCU>r<> z?O+P*08Q`|*bVlA{onwY1qZ=AI0lY`1#kkK1h0Wp;50Z3RzVA#2OV$;ya~GC9Wb;l z-n&6}2npH9P52N+6XW8(36F>E;tmOq^N@dIQVd}i6m~(8Crn`%^-#Xxi8$!}!#>Nb z)6k3a^@dZkE9P$@a*t}&8ctSbX+y0!<++sH6SqnWm2&ZV%`Po0_sdy@bs4NUS6V7I zX6g&&loFh--LUE@+)Z&MMh6<-W2#Q=jE)Z1j!Rt;IR}GWv$XB;zVmrM#;e zs`5ILOeMO8jU2ngI>S>l=ldo~m2#o9TwipI4whyrQ}kq7H=>@F&+zLtE9d3$ePu5& zwW+$Ap(uHtd&n4M7kA5jlpRSQ9*KKdO@pe?Gctc9`%kR7QJ&cRzlkSVv>A0{?jgS8 zzckwM5hKrrc3X8PJGN!VBm4)=+wy@Y^h?j>mJcbd`^qx>McJKrwEfoJJhG^M;9*Nx>s-?d$Qsb?0nAB>6AL{XQkrlw_hRCVGv>n zDFbLb^BbTCa}2SMl@HF3?{Kr~%42|#1zJOTjx$rbYql^86=`Ox(yq+@83mr1bgXjG zHnSyRm8%A!^Zbai3;T&QOZf!;Yma&*Aupv2q-XiGGD=rkj_KH$)i%j`gcHL0$TUyU3t`A9dU$4lo82cavaan1 uH@aP$4BtdqJ&h~sPrEArv?tFf|AwlM`j2bFg_}yTpAK3HAgo@yz4RB<96$X4 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/0-4a942168-96d8-4f07-bce0-e3049c8ea6c5.txn b/be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/0-4a942168-96d8-4f07-bce0-e3049c8ea6c5.txn new file mode 100644 index 0000000000000000000000000000000000000000..65272d53b4f7b4d47c84a15229f4d8acc4f7f9f0 GIT binary patch literal 253 zcmZuoQ3`@U6l~Qb{Cr;$6$X7oU_5ozw}{X!aOXL#!x57g(598mEPP3^Y*awC_;<|_VV#}K&;9<7o5jcN2?#bMX)qhzSh#Rfs8=gh?SteChpl%DWpOwxCl{ z5-Qvniv?;C5O%go0Qz2Chf6*W69C}syV*aCkYg1#M?<$s-65JWRXsfHd5_#LQn%dx MK6d*Aug%zh0O=(fk^lez literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/2-76e69d8c-04b7-402e-8620-7f9a772a2224.txn b/be/test/format_v2/table/lance/data/fts_indexed.lance/_transactions/2-76e69d8c-04b7-402e-8620-7f9a772a2224.txn new file mode 100644 index 0000000000000000000000000000000000000000..e9216b8131e17ab00715f6e65291a9c172ddbaae GIT binary patch literal 278 zcmd;J5>hcYOEt4hu}Ic6FiA4kH8C(s)wM7)GSD?ovrIHMH%c@zGBVl4_KK0~IU|=4 zmq6sslj}J@c+OhU!N#2T?ogEwBa;+IQhrKhd|FAd0+W`Al>q|-BLfI9G6+CvBPT9J z{hY+SlEloMVj)>Bw&Kj(f}B(#P9@j8^qkD% z3?&Ih1q}^G59R=73r2^PcP?#fH3<^q5-dn8Dv39UPsvX%)&rX>u$MJRn2RqLXjDpK iNg`D69&3;UmoQXuNq%-}9!z;NCz4Di*fmf+ts($E7Et8? literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551612.manifest b/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551612.manifest new file mode 100644 index 0000000000000000000000000000000000000000..83edf4ee407b298a9d91e02142610a54689de7ef GIT binary patch literal 934 zcmd^;Pixdb6u>jdCS=D_)@dnAv62=K%R=I0n%zu#@-MicqU%LZ%WP({M$>Fb25o!Q zg7^{q1ntS2pwf$Y5pU9?coU_E;y0*Cx(gmEcy|Wgdo%C7ACEV04i!a#KLA9q@!;*J z*Y#h$SGz9^Ej{|Mjexpn4##|J5Xsz9+w*H!Q9u!2%Em;KD{%Q@!qQMUk_{8#^wK9H zlY;kBE;g?T$>JnOOVG&U^^HWJ`pWfml*IYNl_s!SEpS7-qfu~a@9UR0J6?YQp50)X z9N+;Thq+U68~b{H4$iI@D9$9CTz=F0O*l6RmgC1ForXWF|KW+NY9={5^9x1!riw23 zUC|9V4Q=cVecQuC*tAQq?MDIgeZmMK-aF$E{6C#}S#$=TLq;}!I*7S-JYArz$Eoak z6u|RHm$6Jl@o-b`F=!jP%;I!JRk(y|<+L=_)7{I+44D+8akkaeP7OhK(Je?_jNNJ% z;zXAQ#u4}Z!1GAdp+SgOSN(ty+M$BcljlV>1*qC$B`viD@JDFX&^;5B&?3KtxFxcp zmBhjpqC@3nngEA(o{4lu8LE?9z%t9Lb3#spQZWW~er^u?7cYyx-A zPT$EK!I-3Fs7p-T>6KLEW$|&bLgIndT+cwypo#~^XExF^T*1iD1WXJNz{KF==;sUo DHV2Y; literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..f89780183298b80671cfda57d0f7b46378fe91db GIT binary patch literal 583 zcmey%z`!7+Vv=ZSVq|D$p=)WDVxeo2W?-(Hl$>gyn`&%eVwr4_nrN16x{2*FBUhl1 zFPDX(fq@|y0tpBWVi*{trI?#rnwS`+nOayT8yFj#TP7M=m;!ZM=;b8lC8r9pFfcMP zOMyuRCJjb|BU}nBLNY>ZMfv6NnJEhYVSrJKH8Zco%*29GNKS~gB(o$ZRe}*&nyt8` zC^IkJf=NhLh$SgMrBZ?kyR@PZM{;6GYI=TAr35opB}R-43|x5Kz(v3fT=?C&y Ta0Md+BQVq;fQiA!(a#wG`rN$S literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..f93d3984472d99 --- /dev/null +++ b/be/test/format_v2/table/lance/data/fts_indexed.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":3} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/fts_indexed.lance/data/000100011001100000000001ee52754ad1a1da89dd0efa4379.lance b/be/test/format_v2/table/lance/data/fts_indexed.lance/data/000100011001100000000001ee52754ad1a1da89dd0efa4379.lance new file mode 100644 index 0000000000000000000000000000000000000000..5079d336a0c6b035963cd2bde43fe97bb5b700d9 GIT binary patch literal 1412 zcmcgsQEL-H5Z>Kf(y%D%)`t+RuEnCQ5NjIBJzlA;6%O%5@J+XO+uY%0SN8U3Q+&va z;9u~~-{3FEFH16w)0n!d|jG9 zob%rXo(F&(Kmd3FI4rV^TX|-AE`^DbXWFDW&%}F~=pvV)P?6-h)kX~EYh`36tc;=2 znVzfqt)C-YKUpkB=;KBIkD=#1Kms@ioYeZ~QVmlj#Rm~3lE;6l$>wSzofRV`OeKq- zXfqO)3nj9#O{2W1bV7YpjHI%Q>8-1KxAgqBFZ6do^EzM?&;yiHi-i@(BA0GZ+9uNc z>Vi%%y~A2YpT13F{-ZLy)l8M$9r&2uWlfvfOm^_^=~iw{s)jzHYs@>=@wh`SPv2+l z2=-#A&A8LJ^p~3+-DD5x2EF%WK7^iBk&fZ=yth9e$AOC(p@;>PpnwtbsN<~v7~g$0q6o?i%T8Vh5@}(M`kDY*7>-rj&o6JOtin zQBLGoME{F3J|^#TJZ3oyW!^NMF223k0^`U3Qf$x0*NICmO>-LLBh$PdOny-B$*dd8 RCyBV%#UVy0Io>_ldj})WYFhvR literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/auxiliary.idx b/be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..ebb8a2ee93d7c0a429c7a9e9bdc3d2860cf85860 GIT binary patch literal 833 zcmbV~+e*Vg5QcZww$#BxS(Mg_SRx|!qShc%LXm0_L{xh1fv`4-E~JSxTaO5R7jJwF zU&A->6}+i#;ufSgVh1+=OlJT2_F@>2BBT$-jus(gY_l>FQcx2n)EOk9k|aPY9V*bI zKgz1A{^-B|)P&5b34;NtC!l(wI*);W&B7PJWtOqK;hk_wU&DZMrY8cqy;X%8pvh96 z&t(CAUs&|Sz3bSKcyw)FMAEwEzUTQNmzG(B@(fP;JZQU?xb+xpmRB$r$*{|>T)X2+ z?r_Q3?3wX&ZaAWIZdm5CaZ%3Ww4+AFK3hKAxGd8SBN4c{G_JEXT*c*$WN5_=+My$Y ztEkcp{az>7*EOR^*fCBt`oL(aT1XoWwu5zC8ugi*m6m$T5q}7Kk}cvwab|A{Q%JK7 z7JsuQK#d-xTks$9A*SA-PZheP&~;{E?Jsm5=Zkon&C&#$i?I-6KlBDY>IJ&gn{=n^ bhVH-WdMFv44E^ug_o+3OpF_#f?n(0-v8>Q@ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/index.idx b/be/test/format_v2/table/lance/data/multivector.lance/_indices/28f6d79f-9c00-4135-ba4b-fc8de0b635f3/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..ccc24a9818aadcfaef7670f55cf80c0a63fa5cbb GIT binary patch literal 333 zcmWe)WRPNHP~zcW6k=jzl43byk!GgJz`(G;*qGVDgD~J~XXH{5;*F0_%SkMW&rK}K zPAyXS4+D%^Y^9lbC1xfTj9NlmTset($*EQ#l|n4hN=mU>d|aFmvCOhGAx1+jYc6gm zKQAS? z@g;l%U%}gHTT_tThR6kLh|7WQ{foL5hihfRGKKz zxIfAIKYt@6jK_oo`w|sOlqYqfQ8(D1P?zf>Pus>ORPRj)p(SK1s-JCRlAw;cwRYzjBoI<8@HD_$UJJ9{2%QJ0q8h5N~{ZT25j~ zd~RYryDVcfc#d^;9Iis280hpqmp>DkAP->JS-4bSi>~${s~0rLNfsbgkIV`GK&1qA&gr zf0DmonszBlU({VlPR_kKISIK8NDhM#xeisp zHI`~QR#1SS8wxFP&u!BekKA;G9~idRy>_@!sX}Q9bAI66T5WE2cwpI9V6mx7{i&hb zqSMfg%Cmk|%HyOhb(Y)YX7F&sS*Gdv!sVqbjyqx25O*yG8@V*DvK3s$g|#SM=5Euo zh1>Sa2cFaIxQB`}iiDlwSgj9?rq&B-y~cKM8|Ra{%0{^^?{;E6c-?@_;cPLxKY=Nv zT8)LXRspEeqjVkq<9v*%cj!}TeJ-uHnSs^ctn)Zs#0yQMk!>xsh0u0cwcVro&=adAS#GRxA0 z7!9?oxwxVHyp+@mA)RWalFEWqB`YP*Ft>O&AIA_S9i^1a;u4TK@ldJc{Nl{KRHa%j zO(AtIRW5mbunBspdCB=HnR)5Odd~SdrMY>oP`(fo7sDx_r$9g(LNPc%=`JV@qd=Yq a0hs!)5H15NBZR>Oq(Dq2AoOwca|Qq`)=$C! literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/auxiliary.idx b/be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..979f581fd3bcde0ca502d039c2718ff24785e79e GIT binary patch literal 819 zcmb_a!AiqG5X~kb)B$Z>kd}h9L`2LXwxO01gjR}Bq(~2*v=TzIDGO;*nys~pkU#O_ zhj{llym|CqP2*O@OR+dG`*vpc&D&)LBO#BZ*2-2A1Yu=zOcaD%Twykgm&6c9k>j%3 z|EC|-xnvAc{Y^ehe3?ExAShtP8U+*T6yFzyG-XVER;`p!4S|kj*Rxp;{k)KM=?!tL zklqr@qaib0FR+cVTyRPccL02`6d-Y1o!nzaFY`;e= zHXRbI^n#H3MB9KhZ=N;jwTn?XBf&o2gIy>bBx#-ay}+SY%^qor3&?B9RLoVH0Z0 z1hcS}hl^B7#B9Ov-qqR>7*YkmMF CYsg6e literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/index.idx b/be/test/format_v2/table/lance/data/multivector.lance/_indices/a8529803-c50d-4ea3-9fcc-302b385b4dc5/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..25a95be9248b934a7296b094088acec2e9524cb4 GIT binary patch literal 333 zcmWe)WRPNHP!ix^5@KRxlHv$jBWMr8nhXpK;*PIA*n8jyT}C9}8$q$VCJm7HIknU|_mtHsB~3DsPdCd6o{CB(%A;e)IdVu@B#isjN2Qs+|T zlGg`I=%wZ*=ci=mr5Ect=jW8>=D9-oLQGr?r+}UV0c{Ay-~gq&pfrq9gfd|2ze4$} Sj1UGBkODE8fY8U$&lv#VDNhjq literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_transactions/0-98248c30-74fc-4328-955b-93ad3a6572c5.txn b/be/test/format_v2/table/lance/data/multivector.lance/_transactions/0-98248c30-74fc-4328-955b-93ad3a6572c5.txn new file mode 100644 index 0000000000000000000000000000000000000000..4315aa008b789e6cad70fc21ea777d6d5fbcf9f9 GIT binary patch literal 546 zcmaLS-A;or7zW^#pKcI6sRt7EpfPSy5=?=X!S2EXk4Y&dYl4uB`ZF)fEAetX(>a;Z zg{=9$rU!4HyhT@88qrk5B$(4m1T>D)AY-fuvY3}KPuM&X>NH ZnoaQdP_r32F1QxUU(Pwqx!5_teF5!JwbcLs literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_transactions/1-2bdf0c85-4f23-47ac-b2c4-ae0bc3ba00e2.txn b/be/test/format_v2/table/lance/data/multivector.lance/_transactions/1-2bdf0c85-4f23-47ac-b2c4-ae0bc3ba00e2.txn new file mode 100644 index 0000000000000000000000000000000000000000..209026c88bf7c9b50149246deacb09677e5dc67e GIT binary patch literal 378 zcmd;J6jCutN=Y+FwlLK-Ni#CmH8D?2)=e@>HqlK?HAqS}PD(T|NHyBUc8-bbG!vH) zmw?8%>+|O@IGXPA{?q$lo9SmEMn);#vee{~{Gwt*v-r%E3I#?jAu9t021W)55CBs~ z_ZhjA^m7vPl2i3E^HNeP^a_&n!od1GL0p&AlEloMVxb+39E?s3Ub0*w5VghGnFaAB zMTvRE1^LCPLab?tImM}7I$X+7qsr3siZe>n(sEMc3lfV;GD|Y^^Wu{dOOi8Ei-lMX z4U9|-ykxjUkyIz<7626&C6=TLF&mkh0nJiJlEpA9IX^GCw5TXGFS$~P(a1}ZOBkU# zH?bl8F36N@VKfFUAqkS&Ohixc8)5dSO_ E0NrAEEC2ui literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_transactions/2-2f0814cd-23f1-409f-97a7-f11802ae0000.txn b/be/test/format_v2/table/lance/data/multivector.lance/_transactions/2-2f0814cd-23f1-409f-97a7-f11802ae0000.txn new file mode 100644 index 0000000000000000000000000000000000000000..1e08ffe29a29123c62e0e1d3d84356799ff12015 GIT binary patch literal 378 zcmd;J5>hcrGq5l;NlwuX*~86ZFaOc~v0 z+=M0T~bRDGjocCb}(`$$8UPJaM@SW87?hl! zmt0y@l$w`ZDa2@G!RYY$)9ig+CP6}6yose1nK_w>MU{HM5E0nR7R1NJ3Gp_Ff0hXV DPZM?M literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_transactions/3-85968aa2-1806-42ac-8528-a49e4ac9f753.txn b/be/test/format_v2/table/lance/data/multivector.lance/_transactions/3-85968aa2-1806-42ac-8528-a49e4ac9f753.txn new file mode 100644 index 0000000000000000000000000000000000000000..b957684cfc12b3a2a5a72bd0a7abcc9fdfdb4b3e GIT binary patch literal 378 zcmd;J7E-Y=wKTIxOf=Fpv@kH!H8Dy|*0nG-vd~R5u}n2dOtwrjH#OeHc8-bbG!vH) zmq5r;m%MNXcgI;RI%bKd=B^Q9WR>DAOHD4xFDf=OiO)=_P+-;)vNB*`U}S&*0Wf8B zpOH&RKPNFSIaMz+FD11?uOLY;46M%+#C1t6NzBYC7TUqc!RW-`rNgBRRa=&(SDaCr zmX?zmUyxW-l39|OpBJB$SdyHPS}eqBXkcVw;3df=j8L7MSP`FDl3G+O#AIsVCBr3( zkSb2hEdZKRlvt7~#B5}0<|WG|0+B7w&Mb&8DN4*MF32xV6=F?G%qdOJI|v?4PnGqI>r4;Uf>|JZ`~xHuu+2Jz1_ F0RRz`buIt^ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_transactions/4-f91c85f5-89bd-4744-9cee-4386e21a8734.txn b/be/test/format_v2/table/lance/data/multivector.lance/_transactions/4-f91c85f5-89bd-4744-9cee-4386e21a8734.txn new file mode 100644 index 0000000000000000000000000000000000000000..e2019da90a8ddc0503ddfe503acf6fd2160d3c99 GIT binary patch literal 382 zcmd;J5mHIBG)%TIO*7TCuuMwPH8D3a(X~uYP1Q9qwlGUIGEB5EH#XVDc8Q7WJQJ4? zm%xgk8O%p{{T9zZW1wvj?R!*+kyA=ADX}CuBfcy(xg@`+I6gC_LV-m~$jX3$fsp|M z1i+NheMT-N{hY+SsIoM@;>6s7oYeTD#FA7YW+PKGFC8vrB-xD8 zv^1b}L1Ix!W=Up#UOd>vsl`I9h6Y9^240d}!U)y5i52mgC8I39{?N3D00a%nsBO>ZAG|9tF9(;il1_i*jLx92Qjx zQ7MO-s)Y3>DkaBKsqXga9{%nMAOK?P54LL}z8Qd16p2+aEf`5Dk!q6bN4D4MZD$5M Sxs&YUjvm3eq literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551609.manifest b/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551609.manifest new file mode 100644 index 0000000000000000000000000000000000000000..14e835db155d7240a8fc2bc0adb81f18fdb761cd GIT binary patch literal 2188 zcmcJRPiWIn9LMvLCTrs+^G&hN2}RwUb&W4+lGW+KsUS`rIHnUkl$Z8}MZ2^lnRXt< zlb~nu4}yPC)RT&cpy**9{C`owi(VDICgo^ zo(^$YS!%y2xr4)|nIq`}c09|o@^;$5US^QEke897qMjCU!Gvf$RG`5Q_6Xz@O{ZEb zCfuE-mC4(gVaFkMW&{GIXOYO0VtDpRi?`Yy0(gy>qtTxN>=)dj3Q4Jp|l1&7>00WNSdPI)Iw8uFPk4 zpefDI6=>e6M6>_GCVOE0=I#@RJ9PZ;^i>G>ahkds(Bx`Bb9Tj71;{_9Wfo;iX@0Fh z^T%|W&w@_B)OVa4ZRkCB<}q58+OvHWf=KhcptI8Deh-L-YC!Z46eC9o-*~6uA|O`VwyOin#s`)&%u;P-DIvzkqf@1_ z`C%hRf@QVBde5>)#>zNaH?!Q>%EGa_YAb7l4U@Ve8mTTP#v)bZU^(|es)Mxq72wbO zgNialMk>k@gJgC3&C!sdYqG3pRdWBF<{l1&!G9^LsDPNRIpL?TFTM~OUw%85*$s@i smiU`Wm%O6Acdp2ns+RARkc1A_kIgwnQZ9je;sg5cQ5r0>t-E*QFZy<*X#fBK literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551610.manifest b/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551610.manifest new file mode 100644 index 0000000000000000000000000000000000000000..4a3d5af719d3025441b164667db5798116d3ee4b GIT binary patch literal 2351 zcmeH}OK8(@9LMudnyk&%G5=GHb3#!!XI*2GCRtZKY&sCD8#v|*4m;6<;BUK|L5OtZ9|d$iSJkN(N)Pk#C4pU>}=og{|Q zPjMR3O&#CfPF}!zrF;8+ocVA^nuP$g_{WfDr%j8O6+Mv)fFO)=7zVKXXmU@&dq8j8 zo>C1BvAU5!IW`k#54q3nouBq0Th&t*ybHWw7Z%$!ddoq{fo0HJnW*Q%K3Ermfq0+EC)Etqmg!k~}AfT&$H|v&dQ<%{a!UY9mMplI&=0 zS#)=WmXL)dgP#Aphu=D#F&G`MnIy zxs^0ux|u#Tc$S#)4_uyn#%+rn>z{$Z*RsmZETxd|E>TYni2fl0D|4!uJE|%K4$-+X zM5k8}J?Yd!uLo{UcJo?9N=l(fcRUdiyF@Y6tsxW=!x0$?yc+2Wi}$G4IQ`!PrONu! zQe2e>j^a)SYlW1VKH)@d;Ae4wAgLR+EJmE}1bqvAi~);HJSp9>IpElAg&wEgk21K^ zN!A$M7Au))@i@nQ-yb*1HsEAs~GDy^&?`j=D$##dR64)`j_!GrJs9pQN1 z+48%4T{wuGhImfo5-5%mveR!RE-p(vFG#H0ks*cQ9?DC%P#C}o4;jEaaPC!efM7@t zi`IKzyu0>>YPxl4I(`I;2gT6eBqM9*jN^?onSTM<#d0h+(NLTd0xL{`hxB8r@T-I2 K*#6#u-M;`5aqY?g literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551611.manifest b/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551611.manifest new file mode 100644 index 0000000000000000000000000000000000000000..3d7267e59fe23ad92b0a481b5c23ea5aedea7206 GIT binary patch literal 2009 zcmeH|+iTNM9LIB#CTp`z%9&!F6N0)q%Nmn3$+G&g=|HSHaLn6NI89GkT$Yw3o!y=V zLGT~&f-j1qK8nad!B@rMiwOFluMYLWfuM+*rI+2>N^y@Kay#UgZ_fFg-}(L)DS}{M zkSt`Q{omf)yiSZL^T&Q(`S3_tf&g@P&S1mKJFckeX12tEI7|ry0f=&o1~=(FV0Ry| zkZoYzw6nOx7c%_m;Jc&C-BIiz({kZs5C(^c^e%R5Io6#r3%chZ+b!f>4Cx%QT$~_S=;Bw0xJu-jHeqv?Vl>>v+AN>Wr`Yu~E3 z8?=nPZ4?~`+r}&eQhEp5wGuszO1kM`$AzRKXkhsB*K1EN%j1ykM8%S6naG*teIn6k z%=i{IQl9p5|0P+Wd2mAgIM#mR;r)A4@~uy$MF^-G&7>62BsYO(a{!ylx-p;DK>IY8 z8qj>wh~~uYQTxpBk&&wx2UPU@#sdiG8ckIWXi}R%v$f=F0^}c;rG>QhX?|}&^VbHN zbNKH29@MIvrx_D|MXW3Xsv0qME@M= zdu$Blv2AtB3jJpuSJ`(em;rs){z+wsnvS;AS} zHRrIt9FUqsmhYH(aN5k*PigW3TZf($WXwwoaUNrh;R>?eg+T^tn)2}G(ryzutU zYbJW>-4FdNk%=e$UHA8m$a^LG{1%oj|9~Fk1zwozsP-v|m+pcuZ5CZA$^=Oq9~nFR E2M&yYF8}}l literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551612.manifest b/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551612.manifest new file mode 100644 index 0000000000000000000000000000000000000000..b96d93f5e926b478c4da3d71b793aee63d6fc061 GIT binary patch literal 1675 zcmeH|O>5LZ7=Sa$Cf!XxSf+}xRtairUEDZHlXSaYta@>^1&fLvB+Mog8k=U9BwM$= zdMo$~Ea*W{^r(mw6g-Q?iwIuys_4anCqc8>wDx1WSm@CqU&Fk4GV?I+n?;(U_%}2U z`Rvfo5BCUF>uREWgYby|dzV2CKh7~`Mb;GghBFMoaq9{N$TQDY1 zNRDTbx>PMoSL652H@fFYh#fb8FF+ccp-Kn&J;|NCf}DBGK!{0tYhm&x3J8L zXV!e5c;*}gN@+je`!{+9*9|8megJ6=6~O85KkmL-P$wbZjcawsb+A7tMMko(xyc?r z(_D6=|CUZ{p1Q1mndlsU_T=%j`ruprD+J7%&0!_BN$-Nq_5ya*_4a;tCOWdYvW?A` zTWropdo4}Fql%3RvT9m+W!RSUDjK!(qa%1EZ_9E4DVU(BEpf~L?Qcz)joW-j_OCap zLqFvF%B^U}ioaJI$gz$W>S`g%e3)6Q5dv5rl5(9OL?DVe4pUJs%?NZ#e$}Wkg zH2}Lp$D1>fr3xLbajP>+iyiG|HVC`pI<|((w8!ycrVS2WftUCKlI7@Vp7C>XQISbx zq#}!yiKR!iOhaW|lVwGd;%WyuicWE9zK^2-&7@e79-`5^UXc+PL=`*J%O4-U=d!mK yp5C}dm2*n|UlLIY>)y>Co^5`B9g&cP=DSw=j3OzIz*B^qnrxRnS@q&71q&7R5+=!nj;6_yWb3vc zLGTkOc+{gOksbuWn^=kt9fh3_<5MflA z{`T(S18L4)zx@5)$EWsJ48Zuv3iGl!NsYS0{jLV8xJe{Q?8&2&ujU7Uj-L%_G}cj8g|VJ%$b@sOTC(FdRC1x;(9YKC4`yl$_D)3{eRj08&LRp0xL;; zM>tmdu^pf)^C+uZ4dGQ>-f^`Gc1wyOPcs69<}@yfzrU`5JS!1kEKH z3RlK7Yns2|W=yp(7&qC+6}3Y3@Lt>?RNYeL!KkS|O3~!1x)o$ygv?U<$Z8?5nn|OVi@A;-T8BWv53bEViBLY%&&{- zvx!@`4a2ncd_J)v!J<+^)rn5lhPU&Ashf|%8@MUV)e9(HnVY}x6aG@JC;$Ke literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/multivector.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..d3a744c6fb7d9f9dbc2aeb21576076171bd9f903 GIT binary patch literal 1168 zcmcJPO-sWt7=Zh|El!bmu&9SJ+|WWx`nhg5@hYMR#oOpdhLzgFR(0-w_#5=>pYSGL zy!cDJh}Nwgb9AK_LlP2rdGaPtk_JT(aJOTry5(v}YU_Ph(lynRI)>p$9nJPM+ces$ zYdmwGG&qB&z(R_W)M=ZH(@sY&R*;T7>|oC{kYympG!#WOuk5lvxX|I(F<{&TzG291v;+xbx(efI>;2 zgd|X2(j0E7B#<3Nv7|ZFQc0ksq-4o5l4h9|OG;KPC258$mIVLjaq?t$rTY5u_|C0= wJ-nP;5RQnXG9QK=olxhIx^XUkQEoMhtK-J;wqsaDgFXG?7gDaDj)Mp0@Q zP7ZxH#j4Vk$P3Q;;!+KDwp>o8nd&^UO?vy#i3Z0%#h*_B5DvZIXk6b5{mDu2T+|d1Kz9iOHbs(Y;Efh-5{o=2e$3jg_nael-#H5>5nUs9 z)+K^8+k)&~c5#p2&nw%Fh!VpD#)x96p)=0|`ii_<&GPF`yo z%3fOtDs5=PF1$8Uf?}NDr6ZXokYXv3VwoYem%2-K38X}hl|=csc1catSi4!IFXE6B zvL96*2jZ~vF)P8>LVclTjl93g|L$4j^<|;9#bN3*Kf18U{hF1m{vE zgvbDq+j-J$nl~?JRy+d`xJ)%zeHdQH;Q-qqz&0S%Ho|#>1(I4ZXP7}R$@o0~`5Eq+ z)MWe{RO1vs@bAP-AexiNC)_fRkhJ^(Rhi^jbk6u$4^Q*cMeuE656q9p$vTNwBC90) zII57}ai!gV+VdxZbKx%_KKBra;rV-fcl9=-U;gs79@$5spWMg)%FoXnZvZ=s(f4oj zqmLrGisd8sWyk7i-{S#G8O!l%)jCA$IQPQrdhXG1v!=qy6v?)RUIo&e8(6YD^H3Eu zSh~`;UYWhl(0XllSi;u8u={=6HM}kT7r9%yDo&Rxa5+g6OUp^QX;QVSnwc(DWOat?;&rfZK5on7u@0Rh}V0w7qBG*w)$;VRP6YVtOHv)ncg%su1S z9eMZ?y0{`CK_NP%y=;kX*3UmK_XNp444^MyQL5x=&0X9?JM(I4XbrKN`4#k3Q3M>$ zbpZ->NMI|oFhU^sVjxlkk_tgff#6Gl6l5sEAQb{RE5b9{2sx1bY}|;4_&&NfuMs7* zfi5(bqGp6`P$pXP^LZ?IDkw~l^_4*RS1?66dNsQI4f&4yZ@8~!qe<+4Ncd|?6o1R} gKPP-&iUObbAFH@tJr}LN=az+8X@P$Bb{;f;0Jk|&kN^Mx literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_dimensions.lance/_transactions/0-0d81521a-dd03-451f-96a6-81f50ff5edec.txn b/be/test/format_v2/table/lance/data/multivector_dimensions.lance/_transactions/0-0d81521a-dd03-451f-96a6-81f50ff5edec.txn new file mode 100644 index 0000000000000000000000000000000000000000..a004ed7cb2dbf67f6fab7424f96ccd1a8bde7ea2 GIT binary patch literal 1238 zcmaLXZEl+|00!Vf2ua8XsoN&bM>S9Cwv;KAjT7qTGKgTaBC$kDXgBRl`?X{2FuTHr zGlG;oY4VhpH%-!~zA9M7#7@AX$H>tN^8h8iHSK|4cK<)Isk;MBHYuSc- zV8p5T3U#D8lPLZ!xWA8o2w!ekJqJk?CEFlfkrRu;n%Xi@O=Zy&i^00uGErS+vCMi8 zn*TGp3^vNO&w0uwYB;xwl&*xn`l3Gd$Pc_9Yz(+iItS+Eq@`m2?>F zs+}I{Ryjpahg?}tcDeK^Pu54aGpa~-?8sZljxNikkGTZUr323;zI|CI;&`YeMB$Yh zx<*%(P|=cv7`#zK19Vdf6*V2AWi<`UsaYNlqM%64xtSSkB~#vm{^lh~f~>wHI4K8fgM0EUycNn7`G-j~}BVWa_DP^&m;JFhpy6>;WPwN1i`LMwIMnD&cy;KUC= zoH-(a5GQ^C`~-;8#wu0pgbPj%iDEs<`^I_XuQ^45$EHI`&myC?+lHbi}~B()WN@_p&HtB zw(NJQ3hzVxn)HVbLF(r7oIkx>nrblN6y~N&_YKNm)o6Ls8`l|LPH){In=rT-`JU&` zN6P`(VA&`uXXS8K#WXnFs>nH2ToG}ip2A!~Pqlc`<8`t+t{DwM zGTu?Y%R1VLCp}t|Al@<1Hp!V^jeVCdDh9IAt{k+7cZHy+B?h8sUk*CJ`$AAuQy49% z=`bF3vJQvvq0tnD3wt_&wcuBDU%89nwL4kP7ni6J&pci;o48>dY%>D}9k7(Aus*x; z{ZUXK2e#sY(YHLpEzzp5nF30hq5!EyK$1m3dW&$D$ReDTY!S{9S%kBaEdr7)0{+D! z;k(H!0@7K8b3_*59Jxg}M`RJsky|9}Np2Akt-K_QgzqG?2uNuW4iZ^}gAy#lK_ZKA zP=ZCmn&cJ%sVx%BOlc92$|AvUk=7#oTP9fq{o$Mkx`yMeevuMI&4|i literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_dimensions.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/multivector_dimensions.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..491d734467aa3c --- /dev/null +++ b/be/test/format_v2/table/lance/data/multivector_dimensions.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":1} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/multivector_dimensions.lance/data/10000010100100010111001031383243dc838910cb0b1e7016.lance b/be/test/format_v2/table/lance/data/multivector_dimensions.lance/data/10000010100100010111001031383243dc838910cb0b1e7016.lance new file mode 100644 index 0000000000000000000000000000000000000000..864ae773d25b03b22b537aa31653b2ef5e53d1eb GIT binary patch literal 25966 zcmeHP&2JM&6rZ)%#-0RXmH;L|Sr8w_MKp0BHK;TO)E21}LIJg+A0Z?LqK2e`Kxq%{ z{sBE8wbx2M^-^f9it=$Nta{?e0jV4~SO{_GiNApMjo%yF8GG%l*Ojon3--+0nfdK| zzxU=do1A8h9rAE7HV6nWUuy6zt^g)1NU2U~h|(~n@{u`^WxkoTm&Ms~)(iEY0q+9inKlx|DGN1Fprkll5LS(MGlv zDcb)QprAob*ngdk00+CQJ;1}Dl?JFctvhVDb(h@)PDGkwd)O`D<_^0K{6Jl{LrCI@ zUhU6=!j<;8&7=J}ul5(MDl$;X#BG2@PDD5hYOXX>1VGX0Wz|XnQzoYkYqJHh-`1uSKJ+v?=~bh)9Ie&SS@i8tUo-50`bj_0C-0IE?r;rs!~}(OR=sIqatbp-?o+c@OX9wQAJA zXT#)MzefF1T>mEkrOEvdWA_=$++!>UA93a0hA+rxL^{ft3FX#4CoR0LzfZSh|8o^o z^2RhB*|aSa&t>IjUgHsm`S$|`*+WYtDhR_!V2QGr=*S4aa>yI$)-3ed>P=_2aw=`XeA+)^>#HltT zhTc(}Uh5C3-8VW3fBO!HKxYsnm1~QFkYRf4^iJUSaN&Hoy2arO*B@dL2n6IH+Wo~` zcLqUmyYA1AUEB#8?Nj|lV)fp=lQ^k5nCK+qx^rH~L&L>w>tPMxZ;QHltJw6Xreo z=eJ`mIlmWg(Y1oVJn`_Dc#(WQB>6d|l3$zTr<6**pUC_7@s8yGImr(xmHtr6A5i;e zls=~V(qGcwQeWvmRo^_dFSk?u>(zf>!i$|MrW+Z5{$fEC{2%^v;zjkN%9~nl6OYo* zPsktA-%jzM)>Gp``d{KWm8aqkX!M){@s_7l_Oo()A`@zP zBR@7OZ{#194<|jVpX0Uvh@%U*7XLu3?>0c24XkDzT1}L%w_u>z4pyK6$d40@qs0!a z?ZS6y<@S&q?RRh*FleTDNU7JE#vhoF*Qdm%O=-Jyl+M$eRsfBbDCjoE{Fxk?@MlEo z$fKBc+KkwF9UcATG?8H`eES_7sqi~E^5Asl;Kxa4#fiT+q@}1l6!MqqGywQZ^&%0S zd-g$F0Dmur0iX8=0wjXI{h1z#==2pK^AESs(f%PQ^57rJArIZMB4nLD!g>8UyFU|l z$4uC*al-sPF9vwGo&G+iEl=|=q9AY2M=|w(nuI(!owmPveA5|#9{}h$n*!NC{YE~X z5g)H!;G%x&o2~vG#(oq5kM*p6E&RCfvMvi*?1D=k8mTTZCB;GXO*W z-Bnx35>*_GD#1|xiBXk>h9D6UnO>oe1r<_9&Xu-(w7=d%~$ z0aHt^Jv)6hJ2if3`kU;ysId3^#LU^VGjkL3dxt8phU3BdSh^Xkhc#S*m5zt%V};F7 zJ*+ffZ8RciV=5hAQXB1cvNB>WNv^MBWlG=)&W2NhvuJI!EriC+XmYiRwvaD@GaT=! zkJD@RIN?aH1Wr1>v_8%s`d`)f4&4f8%u1T&^F##jJS6I2-h|OM}nVA6k zN`Px?14>`6GuJvr#jqFxVqrkt#<%bdZ_G^0PG)yzXD8>Trf1Jx+Ietp=JJKvcStq@ zoEZmrfMtw;o{on%jTpOlimz9jrG|EnO`OXfp7?t1^1QK}_YLSg5Xq!8c-W!vm@s0| zk2}l5mS$^qzzFIe$KaVKjpO`Sqh}8Com@OKW-L3hj zcc;=hP$_5!ZQamyOKXu%LGL<+?2x?#bSkt;r-(P5KIFO;vDX>F@B5d5;|?18`Di1@ zy*98eqQwGnE0*XTKgMI#ou>j1dRZRD)C*W0f_jaTwZ?TR*vWultWWG;G>Dxs_py^v zV<+P_b|!h$x~|#RHR}fGpbrXGjv62E_Zy9TNuJ=fCM)z&1mY%8oUB~VpP-L@L$iL> ztlxw_r(2|t=-MTHmV63(CAj7=VOL20f#m3CnE8?9pA>oMb1e9d%JU@4_6Nrow*Om^ zzc{_H{XZnj=Y2b|u)T3+q5Lz+7T#uCCoyx4CiW2YvKPhELKQ?v*-c`z@fAGy2w{@Uz{0vcB!%L;^d)-o?X>>C z6#XtUA2a;K1gQd`qK-|P=5Yp%iGdOw>q;kiMydM9@%MGdqqSH?Mroz=G3Rlr>a^Dc zkQECk%p%9MDu8O$0OGp?U!w?E&>IIYj7vV_>L-#+OvJ!{Iai{?4f?K?`)k-dbhhmj zGfcdR&~~^PvH6hfH#TK!w^$y}OLCvkEt9{espxy~H)+KGx26{>ko<{eJ>9kNvDTB} G1ML7*yK;8` literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..8e64bb51dc1c4f47f23e000ca5c6436abee1479f GIT binary patch literal 784 zcmb`FKTE_g7>ARzJtUqYSu9Qk??4JIX?th?Y~rZs>Q>S=fl4n9t#I52aXTD!cJfo) z=Hf?j(e~<{i_{LjOY)MJ2c9>-1Oh-tTqKN%Ftq~D^Q{TX0*eXPv7E$l{fY4Csn1^q zuLxh03mi~~Qm3i*ShsY2PX%L>aLU49>T@p%nMi5IIJXNXQ%)49Xh#Zw$UrBEF0ld0 zi0sMxqKJ9HXIxgL@wq8zszqK_6b6tS6E&~+Oo!&7$mcwZ%Y4D(<~b6@9jhX@9vYLO zWO7T=(eJGBH%l?lAGBPGADY@t(+stP_E2vb_fo}uRB=DmdaPYrw`xP{p}M7YtCIhY zhz_IOoz?r(+u&gJ_#tjUVp6M5VC`xyZ}+j*W>52NYSYDV(<`p+K0_etpJ@w$%d@NV EFG92SPyhe` literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..491d734467aa3c --- /dev/null +++ b/be/test/format_v2/table/lance/data/multivector_invalid.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":1} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/multivector_invalid.lance/data/01001111100111101001000111cfaa495a9857e3b9afc0daee.lance b/be/test/format_v2/table/lance/data/multivector_invalid.lance/data/01001111100111101001000111cfaa495a9857e3b9afc0daee.lance new file mode 100644 index 0000000000000000000000000000000000000000..2b8b6b73cf61d3735d2f5094727d1d41af112bc6 GIT binary patch literal 1309 zcmd6mO-lkn7{}+Conm<~kh!!3)nZ8{VYMgmv?7uR2~Qoo$fBbxtmDBIs!I!fpibTW zGSQ{aV9n@mh2%>wME_xD_Idly?=mhSr1}E^p#+qNslKriO!o1Z>Oe`QCz^MKp8cqK zee?3R8lG2MC9nB4d%{h~=vMQrGOK(3AAj_x{P+a8&o|^S2$~`gJt4z^{gMcBEbs^6 zDHH(rIP*i%vmm$G@vlU?Iq+{pQS=6N_z6m$)cZoWn(YHrc2y>*?D(k zi`~|2w!ke7c*GAdi@PU*CtD&fWUJryWp|J-_k&?iR^pgbB>WN?aUm!Khh$;w6LsWPf zOUoc^+=(HuVI~k01o#$0WQ>f6{Vu|>p`R!rchiI1&%_R!7LvM4r}1;#pUgkReUI^} NAG5ZiYSl^?9)Gpg~ zyD9NKV{u-lIWAZkrx~YZmPAb4Nm`d2x}aw{?qD>Tow!H9=$V%7^pSC6;P*KKa1QNy zDgABlHXjTn>_Catesu#{yo9dOX+T-ODl|slhZI+R`cm}PS)+F_f z{m^X(^^oxos;Y&eOg&{G^AL6ZQx`3Kd%tzrJRb_wUIJJ2L}ofB|{u3%9Njz zAyc>hkd7U*WX%sqj~b)OG6zdf2;B+v#1rpeTahGmz@{;qIMb=coPb&`4Ff9-$J7cE zhf<%oama!n`m+Yl&^PE4LL7cLe^14S(Fx-q|pcvD~P=qP1Jl7bk=e#eiHt@hSR;}38 zO_;_1yfn@kiaDEj*u>#poHG)0w(v;A`Na1H6bA|01_>L2gzbYYP@*6!RCAE9DM;8Z z$kMJh$OL;ebImLQnhsagPvlFWb0r$+y{R1(C*p7(Ld;RmE9Mqh~7yC!BOKybtM?pJ|H>e$T|IDACEtLNlRw}qA z)A;iD#{!-3{R0F3+xd=sM%4AUK~rkY(h7dTezAW9Gv+ibe+dUtyZ z2CkTKukIB}mNHss(-(?S0~h3G&jgPS$*u*y%Q(rcqi>f%RBAlDs8uS=2d;)R0uL(5*67Dn=$oK z#=>jQ%qppn<>1U>Ay=!PI{Wpv?OxYhBb2B_(KGjrL!!sb!M%lx3RcRBjrVYEN(7B# zrf>xyECEq9D`a;P1SKmz1Ub|t!~g-$gur4v#?+fbI3OBVS)9iKAs?v}G*T&;#x<4z z2pXvrG(stOg6UkpIRq#LOY$TmfKZN93OiCMIAJNC0*Jw@IrCd#M<@j|xWUr%MR<`E z2MUBf4;%D7;2)4-K*oRg{uh7zaq4RPXTWcY(=eDE|I7EKo|hiRrO(B`FR*XQu$6qj V{c)d`hW+B8BTyCi?C(CW`~z|i)J6aR literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/auxiliary.idx b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..e70fa7efa44a4b132f2d6b0137de4be123c7320c GIT binary patch literal 329407 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йGe= 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 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/index.idx b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/7fd93781-4cc1-49fb-ac49-292848aca6fd/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..94fa280cc55d4d56e9b2e5db23b8d490f58cac4d GIT binary patch literal 2390 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

@%St)KN$ZHm-T?)B-2=ZX@@HUhs= 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

Nng+x}5Fbt&5yn^eYqTHDs|7nbU=*@WQP4I< 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 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/e6359049-3830-4e8d-93ac-2993bad0837f/index.idx b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_indices/e6359049-3830-4e8d-93ac-2993bad0837f/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..6ed1c566a479a3d510fe59ec54be018b554bf9ab GIT binary patch literal 2390 zcmaJ@c|6o>7iXk28CeTanrLh#D$DOVqeVy?l@_HCqhz~9XyJ0FMM+IbArg~Uo1`e_ zIa8#lmn=z2RFo|$Ma!G6Zr$|n`+c7Cd_UiFzUTaTK9A}!nIF*p_vIc?R$!^h4U3l5 zj#l>b%|W{jBAc^1`egEISD4df2x+o4MQ_coqr=!*r25Y10f&rM0_@=U#_N6i;Q97 zOJ%s4yquPOYlML*_&XuJSi zJ1fkn=D`!rHRgFxHdII6BrB|Dk=~RFuwt6X;GHH~JTr@2@iZsu#@8TWNd>0Gh@d7{ z7viS6QS;Rk!KMBI_22ytOr4gJ6>1g0S*F0(fxEy`s=-Hd`_TLlhg3dECdy_;c&0mt zgjA`ZdTA?dO3|f~;d{uj9f`=X-j78c61;PMH06%SCU(YR$^T-nU&;F= zhi)Xg`L}|5=Ml(wcmZ1uX3`OUBOq)2JbwGzeOTA&pUpBLam95@AyeXbUo-tmI`O ze~LOdWpqJ9LkbCP>83YaGN{rjGYqkhMVD!Tc-s66jrcSg=ISJp&N4CGFLk3)O70ku zQ7rLK7@~ujh}fG8Hg%9V4GiOC^*yka_d&ClWBiqsNnm>Sb0}(}Mfo)DEEin{g z>6x8iJ1`0IZbgDzpgC!Pu~L`xOV~846k5xl!JNU9wCDU`a)V3(@whek=;>l=wr2Zntq-E#Wmx>Q|ym&IkBkrQb??2r-M!Qe`pj> zA4W&Slk4~0!G8HO^kt1jQ&AG6JF)PdQaf2VkIRgmHxm+JDYynZ(he_Mv{-$c=3*AJ zLhcwO^|5H?RzBS|*vZI!w}tN0$06xfIwpSCviho&3T^#rm>C>G^S?3Z*qo1sofnvj ztc#$4w;A1uyWps8stqUox+GM&ohmLVr*C(ffJ)yzlF%oQR>_p6I`2ZqRx#A{tbsOB z7UX>?z}|QviUv0UtQ}8`8-?&CdNb7ZKS8&}K2% z+*$spJi*7#0g-&&0x~`@R?@bwHj$JQ(|l zk*9Z=((=2QJ?%J^nBIVGd+(6#w~pYM!){V$NIJqBkxuKvHT93h+4xq2XlH>^w;*!6UasF!yJm=5F zHIis5O!vm&3a5bM_L$6XJwPMteaVc;M$jLZfyzsRN!6>pxcc}=NIP#tM;FAAh&N7X z(eFjeo_ArMS|Yx+*MQ>CWtxb(AT#di%zKVbEG#VIxK-r^Y>U>GU^P* zJYGu1mAxlPGasR3o0NVl41_B^YP5NK84>220!cgu3J}1!x0|E$?gWgdI?}@W6%c7V z3CddY7@xfJg)eGrN!S7nY*n31_1t49tHhn?y)~pJdD_59)kV$nAA6+Z615m`hoibS zv~0%dBK<$A$ocLRrugc6I=#e-8T?yO+Atso106}Ae6fXI>Q<$>%1?kOF2*LMS2R*K z25+@*g3r%3U~X6rn0qASazQxW3|UQ1IJLrp~Mj9)zM-DZI`KrpAvyD`FYydF*?sur?E^6izc;YGXbsLWKI#8-Dmv4mj`%QYK2qgoiHC0{(^OB zwJXq}HmJ*7A(e!AzT4inrgH@1jB#-_Gm`v{tM9K1`Oe`Q;-P=3d@X;D!`2Jmg>9i3 zNLaMSQk$^TcRYr{caMr`4mTjWK2XB{6C|8JlMDSYCef)QT0e%Vg262aALuC&GFo3Y W{*~%#^lwzn!oF#H6ZV*C&3*xQPh$}P literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/1-5f2b5ed1-20aa-4902-9e98-08608d0f16a9.txn b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_transactions/1-5f2b5ed1-20aa-4902-9e98-08608d0f16a9.txn new file mode 100644 index 0000000000000000000000000000000000000000..bb78ccfd7f61bacdd4ed31a632c3606782787a58 GIT binary patch literal 377 zcmd;J6jCuwGfFZ|O)=CpGDu9+HL)}>(zQ&rw9qxMFf*`7F-S8sOSIg@c9x0j6cd*a zmq7hZ^G2V8p1;?4YHE0_S@u_mky(nnEH$|#zo95GCAB0mGpAT+2O|fg6N8rymoijsS(;vPMrm4F zPHKEXVo^zENoIatd{Sabaz<*g5UZhqk%@tq43{X9>crdvpyHy$l2jpPBU3XkSuPQX zY;ksGL3~M3VqS4UesQW0Yg%GXaVpR%btKIgRwd`>C6^WzrRF793NadaNpcAzROcpE z#AlYI78MIInHpFyI`nV)dbGiPrOifNSNjA_mu`o>3H8D=H)J-x>PSG_@u}m_vOf|DiwlrD97RnVYL+ybEDqQsI^A!Z{}GcQ># z5r}MYc4k3*Nl{{6aY24@st{{hVoq@?&?GdDHVH8D(0)=f-GG}ARn21=NxC0kmUBrReK}nV6dzSR^MI7#kZ{B$=5SCmR`?>E$HmC8r9pFfcN)NP$RZ P1ttw9gZtM-6dITSZIB$0 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551610.manifest b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551610.manifest new file mode 100644 index 0000000000000000000000000000000000000000..12a889877f074081a068b7acc8d339269a338ddf GIT binary patch literal 1351 zcmd^-A%lt zNyJVF3h68?L^MSzE73wM6buM9{;Fc-e_$n|yL$;990@j7&agAQecyS*eBPV6&vP8y z;vs^Cl`s0OsaN$MoAt?wOPh~>A|Q+$T4Yw#3c{vqcS@j)YMA2y*KLJ#lC}XHJL6H` zVxsHYtRuEf@k+X?o|qR|L|rdL&p;lW=NhNs$sO&YBZhMej^nXrn+A~^xh=nG(#V=) zA<7agDY!8TkM*eOd^;8gG-61QRIPCw4t2fZ4Y%El0_unDR>)A+pHm~Sm1AT@^J;2-ro?KItp1tH>9Y=E6@@UXLQSew6f1VilUPjZ? zETODNP39FruR9k;f$Lwxz~JEtl<`{;EAo2@O6b7ORVxa;nvCa$Q5*umag>Qma=w@; z3FTqO?J&C;y34GY2x^YkqEU@Vh5=9tAw6+CbdR6%NGT9oHw{Z67BMI>bQu$-Ga}2? z{UM;)JV@B4;gUdU{4Up+HL1#u;^>O4ld5e|&5)U@Q_W#jXJ58)SpFZRteC}IZ6N>k z^Tvl<;l2hO)YdMZ7$)YYUPnZGZ>aF`@egavaZ1 IotwV!8!7yaH~;_u literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551611.manifest b/be/test/format_v2/table/lance/data/multivector_ivf_flat.lance/_versions/18446744073709551611.manifest new file mode 100644 index 0000000000000000000000000000000000000000..4209f83667b98b8c6ccad8dbe8da29cc70ab3845 GIT binary patch literal 1513 zcmeH{%WKp?9LFmT84;tr%2jySQ=k*d)6rUk7(7JyaBLVUkR2G)DuVr zFx=bu@7BaS)P?!Eyk0Z#?ApfG^v3p^o2vsbxj~qK`6pn$*ahax2Lmvd)4P`A&@t7< znqpX$l7+EWQWZ)|R=KQ|49U_QEa|eY;qB~e_CNgJ-Q>T3zn#K|6DS*n*V6PCzV{j^ zX1pNLR0BW(Wqe{$zX1A|vvCr6!DS2#79K`?5GJ(1?j{h>o^FjPaQzzI_u?eA0B{oV zX)Z1lc!4X9xn7exX6&s{vn8myen^t4BpU`m=g}-Qu$1=JlZMtu8rofQbjz?+$(9Tv z8M=Zcs#8f(Dw^2Nd&Dz<<;Po*6WA#h@4O!suCwSu4zz81RvovlrzBMrS9NvO(WQ!G z6U|U)StpuHEAB6C3p{43L%B~MHs5CRw;r$GWiJ7%sFeQXqKip0xH1e=@@dUQ8C}F8 aUK#3*Ia!o9!TroZzFVdlmYF#cZlVB~&SQ2a? zV0Nb9#4q(K?Ri|VEJtb+JK*xOmj~}3TT2u0Bwg$AnA2>-kVGnPpH41~!{dkd?g#eJ zmZVZv(RrV+fLZ~rTMnUhs}Z_&p9EpO8M=PUWi2;wt>>j>cnd8;2V+bK!9;eynvA%O z$ck($w22!AwBg{QMV&#VEPWsgr~eol zs11u#B>~h4j~)?7{C|;kueh5z7tp^APyyt-N1y| zj5Hc<>#q>davA&wwp9%)?XmLL&)d7D%E8{7C+Z#G*GyU5f7ja(z2x3Fl;q`aK}FlZ a2HqSSjy2OTx4}nsclf~+Rav;Qc>-JP|go87QGsYx&D zRgnG{rH7t8i5KzUMNshI*Qx#!o{H4jG{t}j9y~g4c+AZEy?M-!-<#V&QP5k6Fe*Iy z+I+I|x^uACxwL$1Z|4UFnT1oE%oS0b*xVaxpp4r@QDnw=6vp1%2k88jfQBy9dFZjB z-gor7A@#F zlJw*OzF7B7r_Ma1ViHO#wH7feE!MIs#A*=BBfim~t(UoX@IU$gkbE~)^CHg0(LEshS{A@}@G7#1AuXNKr3>lCW_V4Of@!Ku+Naa@qFo^fClNVZg@Hc~x*KTF1 zi&5#>iykLar8Xr1KERIB^2T#~yRkh~V>#%TY9jlUp*ze9uDdj13|yLap+9-iQeL!- z*OXYoi&o{u|1mHRbnELMZ?hM7^Kts{3@$9uAi*j-6zXw)y@AX?t97U)AqmN(K7ZR$ S7|nonY($ZnOXSjdAbz-P?}Y`CPBL z=A3J-eL~Y)dtTZ9;6I+1+T8QboueE3Pt(*EhMRYCI5pGZHrWohD{{Dfsl%Nr96o=# z!(FQ#zHphtnZCol);Zi~qr-i-IGnxR;mdb9?0GMzwz3(#+R5QPnGV01?eN=04!=|C z@WBd)-<|I8`_&GAxXj@rzQdoabNJJZ4u8JI;S<{({_8G>J#XfkmNtVq8yv3Q?C^qZ z4%hB5M`XYy~UFERneYMBM!Pf^JK6Aw3?@l;;?u^4tnmZq*w0F4Wg$}pw>u}ow zhtr2T+;N=4U9NWcf;kR%U+nNj|I1;|yT8oE!Gn_=-dN@E!!-{7xX$69tafArqI{efQhqpI4{On$bpFiaA3r8K^b<*MFS%*Du!f3Z`lP5b|d7Z=47CJoRW{0o4 z-Qn5acX-|-4$uFE!wa8tc+pD^FMZ45!1Ipaq|Dm?*F!wHeB>S zt-nXkQ~gaz@w|3G2GA3@3@8GI1LJ|Kf!V+fzzX1YU_J0K@H5~UU>EQ@upjskI0l>o z&H=5OdtN8tBA_2o0F(e@fhoXsKn+j_tOnKtn}Dsr4xj56jORBwUky$DW#KA zNok}MQu-)$lr~BkrHc+L9aK7`bU^8F(!r!dNe7Y+BOOFKgmeJu@X^7eLq`XWij4}5 zii`@3ic1QGARXuqWC0PN1Skh8f!V+!U=^?i*Z^z>wgEeV-M~KJFmMbw4X6O80U1DV zAO|Q0%795g6;K1z0jq)az$RcTumflS_5z21qrgevERdSU`hiR!8z=%wfeK(cPz@{t zd|(~05!eE32X+B_fP=sh-~@06Na2)92f71UKm;fO%7IE?Hn0d-1*`!!0Gokrz)oN{ zun#y490N`RUOUzgWB|Q^9H1B|1114gKn+j_tOnKtn}Dsr4xjC3lI0&c;%)VjPjSJ`0F1sx6KUBegsG|Q+ zxw(yGq>(KA51E(KNai<^(MEFMf5`mCvGN-S%WoVl(l}bAakNO|Xa$X<6*P`k&^TH_ z<7m;w(V~r`MH@#eY#gnyakRq5(TW;JD{36AsByHS#?b~gjyAAyw1JJI<>oXFmz&c# zUT#j~fVsJiBj)Bd4w;+VIA(5cYR>#vK?McVKATfsNzl=QNI+pVK&Qeoo`K`Js}OpW8TYes1Hq`Jt+mpVv5UeqQ6a z`FWvn!<8vqnnJZHKUAFZL)9riRG#uf^(jA8pz=c%DnC@B@Qy9EuOgv(6$#a= zNT^;#LiH*Vs#lRvy^4hDRU}leBB6Q}3Dv7es9r@v^(qpoR|TPZRS>FI1)+LX5UN)N zp?Xyis#gV}dQ}jrR|TPZRS>FI1)+LX5UN)Np?Xyis#gV}dQ}jrR|TPZRS>FI1)+LX z5UN)Np?Xyis#gV}dQ}jrR|TPZRS>FI1)+LX5UN)Np?Xyis#gV}dQ}jrR|TPZRS>FI z(NMjLhU!%`RIj3;dKC@Tt7xcRMML!}8md>(P`!$V>QyvUucD!P6%Ey^XsBLAL-i^e zs#noay^4nFRWwwuqM>>f4b`h?s9r@w^(q>wSJ60~j zuo$QV{tLJRxCht(==;ZG0sI2I9r!hn0A2<50tbK(fKPzq0qDEPcR(|~VYC4{0^NXK zKz|?~7#zTGu)dQ_1f~JAfCa!(U?p%Hur`1Pzz+kD15X0a0xtru0B-^ZfDZ!r1biGg z1$+lIe;^+i3=9Xx0uzC0z${=v087Cuf!lz! zzyrX;z~jJ^z_Y-M0lWf!6F2~T0DJ-*2TlRs0nPZ%(k6h8;BG)Kpg)ig3D#$pD@OzX-enya^ltJ^(%ejsvHF?*eGXH<~s;N1z+f z3+NBz1A~F#z}NsLf~NtqfCa!(U?p%Huoid#csPK^!A}Cu0xtru0B-^ZfDeFAfa3w2 z0)GcIOWz{X~O)qCr1}K|h7Tyb6PUih_QMf_{pEeg+2p3=H}i z==$M#Zu8}79$+^wp5czqb^Y-Cc6^@ehi7-d2mRy+{p1JzoeH0UQ9^ivqjt1#%NDCnms=%*;?XJF9Jz@VRjK|cdsKRkbJ{ycph z&UO9p%nf+g56@f2=ed4()&_jg&%a~%-$5KiG0#?K7sN5oRmTUB%riCMgMNZw=4tBW zK{)dyb$nqkpCF=ndOCR!(>ysHA4D}z&471);)!WI&r64M-F$dT2E3aOPe{iHam~{) z;DdgGxaPU&&jLQ^Cx~mFWKJH$HP0`{2XW1_ z%ke>6^V|yfpr0VFd15(v5Z64d9AD`C!!ye9L0t2E3izO(Ag*~bIe8G*Je7>+nG|5x z4^JY;2XW0)$nim3^8^Zb=Wm`qjt}CRCy(QUvdr@);DdgGxaLXY;9WmFH5?zrHBXFy zcYfk&;rJk~c}6%sh-;n?0Uz`e#5GR_ClBg1PX)&Zajho;*X48n-81Cdej3&xL*-+v+60l)+~X;U`S&s?ZOBe-Qn8=J7jZQDiHb&miPYfJe}! z0Szzm^AR>vu(=y}82B;p0I&?`11v(nfxc^Ep7(p;V)~f@Os3D)zzl3sSw~a)oeyLp z>xXO$GUn-Lz#qXk?V(3Or!eO&E_-iKG8U04|1fFfqcyw=|dlub1WYeMl3_S~a zJ@gN;or+Bc{BFi?KzC&lzrz0tebp{7GCAx9U^L^NhweA%MgkSIS$?5_mQG3s_^DIQMYcEe4k%Yk_Pi z^e*h$V0R_-BIH}Jxf*p%k%jUr}Sg8|qc61+Oe?B_Ou$=AB1Qr5ppkE6x zFCBeWA+;%gp^c7(ZM3IEE4cg|`mIBEF>nXEROIdAE^EJouc8VnOJ|^85B~)Eo8f-} z{US7Dda2Nt(55-G5@j4%!J>Xo;=4t0J5K$T@T$x@j@L7GJLaYUC}JI|Y>&|P4f>jg z>^A7%AYX=D$+NxQjv;?Gx+CzJB(k!^&&7buu=D+AH0}Z{Vh}}5TP8(mS2^`gBR|Z- zH!yG%nX1QDWIA8qy?pqi=$k-mf<4e_;SuOE`kMs34cWhFFK6CMJ8fz|cm+Zhd>NSR zw!6eX;8nIO;y4IrDAQU%N9co6=6#L69r{7git0}AEZD1LP1*3bz;{KDQ+)-is*VRN zL+%sc71-_uTA}L;C{QN>*8;Nug5Fa=jsO&pINRwhLJdSqJRqgO3nE%5IKR zkKj~g_DjL4d>*)OoIfeS?@GGgAbTp|`8Oil4E;!gF_AZgCy?wIS_-YiUNeMCpq$zh zP~^Rgv9gxZWF_JYjEb3fEsIltP?GIpa$ej;yawljqLO7<_fz!WXL9q=D+(WiUXBfS z1YLIQQdEv?0kSL>d=0W3?6ff>v6%oq#6oTY@4{(AlYEDbS=F#0*h~;y%v@A`*g*dx zXq@jwu&JjXZCVC=3;0d+7e!ws9vFjcAAKjW>w%nrv$8xo?v4!w>R+(g54;Mz2K*lQ ziusbwUVrSygO$1CY1=vJg1L@9>#*s7ycWnpz9K;&BV%K%gg*qYY@Ccd_ruM~Nx`nPxAP=g?;o%+FwRDY6@| z)56;U&!a1ro;I87-O*J;+cm&C;8tJ~kP3L{_h5Hx%$3eQw3iRAq|X-gsjTl1^ZXQK z@`Zepg=`D9`x%P zHBff1Muu~3qB`Hx;E%$~IWNIq4lak+!gnxUG)ZvL{tk3H|9%MlB6J=4ozSzPN3ocG z@crN^c^2X0;P=Cq;D8O-sDhDIcAP0#6yVE&-ROC?+R>GV9ob{gxiR3b0HxV7u}93E z&6G|*!WtLThqCY_HW@%U`i{s}pi4)7n06$GUF_PxH{e(9CAR6?*wFK_y$pF3F9fdIZ9ROyxHgoK)dVc7)iyh8+uil0mxrV z;7``x7Jf52RZ9gTd*yEJZzEU>9IJQFk^31yWpgYrlZNMET!~%|?trWgSyN<0nq{zp zB!PY|dTsDm&=a7Qr3$PM>8}JEpADUdOwQFrf5pVQf?tQ%rELrR5O4>01y!e*l~lhq z^aOM@Ntd}lM!y7FCAuH-BItqG%!c>Tipu=jfv+vRc|zg4rxxMr}iH0PlgX0CPvOD%&p3 zJ%_bv3Ribs_@s7bO(v-n7;eP_Z9=$gB_t1Ah>nvAb{Uc_ZVx?_4GMsB= zPtUTx@K3Z0>^}iLMtq zRge}yZ)A~#JEBUl;{v4f&;ndX#1ufsm0mqM&vyd{fo(vBU)7kwQGF3Z{H+vl%hEIbYj9#05lFW|8UG>dIz7YC$=B?oBgnk3# zj0S77v`%ek6{TU8;dR6+ z5a-3Y1U84*i@*mqvfva9b^^-Cc}#dHdTnSKx@Q=;6uD&gB2#n?!{$=>b@lG4qlqh% zIw9{5t;kn4Dr?ygzY8*zaV?~n{;mW^;YWZKK;6NVS#LY`aMbn?glzqnnG7Y{}jD8R-3J(?lJmM zR>z=q9B3}zL$6HbxbSa4reM4ld=q4hk z#M;+CqRVdQ%F+_rc11S`noRP0#y#&sXhpszudF2~?B@GC?bPpbbi=`m;GatSvjk=e~ z=p1B|{66SQz&ajgfMK7u`X1Wq9;U2UFuYB_YV!_s3uxULRPqU2FNgk)VyiXVyY_yVG$4}!>M&4g zRk>P*1Jv+gbgR)FXW;ATM6xVoPh-a>>3sEym~Y}F-sMGVKq z=^M}{YW;cWaJlsS{qvTUi9mdD1u&N#kUiqXeYph201hNEl4Kf7-$GTnMzl7e%7*t+=F1k^VDWCQ=N~LQuyv~$gp2gR01T^r0-Bf^H8os)^kbaEcuh z!;mZUe}fHK>u12XfPaMkv~j8)DL@IbW325p?0O=fiY-~CK(YIbZ2pMND}e3<0@28P zbY>%4Wg=~@5A~%!)wkL!2{a~SYYsLSRT9ljb7ZbIXU#nudsRlQNo&&@-@`_0X6@z! z`9eOyH|8UJWj>Sd$M?1e?1k-#_C|ZOjDLYp7jhACj_GGC)8(j}%swRV>H_{&3j-KV% z;B>pFUW!f|;wS8@o^5gmWXjfR#^5IG6Nvh~z_N+}wS&@4$q}67M{8Cz+%irplr- zU6V`4empWRQI;LY(49l4a^D2`NAQ_o-Grxt8_1MVNxO^agSl^?>s8EYDVY#se5QO_VN#(pC5 zROFS&b#$uA{tR7rbY0Oc(U{0$$a*LMW}+xzp+uy8iBgHE0fr>`Z62LAPm9-t;>gw_ zBT)QdbaW~FdIo9@tx0%HR8ATIy=I8}#qH8VA1DXr0@&Ftx)$3-z|C>XA~{+YTKnXCfIg=JIy>)T&S}_8!&X6h5P1W0eS>kX zLY{@JC$f6%YOwhdx)ZuGbS=>JLp~Gv)5t%9E=INsU$HUvg>VFzAoBCU_hJ(R4}w?V zD=}07lvtml8; zoJZTX$ey4bPW7hJp8}==UO`1x>K8e$S=>Gx`HI>ioDxN*iAET6Dzt*3EB(cw`y$t( zSfsMY&bBG&N1|^JKOY+^nSCyeAorQuI&8lHl)dUh6+J%bET4nCEB5;s>wWB2!oP!lJUX5CC!uE}Ukv?y=exD;AZNY<(>X#>0>Y?j4c=JWucquuMs$Ug6G`cuH@IisN33EwJd)x#>xEbR9& zt|r?Vn(Vc+Tfxv!&zQ&yp|vO$X<0$wdTZcS)|(~m%a=Y&+vn0+J@Q2s`LdjIcb+@|#N3Uem->}Asr{g2S?WUfsai}l(cU=(5d zEw;K7?Lfa8TEU@8av!v+PBnBI_7_1rV*>*NufiW3i zn^;4G))?V!3|>L?d+^ujbq}Dz*mw4x*bvQLZ)D2eAv+bJP5Er#Xmy9gsu6#W8nT zEW#g)8M7Pu73g%7rN_DO!T$rkgsRyZn<{wS6MlkzDSB0sZP4?P4`7a6k+p}u1DWPP zIrkSKQ;?HjN>2OHONm90+Fvg90V~+0kl_T!?%D{4w}UY|q0+&Uz63QS>%x z=pREbMLv~*+R`Qyx(wMua3zb;hLmDg3TASap-jqK2wz6Oi&csAdiSg40%Wa_=~z|3j)Cq& zo3q%LL+`+@4{`+;l}S}c?{q8mYq85hx088a1bzx$8#M`Dl_7PAJ34pM*K5eGLe`W% z)R#8-B=aHw{dv&OVWS}Hhi(e|8}OT{F#G7U6kiZvy05tpCUjz-dCy094Z`s>I*s8O zCQEdBWUzw5ZrZz4FYLYI{wqy4kZCIGS zK>mV06~F=ZOJgqb`2cJ4byN_*`l}`T;|T@9y}&)dj{rIDBi2L)dzWF4^OWs&clkC! zAOkxX?;th=vVzX4gzicTnwx2-YPN>;aQ51-e}`CO8uSosJ?IFu0&@dnT?5vOWE$;M z{S;LC@HPOv9$tyi6@D>Tfv=3#UF{dh<{~SGRs|Rjod^9P^5xL`p^w$u<=ZZhIyN$B z|15nL&_^vcnE*TJI(ZudMP?0?i(~LE9j&H=$63@MvY2R?)4baQ5`782jeB2g#DLNe+4b15w^p_%A#hM1_#~}S+QG&5HGKU4M0J1UI zieV8Ajxwmqg)*@>vS+cIMQ6?7m7%%NJ)yIpW6+B1+i0UrrGnUHO`9Nxry+X_T?SZX zno{X&vtC3W2XC+EvWbpYfh}qrvP1OCB}dt2PgO74!(l^KR^fX^@m@Jeh)s= zeQYQ)RRQ}gdXlNcP#!q->mB(*A;88Op}l*Reg=mSgt` z^3C*Dh5c#<8;R@*7ND~G9l9^jwMO?Buu5eoL~Z(xB6D34?16m}d1R?ceBr=dR$jKO9ObL)lOJIE&hx+|P!PB`42NW2Kl8J~gw z2>cfKDWJ@wirHU4)yAyk>LTmkKwojjI*eYydOy0$k?VMT2N?-rZ|-UE55aFlKc6-S zpl@d#H$vYJeG<9|n;qC|6N`}*fT?OemB%)|E0|!hBO!ubWA7bezh2r$pS#eJtoj92 zRnG2VKZCv#+lfgo+vpBspFqbk&OVnDF#3ZLtA11!yDJR9UjE(397!}kRpZg0 z%C<`QarD~A)#z0zD)E=@0AHcI16>`oUOvA-ud@FK=*iaMxBxEqS5=<)xm#&J_nkNH|J(SYcpOz zuDgWFTNdqSA*)QdKbw9Iouc|R_=~`g!Vd*|U2wGe_pbS}B!hJGUhT$OH8GIcBzejfupbgu^+}0C>RRoSMU=6yU zB5RFqIgn&7+PEU%2HK9LuNFXcg35&5r`RZ1v>6X0>xum(*j)j?23`rJa<6JQ1)coR z0KF6XYHaEV2Cbd!q@=jNCVq}K{m?z8zQC`;HwSmX?)wRX7wi)N1eTuyU5;!P`ggIL z4y`P2FB_7qDfDvav*^m0?=JKtt$k*1j(jTeHTCY|Zg1(Y5s(dD4MrJBCYZpX$kO8O zA3kXD=`{E@=5EBA_h~Kz=p!4s<7((|PbWqwkLFd&ssRQ|0K3 zOjTzJ^4@>~=n0?-NCh?yu`|`4wK&%Pc(PP-;4pALZ4^8Nr)~6K6U-av!TOpYpNW1z z(k^WJ8$BHYR3Q5a^HkubAlpxyZeW7XJ0E-$ z%rR?s3`pUJC8(051G34`r?Kk^T?(Cve1q0PyQR#V{j)oik}V(o^~_Oi@1{*A zfqw^b`#{hN#dzQvj9LRR6lF|^jJ3<$Nq9YTTGLoj$HaC1+0FHL(D%mdR_WaWt?2BB zjT}`6-ovJiL$(}UA$T2=D+Z5&S6M4zA{zJm*f#^`Ak*b;MAH2MY8UKPQMw@am_r-n z^PqLEE0a9<`RMy2Ti?J{<+Vhn}OsjtBzJj*JMp40KA8?W}zyG?mJZ8dZh?&?)ruChg`V z-O9fp1{wMm9XXs*xB#+=OerZPzn1MVG5vZ>Wi!jnJzJ#nRG@x_%~_r zzeHb${#VdXGO>l&l`;?|%OY8h(#B-fQ=+gdMmGXH1N*Vybod%@5&e!&x<4-Y0$B_h zmpl6%K;>^I?FTaX-q5R=wC*R%p}(YmWztdj>F5U{dl6YGHf!l84Ow~8J%NUzQvfNe zR0UQ6B|s+79l)_xfi{8n18uM+qdf%=!D$<TuKxG>Js8kqw3ZR}cr{|P4e>=Jt({IlqXfRC}+i;`4X zbgjWk5-!YM5w!NMh%r?eWE;cgY1*l3+Wx_hN!TUcUxG|+cOyH<95VE4;Jq-)Y@KNn z=|ll=lnx(=xf`f9=V!=@u`9wR2YxRTN}-JcCJh}K;cH=(A3JA$jI1THPRJgmT@1{n z%r1!&;D^9J2Hzp+{x$DL?3EEam{dP>I$zJW$Uj5LY`n5{LI5r;R zYJAN@^RanpKANZIt9fhwT8Gx7b!mNCC+qcF(U$ew=WzK0znFjUllcq3ng8&ky^^Ma zI=4Hny^R)RgZ_VGe5)MH$L6K^Xr7v{=A8|#b!a_Wm)5run)TYcS-<%~{=hHhpU1F~zvMUhPkzLo z=2!Vwe#YPCcl>Yrp#9Lkus^m>+OJ%6+CTQu_LF_J{bir^7fZJ9nffv4B@CFXo(;Yx zyqU(ESio5ZQ#Pd|TT}0D_cuaYhR{ZfmBUs*(^k(PyB#Z=dLxtVCfaFI73hY6XJTIt zPJ!1%HVoljkaTC#K4jyNtwYuenI@_K;2eEyvghiH*j$HB&&hPgc!>V;(a&a{t&z<@ zMrPRAc|LN=ptl0~mB8gdC%^+f#qNFJFmM8Bj;tF{1aM!mU;5&-Cj-5E60{*09*Mci zbThIpfP&<1+77|K7=9}JQ`pRpyDy5x=qjN1m`3 zlS-&<;4IpaLG}r^ioO=HIlsZ4OxBCTZ;9>%fyQmxA4^}VY?;`-fz8eEzlGM3ITw02 z^b^o?uxZMC`y)GztO1$UK8!Y3gO9P+8Q?DPW#A3yd<~33R>L|}MNX&!oJOgIU&~<4QFg%SP6k)m zs(@F?E5)W58)f%8I>(9LaA*e7+tb&kccslDJ*GaD@Jyh7tT#jgu zOwqXnJ;7vUsTSF8+E;=1u+W9zOv;slJ`+>4-hu20G-X&-#Qr96CG;Pl zwaF~r%GUw-DjaYCTV;#NV@qHeayf8y!u>dN3A%ECV9_6B_}2kA(l&N7Sd~FROO=qb zy#Byh+HL?AFm32-+wvPb7$1XXc+e2T0d=)ki z(rz5~IqJ%vnxF$23}==vhB1e8Vg*FGv^n^A7Vs421=fmCEiDC13_ z=Rqrben>}}AW>;&UN!PeI=l#**3b{3moqmoL2YU#3soRw)iY7>8v3V<+lL=zd3R(v z^tBLL=i)2S3y`gY-VUv7I0aotKP*_~OFyRA6GmB#QA6@7=<;@3%u28wTgsaK$bABAU(CLO+FhkJ zvNy3?Mt_H)RY4{~t4a~X7GUe4&p|7|`k+^)`uIb~VKm`BZ5Ly66};{+%*l@72>5gC zx1yVct|xRGWJ943v(9GFszwhZCy@LYYly*bfNw_|_Cwzw>^b-bvV*kgjr>iZ8}iY# z*M|XLSxk0WiA-mr>ByGBpT(cAM8Z`U~g>&{rW(h1W+P7HmIPw}7XF z>Ng8>D#7aY26oVfOO)3s0SzdCF9)sw6sRj`uS#$Ouq5ujUM@hcfQ$g`fR||(0jlU{ zbIjc>uE)Lz-E+vZkaG<9$m}@VTu(;9--uonayhgD><~0TtN_!mi&p6_gswt18{ELZ z^Q*@04DGK5H^oN5Nd?nA!|n!sz|D}YMW>{j&U~mcmi1ZC94WpMVkb0#(I-oIN!?RJIJ~KJLvBR=uTlzVC%i?Uk$L? zK9#_}?-TSs0qRc&2uS}D`uP`aehQqX{ZYoNXAPIe-4m=I`i`Uy5k*@?sYF_9Lp?d%*0#q?d0R5)X04Si203*?D0zLt>No0^dnc9yh z?^;SoP?JP8+JDa4chF!5^-7$C8qU0Jb;w9OyyN=V7DZ>Wcl%&>75g5Lowu z4DcV|waKr;6Kwi-4ff>Y2=WPjtGN4-O+ZIb+SkJv^fBiC59F#MFVJ^S=swsh0R8~) zX`S>b->HJJHoFJxqFqzuj|1NV_GeEjk17eh5!@Pc&zWfv?tDIdCu z$j^_v-|_3PsYQk(>!G?Mdy5E%6ye^9WUzd zPtYx(FM}S1jW(0=tg~91;dKBM)koL>&U`(`{2E{q^4`GL=(Yn(00r_v#@h^R0krx3 zkokZdNWj{0G@W*oXuH+#N?3;K7d^YnNW5P28qNsO@=yoR&nj<(XoZw5N~^%VSS+Ox@Ixm7E#Kk_$_X8=mxI}+~epf`pIQXcKEbq=C< zG-ltp?G1e^Mt9R-0yZ76p*)$B6wx^hFpN(BhK;hJ3K@>DGw4AEX5n@Ywg!I!-vRtQ zwuN9tt0vB5t1KIl-GFQ^V;;v&SzZmT3}1?kHoS;_RdMUkr2=P$xJ|})9u>`J zZB}U~U`z7aFM;*^804#5R$_FL&Q>$wT}+fS!_Pw237O7nZPtEhIq@3k!_b^%+64Q` z$KowO6fANc(PtMwk4Y`To{tuGsXWA_MxlQSyYJ{j3vXadWsV$r9}8U!y$8Aq{WvDB zK-xh&RS!8(nXQe>MlZ**;d)NlaiDj<&QKi*DzV?v<^uFNKncJG>CR$5qYeUJ3bdsU zm3o!#ZOo-<%zjnWCsw;)VP_XZT|)Pwqq^8}I39Z?3st}_kC}|y7hPZMtBTz>juz01 zu+b*9V=npFzD>Kc$OvNZxAdo@_icDK&u@Qf&?TXtKwgc!3$!+c(qv!8MuHW63&9NHYl3plTyP)S7lGfP?MFsC0f>-sJ#6t3Db07Rs=5`93E3lc0tOM{E@|}!z z1l@Y<-v^YTJ%K!c^U%I`Xbvik1c&`m=q~J3x{u(*;+VTT=q|G|?p_(X7*^8n=gi+6 zNjoJ6$zoODU(mbRoI={@j<6nE63f0DJc!L4WV)3PL-q`FP6M-9`o5wKwfoUG^wA0V zBk0G28%Uao=;~?zGP-M#MWH$O?Yl=U^bTy<178{MF(#E($Cm<8KU?eDi~YJ8N4A)? zT#oz;Z-mjjuU zT>vw&kDz}AJ5A^u{8#7{m5S`W@XGiYdQ}C=ux{RV0qTuxdXmY;Y$JSaw4CJQgtpMt z(C?!=$p(Fa?KEUVkSUNhF~{ljt@}nH@*3b8bkVrG2%f=4)kT~2EU*($RXf4>ZL!P7 z?n+=q()~P~27V|(&@$GKu+jPz#2tYi$R9#hiYy;K2mV$1QrX=DeG4>4h-LAwvAYJF zodh^@u@}-|^jXOCeL;y*3QtwCk7t*IRryXQ?B!v{q^jZF$W9n~0014ucB%V~sxeX6_# zUJf8YtX!ujq^ksEt2Sz@KIlt*+KpP7udx`@#%2yS7tLt|cABH+syQ=vTLZMM zNoyO9oV9Arwsw4AzK~Dk8~I4S!e@5x&=DqI%BT3&e2lN{?JwV_LvwW6p0GFe7g!^( z*Pdzb*h9M@v!`AU-~nVLk$oj>&6 zU_<2l9ib27$l>T!1{;_()y15yOInO^*latRs4BK$Yv>~b8RgX<#~j+xPIrqg0Cx_{ z);qDG(7$+t4H68a_d zw=%iw(dqnuI_A!rv$WAbr;#Pm7hzkBjuNdWm)+`9;mhIIqVEb;w)}{RtFj!$CKFjt z=nDE$mWw9qd?MC1{5P~up?@|+pH=;q=(S-}=%W>~DcDU%Ca1lDyaLE%(K`Po(QX5< z9Y_QqS~BTmBio9YYpXu!OMTjnnlUt%#?;sraGHzeq=3*IHCN49)j?~3wl!&OS|e-K znr-d)zv*}a5#^>gH_Q3W+d!iEGI^p(8d-fdscG_q! zXQCgB>@8$_7$b`8efr?YwF@`Z+mfpg8@p)y2?L$4`FjUtHPBnoKT2mh z>mGyV47HNArrv$jco*4W^!>11j!qli8-5~q7`)2-R`|4}%a9e=D~hv`bwHK_%~Q(n zgIzAPvhGa6IsIL1HZYDh`)2fA&}+lG)5kYJ8FJ2Dzd!QNkgJSxA+z5ex}vWI9sqt4 zfN062%VLePRU6u>5A|hFIQ6YDG!|ppZwAakbMcsy1q5@nxiV*)yVjt!uqIoZ*2r3| zDzJ9>zs*r?LMIzBRnEPtn!^tW7MVT_+~l8<`d{0y-7?5Og85 zHuKmJ#>9RB_Bs|?(BB678-TtBUV(5AGLOJjIX{ao7uy-YjdA5k>`SHn zRgQ<8GuA%v9HNbae=mLBgzOmW8xNjA`(fZp=6of1H*#fl3ic7Ojtm8CHM(NxX3S#@ zbXVxVAlLd;g|eZu(WwHcdX%weyaeoJBw15nHu7}jI?hf4ssdwy`LtV(-b%s|6msOJ z7!$RA3k>v@mE+5ywdr56unEwonQV9DD(6hjoJc9MFN)i-QyWb}8~PFa1z;9Kv{{L= zA3DCrI2t2gGR9@oz4M{9fWFX!pa)>HlXkogZ1YOs6^J@ARx(Eg&lAYXaPB1Je*}7A zdjbWCI-Ux+@2 zy*8*hvenpVgH#0Gj-8&&`usg5 z;l8DGL01fLOxp$8O2R8Bail%-6p4xyWkN4HQ3Pw#Thdu6w9jN!Di!&f98R?3LJ>-N zwat2s_S(>w;4cNU7=1vo62*qv-|znw9h+gl2T)D?OQ2bR&Pu-wx|+Tprrmh#**yEh z4+7DCw7LPAHuZIE4l&QJ*u9L7s^V$!bAhGkb)Js}4+F=+rQj>TGrF-)}d+=*5cs=V@<*H+h^O;XaWaATVgEk`D3q23nozTxhYyGF8tLW!E>~BE# zclgyq_yG!i9(u_x0=6OFjJ$ioeM?D2r=T1M%+ZfQ%5XMH8}7HkDK+qK!1tk{oTdoV zS0il#(PRI73J2QX4ty7LXWt}juS1v0KsTfFSeT+$RiqlZ&iZ`thhPPp%3uk$moxd! z(7Ui#psBL>jMWzTb;sSw*{Y8BU6RC4E$=seS0_t-x~e^d{6Kl@K=F(I(kE0o`A9P zLQr{A;pd|74gLpX{47D{#oa4G+0h$XXOx1WAM^&={FA;}lzseB_N8E_1u3F$p^v@D zbXkfbTY*lMgy6N0JQe6UlkKbCKI}5+D;wwycz}=W2+rsfV=O=p>Py>MtZx$irP1GV z>~_<~aprwBx(Kq>$fjdkh}|IgJotCumqDv~{0iGz=&8&rHSQ`!8v2`{sZe%AZpBVP z{w90|_<49G7D4LI0axK?1>1YH(?%)l$3TArtpJ$;{W7-r!u`lba>zIGK|1=L=&R7T zhgZcJ&0JHE--~=T>(OQKKKj~^O*8c8Qvs}8+>UTU%w3Qup%$^bXr!!DbblY67V;4E zQD{w)Y`4pfBEB0sT~7WQb6=f~VAC9DYVg;P7l1o}Z=zi#I)cjHshKQbAaob>Inb9t ztLl`~k3PaE8*<>a=~)T4IjShd$W%=-0jh_pk>3P)Htnwf*8t4dvhO-@74|sOUk2QO zZc@@+7*!5`$v6s((>Q1kb7MSz8S<{cOyniV2t4~8;tlw-*!7RQ&&n;}&&BK_X@7y! z0lAKdz1Yl#zJqynrmdX)8g^OWA8HKn7I;M;KJ7@HV2OOfRRR3!V*b&Po(p-nn%s)76YG03|B zLv7B}OpIvvJHv0@Wxw9}qoA3TZt@oO3~A@~huFUyv-8&8^4i!EHgIm-ZnR!CIGu?s zMc$fz*<^dS?x8QLiv8QT{>T(KK6Vina4GaUCdkXdCQhK~D6#0DhdvwqBgj&bJwrbi zBb!AZQ<3)pzC!miKo#H!{p0{XztYJ`Dt{I5XMig7+W~Ey%ChbQQ|aq``qG`F3fo^Z z=RxQyk^KQ#I_(H%%RI`qZsYbTS{vx0i=b21^+bL>?e4{fDqwH_+hZ<3_K+|Ou_?k{ zcprQP_%8GrU{x?)GyXzwgnrVP(?Dod1zp@qp^LE95jsD~F$uqczEly$p&tSNHu^eb zw<2qe4RTddt3K_}{|^0nAO@VoZWCaJ+w0wXQybTkMj0qBhStVyLU#dlHgq-e3h0Ie zXAzUkLzYcv*Ml>0+>Pjz)yu)#IR;dQO3`bx^=^HVcGJ;mgK(bT7rKE@rewZ7u{>-( z!iIqIJ#@NzyvJg+5rg4>gT4XT25dSan~WWE_O$^m(Z7OT4(|sj3+0S5U^Q?Uh$6oS zc#FB?Ksm<8L3R&nMSrUjb{Dc>9gS`@vKNr;ViT0zTF>+Fljx%yJ(bLUKN*HjS*{~O zRdXhDR#jsY^@Y@48a>cm3$KmWF-x#`s-y(1o$>PVq=frJm|Apaq05jRW!|b(6QP$N z{~3KxOS*p>kOHqt8Am?}Jx7*p>=L+t6Z1z9aNDab}*N2&LQ z19JEg+T(D0`(}a_<%fVXKoeJ6BRLVu22rF#joEa*#+shTB`6(FmmjWS*vFHEr54@wH!Z?Mb4 zzALyE-3DZTOt^0uO0ZMV9A)-*4R>Lq%^mb{kE|Tb z*{J82UBKpmTgTilQ=8DYV-lQ&cBbA8o{bFW*||n$>if4v_%h^M5_WO)FT}1L{G*Je zjnE=a!>0ieY)$}0$eFXx2H1Cjf1;Da?*pa+it;{yGJhuUAn-c#YKA=yG{@i|T|n)R zS5g!18K_|8IPccA+NnxBgY4ymealdS*)gO_^(=HHwq&;biCi806zqD^ zW-;?sm8wCut=>Mq>6rAc0p_6_h^`~>8T#je2Y^-jhavw;P?o3wdi&O4tN_S{9z`QI zPNmZ?r{OW=4>5VpWBp~Rb+`xFS!6o@>S@ypOy_s+^yR zOj%ySk#}Jd8)#+hbJ)y4rv&K^zn=b->DuJB$mSzk$C$k2>}%^-bStr+gf0&_A0Pqj zI8g9;f1(4A#ir81^-1^Z6;Wp&Hpo&dozrOWCU%OztC5v3fHvz%2B8wz`S(6;I-xs& zjV>Tfk-v^!k(~lwj7&~rqr4(yRV++Li~=N;@zbH%Tq{r0vCn7Xa@5PTQGmXUtOVH{ zWL<$Lk#khpyM9x`y+Q~)KQGBAUGM~OC3p&WJeaJ}E!^%r%GUXS$2vyR&(W9#w0=eN zx&bTDbwYMtoYxQhIoWcdY#Dd=0IHJy`qw_^gd|LWBb=VQ;^+@tQ%Mv^=-@zcoO_AlS)Va1ad|F1{^&rX-?B~(Mtb%7KXDe zKz2emfu4iy^R(|tyGyXwedCYt3Q%tTULLY#OkP2=2YFY(r|(nTv=NiRWz7A?I6+eH>FEw+7zlqmQcT7}{#BN*FfHUkD~B z{btBUL3{K=BHA(YF!XY4hN2sUZVh~P!d-}$VWW!iOJqfiNnq%Mk3RspD#l`TN~j2s z2`Et8@?(&lUAt(Y=(#fKqMuE$uUcfdK5*ExBMPk`AzI30@Z7W)zz}4r1SQz4 zrXOuIo9i!+yYKTCpg)dYXXovJHg5pX4;Th42ObCBV_ofNQwYqXjV`aM@A+3W8O@+_<}3vQKujTQ+1cIMHKgktR+Vx360FLjMk0mEjB% z>5Yw?uL?nVwSP5K8+X5QT?Ouf{WakAENTV%6F8$7ydV45m`nw_4aj;Uqc8ivce^y{ zsz7UOevi!}baL1l7STX|W6+O~)j%~c8?dqo zZUDXkF2rsmpx_}m?R@`!!W~IZvDO@P%1o7gRhPZAnT2h8WE@3y|Cj_#u-o7CT?LJ^ z?JlEWDx!~@!7Y#}aG$^~1N9zeyh?;0NR{*I^c9$D*a1D{7urddWR z6ZbQxRP-0qPac?aPxl4G;w6_JJIh>Uvf9&+^`~l}{xuF8Viju?GR;HtVP2Y_=4ta~ z-kQIygY{@#wmz+ME%sWs){h^|ANa-mgP+V__)Y#ZKPvd-*FDS!Kl}3cQG8NHd-lQh zgMG36nL<1E%RbO4xHiLYXTD$1$2e@J#@*4YVB+pzUnd_&_cz*5x%G3ozDfAwfeFAB z_G1tRKc|5v(TqWN(@@dX3Hm6s%HLjWcwYJC$n<2C?G$7xSCle86U^<@ZmoB~D_ZMV zgfhve@74^~AK7YT3Y6y1so3L0+W?(e|AM~}x$Y1iQU5;tWb}&acaUwvW-2n>F9sr4 zrKm)AIiP?%ip?%S72qLYBd`^C4fqO>V+R3q;`Y}#KF-!>Rb{F&#&3fB8uUfTHz7-- zjW%}%{4?+quqi{YY^-1|QFI-kJ0PEl{4s34fmRa5Xj=`|e{MjhqwadJvb_%ZUfPcY z@4!yyG=14WE*XvN6tYRkrbFvqb&@tYNh&EeRqzV1Vszu+bp(~*t6w4`%XMM3%D^#Y z&&;iiv!$M=CwhG_dK=Jv?Hhn9>U|2>XW-pTToaYDJM?H4*PKDJp|v;-a5&~NLL0FN zS$8Hm6ig|zP1p!u1U~_O23VJztCQ~YEt_V}=SJ*NG5n6`<&=E%+0gsw^H12^h^__v zYWRBklasE5|1#!o%bD0HFj%ZN6Wh7WlT1)mv5OpMynP3F7W^FWD)0$wXo{auS~xmnZ~^y7{eS@ITZZufCk3ynXnH=7RX9wjwAc-@msK!kdK+r z3K~l}CFU~gOX#`KS{wuD_h$ccY|@d*b~h8NKsTGg*#!FqZ4@{I9!J{u{xM1S`Ib$y z>?s@K{*tICdO7717NV@|NuU3lrMrQ;vMTlfendn>6huTs)K^4AL_|bFg>w)Q5fKrQ z5D^g(5fKp)5m~OMvNE$GGc(hova%v0v#y!Ghs=y?WZW{dv?9|&vm&!Hv%0_kesryA zX3xz2nmsf7<2f&VkIrKHIUK%jQXBLs8gt03k};;z*{aVthRIf0#AJ+VU>N8H{!S;3 zx()moJP#W9iT>k27I3w?lfa(s`VUCg8^=eQ-XX}=(m4=+QfHmH#^Rl1ZIp{y&zYBdGof+u<^!Gx49PbQxhxsmp`K~^ zST{dXZZ4Jf5=iCk%lf$y%ZkjkmYDbHNBRaw9#>gJsCMyD$!=rGPrbdM&#vRz*T zd*I)#?qvNQM|ZUHW;&~sb52-Db`knX^agaIx?iV~KURAK$(Mr!^QXWk!H4oSFi|B_mDFQ02iX`?R_xJzL0f{~t!yFz)GOn?NG5r*;y(gW<#B4tQU<0e(P!6L?OY z4aWP?X8rKRadUbu2ilqBBh6`FJXxZVxh6X#I5xaZ~LOK?5*4BwCE%q zUxqiy97n?msDbcf%7?(8R&K#PmDj=pv^S)!jGji8!1|W9K0&?${S10A{@cvuL^?~A z*OHASyFmF>*a#K5)ew_RPyb@K?WJ$j| z&eLnTi+={a1uZJ`wp=FkJG>|GM&nIx*7s=pck%9cumP0&>>xM?m@Lk$R=pQy(EFg@ z)amKyy~0NyhMs~>DqUl8qO)8Vw<>pxEBkb|o?@`$=)H))2;_Ryx3m7m@00Mqfb?7K zr@j5*ec(jSZ}IN~Nr5x;*P~hgcq6Iyd@z$vqNhJtN;U{Dj{Tx?hq)PNags!gt)eXO zkJ0Z#=glIH#hJ^ZG~jFTV%$?;(U$9Vxx0^mZ&W@LzK1>IRI{|v-&hCW^&y*w_cY!* z^%tW5hJK3fQ1t0^ZdIN@#=eyx&Do~Bb&SAss4F*G;uR?S1b?$JkTb<-w;+D2ImMnMpW>%0&r{C9 z>>_&arN0M!B;F?dPe&(mC(=I$y$AjT{A?F*M<*+GBTHsW2I&V93_IvNqwNIdHFP;k zIZOPM?ET1;0f z5IDvb;pHIp3yn*^#an-apESKl-OJ#o)H|9i&JfSN82uCa%gN6}$4eUqBU;P;oB?P5 zvv4IE#*;sRm$W@c{a3;9>Mf|=hSf+EH7%ep?`&cI(~--qBH0x z<8{@R`IJ}5W8mUcaJJK&dESKEo%QurMye7#-^IIM-PrgB^j7pLbhd*Tbd9;(uvRJ0 zC(9Ohg?{3Av+!Op#wY0w!_St@$*QBtx`7{%-vJhbv0w-o31)*^K)I?MOmUKm13K#g zo`p`M4p!w{%MSTNKs!#fjw?0Nb3Ld7ML&{*XLkzw@I-WbLUElLZ zlgl2(OQrHE3z7-HN`He?wT)af6r(2N^Z*Cr{Zt#WPdQ0nNk3c1P{4unL|fhho`atU ze+NDBdR0kknkFwm*J4eWtUX^r__c;9V0QBh7+OG??jde>#`Ie%(_Hwa#Sw z7)a85oMus5pzCl0`dajN(2LM_!cvJX$jTWm}n_>bWai%j}z zlHCKI1stgAMK6ZQqU{a-i~kh(1Q-gE{-!kRKX4hQy%oS#RHCh{k_E!Fr@&dB?=$+`P=qbiHmd?v~-%fqJ*Ucr{zyf1jN!G!Eu7k(2-TC;5;w)4T zylg9R{CRl)VUMZk9_Vak3($9>vn>nG@>q0(@^Saj~ftIX|YdR_6xfh))_ zYT2a$osud3OYbjl0XjS~4lqsOj3}wN#ULkZ^j{iVLwOCJMJ^o~VA5-OyjesxEi&aP zaHV`C{4D$|y|=aMJ#8Ky!<1LTEAZZf-b}s@|3~Nnowc*+zx>FeLAEE^mF@Z@n;XYY z8G)g41IZ6V$~TJn^iKeBFe$fqd7|aV;5qObFu`(-N|wlC+j7d2?GHN{84RNHH{(yL zk8?kaS6RH>=*CH3Qr^fOL&)POar!;UCZH{RH3Gjo`kmTH+Px9)OuSpvOP#hc4}c$1 zJ_=r|oPE5qU5L{1JBJ-)r{Yb~@8NhyqBoiE{^)7w)y;BuuQ*%Dyf-QjQHO))Dqfu8 zNxaw8?}`6yVEf6IQMTJ_TlL4fv*7e26PBPh=WMyW35oJU z+7^c_S>YDtf08HCPQrTvZ8zhEkH#mbE*@0&-eicfSV{B7*SK3b&N@MPF+9|Kl06<(?+0XYz-RQE?3KXTfaX}`%yI{v zEnef(%5lX1;$46jJO2T1G`I))0S{Ta14{u1=B$R;r2bL2D0Pshvt-v=ZGyMa^(Gx20A7IfN-GC@9zj_%4PXh6D6RjArJmcD@%L(}X#=bw9?9dq6F2Cj}hD^$wtDJp! zDxDbqAmuFjP_o0&H(I1K@SmphFr6%@C@y>NV7%0MxAA5{E9EJ0H|3=JE%aov@^$k* zvW0j&^=cXgi&9eC7w}?S-kFaOrIQEf z$2dQO|3!WP`HcpU&XPVylI?*WN45Z+lln~Z8R&iSbKv8#)oS#=$n29Pb)G^#2d@jT zMU}698?_NN|@Sb|4UaT2pSOfZ78^(WUZ-`zW9MYR z@>#gMF(p&VDvdto^fvO@@D*S!ovY}|294N5Ml9Rb^n4Bcc(cB;#ha^U?Es%Zzlcr* zuh4M3W}!hPsQ8Uif1CbIvSgH|w%$O;5cAQS)m=g7 z-{^|xCZ(-X7Lny8k;CM~TvDqosY--@iSC=mvVuY8(ogjK2JC7wS)hI4I7sTbMwY)w zPDCVS-lE>kP5pqAwG{`7QM1VRkiFWh9qLfL4!p0?i@|#+$0djep1>cCM9yq4>-DzzltZd7Grhbe_y?^pkbm}B+*l{ zRt{?odR^P~{r)e?+rXzmA|ffX(X2mt?`=+JfdzE4h)cUMm^TwWo=^S9( zgVAd&`Z#)VhTg`jPC1OPr1JswCX&T*Kd-!je1|s9q;sBenNxY%p2LoV@UwLZsATBe za&itU2jKZIXUGFnC5u+WK^&z#%&bJ*rJ}vO9Q-C~pqGXR;g7_-7JkkkPs95ly<~!~ z&`D(6rhE#VJuWFQ22JC;qSxTXp=6nI`j3&nh<*=#1`xIXfg}CR!geu7TR04@5wssC-13 zOcukNV{xL9+WrIG>&btijX~t6k|(=7rSECzEWpR;EXLcyE+^rA7f;ZX==&a79A>k+ zajG0prS+0MI^ftuCaikE$F=I{9ijg?gIhq=2VdrE+^*gN`lHD>Zh0`u3tkS7O*%{P z4g&Yn+iq;zj6GTHd5|`&L&@T@OJfF@4o(HfgN(0{Enut4S1BZ-cz!wfy`rHbS{4=G z;#CY*{zT~-yqq>Kf~D3f12CX!897HOUZ2S(!jtCuqZzK8f~DcA7rjhm1^xy)=aMDr zvq0}MsbS>Hl=lIv@G5<6q_-b_Jb7)ad?(1eMcEeqNhjxuAH4;k@ggfaGhlU6x3rPA z(q`IDANneN>bqQNGnRAdW^5Uwv6eAs?8$y{g3Kv%%N#S;qw&nW*dVruO|tF8Mr>8y zO*n0_VFDpGjcsG&r1981w$B=5EoP#ppyLd$jjy*$!BNg8A0!uud9bQ1YIPx<1Hjku zyMi0ZmZ|>;_&c49*H%{zfscS?h2oI^CVw1ci_DvQUdT#B#q+13R~Y#5t@^9iH=Fe< z;R_~_ecEZWx{@rZ^;)>MLC(its&2fhJ6~JF{iGZ~ZnN0uYxqt|J@Dd5N!?@N zWeji%yjuA<_(A0?P`_45`FW!*Ki9Uu6;B^(z{jJrC<~t<)Q+{4~ z3PXJckGCczmovwo@v}Jn$$ECam8sx(aW8c;dTyeIezekWK99@O{4>fLFKd$eQ% za1mYg%7JN6vwlWihqpW41p0rZy9T{Y{TOw+I=d+!jE+qn$A5&**?0_IPVOJT%R%s0 z#=a~359Qt9XOsuQiL}gdyZN8iu3saarShYWas&7sy=08{HOqpRGfHpe9KfHZC&0=! z_!07C;GfYyNjt0Pi~@hce-GG1KN)VEI@zi>fyclT;8Cy<+ysV$k@U8Y=Kx6|S)c{H zC!U$Z)VrJYxBd;h^fbJ?RX7m-g^oEy`R7=&;2JEy2I>N5!6r2=l)=UrFQ_{M@9%i& za4LT4WRFW9iK3Uu^51jh=aQd-_fx#bOk^tFAGOQL%DH3#*;ueYNTfdn+`-HKm&n=z zc7SAnBS97}*(9lQpLTsH>~7K@XqK};Ij?Y>a(KN_y_4uBs^)f<_xn6Hm4n?hvJ22T zljMA|j81=aA}?3pZ{vyB#suxofnPKBdGKK61j?t#<8Xai^-XC7JeF)P;~ImOHL8Qq z`Y*pj{G~RpYuArzIq<&H>F`WGocs=L%`u0~ct_D$0nRY)zGP33tpv~LKhNHG(0dc~ z)!yFV8T42%a(sQR5ftTVI4Pv;5d>uc{y_ONgmX2X1IKKQS2~PQA0dmw@TPKLNlKlj zyk5hXwab^RY7h8myajj@4Lp$-XNbohj^1DZCY4E+Xj!7%*4||DndGnPdm!jdCsBAf z{`qv58|P%8jVg$ z;mbzV>8<+e)SO zDc-pVZ!%t@Z-c>cnDSXPr`JWwb79$|yq?{q(ZAzmu)HwQ+vp#;&W|?O)agOTq%z48 z6*~;*Gije(l$X2kY&sj&`8vIR`1Z|`;FDcm0XxAi%KLz!fTQF}S`0Lz zUBBy3@2sz=-*46jx`p^};w4f#)t^H@hor5_FDYM%{yg~xv`kVyDkVFeh2NXbB)spC z{|#>-o`@<=zFfJbe2elBI8OQky<_Od*)GS+LjA_v&cW+XFAk!Ahn0G9=g~Pp`GxW2 zGjV0xC=U8#@-=wxQFm`T=YS=~eJtHB;OpcIz$Hu4{lT_GKyDxw#yOJ*;e;>L1zNFf9 z=vV1Yz|S_8V7Uh`W7rEX5p^_t8=aBx7nKuOankRb-}qMj8koh+LOs@5KLgK1zkt4! z{BCp>_sn)3Xv391N|r4q4wCcGPIjG%*Pt^Atj3>U3^_C8FldV_H?qg*O#s_0d;`7_ zG|1+HdqFbjU|$2v3)B8Oc%8yLjl=<@)7(AFA4pyeOCRNs(w%HBo#&LLp^D%dD86wyhQq6ls8z^ zJzAVhIT`800W8;Viap)2Eya}1+15bruT8RJZ{HDsJG4>#ooGEMmc;xuulb>IQ;IJ} zA-qKME!y4-?@Vp1G_PcUIM8p&lX=#HCO8-j0HeTS@CopL#@&PdaX?0`UzlF&w7`Vd zVJz2SFE|Fik@DcxgQDwMPsD zeIlKtz1#G2a=YGIGOsb6Szv5STbzyT9C!%*^WX%+T6pXDdfRw{{*!caXkLOhv|VS+IQLQJkSKnQ zoqtJZ71?geGnBVzZ#wyD%0JV_19(lNv?K)Bi;r$oyVaj9h;_Zpn!OHRGh04dmTa1GdGg!dqWY^FB|{{p(n2Arl`b^bv9 zZSZmMZg2y5FUVqk2mIBzOs+&k+B{bq2Y`*8(xP^6rgIR!be_XyS*(w$b1Giu(?M^W z@^$EBl8>OTA=`j{3N7Nw%jfBM_v3ZdPMq)?&HCAu;mh?b=Yd}M-ROO#vtIOut>ARL zWX3qv^<=pseu+Ge7H4muIYu>|>|W(Jjk%}tRbVLIXQCtcZl$-UI;Y{w#8n*N$X0#h zdY+C$e92m$eG8|IpDnKF(JvWX{rVLD(@vA5bSXw6^;n9}ZI^Qdlo3hOT<=d<+o z#pC&n)%Y>^VSvHQ4@|yEFUGhF+yjz9eg(4E$53xgu$rumWQUvyIz;Lhj6cr09Ircg zMql@<)iN<%K|AOB__a0v#$UbU}eOmPgs2|fih%5^q9A|0h zyD#~Ab+biGQST(OH|VUyyAquM%b8&j`c3pL`gfKo?+(eTH!1&%{9?Rht1RRS?JUK6 zL;qv(uK@FnKl1+IzjU4h-v^uD!YPMOUi9dvp8EO6q7}Z`S)#cZ+`dyzxVPi&PnH8x zPMP~TgYh%)9w1KjUb1JjyBB$)BSxG8p9xQcPk~3nF+8Ie=bNBT7JP*^{s|_v zWE(n()){0?ya9MI-b>0Ojd7n=`D#{vTbKR%I`WNVqPu+b=`aS_qg=m|NzPNZyT!PQ z-sVRfXyF%(cL|)WGEQ`&x|wSh_YUqc+{=1`rihO@9UR9HrK0-S|t!Hiq3i(aY9-T!v_yJ#?rJ(eLRw(Hc_lfKDR z@yhj1*onBM=%?w=(Ds|;OURGLOR92OE|K3KZw}o{@s9_Y#8&cK!8Fht#Bk5Vc<8a< zMvyG@|7`j^EJf2JedRwo>lqgUQz^$Km>s#kub?7TaKBPxQm+ zdKNT}R<3eu)gMH@))-TFBb_D2Fa`f-;9$C^lP9Bbf@(IM)8HmN9!@YO z8!iOb)0x|@x9%?JkEy>v|Fx$o>__8 zv)<=V#+xAO5{*fH_ozRH{0Ouxke@kKysvyg%OUdD%88h4q}q$V=qY#l^R<(O-qcy||Jk-gLdCgD6u)WmBE1~k z4vn7j>&h3SCs{_!z*=R62fi*?_FRC|-{&3}`$_ci8l~;h{@ctKX2RrRe?;)~Y_$R4< zA-JAgHm}Zwty7hZa5j7ad=-%Gsx#X4*8O|+SAm=-$`zxbvBN0G_%T!#CJzX_D);H) zSp!sHzZWzZ39z zYz{N!gOEtdb8@*to=2X8Q3vQx=NI5;^%m1z&?*j8qAFS75%4MSA@Bi^+dwjq)SXDo zV@ZkVYt(Oo2C#)SZqnZtdQxM_I={v1u;u(-y%nvp50@`>2ar!zXMnLa@QWSHpA!~m zTCR=EeFI)1%;BeW1Y%-&2o4xSep7| zBj9e}E9wb)PsY9ms+fQOr(6$WFb>d&5q28fm9R+^N08p*W#xByli*GC{$)~0SI<0B zze*)-eiAQHl7+bmJy*wj)7i`zqPv_gdMWoHe-HVgba`mw7`z|g^#qR@&z*D~DjVeG z=5ZdJiCElf&09F-@F&1&C;F+E`e`TarCsfpe)L!RP5+El#$#L=UpdbhZ^m85Zyx3T ze?Gm;FY`3tGVjd)P4A|ap0u+Y=xgk-;U0n-%XiA zR$b{_hu#fvl=3Sr!H~!@FH0Bl!@M=LMGwRmBz~dAa5ZjZ~tR^#z@;7tY{+FMKZ4E?0% zQRGwMd9cjTh<&licN87PW!{-TI~04cOR-NfLhQ9nIrfVkW6#(%_Klr$o0zZNi_zQBW687UA4caXcK#9B zLb5^1v&bir_f}p)r-kx$?z*c7g0iA89Y#HxY z?-uokXy<4CHn8k@o=wZC@#}=yXZlh8oC%JB88Ro$@+uZX|4Mngjz_jUg1|Z|2eIeT zGx7SU*9C7jdKKL-X)^=qtNgG@GJ09KQnd*?cd6S~JGoILFiQt>G&)zoLgYI@4kqPKmxjU?p`0`~ zsbKJpf5G4FY&2T**J~`%%lKt)xd?9>no+7n=#Qa4fKKL!m-koR(5bG0ovr*E#J>fNfZPJ_wUp?lyp;d|(1>-d54 z{_sP}BjAO~94(Gr?&vXeC)ovf2cu)#spuhSfmB{Pe~RArNLkEkDcRqZZ!_OdYU@aI zv6q*#%un!#gE;@H&hjs?ly4$~waJl7FtcH@LCGu$;6s(W!jICQ3pTLbbZz{unE-GI zJeqKa&SIRYI!t=pN^y7iUvL)uRXB$D8hIwa-C(b5*W1A!@UeLDc&R4OjpZL8h&M-f zqWT-vi+2uFUZgx(dz>lP!YXwi$9v8g`r;=o?}IP3mpyfDtNv;=3qFG`XFIM+1^3STXMjxL?f0tgO zX$zf1{GahQlgF_}kjZN0edBVN6IbWKbI6CozlC$yI=#hlIjXrNJLMI$noa&6@*Ng& z6#iKJ$;x+=oko_xx>va(|AjVAp|jX{561sC{@x&&a5-7Fq-2rU@^CN$j08u4LqJdM z<)-jiFa+e~_8F=`Nv9v9f(wBP5 zW5&T`IsAy4^6q^F`dPFND_&Wmd4_UQ<4NkwXw|>_8*4E>PUj%JMBa4#J|Iy)4rFWC zY@(CYdk@G0CF(>)iPEHYj#vzw=-dc;sGkfF$4d6%u;r8Lx0>}m`V72Hc-`q9MvvnZ zhjHbqR;jz0>~{3^`0qx?`A4I-84G7C8R2;NezN}X{~3Qj_(A13@^s~-^qV+D&JJ;e z4P*(frRW#X$&&9ze~IoT#<_>`b_??o*=6bsQqCgvR{kfLjwhp31MxTG4+E888$osl zkb%kvxn1cci|z)$j%Q0M2fo>GoaqH~*kEq4(KN7#ZeO~2Xej%8JeaqZS2T-S($pM- zj2915z67qk9L=Nm0S)P_JZ6ZHa!-A+S%2Mg5GkL3vroknC#jbSFVt3|<3eRoSd6+x zyS?!AT_vJB$bLq)8f0teuZm;$(V~=hfQz*`0Nh4r zhIXDN=XfQnd<1Wz@n^wWbS5ZoRlWwDNXd2-x)lK58yQ;0Nd& z4u3+q1t){8hTqhuNYp|7A!!}@R&9KrUL5H&Xj^0B?f7w|jr6yY&287&<~H(;`g$(y z;>CfE0>8vx1d_>;K~`(yKJXLpGWaX_6L97zThjaCfnc+Yn62XxaDX}4?vs(rn?QMJ z*hG-%xJAR)=*Xg0bKp2aaQ3IG;Wa!vQS&AGuNmAJyrE>1@OD8Dr$57h<7HFu2jZWD z&V+}O9ZY7AuXe|aQJdOm;7z4>Io>hgHT*k3U$8-BY%tOOopmOd1y2DT;6eO2WTR=^ z;CJ8%^%rV?mNxg)=5l(^nbTjJ<#5>;fwv5A9o-4^vPj*OUs6sMdJlSAbkQ8F8qj*{ zaEiAK??!XV0dEDpWP*>;ISyW@oDBAWF|BILr1TFphQ0Bo(TPLJG9~KQqTA>N_*3Y_ zk$NkCRU6aD;z+sg=d9DlJC+XTD+ks$@IM5$n9~w{jU)ds_$K%vcpAt`<;-DADL;LG zj9!9ZakE@Q%K`f`ePp}IwpM=f^g{z4hY@2Y5-e)tQc7D)*#1*K@~p<+si8#8_vt0Y zNVny*I>rEdp*^YFTA;{~Aa{D!aG*}Ic{gKRpu zOMjaf;$h=SCKv$r23wW80}h!lZuu2V#R2o|TweAj>*o!6qrp(}v>C@c1b-CXC+KIv z1}Wd6on6W1pp$9-NS_lI2Rjl!neP2~af*hqWIkgo-YM`Z`V--a$}*S`D`~x4m9w=T zgx818h3Ku?NYuxXoY&Ovq zIvZ<3Yv7UN>jTkhjT}fWHD>RulJ1tIVRQ^S5G@T=m!Ln7Uf5aQpUYt|o-1<8C)t&4 z*@8|yeS$t0)7wdQ4E_Rer2$SOKNcPcbFMt~=DJl*<%htdmCuG(foxwx!LPM50c88w z(kut8a+>c#mPpuycNYC&%6;kms9FCo<8ky_be#S%bR23io$kiO3Cdpl5cx@XqsT6R zH|t{&{3hE>hu=efP`iG6_>?y0x9V-~Fg)YU!L2+Hb)Yv}+`aHGM90}Vbv2+}pA~k) z>xm~rG0hc_QYC%UPlZZcZhN}Hwa^id)? zhIkvMXsIV|a!FM=6I=yvRX!7znk$1Usga?ptMNXp?k_ZSL96_7sH7o_l2dfjemR+D zF*hnFaxF%6F*p$~p8k}!hpV4`>`?r(+x32XeyiSBkAe@PyFUyXS^T465f}rOz59%I z{oUbFZFB?KK3)W;(VN|_uY-vMnXW8Mwx*=(SCp?rf3efcnz>y={|o5H@sknmqB9on zIlP~d564?Zb{0H9`CM4KZ%lwct1RO+_G#6>ghjFNeb) ztADS4ve@g$_a)DQ4I%$mXT3cx!HXk4k6(dJ>d#PTFr78v4)FQ6Aar<1DcIl%W78s(Onio>a#2@6?cN02k zDBHz$bUd&FZ86Kk!${@dlgDtUMRiqm*CC98wqppa`oG$e1P&-l^M2Vv6b*E z#*+DVL1!@%44-MbUC@hDbfV|tpNh}1%jey@$T(Hm_O_7^)rLr}*s*Lg=a^T2x=)ZL zNbevY`v^zU&UCN}+yIt=EdCC%1=e8)z4tZiN1vhUXC5>3vzvBj(2H~AZe8uB1I8@_ zJqgxHl>x>$qv1pcPfi+6XXRQl2(KUBFud(L69wg0E8Q8aC;oi=`_vz-qd{bgl>e%{ z(V#x0jqI1p=uN`k72Ha;iENX>XCn85M2V=%YgZ!?o-w?J_awLzj0Bawhd1k&%Y$3> zE#M4#erfp2xJJj6t5eF=99Bpmgj$TgwEV=_dhEBG@CCXX6QDkw% z974C~GtRRY9oe!Rq|?{$$vz0W0o!wV67NgzL@)`A0$srpV;QN95zTTID-NINzZ#sZ zpFh#*2d4QJP#$RZBZ#4YqC(Q#1150@oINw%BC^U$6;I5mzg+vW$F4UKQCxnJ^Ck4v z=uEIDT7;K3gu9d(uff5}6Kxjh7QA@yMtUN8rvKTg}?<~yW>daKO80Dof2clh-yJ+tW^y~O5 z(d*E2jLlezGk+2<>Ar_HE`irG?h;tEmjmF<(lrMvN%nyjk(VKNSoPGvM`*k5yMv65D_Kf zvlv4_blwhP>|}{R=MDA#Yj3zY?~aZGW!&G=)*a~V@4rDO zIF6xn3Y|F4RBgmLmKoC?c$~Kc%no`d;;#iVO!=7h6j_2`D7eR*H*M3QleA+?EsLKF@_MuWxmaGes*@??>XHTDqT}p0_PTOYuY?5&YK@lHj@qh7(k5}gI_hE5jAV!xo=+u*WbqfLH=fgOhbZTxui)<^2U zfqO}v{mG95Q^0I+!CMeIyvXR3r_+yWFLl#~w$f&K2hd09D}AQ#I7P-{Oc`4lqp_AT z8+(~U=8`#?TfS13xn|CpI~x>RWdDzC*r?cw&5G?}!=(Q)%{qhjqjNBwY%@>etwvvn z{tr4)dMJ7(oj6)=ZS*y#waRIGCEjK_KTs#mbUB!XAA2QZ#DN!ro*+&z155!q7j(g! z1wIXaXAT3^ITNhX#_{cXOWnIuAdn@uCv~v!;36B(M_GyO&e)To0Yc9^KG2tVG-HDGlqO%Dq}LXGR9;G zV=md@4Rq#`Ic08%)XX(=&fM9c*n&-pZP=*XM&79$+udjkOX;uBUN8L*#@oUvGVYvv z#?jB=YcKrG50~3cwE)f08XMK^Ms_6_f_FP!f4uwDIY|8rz{Rcl={lJu!Sz8f8N>;m zGsb5?qIw*7FX%LmUFaUA-ud7XZ5#o<+i6bPUQ6cy{5W0GM>QWYl`sqbK^-3t-=KU3 zyj_KL?K;|%M&rdd(@9!+2l|)v66NniC&Hz@7`^;%Uwo4!BD}DBA)lOk7WlR~H zF_y7r%o%&;U@m1&=9W3;{i1w%%iLpw*n&-pZP=*TYN~Q<7aN{WFK3qQvB%*JRp(@M zcXSu}6VZvt?&IqpuUv_aqivVI|4e=ndF=jmybb2`VZ2`EI~`g${A*wvSOO}Bd1buQHoYH!zUrS2RwBSEsK@-6xkmDQQ#la;rT--Nf0PItVi z^o%(lnyNnJKPUeLm<{@Xr|8OZB?}Bt&erf*kavv!>S(hZHsgqIcCs(nLH}hsv&fqG zgG-dw&-$B5t5Nfs}u zcb(3hsLPcn&hv~qqw!Y*eU$@FCjV~G8%#0Cil@$@TY<44|J{Z^l043}!z2f3Gfuk5 zSS&($U&tx=Ub5q~n}vJ6v(6I9Tv@nhm8H&H!OFQ{^SE-Gs4Q4{@Vcy3-x~IS55RMe zE~$LGzLVzHSkNW#>&j=qqQ1%;vp}*=c}=uH)vkD_;BBVY)A-IpFE)m3A4%&2lpD&Q zH=Y)`1u3_mH|bBrbB(P|!jFxnlN}2FPX9r06PN}DgZ^MBm<2uvHiN8-2ydKgj?1+% zs@*8hLfY1&q&Os~&it$4dka(`VBBPWp4xV zU?xc9XYbF};EJ4J%vM#U%>~*R3?A*QKX5If6KB1O{LpLxn;7>>j4c)`gM99hdI9Zg z4GWZK)#@-fgS*LKSHkJ|pBju;#|vM<&!Q)d^WL1)i-GS|PWs+O`J#4xB}p3V26}Xs zC)ScNCXp?pbGbHRv?dq@js_-P-s5G8hD=pHjn1Y&tX=P&tF^Ph96n~8qN*JDjv|Yp zlTG^JU8ejK~Za1#o$xcH*VD5>q{^%^g_2?nyaV-3VdR^(oL0%+FYJLO$ zHThxW%g8xl*}9U|;+Tu^;`9&E`v^My{|Wt+J`YFFpz{S~3tc{rt-cn8*tL-EqKqNFQ6A^_>qRLLvKUJ zdrh)R7D*%~eZNR|rg~@MC5`34vH|}yba%%e1ElNnNjQs~!A}4uf$?B6kSWSp;tIM` z00WiRyK&kO;d#8uH;Qr#h-@MLRFfUtvac(DQ#sp5QvZ?4wwH3KIsx4m9!~1iyeIsqa-4J&`6`&RRhf5h^l-cj+x3rII7lU9R0$x9TlGUH z&>qvzUHa&vd>I&l_a(dz&U~vnd#Qg0xVFVf$qoVkB7Yow3cLrb2J66wz5vwa!@&=C2H)K z7ONa!dgJk;a-XbBOqPgem4PkS;c@DotNb(ddt0E-;T=I|6|ks{H}T&O;(#KseAi~| z^4tC#5@Q%p4sE|wegLcm+v(0xXHB#Im^8XoJI*M&o#Z(Kh`j1l{8RAm#7mS&i6!#; zDeq8TM79$B0{U$9J=%@o{(~pQmV+6`D#36Y*+Mc-QC$k}bk>QJbf}wte-D36z4OU- z7~242&w|RXRh;o;^k_Pp=`1GOSNS=5IS;hRId}OXOkX;K>1+qt7UCF!tm0_pjOB1w zw&I+DoJ~sF{|NjQU~7nzmD7DPOtQ+!U{|oFQwGrAqx2F~^YC86+w?F8Soqdt6CFtl z%ayb6Pb$A`fSJgfCT`&6Z}FeR6Qv~uNrUAvVI$o|XdRZ9wM5ZedV|!l*EBNW6?hvM z@*#SM;3q0<8zsW`C;toicR;*5j`41gl$cZP_kq-whmE|Tm21&VZHT6Fi0ZA~^>n1s zk^%O`AJAF<@FPx{`SewOS{tj;Su92@iyH^|1$ruehlQ1W%3*SMZ6yl7-IQ724RnUW zk0|$q_h^+jgL1fYRw=*8%>u3Otlt?pQTfgiM|lywgAJ1*vc)A@Uod7Fr&2?44r5YdF3&qgI-_d z>kQ;jypPh^Bs%Y=*BkGQ$nd9uA%MZl-yA$l&tS`eFez~}NR;kL9z(q~!9;hJ?c;r& z+GRLVP@FZ{Y&Wpkm>*Q{?IsU@*_Rp_jU{WK7vn8MC)(bNz6iYw{u2G~k6wWO0oelOWV!`- zwxzO=GEVs+$7}jO9)Bsg$oL~a5YGAHd3ApX9)Alf7k=c?qn~=EzIIA`X*Z4%dHO5; z>ObSi$+4V5Z&f&k@N3HZz+EYCGLSRiM8@fOzoHZ4twSd=rS*~ue}_(L9<1YY=;tuF zmB(9%Dw7zAcRyZl1F1SodT+$pEI>84Re!9A!L!Hx9AvO3}BEVN8j^`hgyL}axby@M<_ zsb|Q~#+!ndh3x_cch*1B$#&`NQe8=QdaM3r(mv?_(s>yq+XSbKUmf|D9{tqIc3Xbz zllIbX97R9ruWYmFzl>uGVN&&1DRjV3D(~8^4?a1;TA&gcCy`}=7_WTTNMznb&cmyC z_#6wqAD!%#+sH;T_@Bt_H|2xGkMJJ0P?Pa~uMKIrT1fvg`qFwacu)B6^bEG~97yE9 z0b;G<35H^>UF;ya*~v&1(0aXlm0Ap zH)H9KpDZz${u*@2X7FS5_JIEdXW`#~IZNX^>NtCpx037OQDg_U>#J~5`&sBW@dnVJ zgg%%~uCcGFcfENhl2<5yn_MOIPjGE4`odFXVP5@WU<_Yszczt;a%YbMR3aD zN1kj)ztl^8?UeS?ZrV>f=`a22-#DBB?rD~FhMt$LSr4KZov$R=ELGhr@Ba zKhjC&N@mQqn{3H3t7L!?Am;@R);Jy5X3O6s^w#Fh^ahZvrV~e>-C3XYj>9YadOCba zL;c`CP~J{q7~vR$j4@&~3snv)8Z0+~I7nq{7>J+6t<=k&H=$ie^cR)y(79-jM>fvW zd7S1}{ILumRhAz!Cff`qZ^6=K<3e~5d@(#17O~~kF#G3=>ULg430{vd}_2_lx*-f1|Sr#I?*|U@V#*v){ zPp5x2Y^y8Z3}mx>rzinq(TedOz&jXkIK5<`1C2e7F;$yiqce{z(K=Z97VV87zf8Zq z@K)lj(Ptc^557e#_xRal$un@~QYryco?wl|w`t9Ey&E3}x)S(H6I4 zkXh;-tMeEthm>5&p1^D3U5Yml*lHTv)Jv+o!$4jF9Iu>1Cc!h>oQg3a2U-mFi*C$;L6?E&N~$p)HFBH|k5Hgzm@Z^lgudo+Av}iz$WY}8b`+d|v1sM+6{qZNtS8dDi!<~jPquj{ z{%v%olX2Mcb~0akhmfyPP8PeJPJTEV$LNZG5=h2aWG)t}T<`XUwS3FPYO@r#wDkt^wT9s6t zG?#Rf^tyy>0s47*m!Ln2{s?+Doh)wdz~7{og^PE!$#b>&EFF_ASIL?9@#ZJVR)Edw zY|zg$1~pXODIfzM4H_U3yn@c8X8qU`k3ZRDuG8M=cKwGC8|l2SDT2uut-Kw?N&cix zB0QPnO$!pI?jYZ8Ovh^@&O1iEIK&z{G4Nh^pH=TrL!EbmC-;nNxhcxkOGJXaML>XNti-2ll4h2fT*91tfxB8DD3i|1+6*{8{Q}p=E~h zK(yUre_lJI$>!lbtA2N5-;G`(e2a2Y`)TAE$40VK$QZkP!{Ao+Y}{g+iAL*GZflJ0NO*)|5X>+c>9E8k^a z3AT&yk}aOVvwf7`_5HT9oU3w^C=s2=PS)5T-W~oA-5kcV&Gk|~3?2_BJ6+YTfAhCz zyUupm|KCk_KRV07k@(Is<Eh>`5m@rVq%yu-)%t0>QD)_eaDvO7$I5y~KT zptH|pArry5E@iSkl^;{SS9`p;T-i$cHHe$E`2~8t@K2#@u*JhqR_Dl8{k3o}IQqdR zT=n zQGSGc68X8xZ!}A$DF?tu=^cbWlkOU0vz6w1L~;5=@jvMP8T?JZUGcN9oFk7{K+cB(oP5HN;jE(3b{5*VC3T(r>rj5UQZ5CPSH78kHMH=V3)zSFj`B6q?#<|61?f? zztMX;dLH^Qbe!a`=%I|cJ38q$#_x@{ihO^(rR{nw_}}Q8Ll(fIl)sVN zqF$WBmQ@~7&PVUi=1^^QMc=Ky^jW^gCzal4PM5%&=!l+jZ(mG4O*@QS7W!6gEhB5H zo3TzpzhI1M?|k%!@!w;Pr_n!7Ia|Y2bq*w7r{6>I?!w#bPJR=;F8B$o*lZEmL^=sR z&X)x*SId9X=L{wF%ewha(pU->wd<_)n)a813C8htx+BQ0BHu#^wI~DJEWm&KO z;`TwEXYk!Hcpgc;XJyf1{A=-UL_b3>MtMJ4H0My!=&oEz)A90jG(cHoGsLV)Z%X*paH1raS9LIl!{2{!P@thS(c52vGvdww- zZ>+;#!J*y`ze_uDY)%+Mms`>ryg#FJz8Q}G13H0pA9`kI{jZQ%%zUvdzX8l*EC(a; zzJ-@8F`M2F^*DdtP8wGm`wa5q;SP9TIKh?d*cVRf9}CMOC0m@^cDn#S)6PgB0P-G_ zZK_&;pFp{XogTzH2QRixCaX?r)hBDra&1eLoJeU9oDSzvx*9F=$^$}-axeO3{I|F3 z$CcZ3_EUpTM@Nz;8XM&C#xv<$sKYo$Cfg6l80A`(%p*-F0+WiX{XsvF#s4o^qTiXK z{v$_DHnUm2c$Ku5ag3ptw3$QX!(>xhb>{jI-h6Y&-Z+BJHvR2F79)+)->&#gbpA^; z{D}U~)ISbyta=OKDdw~qc3`ZofL~EQ9o|45$3D1K3|(>h@&lD0YvUrk#oBoiok02l zy1)L0(a&N&puEvoEJk%9UbdU3@m|yRKy`iqIDdH)xwc*Q^>S8;BOgllKp2$8KNdbs z`C@Pt-DH{l;D@yFiartme*|aHn~9%5$-(%icnk6RVYH|7dhQfM3_lbr#QG5XS% zdCFFj2;7z49)NMn;p}<5ME@F)1-xl|{r%zfX4!{x%`12R&yn{h^C(iy*2l5xFT%Tp z-n3SI)fy|(dyz3x*=zgYAA?>Zs^j?g(|=9zk$doxrVAZcz-cqrZj8k>%0pt5JgoA$)-k1t}&UiUv_JJikKuLA?g zZ@}9`C;Rbm16&47rqKajA`?kvtJrQ(Q$U=e12oY0fDZC^gDnQ!Q=OzTlPylywOwbe zZS;OmXBPQ*yi9%|{ln}9c&%6_HKT+*5Ro58*3@{2L>e)L7$f^OdsQZAyKn6*6EnC(^b$fyY=}7%l+U`Sk zIh~{NKY)L*d1P%e?}wD*c;yh00bELuN1k&DHxT^OK*!)U7$_du9o-d=H&q9qH%N`5 zwd{3I(O;s|hH?%tytEu{vVX>42ela<$TE4fXzU6eQ72o)Fd*8>@BI?x4}hL{bHQgo z_U;&AD!5h~i9&m9c{3P97Q--bH3GlFpN+?Gjd=Y+<@-(gD&;KjI`lI1SJ7MO#hJ4x zQ}ASgV%)v(I?0B>U!aJ z-SN}^PO{DH`vm#vbVNV9JWis(TAXzN?e+M`YoC%h< z%9d5$C;p}FcYp=@x!c(3l_&5++IaYL^mPi{&A#wta5HFwUFawEod+({#!>BhkA2Qq=9y$~{Hs6*{^U+u1>OX862U{2 zf26zyZGp=P_XWS zPt(c5cBl6+*cbm~u!PQvR{iygljSia*(QU_p{J74OQc>wH^v+QwyHlIJZOxYoAsV} zRa;b&oru5Mq+N_>T%lQSaI&Vv^Sc3k$OGB zQaY73zd)}y{;70V0U4%>{SJeB!%6!Mcvm>};s~SRbKo`LoOT@mIYjmbeYCrSJu?3p zWY6HqMtQ)hvL#s0@~7{6Xrr;f|76d&5_1%VBjI$m-e9kUXKO5}g*TR;AMe2Do#mG@ z@pcn#%us%i-c8#16WydhotFbn6aOy!Ptom)KMI@&u2XL@9gE#K9VFXK0ZEM)0}ff) zHYyHT?b)u=_6yqSr@db`>l5_F_#95oc7wrhsnb$ktNalF))8;c7PO#Qzk!d`-fA$K-e$6VYZUqxO3t6kaM6C zkupUwtK4477J4sUw#aq#vLIvdFD1XU zRo-Mu+PCnP=x_X+E(jfGD6&Z~-P9>{(?;4#n`wI}xxPw<)OX%)%2NWnYa)rNgInFq=F^{jP?`(s?f( zky{>IR^p4!Mm+gB@(o}S7z`R9TTh&69JmoY2(oaAD$!bgH^qx1uYuWUa5FEqJ4(Ommuym%~>Vc%OE;&gITt9C;|bSsNU* zq}@-ddoI15=9@lV(@rwY3N$Ay4`vI|yU>}V?fuXfqjUQ2t(-H2%vZ9*&+xXJ^C-OM z^q;=wffdG|%sCwH3wH&7qq`I2z?eA?z#9#-OI{Nj)7$kn_n@{O)6W!R-W7iy7~ih9 z@&`Hbp6Xns9H)Ou-^n6zx}==)r7aUrXSr7|Anc0XU*jXuqA*XhjS1-C_>a?BO18K1 zMvZ;TBu*ngQ+Yf2HoRGM-T?8qHFU{JX30bz0UrYM!HHlLm<(0}SFrL^t_=7%uuz)| zv~d{d?BqNqxrWaE_}7vTz>gt6Y~rG#ME*eKr<7NdWzp|OUr%-``i1D>%X-C#cjE1% zoi2D;tjyDbmM?0*RQ@~pf$BP4mu+AZV~%Xsx1tGn7t#MYy?JPkRY}$PgO;ir`YLo5 zZxg5Ci231Z$rf>*VPL1Zv^&cgr#$|w)t0oKGf~<9`@r_;a)69I`Y9g?PlV%K%iFcX z_h{E2e>$}H4(+N}Ed?X+*K5BYUL5CQP3C;EgOqzK-=)zL$j?{)w{p_q0K8w)I|lzUy79<3lZliYz(zW^ zfK^}_NR-|II>D7PW9sW-IO;d#}UVoUucXXxn#gK#`zg~=}T6rE(b~Lr_(tWJ`_$r z`@sjm=3E}y&W2-`3){8B|3lmB0H@C3JlDVSX}E)YG5!p^q4Z}d-=jRgS)aEKP%aNE zcVU=#>1?(ET~DwE?=^IydT;c9JL~)Jdh{*mGwB~iHdXlsdc)M=b&b8iJiN{SPt*NC zd0ABd1OJGKh=_=Yh=?m9A|j$9BEjyeh=_=Yh=@olA|fIpA|iS^PesMo$keFFsHmu{ z)W|5QWS5N0ip$+n-(xo~o_e)ISG^sK%;x4remIMlWe_9$pTpnaCfg zcU4P$ZA&Dijmyawk|*URi;RGa&~kn2Lf<6j16X6Y(h0gO)*I+7=)ci%)<@B!l|7Ue zv>dPw?Wliyux@L~Ce;DtPr*4>xiw@<`w9Jp^etYt*f?UjA>4q@q9y}Y4uJ2X_d1!Z z(zp`jjB^=ztMX*!VCAvO%!iDaZL5kC#g+s{obeahI2**Nzp35SyNT=&vSIk|!aDXxs8voMo3`X~>j!~q(&!tcV1_v@_euiwMJ1OGYv9IoPBSCai0owxX( zkzas!sfPE(pNBt$-d*@6vz#HOk>3m!(UIyJGD^kU%ag5o5 z^wu8d$U8#AwpHy<)}2i1FNePI=nQVP!A;X{PjstvZ8E9>aFbJA&{Cfx9#$u|dK>#eYl+3rz_)7N%a=3+DCahUf$Kmu;UQ;MvH$M{z>qi`C&Qf% z{;8b>piN)0U4x@kWL0Of9s2pQx);+w9^Ih#Jo*;+SKy7wkfaS0TK4Gv?WJ<#iyDge zFIF*=`~dz9baPHvV!*tsTvuK}_f5y-Qe4?5d#O`A+yu|n#`9$T)wM{8+VTZ$L5qc^ zH&dC3F`#N0SVV71M}08bqwYPR%^;@eXHRok#A*heSMg1J`C%w0sxlGN@jgTED(!Vb zKf^9rC%24-h%XD!PUlD3Nmg0SDL7-fnY1eJW@n=3gLK}a9FLwGzVkvH<^gT|5$_zl zuIiqM*94C<9LMI=8A_)k^~n06gP#qwCTGq-WqhyVb{Vx zL|%=9ByD6u)A)7@sr&@qC-CloKLme2JbO+I$$fWU_)3lLhu)^+kC6|@TZ)%S$z-j? zAA)Z}${8YyWbvvS0gulWw3@HHPMLb~$~j~$%6=fH{&;qN!@kPEL_k@@iDW;;&%{gp zaiZeg{qP>6cO&{w@Imm&+D+89!Yx2KN4%^~Y}w1c+wq>`(3#ZimvNXS?R94AhQ0}% z)M}B+wv|jc4Q~sc=q>LBafUwRlkn$h`%`r6x7o&u<1W@WbM-K+sGdQzXktQe?RSk;Dr}ibfTL&sjH2&RZj7usC;$I z-kCl#SAEF=Ne`Gxj|eZ>iFoLS84!vuqa1q85j@ zpq1^eIQkm(GLdJi+eMvo;K?%k!!Lus2Vb;TQ|Oo6P#ncEO;{X>_{c%Uab){B`&} z@cOB975eMwvBo1qRM~o3IY(aR%BlSO44OzW>25S$H+XLqF6^iyZ-pqyfg=lkr$*YUqA-&#K2E)$rucN}nu z8kXZv#N#w&3tNv~uB|xR!Q^ZFZ{w=tA^*lq+PaFM3p@sofNwGx1K>%E1Mznl%ndrt z;BIR3;$>hHz^(XMyu+2d$Ug^`fZ?Dk*h{~svKg!bkAOsOCMs$6 zCT+x%f7i~7!7#FY@vjCa|JU&6G{7OMIb>PzJjMQuJp0XbyiQ;?{#1GyWQ@o{T?Vv~{l2;caF{%1 z6V&1kZ#gYC6H+LuY|<1N-8%&N$T(%3rJBRrv>WFXd+RnaV!s+m*xgm2t#DXQn*2%S?pwjI0J{t={$$QvK?;0>uW5l@Vcn)Oi}*qYYP3rE%k5yo}u#~ zSPT9StO3awkAmC?*jA0AKNrYa8zo8L((&f5Xo%>qN3+;WMT3bMaqLXCs}<@jNC~m*TwxPkJm)-beWa z`WWSh*&PQ-wpiRzoUKfng(@FgCgJS^=O9VL<)tu-yAM2${MTkS$euqZkArgb@>8sB zbf)0#*8b`Ei$I)zB>ABr`~3GoqW`nt^WYmG=Yf6cHPJDaoK>nz)y@9@NPF$j3+eR4 z&s+|{Ux7abZ}p9+VUpFI-FcR!VV(_b@gd)IG`u zrE;R8Jeq7bppTIcC%=jOXmGze75+$VJPvx1CB3GNEOLyW2i^*<0t>-P^{yp99}EH} zsQl(|#8wNaJ!vbRTLx{vE!RJhQugyR=+DO6K!^8N`=K{m^hEGs@SSX#4*vli>9Cxf z^O(ej{6e=xRGj=c^cT@5E0>|;q+Rvj)=``-lU5dLC+B$!TskfeG76pm%Hql(jpg*a zpjV+E)gA|_rlDWecR$dZPPU)p@vj8elbzF2U%~f>XA5`|d>cFteg>Qe%6kLbN(Q~H zqii45LCX8u>(|kH=?qXm8LJP1W7Zx4V^8;e3!o(YKC79FMs4Q0g~%Myg6Pd zdaDKSIK%Yz;z4Db$e@xY7n2>PPJi->ya~;yJYtmn>ot0>ZLOb-_r*UEOa}8ojK7)Q zV!#>lWLe#aFRf-DuCi#Epjn`e!%2nZD#UZkp7{*^Hnt{GE>kz&J`is!y+w3hf%hhx zNY;gHD1NfeL-@ajkHveGgDl1CiFd9tPJWv5E_AbU3_1?7ZESglE@}CXWEQG?3_7W! zzRtx#(tpkrSzH;U;>hK+zsDTp8XX6Xqi1oa)7h-f*XZ@dzX)*ta+n;U%$#-tFVWix zeh*%2t`CKxzZyrDv0UF#A8OxdS0BWozeG3lpSe7+Lxkgh67PJx5$M6_C$zN!{XO^! z__g^O_-Dps0If1WA}|ghqRN3OsZ6>pPn@Sm2QA{ulj7Ovq^c$ZN_1JgWPu!J%C%(@ zSx&p@_&$(DWpMFYi(D4^V5P_^Pnn-49}A@C^1&$wp<}c+AH*?tkv*!fwavB(ycu}g z@Lo3ff%?1vJs16$dbh$e`R(v*8w23|=_DJyP5nf*vq9Oflg2M18_l+4if8n(TzS8C z({Hkdb50zpY?@EbbrJ-J3oqsBTbax;FZNPqo)CvFqs!A&Ud-kH39u zdEY6IY{>{q(EF0lhUcLEQ~H^Qob1bis7bU*ZH;*9K)j3LNo5;VjF*pxuT)9ISG+nW z*Lq;;iLUZ0mgr9E{X4yPfE5OvgJZmu*O$9~oS+LmMwXLmCT=TuH|PZ7&GVbfU$m5T ze2exHMc<7~TXDLx@FwELX-1fsM9*0C5OmH93*hg7{}O&F{0WQ2F{?~|CMpXvQ$NdE z>NI|(a<8_pRtki2!tSB&D0;u9|Bd$gXJgxCjsbXa@;LV~#xNE>kdCOTa#lJRy+zxb z^*^5cVss+96Bvb;fE$T_1Kp(HI8Zn63-X7+-Jk+@fIGoPumkKv=U6Zq++i%7vn=$x z+UvvR*JCf)RUP%CUIOzu^{%6vjL_ilhmcQ!bM|aWRo1w?Q(sE3+Tez1^f35SChTlD zk4w7Er_r*H-KW6`DxaXDJ-iHTox$FNcN85HP!3OB$#Mhm8+re+aZjik^ zQJr+O0ZapT)0LjfB>bL7 zKr)aUK+YW1DPR`e#p)+0UTt^d0y%#?OYdCrIQLKSym^%G2e;CH9o_;;Yn+<3n;UKt!PUFOm5?SS?i`T~M%Hu>lKMOa9{B*perv{#sn|-aywINbvU$pl^iy_6$6+%02P+c* z3)|~w>zQOSNUpEtk?0`!h43u?m$jY9>w|t?TbtAwPd){`lU(K~ADs4~gI~@)$*6~e z-;#d{%mw|yF1k;El%d0qJbLtVbuOQJ(|+1(Yp>haPx+XX_Vr)vh&{0@_OUbemMwUT zwKk5D5lduVLoo|v^0L3?pi@5HB(etK$7^|Ad7=Ex}95?S?m*o=7Tt zRZsGtl4ruFfNmg@@c`HXdZA~5WQ(M324{fPZR#aT8(?O;R7UrYbf%HD;(ZRU6a6FU zU4h<+UO|2-`F`lV26zG4YxottoC%uQd^Da#Y;4BMndNMCW+=1pmnu0+BbkNMW_zjz zws2JSZpL#MEg9ruygu+Z+D$6_z3{bkrqLgS9)kV=*(i0cME@6^g&d6cM|!8@-vlmU z>v807kad8&zzi@940y8)9e(8WioSZ~fh_H4ue6)?(@*+Kzv-VHv8QAN_7yv0Z|si! z8OMwH7Vu6+WiOnE`7gNiS{D5;aQjF3r^qI$l!g;wpQN{23duyz2T83z#LFUOkWZ>- zJILL$x&>TCejYr->m&r z`ssvrdM@7(8W#I7^c3>R4Uj% z>{8v#rm>(q`FF|R3HpJx^s>d-t4l`hihdM~BKsit75k1*FOI!TTO+|Q+UspacFH4B z;}-HG@CV|5f_^g4AoP~4<;N}M@Vk;MK`Dd#b2JXngpq}O1oQLo+f{lPz6w60qdpTP z>VK07pw~p64o8w7fX-GhS;za~CmJTw?L+oSVCzWAt&RsADEHCqLD|2{dBc`be$ep< z-8fm3t!G+ued0YsdmN~dZRu{Zq{V&kmbBD+?*j&vNx2O#6EQ-)Vn^!WCmPyQ4?YR+ zDOrspmERA>`D`2c?q2?sI(zV!(4&=u)G?8bF4{Y>qu!Qg;mLr>9OZVg6#gtc4u1xm zBR3YKmuX|TvAq?&2Q3q2@vF{sWX7B|s#D1t;Pd3IAPZj^_j=>m30?-<0OutFFTI=40xGtWDvntlN@qUVfadz~WhFWjnsdtQcuU}0 z$rr+Bwbbtbv$bKeixd6`uv9{g;znc8-@aN2(ah13KwdgV0Xd+w8_HOEp#v6e5vO44Ft;9QvtcUV(vX!7S z7{ay<#xv8rEdhN&>)3KGE5FzL44r?nXQ+Btfmzx*tfOo_<;uC8>}>5$!Q0keZ?V1T z#m+d%Jo1al_ebxM4JVWR6@RsM%MS+5C-@s;4ny1EFT;CNNTkMNliEH*mPi_h{w%s; z`newc5<2IU1L@2~Z$RHmo-OOgaG9t~cAQYw$WO8IS+uB@!ZOO>q_mE)Dg>7hIhPmnY&hQFeZN%Sv;+g{2IryqPK{L5qwZ5)EW z0~~?36z>Ujf27XI#(g8W2>&SXd$RjLb99WmFUSEqTfhd3zXsi#>}}vNw%ZD`-R8Fr z)dd~(llbCx!A36!L<`(##n08aC;cXR)6r|u?>aSTR9Nzk2wf4 zhndds%_d@KM}6mBL~%8lNGf~Kx6#`e`b`5qmCg$Kr-0w#w?$?EaiDuavcMj2AiYF$ zZ;*-I2mAtmBWMMQ=t0fu0t=m+M0uEU7HRC-TE7Sm!@p9!q_s^3-jB{DXy=&RM#|U6 z&G7r-Cc9*@gVi}2J`r!Ra)oitz?)7lhuoFMkn}hLJx|%h_BdV^=YM3UMW)W##=ak1 zrm7~ulNlOuLil|6ll0fHb6@lg;CQ?b;SIriSe>Sh`b0jbr9S^O$g}OP00Y1_<5>aP zz9NIywq|3H;M!gAAg-f!&Di28QEh(*6z7QTFDM z_!(F{YXq2RAR?;%4I#bZpb5N;7k=c?E1vjfeeIO?(r(&MKl&@4um9qtu_t!LzStRi zV|VP&I5M7$E7|J}yc~$)C_Ts3&&6Hvrjl{I5|Q1|*Q0k@{2BBU4ynDWdYl?n{$%BtGUK7m@JY19T+#dsm%mZf^r>s0*_PYoR!R$n^koNJsG?_jy;D? zKzx|2gYLEP(ePe$@?SZWbw}*s>E|%^aJY0-^?+y3NmM?=pwK+9;*I5pqFKo24g8D_ zkpx6i+200iNKk07~ ze)>=5h&{0@_QlTF8@pqF#*y)4To=K&tK$S+q9c=;NU*5oKp00@L}!!5%we)8d7S4b z${(nA0a=rFMi|>+@Xhq!LZ0`827XukYvDhj{{We2ua=Yd$6JQ?9DAPAP9pO*vi~0- z-y)k2c4#AyXlv;00-fl-tXvP8*vKKvt>~-l=YZ8)z;bQ3YVQ@g{XwgCdf>(Jj==AS z_c{7GLnUKQ)s_rdB||3D{F^=}E)I5bJ_f}Lc}nqycy-d)nJp?)d_si8z>EcSmH*qi(ma4DS?>P`R$f&1FE zXYhB^;}m)I%GOg3Un|ucg?A1*-n@a%JoMk;1IglmnV1Tmj3GkGUVSj!eq2pfK5rb0 zl@_o(@T@{#iJnfLhcv<`%#(5Sz*)fZA7^vY*%9Z2crHJ0p}pYFB;<+zY0FEp#SoYj$(}^ZR48(*`cq zW@pe$X9TM&Vrx0@me;se z{4V(O@waO?i`lEA{OY$X#z?$T`re0*^FwtFz2iZg{|=DIPGkM86^BmpxHkTVnl{LB%BmiC_?+g}_B~X^?M}Ot(?4R*+<=jQy1wIy@HJ+)haqw&( zbIrr;`4-TNLU#=5seG~er%Knsb3(N*B`QjkK7p1Y@^DfXdN!SS-uv*k@#uK$4zfc! zO3EvTu7&E}2A0#irA1VNEa)7(3}PTi^sWW#4c6k6^gf2Z1*|fu6UpL?gYdF&-$8d~ zJm)CsxI0=}t7M;YU+<1DW#?N#b%i<~AwN*bLGz)dI$gO!d#%cMq7&hX%q&(Mb`Jez z%F%enQYPJvr{egHq4;ekaew@);a{iIqrJ{h3(;?&vtX;V(U<%xdoMg)v$dY~UBpZfrPRl3v zwZ?rITN1c;)7d~Cr}-}Y1Mu7ND|jb$PKpC$GM;Bdy!8F>Prx(LJ<%ELFDPHdxC}lI zK+ov(4|KAC*W(QV&*3Kmd(z)czCxXcz|$ax?glS{XTfHW3ChB?a-7!Y@>*B+)vFja zMZ3ua1Hi22`n^9+vlm@)z}N9^Mt=`I0X{|lqOshWrP`7KzSLYEOUik{0%WrDwoq;a zyVU7HKX>O&$~ebY$j?&VFUsfPeVFWJ?N7wpXiQnmx4?J76CgLhze{Hi{eI>q0ka34 z$mYyd9D5mvBmV_|0l3>(hqTxC^j&lgBp;w|QuAmPu>1M^~r3_xeVTNyh|rJM^sOWvxXbS{!|axQyvPMJwlkJ4X3-b{WE_$v4T_zCzS z_&Ug*mu#_--WvKVo9n0Fle862O=RvQe}X*T&GD+ac)!6L!n?Cz*PtIjSL9cs{|cXC zBI3kxupRIV=roP3|IY4Cyo~3!#?nwW$P%r8LLY(t5cyPPCUgebX0jiV&A{uftpkiT zjx-Ga=lHk7IZ}z{?)2@yRX4nzc#GRjG<`N!aiIOcJ^1U4^?75;A|)DM*G{sM)SPW5 zSK6{S%Le5KDEHAB05))(xy|KcSgzUS?>4iDUnFa2^XFtUTZ$7krs1t)?wSG6^~W;K!L2-Ie4BiT$#TFd z@AK33^BCR}2HcNc7AYxGTFqgnWSUjliWA4dvImZ%vzq>VyjjL1O_m$M!OGvG6B*y9 zJ4Cq@Jx6Im%Qf)F>OV{thnfIS)Mt|C!yl!)n4QIujNw0IOFQb9ze(gH$@fEF7GP@* z&=28v0onJnNM8WI0{dvEJH2c*J(Q`JE#MnqB}fn?TJLJMzia0la0A^e;$7sM$^J=Z zjKzui;<+(2=F;m*XC}D-Y9zbl=5-1@PM0m^R`^u<<;ueoD*ILW_lf$(|OXO$SmG=IN5i|rh#<2b}Nshvm7K7d<1*|ybX*2o5{P<8`E6Q8cEN& zIh2FjvD*DCorWIDD@KjZ-w? zWjxsmj#563?yr0hJxVzmeS6I;o$pJ$QY2eyGffW34(X)jsnFX$cMW1tlz2)Z`cKj!Rd zOc#SW^sw(JPVT6Gc);^YI!}taN#zWBI$j3(EWHu;O%8%fV*wA7C-_vQ^&RkJrw(+GUNc^(WFS)NLJgn%sl;W%?qj+-+B&JHuzGlZl99 zUJmaDm+~4%z$clA4DzY14y||}Bpak`XLs8E68bddRP;RMXcIJ{qkhsAfh8jh)J7M) zIOiaJ{0=`3l?<^=Pc6d2F9L9?iP_WS@zl|@ucMHAawS&UhoUxL)7^% z*(CS|i*f>fH+Z7)8s%uVUfNRM%THB)lKwE|y~cHxvJX0u{*=iW-BG^-Bm$EWW@}?N zy`=v+@bAEHp_55(({A^Uda?H--=)3NyxHY;tXkK$1Jtn^)+f-S`+wiO%M8k>vl#!$wRF=cEoX)9yR zn9F`SncXWt_;-TrQ8Ch9UheeE)jeMuS+w`Gn*c^_r89e?dt7EIoq?Z>w`+pXsK3&tzf|qsdEVV zU@#KAlm+H*ILEw5jdVNBYX4w0BEw16yKKv5k!-L#!c>?Ky-SOBs`~ zWsGI41M@Mccq!%-oo4}kW-U*yx50DJNt#L8IE#FiikYAp&9!4>PZg0>D_GP~cXmE` zB5fcz0vrzdgCQXM@TDM&E`67)j|nMhJn85`Mn*3SayV!uTcNMh=*LO2cgjHJnKK^0 zPMtH!GU;9LXSdj1==>UfCf>^;Bn!E1D`!+rXs=J^W9eLuUWI=%y&?36vM1wRLw2)r zVKYaCUk0B7e;U3L{xkSanWjJex#*qfT=BMPdmP?8yv*ZA@JFz(S-r=}4(_OLPM0XJ zr{_LirJroAw}4ymufa=JJ5jl>@(b$jW#bFl`Ih!%#e8b6jwM@7)(x*GUYzi6Xu*?1 zXZZ}g4DHZf-9&aL-1c66yV1t>1i-KGo@%zn@zNd)Y@s-aV3W>%N2p?X)skkCHmXy} zuOrt%`5{3i+R|_$GO{`JGY}J2wSp1gcyJsT3Pu6WQKB&hPX1EiRGDev9hm0XR*4IWkEX` z&$UXKrQG}H(zl@HU^jNq3i`EA-b5eg%9z{JZc>>I=qk z0v(fG-Yh05O-h;QZ5BHV)|HOvE4P{H%J-?;Q`whnytZzJf3Ueun{k>Ya1mTy(0&eo zS^XwD$u>`-cN)X<*a&IT8NE5K5= z$NA3zhj-MET|>2<+lg(lI*HCL_TB15dVt(ds{{ z!zpy`0Ws#AZ$j|!B8yIRQ|E^a(MH-zo2Bjak-p+!nT$U8d)3L{V;dWbt!%DNgO6rs zqU~t-ZtZ5lWPqxR@(8@U)Qc1J&}N%*=eYXYhKXvNfqqQ+H~N{_-P)Rq_hr0C+v{wS zb4)w=ZTLz3qPgtTm(bsW-pIDSc-k((la%@lI}#K>1B380Un}Te%I48Z_QsKOZmGH} z4^=iPPghP=-V8W%*&bieMk2k^CWp^KJ0G&j+d)tK1ZN!R%nnY6eyF*AmCUv}3_gwQ zukaP{mGFh|p31}NzZ35=Wpye>Qb!`(q?f-?N!rO`i?Hf&yewEB^1rv&SEWUGnY0)2 zSA(SQcwBEfiR`<<$KQnD;YAjm=%!BUrVVYC>zB4mANneNCc0xoZ21M<*cKZT(XlyR z?tqu`Mv354)mwtUjLuCvWt~N(aCIgpob`bgMNno*p@nCr{g_|Cj*w> z2Yd>iTZ7D0QvX`EB>LiLKP8h@%5`lTUZVIfc!Pi}QU03fF#Pk(;Y}b8Y`dyXQN{_5 zRDyDSK3RDV`mNyBj`9JiY>z+CcYpAjIeV7PqPslPbGmX{+l)6AZ)gX*@P5#29NKsi zJ|BJ+{AqZ$(HrTEFs=k$=5+)4`O0!KPSia|F_Zo;c$0x;v9Ci9ZmAb+i$Oh0XEXzO zQyz+{eaSvUe<0XoF*ef~PG>%N`^A zVq%|xobuVjTibf3UG2`{H;X|?<~G7j-kbU)=@SgZc9h~GWd`-wrgvoHvbMTq!&m24gOB^@?*R>O@F*( z*B8)B;a?`dySaW^|0?`z_*db_F;AlZ8eX#M7`*Bt3{h8p-*+8GH+1W`dO@yWNcN5_ zvc0qMb%Q+tFW!_%>jfSon+-Oo)1dPL7}hT8-h|-cMHZdtrcUZ=BWKJF!1!gb%!Q2 z=wgNoy&hSZi*$$qkKLtJoo=iA|&Oh6WqgDH(x1e)fJDq$18xO@>qfVY(b560n zG(=}PmB)eS(V0RgPB2;t%AP%0*@nIY%<8Bg*cu)6*4eaG+Seur%-7BGOwZ}cZS57~ zxB>4Vy0UB42_9!#Oa36)O87eXPvFT?95X>zwx?v(VZH_y?`uNjV78c&$u7Sg-)^86 zcGRzEPm`}T*kyS8(K!#?sS_Tl=Bf%gpFpU9i= zK1B8wj@@;>rGdfoBNQ8{c*r9TuL2>wWCJJ}{8OFa%-DH7% zJL*i@*Ia&;{c-GT@p8!Bz%jO|8>cuDo$cvA=y~up?c#v`4e*8V|KTSSRoZ!LOL=dp za=_-y<&P=KBh4m;zg4Gw39@*fBV|5xrzKX z?e@a&jsFR}3-GdVUC_TqXOD|>ZiFW~-v@sIehxfmj5zFlZ11U$M9@=Y1C)>GzrXTX z^c&=T=)G563sfRQ`Y#J)^2&De1igyTJB9;XQAm zM&a3`b1*B{U@1C>zw!{qrt%s3MY_Ad%OFmXtz#Il6_j^`%hVm%QD@~I+UrM85Ef^h zg#QFyPkp_PpMdx;+V)glS7n~^%jrGzr^4;~Rew6k5+mu~0q@7YQOZa2F(@9rhG4Zu zlD1AqXWN27x$;MJ%4WP@QIQ zAo!FvDhuDH-Thn2cl|1|99mWxj0i5Tc(0?I^vijw3&@+%(t9~041xE+kApm;&b8WE zhBrW&{WsCpm#p1nWCD_f;uKkkM7IoPkE%Zbi>7iOxE1dM@Ncx&ll5KrXu6|2>Z@Lb zo%Abqv(#Ze~eUENG{PV$0(IJobM(-q$ z^pbt=G;j`>1>z`I(9Z<@TO02J*)!kAsKdw%x-o)m9e%bT+d;m&mnX~Z3?58A4&9kN z&M_JO{MOpLkAe?sE>Fzm7LaIqhTa?6K7cIgFllnP^3QCKgCx4IQgXI3X<4Y1csJAA z1m_^-Oq58?;ts{Xfd0qO{k3tJvD}X4=;e&Fn$FkNv3(`-%e61ge<1lY>Li;j0nK0t z7!Ia_Y-O8)2ygVKpKP%boU4t_9koNRVdIm=VlK;8_hfsC_?(#<%jw8Cc?ZcEA(M1ak6qP&Q`F3UbWRBa0y}3T~cflW+o+(vyF0rqcanvztSU^8-3wJ_4RI!c2Ia>s2}*ROf2EyA6B--e>T7D_>FmNB#dPGg;5E zcaU-^daiPbHsVx&q4R#cO#E7SJH1=sUx&|ukEb&nJr;d0y)ni!9sPUs1KM~S9S&Bu zwR!j_f>+7bgDmz`Iz6}6=ZHpo?ZnTa+rl%?o$0(AWNYCB`4U@Y4zmqBNWaazJlI_S zvB%|j&)~Ic^8k9+qrZioKt4&`9_S~?;z$X!w>8&JG6H@a-oKQ|YA4fMk*DB9nTT>f zs3&ugj}pSnw`bo*!?&>}0p5px z2Av2Sul#_qWGl+TpP=L{<#Q^hE%)Pr+8EqXU(aUHxe@*l-sj;CqUE|a4W8)FmNJxV zgEnNV@>{>h(fJB!Ah?s;KSJ_ zOOzAtRJ>%fH3m2hZxOvjd=@@soF!>HPP?e1JV;fCv*8H5?CAobJf*IIFN9|s>SWn)nzg~1^g13W2Wy;XuM;^WCr=I$0 zr`#a4TiQ=Q=`Zc4|JcEvk|{#7Gxip{*LnXfXlcu{>+2YM<*qp zs)LVWwo=MMJc;h9`@$@Ww&INIn?E9RyWV!d!KcGW)!rQK$q|z7g=FrbJlvMsG{_*fc zK|7HB7;jW;Gb8phlfcE-MKjY0Zboh}+FZ$}0 z`r1i*rQJA6`q5wdEeAVx6nkPfkKk{@OBD1&PZiNg^RY7n{|nj0@Tc&z_&wk& z^ua;PUnyPMQldZC&p32BG_G#1PuH*MFWW?S`or0gMSK^XmC8Huo~E||p2d)vio+#^ z?liWS=`B(x=YbjIaj5;!Gdt>tIvD>`_)i&k7WNMMkAXd)C!M1}Qu;uUaUBR=B-;e0 zMn|1N&2=gt*i!%VZfDW?IoT?*&otN9&MlYE%XTDp>@+Gdy33nnvBKK6nx1#@xPMRNu_o~5;!*|fh>9RVU{MTe3 z1(U&EgHD=CMpyzK1^w}tgRcSmeon^aGjfbP24tTfv9&%I9Irh_Rr})Kjb}S3htBS3 zuXK$*HkPuSJKPAyP7=N=N0;s=!mG|7#;WnL2ff=lYIvK zQoViXaMbdya;P$k|8KG%0%w)7fO*84(_E+W5!#C#r_pd=?ydO-2e~*5$<_Ns;>b+ID!kBJWmJ@XL{I^q>uJW-Aya9a> zn1Z)Q<3H8F$@qzYMA%@E>(v(UPB0pD0ZyikmqB0n46qJl@3!w3Ph6zlCEDoKQSb9@ z2K_LDPA891iHKZzUc_6LKG4;;I?_jzi>&HUx+CGO7CUE>-_wbcS%`9{Uy8Sz-o?r+ z!iCEI#x+m5P5Nu=&?fyu*pX-!Jyo1?JKj3_nUo*Er{JFpA3~=m`eCw*)ER>ojpZ+$ ze@rJ6eG^_B<9YnqAQ_`8eVL~ma{s7|qjmwZM&ot#^B~c`2xI{_n71{}bt-Q$#-;ii zME4Wq6UlzlTz_$txyt$BUb+|2>yPegyuDiL1L1SpIt+gp{u*-^$A3T@udAQHdz*R} zD|eI4%g3M$!0EemK8)gF=oRT4?-P_0f$ufYq&q33O0--_mekT8#M@q>myD1JcmeE# z$B2@Cb0Cv;%ZH^t9rdTm^^Ba$pab!*AwLy=ZF`+@j>O9%eH}f9PQ3hRbW)bZD0kzv zjGu!4B%R0Uj3-}@m&I@3Wzp@0c{nNCMkZmcK9_Z9gZ>E}<)yJ)pKc|~r2J03Iq=2s zZR$qXc9X189ZY`-*&FDM7USdOBCka03HaZ}?+mu<<3sK0fg{P|v~ij_%4?MilvgWf zC}pu~h;o0BYu#9o!|7|=%Qb2-{uK2y zq0{KCM=zrjFYk$#vda5)Z+Ip1*U?}3mVXU7 z$1AsnL&&DlNyM+m`wqQDcx&OG#-ER$amgBueLCt-zz3nblfRw(D7>ZM47{9|nn9C= zT1xhmwz{i7l)P0rRXI~ROF3ORQ8`kXh4>r&4WJX)WUfEgEQ7X`t*knm{Aqj=aX*PT5h@qVDKhBCIfarjMzL*PKfY|I~P z&?J?g5HqlGxz4)c-+`aBe22<^0>?1^Jo0P7ZFH`sV=*fFr3{T^mdWYa zUY~fAA{UX5Z7!$gIBEG1l#J1a_fL8k!%u~0OG&hEgU5*y>2aj3=mi$y&vY;8sI$x- zyoq2n{(W>i;g0~hp>W0=D3gM#3qS&95||FIX{pasv+2co4**|K|0(S>Y43O7EP66w zl{R0-|Cll2HO8Tr&|OD|qn88v1A^mBvIK|J-pE{in@+Z}bMX?yaqhuvZ<!c8c;I zAA_o{6jmY*1o7?_gnjX@*LgY=)#dA6($he)PXmrn4mB1lC;E70JUaVMbrjfN{VZG_ zh@NNsW(L?!N@g%2jp^iXknzm2A19Msi5CyuVK7J2nT&2jKd#=*@DIW>piJ6sZ62@A ze()SblPWXF6)klJn5RtIyg}Iz!Esg#RjzP}fMlWTmA04?Dd)hSS3m8|g1;YswJ~zg z>QuCJTYebQpZs?HHsRfe*AQ)Y(%To`R$AUR;(+F@I!<|ra$n`^bdw?XLm!Hk<;oTH zI`}mm_3s-wVfn+-5$yOf-IK_ckR8-f9J$=4#^c3d&ZfJ?cy2`h3Z4K-*83&=UUiq! z83iAJm-YQL`2=M$=XFYFit0w?27NVNqnM74Xep7DuWc2NtTNG4@!}X6Y|>La^xgEo z4;tk0xJ3BzU@#Z}4hFB1Zvk1rsp|A@uD6pI#QUpr>HL;#BUwCqH2y_+58)*OhSM2` z=CLKko226PFVMXZzCuKw-cp~!GZAOwy~e%_yj3>2nXD@vi6WALf>LGl5TsGWic{wC*wVWw?v<_=)FkB`5STKrEI^5 ze55jt+)J4`?5@n>4^*C^OeVM$%;>21;-710BoF}Q!_QmDt|EH_?*a4lwdRtEs?2p) zyq}_1!neWS+3Z%(Vw-?}3IA&RJ;px_@9%iYW~1?JQ{`#>IenzlSUM-8pVOa+EtABfOX_aH&wE3n;m7n%L__u|2c8Uk zw87n~+~$_BSh)*5N%?W@#<6qqH__!V`(bsT(MB8IT=-LPi&B0W)Su3Y^s|@`lWk^; z#VBcc9Nsf{FKfF=ogV_uUzxKUpmUfkzY&NdCtLJWg0lD{loQZ%K^%5sNB#T8N44>q zKAN=q5|~8q67mF!t*zXquEIM4Z#}(N=`4aLBX2OaWWP_sci>-&zlshgDo^>pB0m9d z1=(cfVDvQQcy#&ht)p_l5{>1w%p0pr^bIZbH7J9XX3D*?Z@arXcpSU}I@9Y0Ol}TK z<-2pD{|=A^ti~~>nNxvy^>Td;q4zoRu4F%BO!n(j@fP6SN$&!BP3VcdxCfa@D%a7Z z)DiHRqIw$sX8Is%owUnhWa1{{{f*8DumgXSHaLHS6XyV34wJGUC`%iT4q*amqGy+J2j_f#uJeO;mXfUQ4i+5l^*q2)vaV7^91u106WN78wW&H}QY=tqs?tLEd}j&dU@zvS78HKIH-JTiW;lm=DedV?eUt+rVeQ&)IztecM`m`E^fLGt;khE-4!;YYZSrimn?ZR4_z>Qq+G*ekwsP~>M(1$!Z_(w; zUA#JJH;0eP#3vF=SPlyL0#)|SuahNZOf>k_TkE&&+4SB9-T@YavEX^Kr07n~^?@Xj zaxw!Jf%EjUht6Qo%7{#GQdckhUFyZKtLeqdJ*H$2EepKPf=Zz!jd83JK^CRFxt~ba zvY9%r(!QgjTn`=t$%g&ujR!Yt z^CE3z4nEe-!Og!+oV$Ga_*Le@+&rv~Oj&|uGx{Is`RZiR+vzWY&t*?1^+v+)H>PXg zOYx3T?xOb^y#vX9rEW6z8_M$je+~n(=RAoqL`7axCM*Yq%XE4a*|TKv;OEGj82JPv z2DTdnm;^?GP9TTAnRLcB*Z=lFQq?&1ZwF^;FDKP(4J*kr!AteMFMbq4R(? zhQqVKck53IEom%{#YysNS9R8QfAUQ3#meV7hZJ1CO=NPq8Sn(<266*0=b0($-G*1; z?S@~};x!QdpY}$10$&SX4Znc?No3Q|%jqS9aN-gS^YAvY_fdLB<6llU4&Dlmq>~f> z55a@rqu|3JQJNt74Vw<2Hxx{xd#n0qfzF_6x2+iWH|UKb&o=chyqWq+w#&HVDA|tE z#$|AeUVibEERyUiYnCms2Yt@f7>zeV`CVh^s(c;&dUN?B8(GK}Acd5aF_rLl1Wz!a zjZ&wM`e#YEYVd5(oBWsL8Biw0rc*UssZSv@eH63ygPm-A(8Sw_#nJCePu69W=a}t5I+;P9#53nOD7s)#K2`xpHo3f;(rF^T!bQDs_@7WAo4HFOhlToHv0)kxWvqmpOc% z)={5l&c*KuzD>3O>_{8_TdUpOpc~x=NYrj)+Zys#dS3*cjPZ1Jmw@v+>K}I|iw+>$ zkL)^dEdF@Bd+^Su7f0Notv%>AxCk#Vu$-_2V1nvU_(J1OFbJ%YF&EO~R3*4iQzmm? zs4OXDq`@SGWm41mV8TDO*XIBc+PIkPSddP)fOmuOpfBhOdV{ebQI*v93OI_stdgrr zIZ!6TrU6k}ehNL6{G5*Z>X$vW58Y&(Y(Fy?e*t+_zvMf>)SfHKCVy~dP0jvRu+OFf2AEEJ+yTJ zd3U%-$w90*UYu$U*>JL1WXX(6EZ#b8G~pRr9&)NKWcKTF9ZV)^CjT(_7Wfr-=}ib8 zUS!dU?#tR!H*J(hq0Cp>P9Nzjed@c|z?L|Av5k$zRyG&gGlq=Cn9A=91zj0y#+C@rYT!jH*GIer>8|{UwH?(MmdChwDNo8i7ZZ5-Z8S^FXAo5yB7XD zd<=X%d@!BY*tNaA{sr?;^d01V$oK6i2g7n^*dPDB_#@~JB>MvR2RMSx2<@DuOhjI& z%zTVf4pklkeoOCO@Qm?3r~a3koo!l5W~$UHx0}9X-(bJRtj@$+K|g^xrKLW_=M2^# zo<$!*H*<0r{8TzwhpFrzsQjCH&*8;sKCQizl%GXsYyGYA59B39?S@>+$O~2aFTpI3 zhW`)$uNpg+%s{I7D&9`#dSKDZ1IjhZn;0rfRI>nss|@rz>L$Wh8RX}6Zf`2-J5jYB z{|Wp|c) zp`1&eN&lnr+s1Hy3n$Y@$x86icr(e9y&CY-**y|}B>HphW$_wkqI2fiqTfH`#d+qi z_b~kX@ptI+DYEyGJ*SOs9*}l$@)v5X9jJr;X;?sh73X-~Yc# zwn5PRjO=o}6V++Pvv4Kw4n(&aBj+p!)5@66fOo-Pq|PnMIP57c^&^+tLb+jVBRiVx z+vo(`8|WwKmEZmSq`f{Z&sOOma3`UL%U%CzN{6XnAdO7ejRta?4wrz%;AZ-_;m0{9 zgBUDY%D+*w+aULtq{p>4obHMajzIP{Z8~d|iCm1{gEi_r@%o0J#A1H*?OkADt) zvHEwmm&MBmoO0&rO1=Xxi@FGJ5cm$gCNP?;t-b!m?;biifDNLTXp;@f0aQjT&&V&( zi*t(IA=e7tc6d2Cx{)u zOOSHdss-;6yaSY->Ddy>wz*R~`@|l67l4vF8()Kr#$2dFi%|CAG&}&GN0u$Z!dB;l zHn0R(^y+pH!xsWuL|&Q7wJg!{Ua(@TlV@{z&#%U6mtIMOoPTNZGTcWU^|$vO&fH z%UMM>$qQk*8n$w*zVM6btkupe{ad_-?X5WCHjDKoyg1M8Y(5pg?9p^v$p({s9Q+dO zr=0{$`bp|NN|}uK2H6h)=PF>H{`hex+UD?^S1rB=Ptu>Dpu6)19 zd14TpbCx@OXZUn_g18*OXVQ0ZdBL8ak z9fF@lOY|Yk)(m76S!et>U7Jat z1b+d^CrcvvbfXmp2fRY8_VHwhIf(Af*(XD z(cFOFVN7w{9olmnD(QSFx(R$iokVZa_;!%!PR2&6H>l)Ao=7Q^itkH-=3!KKW z;1%^&gC=90-CXa-Q|L`6bLJ`^d%k20=eN|EZzkTS=)ILr()pvtJBF+``~|jL3jZFR zY!jL1COkHje--Tv<)_F7D?e{6Ba{iO%anO;FZb+RPX=|AQ*@cE7d12&WI~3MWs&{_ zq||tP_WAq{pmCBi13DD^i~Jj44iK%yvmZAIX+9B97BMNXL6(V+2PSpLyO+>Ar=|YM zb5gT?IonP7q}dCupL|=WW~%cU`kj<<#`miy`pU0q<1qcuIYU(1KTauo6z4s!MZX3+ z9`EmXqPL{nIK$NTa&{@1Z;grjJ=qQPIBwbF?;y{ZR~YMXyzi>Bm)^_9k*z3!F%(Q~IksPJUq9xq7#M1pd=xysqBJ6^IwoP4A*!P%k|SaDL%?Y4kb29uO9 zfN|G%luxsb>^~cHA~l!A9IfJ7&<=h963Kz!;YAjmEPU#uZrU*MX|ufO>7(@Z2S#2& zmPL(c-%a;IdYR;j7T;tPFYZc~i8&pAx0CJ#_}lR^$T;8G>LsO5HP}S67sJL9rOZ=Z zsQe)L!OFv1>ODyrsW)kPF`Z9>tss#c2p(Q!(TQ&AsGBy@R@y9W zr;j+tK6nesI9xeoK1eqXkyP4Hzdu>Lcs-+!#6KRsNxfNc5m)x=WAN@!FDd{jd5_9wU_H!akTrTU zd03(MgpQ@`lHQkTYlKcR;T!3#COcNU@yvaIXwO%(?3ray>lihZ{A4nQ<{_gTa<<`L zPUk`GysD2A$fv270k-OQrP7maNxe(ZSD-C!IhS;5sXrQBqwIs1t?D#*gI<63B^?gd zCTA{bzZ<$Ddt6^4uRNXpkbDK++vyyDC)GDH;feY~z_aA*z*Jyi%KJtf_9@UCJsWHQ zGFQn)=c=>P*kpmSfHT@_C;k)rrjfPcXUpwOKfy2y{b}?{@&r`UeuHc>{O|b549QYs z;Z5{A!M}<(Mmaupls(WXC!$9yvjq!|#<6({j;AfyTHfHRqYN+|E@-LmnHgXVe*nB2 zWH1^jgI%V)4?F=f(Z>TRDk-jXlEX|h$bM-rE`!UUAHsVslS5ZDl)spj&Z|t!;pi;t zD6(XPe)w6u`_yUR4Z@q%%o&wE>D@-wm9yNUls!t6Cj*Qk&%$J3?Uf}GMzZT*c+%l` zxc>8ApDSBATYQ23fcE;k!43M_k30)F4R3!svQ3G=LHNJKUjZIqL+e&{(pdoVAhZsY z?M^uf>?F^xqWU)1+el|^+h)qM_GumU;cW?>kCLCFZCRxprl)fJ?)0ufZ_-Wz%$cD4 zV-WWJ#%%ca@xNk@E~hiqxF+Cz2``Q;d*xR|<#zUc`Uj)4CFQ!9Y}KSpHYk7SsVMtQ zlqMVKavf*?KAK{#N8bb41G6{Aex~mm!Us^{t)?m^l#t`;0xi&icdAyFO+ezOY!b)ueY59;BK;R>L

*+j4F?B-KWd2a<@xjD%1?pK;2E$Fc^oB+ zmI;z-%60Lp?ezl&&&{CAXW`>I>PTr*kGGc-ywqCW{pYIx8hj9$Oj4d+lbx2U(~5r- z{Vdk!@Xk?+sPd6xBirYr_i&sX{^F!ZD6=1OwlZlJD!+iKhT-|KN*tt0v^}A&#Vr|R zmwH3Cnh>(ZU?BM_yhrh#p>ujiz1^JEQoh91e~m=GS{r@oyZ{Eb*Qt1vvNw1Dud*<& z(MbmV6*xwH=b4-z%EQn5>9vvnlx&JVTk$`JH-yb6(3^-}gcj-Lo&PcTJ@90|yWtL; z)mS>5tlS0`;w2kD&E_u3f1x`mccG6^egu7?as=BFFy+@PFEC&<0j0*tnAdcapDN|` zE(ft{9~EN!cfdD+D@pks|KD^jt(H%a)99>J_dIYASl7;|M~ml{L6cQ|@DnLcpJo3& z6Fm{l`^)L{XYe^>SGBx(c7R_?r%QV|5tm;ZZ^s*nmx!9KwC`4ll2Pau<^5=0UkZ!$77D>5p7CVOL9k&#h16&V?o-dS2vsZm)ypYJ;TD;|$ynprcm-e%3r zdO5F6$|LD)SH1=P8T1#?$$ksb*{X)4<7CUxBh2SCI01MB{H$^>_`AwO;8n_(!|gKX z1^F8IxW+QbxfK2gI6!&swGZauC5zkW3m*XUq~Z*st4iZT;q2XufQ70?ch*myiRu_7 zlRlp8tz;sw98|J}oQ{{2`Zjv^nD{*Hh`bzb%GT2bJr#W;z4y_{BnRTn!J7|TsB(C` zdvk5f>F^qS*`T}wY|zI(`aDs+ZBktvB-v`6wr)iK5G_U5ZwPeun13ScGIf&m-b4P1 zHeaPq&M%LVt);&WWUGop4FMy-Dd0rVA8^F-uch2euNTPqCYc}sHOZW1 zu5vKVLUP7(MoAEL1#zA@%rf+5^2KPGqdX$b)y5L^r|@4ukE8RDwzFoOC68>44P?n; zoVOYb-=%ymyu;YzNNw8d2bZr-F~C3y+bIvgbl_>MF~Hd^jl*f6FC0$-CAtQ|W0YsY zIWx@etc~z%?If!2)8-bPoJzKsED@OKxF3(xl$1JA`K!%(;LoGSqOCA3|k$dpTE<2 z608Q<4t9($K~b_MyOq26e)NWs&u*48O0rD(9YNkc4x%$(c|G}E%3VLsU3EooVu+#mXQ7wSze7Lc$j(>(mhu({vu|i)B%M`w*%E$(-yWIl z76(dHB@65Y2hlqW91ddGeZaH$8$cUKL=S3~peTpYtJy7%nXLOfyU04_jB*9uGk6=# z=}0;kE5B3uOXP9(P3VWvH{x@`k~NM&PsYodtun7!^k&j?s4NHQv*8iSvF!k3Pq5zG z%r(>&;1E&v&kY9gKN{SZ5k`PnAgSVdm6Cd@EKHX8iWR~mPPVMxge-+s-vYe*l zJQMJ2O^u!)TS9~3lB#!+9o1PrHkF5`WT_jBQ6QAJ`e5aphl)JyL|?s9KkcMF?Ut>N zynL5WzxvNON@_N)j4xkY%XKf~&iFHr%qR0Qzs$2ds+o70f9w!@uuHKIJC!ZEjRVGh zGqf3dvTLz#*k3|_FkqT&JL`Iffg%pX91K_55Z??q2Gj-KdcWVt6N zn|z*p6kZm#AO3^*Yw?HScY=dE>nrWWu#{a=?@e^G@WHo%r1Hp5h3S`ish@VVSK5t! z`bmH3H~nWE8BfNQ@nxJDuW^_0n@5>X<~16fd1k)Z7Bc_XA@*RG;s~~~Y|+JTu^&4o zQLfk=1Rdvz*DpsOfOi~v0(lIP{cA4X zNU|yLL}R@ecF-%=qV49;q?Z$VobD2`t#}-?9PYBO_9Z_TeSUcZviUXeEBd++w(up>?b~ub(_TCL{CIyId;%f{W8{)XW86=HUub+^gX;~B1V@1* zKzEHf_>_g42QOlvZq4%TJziC=7`BD-V%3X$1=;cV3-Ep!eFKYeFIT=xc|Cc&KAz10 z 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

7F)4d+3uEn3vkya?NyQR2?Him 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%0A;)RO%k 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 Tcc$bE$NN3* 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�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 z zvP9lEnWx6qd?3w0qR z0y%1~zU2c_#+5B9(VuLU1$C zT&nZ)JZ<6_t4;FR_)pN^Cw5^1h`=~%_W$Zyu=o|nDA6xll?8lQyB_d}u|KTO`jMMa zd6Dxter^^!nk94PK-uVo_XB##EH9!5lAWVXXR=}VbMV*WKaXz1Ta&MW<6HF?t8Rqx zRt`{pNcfn>+j)I=^`(>(5x3(xK$N#wN8?$HYPtsuB724GORxa4xastCm;m>{>o5ub z6Yv`yI9R*0v|GlG)LNpK!Jo+Q?n(7nPTWl;-&$g0uz671UG6OTY z`G#JiVh!H@?CgPO8)zJ?+(PF72$&YL+nXbA<*_kYpe;~SRt4{y2PPqZS9e)7+ zI^)RU?D~%SD)_Sc$LJ0xznZ)^d_bH0m-M}x%$Cxa4!7#dEOMEv8l@brjPsqSY*$WI z%7o>WcY8r-k;wEdu<{w}@y^A`^FSE)!f@EI~*LWLVZ@Nzz!&3F1p{Ju~qJN2A zMeim$Q_vY-vch}u%IC&2Jgg5UZ!OUsFMF17vIoDe!F=*#@jin$TO@qOp!(otP*>ug z1aY9J$?t}V&=Yo;oNZuY%NDUh`8d1*gXzb45(Qc4MDH`6XRj-J{|)5X2W?U1or7qu zj#KZY{(|<4(GQ>>qM!7c$&M4onJUk`tgU|86UY5M*=~B>$T(l4i*ir=9~j5+$~d0I zDev5~RSZP0(U)=Peb5`xNz2hq7W}Su*#Zw$AFjS!`vK%h=V|*0-h6$SfS**IEP59C zwQvocX>`t1HkGF-$12~U6rttJGozz^)!m8yN3@^q`7_w;L>?zO8~+)6hrDu~GuEmv zUa}A;DIdwcPM!shQ*K6o9^X0^XXf-JD?CV^&yBf<=H6aTx4R84(e)3){2Jxg>hZWS zc$@Kt8`$j(W-@goC)eEjivztxo-B~P{cIQlgP;kE;nN@zv!^DabMh^(RI|`YP3;D7 z7aeptSE4i7oUl04ZhPN#^vB^1Q-0qVx+-5) zkMsRiU1liv;Y3~>FN?E`-Mu__1m4;@{U=kEzm-U4XhToX{`2f)3mmGxK)s#4MARZU z0q^^GJ5Q_A_v2*y;h(DgrEm-R6>arF?Of$K>gOphQC<(uJmtmMksb9dYKdnxtizr9 z)|32l7(@0A{C3ayr)Mp~>yFpeI5&9lY@126ImRr zKRm@w_t>KQGQ??O^Cx(-odN!=eH?(}=9fR^4eAv1H1fPR;B@)Q*~nZCML%N>=eL(18;<2+j-n>7mC$$bDU&25Z@;kNE0_2Sg=!{WjG5RYr z*p#Vo8;Z^Ij`jl*xXH+~Zq(&yOaP?|uq*yU9+M~Krm(yzBc9C9{0 zi?ule_V1`~QnGaU#M_zdVmfX3k9zLv)5<^ZU#^sYQ(tCr4PK$@=(BFJQ{B+P=GmJX;(z2*M>JIWL3T!bfmmp!?^hsU$BFkQ$7 z!|8A#%!LJT6@1`W-(nu1+BT64@yHKk0n3MfSFBbf2ZS zO#K(+qcbq{8|ZQP@#xQ@e}^7T|4Hp{!0V;orz=;H4Of0deUx&ldQxuo(2F~2r~WV5 zNW9G!Kj}IPBa*9A(24&0*fhx{g}?4Od5^JGeKPrY@@;rq=uBq&A2164I+#v&TwBRj z*c(ZZLtN}K4rV=MEaM)d~J{GkfB-}7J8EZ4W^Qf#s4ziW(&TbHks>W zio?iHB|lOb$&c4=9bN

}Tn6*p!~ct0ioBVIB>Iix+?s(&=` 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 z zf*MJ`kE+MP%2n!q^o8g+(?`|0n!MdaI9xg8#DQKgzWw39(vcElsA>dk@f%CvhqZBL zt3D&Vfov6eqy9cmemDB-==1TLXxXbQ+MCF7KA5NcC-UdDv6zmCEw6)ds?)%$WDkRO zuz^lHW5;24g6F`)Akp1E$+eQsyTEQRL|qG3#fAf0^@%^{DBEFisLSxSch(sxnJ+=| zMdbzLGu7>`{IWLVEZG9%bh1!+kcw0M0q+NRC*j?zPCL9*Iaw#pnAf-L*JWaFH?biE ziQX7M+AZJVha33v&ia|Lhk+(?HBg*j77TJwDux>Y_fpROlIV^R`e|po&QH?jN^mN9 zPV#ZOKagFI7pHlJ?ziYAt!Lo9(No&WcZc$6_X_-P;>R&Bp&vupV)EQvQrp+bvVV*E zk`h0we3tTH<@DQ2d&67KBIxO4NxxgQ#kosly@2kCKiV87(|NP^s?7bnczf{%;C)=3F)-&V zhwlGVuI^~n`*kL^kaAz;B_IZP8E-|D4165fCXk1T{^X}p*tD982uVL$EyUYxoIg}ww#;>~F#~@fhyx|6k_Buv<>O8}+cg5p$v{KN?gcx5 zh;Fn2&RG^Z`}Pd*3cbHJ>#Q@b<@*EPMEWD?O;uj0>=0cJ<<0UaldGxgqT zzIa|4t2k~?yeHH-9_Dfwt8a2DIcIb4=_LuVP(HtZ$K|=@ZCE237vz; zHBg)&+W|;a7sDNb{uR9sgMMJNx^HaOd*1olObY7*7LW}$AQ4-hCgU`NIZKx|haa?o z=hrmVwaULhuR-5|eg`^^8BdO(L}2dV)p_t+$xemuR~`#5Rh|QnHum)UKiW7L9*(yO z?_%^nw8gp0({wNVZN_l8xg@&2N|s3KuDpWo@px~?>rnSGZO53`k|0X|Av3jtgn@vuRM?cIbQ=;nLs?dNjRaiI6!rI zixc4W2an^&Yb%D~Ac?B-Xt5i98N3Sq4t9Yp;4Ppph}S0)z6Flc&LWeUrrp1ibpx4D z3@Y1{FNeG6A4De(`DyYj)&lb1qvtnk56`yoW3-G@94pST)R<3#x07W7IbXTnJ*9lI zGUJs)X~(2GYy49Ejbyiytw8@Aoh|4c=nvDC336JO(&|^hWQI}7?<9}Y{FHtZ?>1u% z|2O!n!M*e!C7(_HLC^_)00d0IDTg0<^rD}7>X&x3SK3Yc=_mcA{q!%}WIW{-k@AO? zGv18*=jhBM^U1u-uVlx}_c}cDFLq#$VwVJG?8IKhZsio5g;=GL2H{KK0!CP3f=Q!4 z!e0P}8}Rc6#^B}A;u~-V`%Ca+@HOxeFb`~|7q8C*e``RZvRa`nTSoTh`qhwZ4E~jP z-^P2?fRCgzS9zWChskeN{tnu~rg->$=)a@Spd-4fOnNllc=%H$G!V|hXRqWeWe<$g zrtjUxldSP-(*qUW-RSqCze?|R@<-ACgFh2L+sHopqCA-)x0}Xi$aC`V#FOpH4P=t> z???6lvSg!O=H+ao!G0`t#Or(Ps4b>iuY|Te{@(*^7g#) zn6WQ>uw8>Q$z$+)!6P7peG(+{9|HG)!Jt9!W%@BpQhJl2?$pmItvY3`V}LK3Ks(t* zc%M9QwY{w9lhgl7ACD6@3n!MBZ5CM67b-BIR!@Crf1^kE62`gx?z^ z?T-g}pWmjx$#m9&_k%=baLVCF9=+(Np89F0ybNl$w4Z*`U)oRq8He#?Tp3@+SzcH( zZsRY{yUWm-m-&@_-h9ivGym9uJ&Il82q!DES9QL>4J;{d490^h#KSieoS-oiEa!j$ zWY3bl5p)GP$;J_OfSd~~K)K>;Eo~$4IBjrBulgil^Rw!Q$ zZ#3rVt@?nJh?$Q!uv!1?Z5nz6`e*prM}LBT%$#xMR{Dxq74K&AKlw52jMJsb&d9W(3wCs%Nz%_ zIR_}epe&^~Y}I*@ZM<3ev*dS?KZ@Rrz5#!jF&>R~7z1mADFnAEBljq%Ha&>ZdlnO=;t2)zv*gZu;C zUAqUE|J};H$ou0hBR@jfnWdV77sq%57;et}$UX#qsqKTwj|CjH8Us!P7C+aps;m0n zqn8DI(mZWrxtf)OaK>>d`O9Pt@TO*YDlhLVUsv934nyc%NGIor9qKJdzXSb!x>ur~ z)272{)dl@gyczHYecat<+~#xxyphgwc(Aozly3p&8Q4q=r_!>3@xDKph<&!YrB%Pp zpF(cY$`2MFrT2EQ2CM?{;5f&(K!Z*O$(z$@b-p&bx9SOZHxMbWI)iK>-oDP-iIQEG z(CvxmVW^T48<(Ibl5>Re#<0iW6Ac_QQJ1T09Hm@UH`2@A#<11l@KegRk~mL!$=l{h zImTh=@`!W+*(zf>4sR5CJi0e}Hu`OJD)l&Q*`7YEoD?duOF*RVU+~Tcar}37mIH8k z7qOL9agI3rQuDbM?trg{SAg5e=C;a1RJrnYsyhTEpuV6z4qUF9+1|39b-_DSz0CDb z%IzGWADx-X9m?Np*4xG%=s%&YV;-NR_4+)vNByCAoU|OihbmvLEC9>ZeS>np{2t(B z1G`0~BS8$Hk#e2d51$j{nv)Y|`34}}RtDNQ8jgN&%HdxE(<|4a)KkB-llIas{q$2_ z{O;?ND)F+tETR_=7iDpdlHwV+Is$zr*+!EZi{2j{XIl)fW&G)F^*#SM_}l7d@pp9A z8Q?w2)08*RyRlW@C=P^2;|<1>4XQ)YkLu@i{5Zm13-PRaH$_Ilb z`mfY~h~A<2Q-G|IOj#a-I9_g4Ij2+yfbPJSl-o}E?lDgrIgeZf;>?d}XQ%ciYWGzz zhhExj;ZN1SEK?ln73IOoN0BE3j8V4e<;Nkt(XrL>_`T@g)>fYpM!?w;vlSmi_H(ix za5CI3{GsHF;k>{l)s=;OgfI~?pWxSkH|A$z<%GFFC+De@#W)GhWP?)=5@+DM9Tcp}aKPeS)s|6KI%=_FlV5jm%bF_+?H zQ9sjJf57^z@~O(pmFL0^ntR7*eTU7Yg-W1ff>8M#yEOw>45d8G1M z?F}bq)be<@(GKN>If?$ACEGjoRUm)kKiYn8V%p zt@V}o5VA#d;&2b(KWE;(@Rlp*9pp(F;6(DXmG`RCjqCz+oH%_Rfu7o|pSOD%U$(%< z)zfZymj8FN-d=hryRlUn(@64?j&5$1g)AQ_cIr5(X*;F<_(|i-0xHbb>10^riOPag z4xhZ7tfQZL>X&xX-Zyj}ef^aFau#?qp3IReXUPF%s=GUiBlt2)#_( z_p3LP>=fn2$}_Zglyah$vzDviO!eo|+YL^{zZ|TgGrz6=0(csn;1~kp^c*tVNgOgM zzHt@(IAFHGHK5&IyrEgYB;HOZZQ8!_W0Z1TTd4em@<2M{$VV!#vgm!=>MyKu;@GMi z{{PTf3O~HH{xfjrl5!|~PW_(rf2!OcP6j&%-c2vhw&f;}h1{)yAs}h#Q_?vT zn*sJjXRGKyZ=&-Hbtd46j$+I`+RvgcF|kB2J$U}Z+F7{6T2o>ylO{x|4y^y++&0J@2s12-&o z$pjpsIDN)-3E+@9byplRhs2VeCu`?E?S0XhM$owvpTpHp==widoy(LzPHzsKDRc%Y zSF+IYWFydV;`F(fj!c)cO8LR(<#-id+Wm^L4uCtAlSPujGNz7v4eZmZf0S_+#!s8| zf=Mgo?)p!PCm8SrfG3udcMN+gSPoVh#BKOG&4-{8u}N1ef%MzB#elldnMpSjc?o}` zwjb5c1^8#-WzpV8PlS{OU(O(jqD+)=s;T&iwuk6kiRZ>qU50lr-cZ>7U-s;0m5);X zr1B)VJG{D8r}ngUBwjx{F_8VRypW|mskD5ov6$t0xRq=h2RcxBIf%jXMv_STg!)IB z=M^9sh|S7b;wR*B;5$GQ32B^f_|HNw}DHvacHZ4S+yF01&UEN{?jF-~@$YfWk^gK9{>?|-FECH_rcY_$0N9WL2-qc6KiP$I9nFx}8 zGoZuT%2%s$xcNT*CT)9ksV>Jqnf_?J&Gc?i{x^D$iN;91$r|`qpha7`T3!^Mc9U`D zn2d>+N2Fun?B6HC_t8xjxZfm~wMuG_q01TPF~*vXm;G>fjDg>mZbK9ugkFlyV)j=z zX9kOrgK7Rqr99re1+Rzt7lJtd1!RLj4p!R$M=m#`1#kz*;@=Ol1vco5+HzL7OS|pb z$f6|xvMqg&&bj0Xlpo;bO8%c_eQw&LyqQj-c`W&Q)AsqwSHd0Y-_ojYGv#m z1T20IeI@#j(_j`b>8cBme#?L?PIa?($B}Qw?~VVPra|Ek#7i1?k1Z+t=j5ZwW{|}= z6Y#HB_YwSE=!t2=zPPVuYW%@w?yLi#8=XCLE+w0S|0VoK^>>Im*N$0!TX~TO)-MjHNarn9L2(nplPh(G@HT(_4H7)JrW6+-oXDDP~iH3(Y zk_M!~#+%7@s&oMPz*c>Qf`71V)&nuk3>&X=RmUl=q%*d@e^H~v^+q?gYW6Af0+}*^i=WO0g>Ada4_w%c6Bbe7CiZaLG?13)s-PBs}t_ah)tJysjp2F}&yUON53bh5+o zR+Gi1anP^Qy$}<3xx?ICgL3ikXCLO_=4?&I7@W!eqP|H6Fvx;n+@x>vA z)6K%qCy(>|mwx_TovN)>8|-*WU&qWImNYoKv;M~X5}iX-IEG$4@I?4H_y{=B^<8>z z1uv?zUMKI;LH5>*K+XpPA5@+M_fd{hiJEeaON7oM%a-sZybqHnf`5n>9pxZ;7M(@P z_Q^zNIWYc7Il*uXogR3z)VZGC$$*2`r*}A6t;5{+f`RG}1-(InNG2+eJ#*=80g38! z+se(N5=>&nIA}&U+YeQR~hVP`nlRMTK4AZ4sFF-pC#W&zMf2Umb9Goy2@aB)9Ij-!M}w( zdwbI2LTx01A3;BhKA%obyYum~KylO`b(Y7LlDfMp|4cbfa3A^QaPI4uw#=_tvPfCb z!P@F-p0=3ssX7^iGd5nLGu{{vB$FjdHc1f7Bj>!8F;>Y4aikC8Z!_1;^jDE@1$*_) zL1NTu0Nfw$1;0X;>+3qu0}NJgWwSU>#o@}KS}^6osr)+XS7cYW)$booya$X|3NN=7 znKjSc#c2j_E$5xwLUKJUTkJ~uN2=Qm@5^|cxSU6lWo}VE6MjVdy^SsNct8F5aezc_ zAIvL279igJH;OthA9gkvbd0&&gr%Nx$D9jSXV;6K)b(kwpTSx9avhqXEygT=v-XVo zdtRH!IJ_*-`SeHA&ER6>$I0(hP8v)0NZNWg`bBz4$K$mTFTba={yV&1k^PG-ll>$7 zALVQXUm{Nic%Ff7CacJ@;Ai6beo-ZQ;yjIs^&(|aMP3}doT%HCH!5#8zrSm9j=G$s zGPe>{9U@OQC_k&tVxI*r2TMU5DOm@EF1*O1L$`b~PuV=r^aTrwwf%N)yGGv~~m4T>#dlh`IUimlkJI+mObi!Ec**fy_zxe1h$ zt$it;S>F9yD&3I=z)Z>wPLR~&8des66<%Mm81P#Lkv;ev^_K^^by|B0CuV6a53=UCP-C z;?>jPq|fYiA8OX;lk@RxAB|&M^{4N(+B=ARK7Ndzt?qQPEXY>n;p+cbn-|cz8ZVh@ zJ^pBIjHSB;bSFC*L}xzW1dWV45IVfbq7&WJN!_%Ow$i4yOCS0wed@c6!C1=*6Me&!chK3Vya@e9vK{E_&|}bt(K#MH1n+KiZ{wT@f08T<{+f#l=C#o#Ki@HGe>USxElTk524+R#?oEMF@1QTj@s>Dw5}Sd1yoSjL!a z^s;)%4w*ydk~x`M$(}RuGUs`C*_L99uNhx#!$!qcY*uW?hQ*e#X>40w{jyJuG+3US zQ*I6z<9OU%L~}=$Y!JW;!9aoU-W!^myu6iU?4iSpEIQFmozzVmX)A4NyYvx&j3#&yoPkMD zt~nzNEUEQ-&HB6Y|GA!sbtk8d_cQ*c9-k!+37cWttX!g9(mnHR<%Kj_g7Lqk*n%f2RenIE+>Ldf?s<{ZS-T2Rj-$QmP{4V7t zJW6>foJ@W}tA3pN23~oH`8FjD=d@d{IcHHcksRL2Df+|kec)d3F7OE03A)h9fHTo} z^Hgml%HPqcBLn)B35+6Jinl+AA-AbFpYBo0ZVx#Ol|3wrzJoqvl|Rln2>%rHE(4Ac z=NMz6KGCF3)s-v@nuzFzZ!+Z&I+XlwWf4=})j44K@r6Zial zxdHubYL>65<;`UyIMv>X~A<`gUN zy5UWOmmBXSc&Ty%?nSm<1@ERez6ERh5wdc+{|q7x&uY~k$-6R~$Wt~B8r)Lo51I6#~W5}PW7f+0%BoflbO!WEW(tjga zq$gU0R)f$Z=rdxuUnk9f*~GF~d+20Af2-UV&ScJkv&C4@^1qz#(W)JAu*u6NRUh(u z(HyHh@eb5quC~|Gw|M!R!CW)52UjbVv#1}%YnaPodM}clNLQNA-!4=gSV8r3KYhw_IQ-4RhskelzJ6U)9_u<8HCMjp(1YUKGHj+6wXZfIZ z5PCR%qW$A^_NWtw?S*$IyutkDl8qyq4$JV_Zp$x%ZX+K_e}q08cyIH!f#qHKQA&LX zGtiZQ=QbwjI0oniC(>WhK`Ql79srMlXTmYmoL0T>@6_o4&|N3L0#nH@Yn3~C`Ju@# z@NUFA6mKtQI1oJ_{d#q_lPyIrM5mv#(20}`K55M2mD|b=dPB&PU53I>D08O#_@aD) z%%m%AUrd(Qx{qm3nk^Y@n|AI(e+|EhP9IsUN_jTD$_voFBzl3h= zax&N-JgLsQ)B{67Z_po11Z%*f;6-p0-SfaI?Vhil16uXRvir;}(L04K0r0KPlG>Ba z%8kf7NB&)p?oiTVr^mPlok={*Yn>oS_a67yT{~7&F zfgh)rpgEf?x4L4icW9`q!Nnk%s70!>c=76i@L_OI_)xe%d=lIa^UmzqG6|HMC%{O#&yk%p_+B-=~&CbC3EG8ktlx0GGzuJ~Elq{|N}bKD#_>mRM) z-HX>@E}y4&jQaD)mKfJrfIZ5y>!<0w87u(Pz$~y5d=PxoI0a61BDjqH3T=!BFLiPf z(4eyikd+kvX*{XDWV1!|9#@`1em;5TIhAZ&TRDf6-v%s3zu%bIxiOS{zW%O(`_qe) zH;jEHJa}RqSe&#vgFJ`EI9ukuccKhnA_Ivl9{ ztok6lL&>xKoDQ!wnQS-jR2~LD3;%&JIA*Sy<;L-PyjMEwk2w$OFAjPxc_PI*qNK}z zpxZ^k-{{>$K9u|ocsm*IXLu9w7_k_h^Oo-j-QhfpS@}bbqvL zQ=9PH{J-F_+`gSrr8!da+&opp*4 zJ$d13EQW7|SHL&J7OA=f9tWq>=haF29;|*MfJY}Yln)WT$S06>;GKY%K|Q7X3ZrD9 z+LQ+=zocHafhM{ueik0q&3C z@D9g&Ib$>49_aO3>pu?7Sz(d->$E?aERGT9noC#et?(L)@s0ss!cVkrB+FIqyPzBS zAaE)u+X$TKJ_Q^Nx_~F?Edw*v8{DijmTZvU0#xi*o{$@7m$N|05U1hAc{b3!oKCV_ zhb)=QHwGPtItBkQbkm&g#Ggt(PWvbL$Lb{*A0QhAe@uBW{5+iC7)Ea*y}RKVc!!XU zL6<#iyg{xZ%)X<861f+^S5UeZz7CdNs>|SW;1l5kL5uzru+D?VBv%g0}i9Q??$w?D_HJW!jqpuTUNf zZ&r3NDvus-(Eg2W^%=wh72~bdhXY{Qi$zhcsa3}K4)qr6^K`OV$~%-R3-Y)&w3}}k z)yeodM@#^l)J?X^-J8LaktznxR#jQ}>Lidpduq=fTYfw;2KGSHnAfbgxHGhO7x{3o zk!<-S+Zx%zw)zZ}fcT<$T}ST#I_t@kb@w0eKX>x0+Q zUKW0va-8L#%5mEC-37iCZ!O+`I_qt`>{;y=a5ACESMgq+RMPN;aH35%C@1yv;CSOv z;Lr3Q06lyac@RS8g^yO@DFn*lt zQT0ZucLG_5^6!*ana78;5#Hu%5QFbW9)k}A$AUzDZ}1A)x4>IK zwuwr;w>0Z_hAHNw^%f-{vIR6&DF2bXi+MEB$+nMaXBzr<`0uB) z2=8I~=iq(Om=A)x;)(dO@Yz=5EC=Ir+LGng35E{5+-!DfCxK8>&V3s1j$!iUs*{Pu zvnRl!t?XNq;c?1C;U4fabl(V)8oM>wS;twxWgrpvb+UF*^9`~~@e*kZ@GM+4yRA-f zl@w>;N;b$IcPctt$8TyD9h6#@sfU3ja%JL0Nttmqpxw*B_SZOT=g4|D`TxshqWn)28nZ z>oJS0lk96`SLbWs5(NuUqTwM8ya=)g#{rR3_Mg#kj2?q08lR+d2e{XOyEl0!IHs*U zB9&AB&&cj0^KMX0!cRs>%4?^W^dD!~M{a*F+r@Y?3s6nM&ztrI>TJi`rGCaRi{4f6 z!xnQH9EV*94=0baZ6*H;eGXLK0j|c|hG)yER^n|$e}sGq{;TM0dC3sTGBJ3fdnjc&2ik{(1Hr)vB-Gv&ojC%Sn2@!HI_QtDSEX*uS%%ls)Zum^0+`SspBY zMg9pe0mMMkZGKph{j$1UC*w4lNwf2rIT{=D*8a6jc_Q~{IoL3IS0QYdO)1sK!+7T>?+g&Ux_Ll?TE9P=1U)XDjz! z3sq9!0=(Ny%?gx4-$#*Ipd@V)f>b{S|)`{wMLy$4ihb#oJ&` zS86NvzLzadM<0z&_RIW!ntJMRvhs<39^M`1ax(lCvZLT9m2Iu%dq6VOWBR$ZRRX4* z4~F8!DKE~)pigM5djMm!2Hpv_fFFZw2RU>+555XEfXN`vBAt}MO5KggfajN&xd+Jm zlRax9ml^ySI$ndfx>?`Dt6?ph!Tx+$%pEDKfL#-Co;=(XHUF|==&M2SF1koBy~PWXD-=sWW$u-!B|6=fC7X0AB>QxZ<3jg>$C(voRk|?+mbj?$TC$_W6CMU;(?> z<>&M+B%eX{9lY*%9HV5TzbLO$wm@ZTd){0R)=um&*qFxP?~i_)Hj;^Y<0V_JFo)6b z!|I<1+wMx_PgGu_JXf3Nx9Xcti!4slQ=f<6l_$-~8r&wuWKUV5QufO&AltzXpi(j1 zO1L}7{dIV=HbNhRnhBDU`hho+Z`0vl$rtJ<86i&d0UcgSFWzk64zLW&2gwXO@$>QKWqS8D>4B3pbiD!2G|_G?-bk;9!HLH5QkBWa^WRHX z>Z_#K@)*-qy*cP9WPhhW4ZW6AWKkOE594KV`x`hzmhEO1JkErIUp5vgw`?<)wm7Hu z|4B9$uU$J*aMeJM#JdE2FnTop0QBYPhv^T{w{osr<(Ydt-Y`7dTy-uz{BmIJ0yB8o zc9xrae|;xI^rJfz1g9K+!##^?! zjNd%UmXdj8e&$)`n|Y7dU+nNQ*({iS8o>#w*e&*p9oe%4LF^kl$KLGD{{A|+8|D^; z6`(sJ<2G%ICpdm7TcDT{#i* ziniW@cPHK((LbWM7#(MQ2z`C4{$M1M@`h0&?r8Gq(Dt9{DJOtbccEzs+=pnf_DyHgWhsD=czl$c5NwVnDU-+1^!y{ ze#Y0EY>Bq+hF7cm6594$zJ4~2K>QdpQ92pCI7vk?8cYRAwSDlHfzN?|X>_7%`hqDOT(>s(i`1R`C*21Gd#5l5Oj9;Ac0ldf2G0G>=|BIeO_ekXp=JSlUI@C!9 zOUi%6I33DLy6?b?V?2)E9}Fg&PX7_G3v_MOj(Q}_xaG?HD*n@81IPlpWt6Xk&o|3& z0~)V0x15D?j#?+Ewl?eQV;kPv@jB==>71gx!@TxuE01p_^U9XxdTiS*H>mH@e@^`b z-URg)!ZRn;4_ABjd$aOh<*9IPGI8u<+l)iKThSlD`@XrxwoA~}@ra~@FMu^*6nL4D zc7W$VFXco@_RsI?IO&upRyTsnHFyO0V5f$h3qDQfbn*-;5wXo=e~q^SFR6X5_7dr5 zqZ3(&q0dC;OwopZQ5{ZJFN8@Xy>-F61hxp(G&pH=AzW!YQL>W$;cyl$#^;pfIrKyH zUx$9Gsb72ssZOBNP5J-GE+reUoM^n)Se~WRq;rdT#W8+_KMN#d^dU>;`5O3xx*WA) z*y=!S{1@++Akm*}WdX}ALGrRkpuPj&;miOm+kW5_4Kop2mGnbX!@ar*M_ z5^dJTa=dqvmy_i|3Of}(2;vpvz+f;8Oa+OOO(5wg=|3qr>GuLgNTjdnR5plj8PGZ8 z8PwBw-SOhhtCWAGyvqO+=_8dzR>d=`;b@bqE~b}5Cnw87lwYo_hS$-%nk|#XEyl;`Ue@(+QS~%yF@H`)l{jbr0bKyS9 zGvQ^*C&NEgewO~kHtVXbS$NOjy$>(8{Y<_F4kmmVGv4wp5C_PjPXY76y&#MK8<6dy z2@)k1xeVf?opoBXXO^wuRt+Brw&`$-I+@r}$_7yFukL*Ga&?}ie+_y>XZ;8ikM2+Z zPCBBzoMxr*L_>Mf>;~^r&OP@drAso*1iZl_b`+Z7%4gf0J)*l<+ZI0A zC3oxc(l51VGCJa|E{Muh0f9N zbL!3kjY;*peSbPj!C10~@$bj)qHL~JSG;VES=6i1Zz2C;lMJ23{vkRGSDEWsZS`mB zr>e0QXay3vBSmW-SMkYI_`mpw|o{P zE&LC7J$NhlIQWi^_M>+^m`-<%%JIA`^x95F*ZAY~&LmHo`7>Vst>tWyt)jerGe<)@ zD;9cWy`Z=@Q0PZ%< zo9JB!Ukl#=-wtjgvk+yUKLq_1^#+2?lj?W-VRY{T!^qx>-<>@H^|qV#R>D@FP$9=>Rur zWL(SQcGgA`apfaN-4!{j{=J_Rx{*2zjp$5~50l%cY z-FO(Nu}oWWuutLTuqQgp;cg24UF4UNjR47zFVKn8Bq%n5hd{F4^B@ay0=Nip__EE! z32jy7b@ScEALn0)5*OJ|gPWpD0Y+OlaoiR_ui^Kd5 z?>M}7sndiPE5~{6Q~XB5s$CFCd$R{}cR%2czHMnM8FEUiP?N=*!S^$$v(+ z06p3u4#6LRevyaY)K-5ojxl%9v#3>1vN*yaaJCJpzL9LOMBOFu4)sQnC3>fjEkb{v z9?vgPB!bG5X`fa-;Y8$cM)?!@)pTRj?RYutB|7(kICvbL16Sige>(rAlWj8DW-Is_ zkoEHUH4d3`Mc(imE7Z-R><{kgWDD(XqIW8J+Kl5pqyNvTH><7wF!rMIZsp}qb@6Y9)d>GsZ3;-vAHZWg@s|@~PkVyQx$~{0I4gFf@7Qb;h{%*X6 z$vlmJtvdbj)+;AEm!dyRp2%54|NZD6qH|~&P3IiEZ{qy{ZwOwz`CNFK@`dm++SSc_sN=@>kKr&~c`x(H6BFmN#xKUlPk(LW3+BCYkXBINSCh_{Z?y z)EPv+%$%~=UFaN77AM|otXV@2lxP3yOdo^F$##x`oR8UrC&H8A8Sp~Dz$KCxzv|Me zuRBXLG*`p>k^_JVi9q9ifzgL~5WW2Ma(i`yypcBytpg&H2 z0lb$%Z-FkI}!OV`p<)8pcpWzdLl@4XAGx+0U*xUNiW$W&Og3c zZ&f0`oEJutC#t7v_qWC$+r+{9<2_FI2DVNcTR6lxvVmw$+&B;YXF9fz#$vop+CB%5 zLlpnWSpdID+}<(pkJYP1$rs^OXza4U4(JDf#ifA z@0|%>4KD}rKpXoRd^BObk5U!1o!{t#}!j=!lb4*P}l`Zh^~b z_(Am7>CMC6MkkB%N4zJR#>K{PZOUpYz zB4ihXiRyB8Nf!Aa+4<_WlRcumocuX$Os11XI2J#ty$^_kFC}Y%f2-G*&QM^{%OTR1 zRf)Lr^RjG79|c3ePGecoEL&AINqb4@iOjc5&cu;aAAJz(jDIBv+(z1~X?nGobnZIB(hiHjRHTx zpB|b2oKMP^v!BD==-5^o$AaTP#?Tx5i|i?|7VOmb!|d|jW_`aFOx3meJCxo$a%nv& zzZ?V)NPYSVmOIejAfJWKqQ8nBuZ@N1WX5JS(S2~HtA!w0XS>*ETm|W%h;@jTJ4^}64mS66c zn}*a`{z&q}+Bku}MJQX}Kk(lG;^2EM&>P9W3UXjPkd8$!AA>|`l@$ClvQL5;U_AX^ z&GMw4`*r!|ei@zU4JPj(lVx%cEZHvGTlcm)y+1O5*e z6UF24&V)Z@Ovk`k(7~`QR5jt=%6Gwin$B>o`fwZvOrXmqjgO;qCfb2+=4;>zg?L03 z|9ZdyiZi^Jski`i@We!-D68U;=aPL3KmR?a(PWP}#6AZ30ligplFAZU zSD=&XZ^2KW_oAh*>O}hE$TP@x_0sMz6H2s>q;nO#7T=hX4ayz%&-6Ev#RAgWjmM;hHLL3;~YYs#YiSvi9a6CVwD@v7Uf}0Jo1ytv+W## z&K4-$H_}gc^lEhyP}wTa#mfRF$X+n7Zt!oF`@ox(&w~5Fcefl;wJlRs1Ms@w&Bl8P zZzBB}_^Go^kd#9ck0{TQw;Np2;VQ~EfJ?w=&;vZK;!v>8gyicYm&zqmdPt@ev zmh5pD{mO*)DktUtAGydXd(TevdUO_ZPG_CIjzTZT>wpJ~jClHU>R%1J$Ck|0um>(C zpQY~@^gyyVsQ)^68J+`ENui9KC@K-O4b71nBk5mC@5{>fYF9*;ZRtY1KjFn#oADn~ zFGfF;Jr;m0UWYke40E8euiLJw)SCz22A0ql1i5*X?O=$uw@<1wWERop~UN0eoS9KOr8W+|%U(Id#D`*NfCE1eIhV=QH>oTaXyDIc}IPIiQ{;EPk0_x-8x zCi95%CddwfPr_S=cfN5PfQ~b?;U9;tj5CL(%3>!IRB?pc!Hr-pXa~np{)f&!1fJ1Q z7X$jb#!qgm@2bPd*O9%bv4b?a2EPm5Hh2Gc=ym9%vW@B`>XYg}hmL~{L?dWkyXj4}@FK8$2TvB6if>Fwl`&|Q$xk;K>AUQ0&uD8QUX1)C{$2P#Lvy6+82U0( zc}N;8x}GMVigyKG#>iOZ1fOkXAK7qqEmE}{+(JITtv(n}hi53yg=NZeLz&mAgP^-Q z*$#HH(ID;ZYL-PTTiyX=44?BsoTxfS`5xuB(YsuGwzU#KW6+{D>AsPEo~84D>Ld`e zRdU7zP5G$xuyJyjMuIO+b%*jCIETeJj37%Utj@&iz~j{AoD^p`&6rbX-z4teZl<(_K*P`)mEq8Nn~Hc&wl$u9VS)BAqL@Xp_jvmtCr2C z{z{mMc16eV-@t!Do#}WvJ!f)B*BRIs$&QAfP#yxmPg$fCbLuYpxJ7LY!?PIWAoi&GG5S?>uWu{Ax+&jAzDNE(Fb@m? z-Cl#x;YCI#y46^qZrZ39u(NJEedwz=(t%_-`5Q|ald+ZG8VH&)W@9gN$Xqffb1QQ+ z*YbTNjujiQMX?Fn6dSQsu^HPH8^)HgX>7~J#nxT*$@b-K#9EZ=Z`Q^d)vrv6_IM2_ zi=XHiqntthTEmI(q{!|nd<_h5tKY##kv~MXYEt=VkyKpPQ=g*Cg9u;3vV^?~+F2-Lv8G7I9Ilekwi47-gY6)1TD&l+Sco>S*8^pAZG&VEqR;WYR>a2627 z^eMiN;K!Mb<6#EuRd1Lk!H*5jnN_47LdgrL12NZL2xgSllmr*#oWe#Xj_?>Sy;_|Q($8V8ANl*$n+#_GFM~%ZCmIrMgJB2E#+T_& zZ_}^H<+$bBg*~zCv%APAlB-h=MVlG=$7D8L$;kP|2?Y@^R0&9 zark^Ft769&&?CuakR?JV<1fLtxaImc4sQ=zt-{-Dj2FS2rkwWgp)*B!i1Jdno!&*Q z`k?z0vJ3I%8dIETC^~1K^q*`oMxR^MOCXh$&10&g6ncaIs=O1t8}tU^mjNz-ROdw7)h5kqAT|w_~WheUFeapucDXi?hS%7|Ymf^242%cKf;g|3j zHHWz3FiVuZM8#yhm++>8oEIv(KL<#NuSYAQh%InD_PcH7d!Pg-!bSoh&8FEqnFXiE#xx#*=I`HjbZk~ zc!A&xU>SH+cZS}S24fwXE@?l9q=+DLZjVvKX(1n0GI0xJ$ORNtdu&Q{(>7L$!Y_rN;`9S2GO zg08y2}S70d=#f-Arb&;%LZL0~)G4zQ7(W;g3YVUsOx(&rK63&}!CBo3C$KnaV}bq$ z!*Mp}f+}n9|18}NxRzCwH}FS9L`6hIL_|bXL{vmYMTBz@5fM>Q5fKsb3lR|!5s|#Q z?#jv`y2dXI0wnro`ZV52u|1E>G>Mi$6y2Tjz3_=0pitt!FG|6hMg#z(FUDH8M_`l zS_bksnMJJ#%pTf7Z!Ddp&;jU|(HY!g_;2XOfcL3)DxJUJeG)H5mOksC!<%b>>**|` zlb5Q6EPPRIcuE{qXwhZ&A zKAxbLY?f4LZuP*!(VBhe>{Ks@Q5mhisBKgJ67(WJl6;EtR*;1}3VglG7ddU7PG=AN zY>Q{%e-!^k<2y*5Md(EOF!LEto-EOD+N0pvQkJnp_WAG8`LcGV;;mD6IbO?HFI3JY zJ6AacJx95U&6ahuIsIe0ZKrrE$=-ms2JcyT9OmutPr^B;162ELmo=}CHm_+k-uVnj zT3V3OWH#zNjl2e=)x6%-{{J!ZIEO=2oxUead_IP1kc{>m_!VHdW&r*e z<)zAdz>MztT3Fxo?`5-P9qn%wi^<}2@93(7UYw>$CP}2v)z$u<+nZiRnL-Os@}cik}VhhJ^H zebK%3B_rs_{{+4ZJ`4U0i~!pisBcI62MK))KAw4#MiVh>$m1NpCtpA|5^pNr`wij} zdP$+l5dF!{h411F2jZU$pQK(Q^^5eA6^_S~KC{2pHnChe%)-YZUZH!w@?mm&S*7_& zUG3Mue^+;hHm>Zf({r6&ZiU-I>V^k91Z(AsWB;XQ^I1FXV#@|OzR`}{(( zIIt{`-v^Wv{FQEQAbX%=xTBOE%4@;W?)II#S9iT9NEhw%(oi}axo%Z+w7*b&PE)^| z_;>U>&F2d8z17=hu9M*Vz{lV(q8Ge@@fp@cVlE8^mJH6q<<*BELuZingZG zdl%X9%KxH&qVhiUbmdbfx}uv`(?7xlIaTX)vW0kC@gAU`^F$(*<2Dw)4t?{`ZzId% z&Q>SsJ6pxu=^TU?hfA~_0e(QX3T!3cVG)zcIa*yCS14})GbuS04F$Ett5 zIbEtv3s4`-df@+WM?3Y7z?-J-{dj_?(*C37)I+^FWHZSAL{}!Mzjm_KwtB!H#JgO% z+a7-lUT=B{oDSnp*%N)Ma*(ma0XAs=Uu37?EztgXc-bWY4{hD4;;8QSZ_@HDy^G9VR1yA&dZRkp3pbh0RP@v6 zEZhg-o8dRXPk|rY+0GD`s-HB~7}PAh>&V6{-)X>SDQBY--NTF}i@lP*C~h5zmj#OP zeyZK&^cTSY3V#mY80*mYZ|Fq~B z=#2*B!6@)r`UK-9*1;}6ZfUgHoCa>!#uRP7LhooWp+ok>TS0aReqTHR(PTaY(OWsu zfn?{y`x|5S?GAW@KN0?G`k&KA7IBmQR^vUyPV<#n_-mBw&~H$3+SNv^M4zcD_HGo42NB6K&pWz5;);+!{h zwtwWg5&v=XY~gh2@Kara#Jtqa^)Fjx9ZYW^zY%W%r-%dhBfC_Y z0G+4IVfrreebvoeU!=c@&edeS@MO8l(2Y3?oVp3Dr1JqfmynI3H#2`3)M#)z*sZ}~ zI%`pSFL*^GCsSGm;z2nu^a1n94#m@X?O_>6((mnfuad{8W8gU#BvXur9}FK#C#mdh z2EZ`&xFf?<rP4)g%Jp<@y2%DhhGo=L`W^AA7fEYGa zDhs?uwz9kZ3#FzKAlNe{b3W?MxPXencj#YU(ok!`cAv@M27UBH~FHZAUb$EK~ zC+G~kgZxnR0+XBo7q#^x(z`n=EtjDzOuo;T_byO>2D$@1RrxmbG0I;l6K&e7&%&4C zeFrZQo3=KxRS2Fn&S#&};QPZUqV`#GNI$UVFD&93&%U?y1{=t^>9 zt@j2_&^iDlf@9bt!D(P7SZ+R7s}tu*P-LN}vD>GN{dn>_@cV<2`0wm!|9C|9sBa62 z^epu2WO4Rs+Uh|z9iJ1HGwq3YG~PwzaoqfOE7@jqi}S5Fre! ztsqI(djxLnYAX@s4c&T=Xw>_;{eG~UUR%TT|;`vKi!@to+JiOL+r z#wq_3Jy5wvXPr6f`O>~td)+QNZ&vqq^6Yy#)Xj(YqPxTR_BYWb@I=yr3H7gY)LwfT z-fMW1z?0_tiLOeGwJmUPd|&0gP6 zdz`PX$Sd%7;Ge7Hc=bm*CzCx&CqeQ&-dnZ11pX{MnPDp2yy|B4W&K=foHAa!QVbW5 zI-2tPz{@(1^3?%~hjh17SZ_LCBNI*a;o(UQ$7yoFm`CTs=nVWS^xxqpz!O>DgMYNc z1nF!xNQSDv_jCAa2I2iT*-1(VvD#<1qI>H%QTQL~roCnQIUTPje0oHg zA~grNf1zVAkyO84+Jruf{Mt?rUU;k3>1_<}(Z(M5r-C?8qAFvx&@E2TIsqi2W7rOG zDG-Ux&Gbcd)33W76j|sI+Wf7ti|E#D{Fn7P6aOjvIqDpR_Zm9qoGkQHJ>B~g* z{e%-%))+>AZ}^AF&sXlW&`Xt@%q`A041J?=6!{s-INp!UrL(gFw1VXCcr)>=UCwcp z8R#~r(iw~XNLTwxIw4;J2P5J+Yjx0{FbF`8MKKULDkE48seouW5FyXt<{lP_e{pcs_bkJL6j1%yCgU^!9 z1dkd|qn*c$wMDNlNEtf($fFm1^{T#hs=c(E_S294(r^0DIBGl@SH_odX1p19#-Dj) zKABhMmwB3R%{%jt9iG;I?7}{IJE&h}#cr`*>==8-uCZ_I%-&`9*gxxFJ!)O7PpwlN z%evM2S;zLNeyahj*We7o$3YA;5!`Je6S~_c{a!kmYj6kSCBpjQ@6cfv{X|z^v};B) zh-@-^Cz%LtPKQgy$r|-NJsG4EZ{oVV&)Bu>8#~9|$(*sjb*S~ox@3K|Cl&HB|k)>Wpr z3HH)ZPSxLSPq4`Zv(JtO+YD^IO7A2;+Mt)JoUAYh?fiF&O(zlgJNk*(KcMZ$t&{NL^;yVI;vH%1*MlqZj{$!m%c*%P*rxq#Ba`S>wo!%- zKl12BU%k{%J87@lP5bF5{iWaZpK)Y78CS-)SvwhT#+~tJ9+^+(Rr8}`zBO<2FFV8@ zu}d5wc8a}XH})$##-6cj>>E3eG`HA&5&f*gvGA;m^{I8TUUd!M1HIJ8ph^#eC=4M; z`v1KF9H-Lt;Brd)YvdjsWRNeB&F*afz;F%Tbo!^zn?z?i`YH4q;GcrWSnZ;$?)mdRU`abmK%3+(^&zw)Fza4KDULqsjd=5NOxeI?8 z{G0GsO!_dgo6x(_nfN1J_1v7#&)L@M&$UOBjoac1MfP>|lPxS{ZX`{jW*RsT$W+Z3 zFj$-ar282#9%NCLceMX7G~>95yg!&jHWvSo&h~-#kLc|dtPh=Q$R9v&AYYEoqJ0E@ z8~zmd0CjR6T8tM5iWA;QufOqKq8v$QuJR${UQPZgJDjP^f_{N)4%zeOo3W08C#cij zdGJf=d_p@{nTrfmXT5({C)um+g8$}^bN{M z#&vFYd(mS2>+up9@#YvMQTZKp?xwR7-fU^#0z^#Hi~JS!-%37&ehfVkFOIPYOtOe$ zyQFTg8yrM_EQq6y2QhBuH5~K-KckZcY=K1D10D5+ZLv2S7 zVziy)SKv*-`x#yjFr=&fu8?TI4BSn|K+PG-Bb5g#_fhVxjME;fJW-h_x*3S{=8W$4 zq1g4)pxaN#qN-U1jv!;$oR#Vpkwt$$dR0fg#5MiU%h={Lx(CA(#fj?A(Rp5-INmPn zaSz^;=9I$zD_m7~9rjtp04ouARW2EJT--S8E3cfs#tlLP55 zCCe>gjeb6ok3oYF{|25j$V~VmV8QC|?Y`F4KFGY2>?niILdMfqY3v7hOYlOA)N-70 z@C^o-6qx;c41NaxP3=6Rk4$i1^>RpR(ThmsODUYvgk?m(2+5YI&h z@SE^F@wzJ3eY+xBLnmu=6nO?X0zM4>G=4nX{*%K~b39&*d4tlT*5N3Qa2K6T7CG5u z0(qRrVW>V&J9AVTjkgbjkE1_^d=z}W_Wxm$*;6y&kz3kd#BL!!7H=(HwuLWuwbSKN zZE)~%^dFKX1N8^vw39>M8oG~xb)a`(VmouZk&ZJ)!vQNR-KG80z;j*go6r(+!IPJ_ zI-fkRu2f%_5Gf zi4MlBJ#M2mk_i&sDL0_6P_86T)a==5fxEn{Df{9L#5)O|?P$31B@%lX_fP3$K{DZn zY=^$CCO?flM%~I;KSE~+-Zk{D#^>ny)=`gBGnCu)-2%x3J3yR%tG1rRi$gvHb^_Z( zZ5g(nW`wqKkejomw$COGw*;>RX5#&r{?g9&Q|~l3$sV69luR=aKTgcS>Ut~F)jzS< zfwxPatCS1qB@^u0Qjb`b!jr)^lTRgoQv1I)uL*b?oC`QqWtl|%4EX-|!_*xNk0U)w ze}sM#*c_?0jv;vU2b3>#RNBr@jj}IRdfS8Id=<9oFwu3fMyB9>5^slrXA%q0o6z&g zMOLNX4DcNIo@8_J6WxmpY5@Jdcrj*0fdGJa2Tj|_PmI<%Z)>rhEXqbZj2Kh|9`{< zGGsFfEz>kdceW3gaj+}kpQZC_ZNw?Yu!H&3R&YDnvMoS4j8iVfA4D##x4uvR8|qy^ zHYn}mv2jIx9BBxAt-17p$C187|2YnEKzIB8e=y$cd<_(l`Fr{LLYFA#0NG>fWIR#_ zCy?)rx0vi`{EP6U&L)d|61q3~MRd~cd*M$1S&-W6`lxd(T$-&k&pYeI>wmi1d-SvD zgF4%bcARnrdY*EDfoBo7YU}^eorBj$8~YhNC(Vr{TTyN*^>FeEBZ=^ODES@P0tWdn zZH>m`fXyg+afZR*KDuuq`+@rVlOLzeiOLI<9HgA&e5JjzZZ7-4bB0+02C18jkOS#y zot%Ttk>qR0Ueu>7*Q^Bl;!UD!o2=~CMZQ#>WS^Jd%i(vx*TNmh+Sx$)2D}&5%c9<6 ze4MI&q1B!^_D8OT7|iP5(+i8S*)OUQT{C z-nZ~7A}wHjp}W}Nml4Jjzen+TjX6lw>)$FBl7RkTew(D#kD|vZ$D=t~u31TGW$6DVy9sYi^sd9n2T!}ZCEY3c!tNmO4Ug%_k#@yndU)07=@Xo^sN z@#LrCx9DWSZzr?GSBA80)%89H!I#M^y;;DVMw@u(b=~a&J)vUuvbB_?tR{`@P4+mR z)LB=q{%HG8Jg?GjjFc;$>j3a}ipxwmSBvvio`&}syd65zSY10FMQ00{L%s+3KzIiI0{(w!_ZGZNWHjEd z@SY>jmf+f15xxYS$a_C}i1HQmm+7BFU%G8B#(Ng;A-p)ohu~6sa~u9n_;yB-f}1#% zQ+J()|3#h&pNaQ1ybb0sv#b67a1uUQvP}J)?O0_$AOPx#_qX)_(oqMbS{PAO2dI10 zyAT`#9@o|;{m!Dhw|WccFlhY)jxtZ3T{7?O^m@}t8z-U{na?5g<7D~oEcoB(}d2l>UEAmTa_xd=~k6c)!Hk7YxMvmNrCsIe45YTgmC*2q1&i zEv2V&A8;@j2_}Q*wvpPOlzTMs?ROohtJT!<&aruuP^C!)GhX ze;}KLKB2oC%Va?eXvQZdWIBm_|O1d~fuXc?xFG zx?Uyv&%vZze^?MB?m?CaI39lq{&Ku5Oj6!x^mg=0_{ZQI;h9_v`8xbG_~RybbEhrB z07fZAVXL?DuV`)8uU|9C4d`jgdpW~(-R(otpYRfa(@c0c-e~wt?d@-3bKtg()^&7F zC%XXs1bV@ib_TeB&XvX;XZd&hT`Su<;wHLNRa+8&4}Gt^qwNqq)pj4)QE z=Lvd%r1JyP05}}~6ub=je3Lm2z0<^hhrS8EhU}~Gh44vTbtkWfk^y*kb+$i}oT=PI zHc)Lb&BWX8|X$y_t%%$*I&7Hm?sVWYAYo7H({C_1)` zO-GpX{_xm3<7WG;L9K-~seRrW)iz_zYVERy*0R>r+SVFpt?Q&dm*7SU8m>R`Si7bD z*F^s*f!-8u=^HRy%N;Jq|D1b-0xB7i3olVVQXf0;?}RgYuBpwTWLfOp=w%iu3zq1W z(JJl#Km7jSA>(}q*-zC!ko-h28DuZK;{PCcc#+YGZq-TMw4trEnYPnM^_4!;cbp<) zF{W~ejL}$Y%*hU!L*|k>nOh>Y=9)QY?rc!DV3V>98#+GbawvCNr>)1TD zpAXMkWKFU*S);5~*38<~8m_{N-QS9rHTJQneZssMGe$Us!Xuaqc;zDoc!Gi7jMoCI zRLGzg;`Iqn-GkuLWnF{*m+XA_dYwsG%|7sZb##Mrq`I>^+o|YO<%jffqH?XtO;+|t zuTVZWvHd%@c<~4Dmf|gd|DIkV>^iupOUf>z&(y9oU5nj|e3$wbxy}Q3&>4sKqB=9c z26IXp-3s<3I|7Ua7QF7&8GG>XB8yIRQzv!PM%vP5qwVxj&Y{mdtCmw3OI@8gM2*o{ zGv*q*In-P-r_3#LJcEAboVl|>*@8{VHf+?yR!h*aU2GUz-m5*ft!*K;&bZk=YfxL4 zHL10+Mp>)c60&yIFl(7L&Dyrt*w?_Mo#rac1>Nm~RUDv^)*h!cp6m+z@8OLz(Y@&{ zMQ=loB|n#Z0D28s2U#!pEc~RZ>kQ}+<-T|u4Z2f#3R%3gCwjJWDter9v+|$xM|2v4 z@>aa};r+O)eKqQU?}R7PKLTGy=Nyw6i(Z0`_aCLs?Zy)WtiW4m(ofJEf}c4se4WS> zIsYVo8hjkA2k!+Bfkex59ql)DW69yJz962bugv3JUF}o{*_-wC1@%N+ zlT^C_{daU0Y>hhI@FnmYx@v!KPJ^#!v+FwRhEq|wi=Jy}(~s;K<2XQ>8_+NDkEXXk z-CLA#xZ}vOJ&z=t2hVM1I{C%$%s+1dJ&pMe_@BwPqrGNUu+GH$6W-CF)dgb2#Rh(f z3j2504=Cy%efqA!Od~rVk0I-W$v}G7pg)dYN`4u67QLmh80!!CZ-*!PGPo@0-;~*- zPR6rXHHa+eG<1W`WPXJH8NJi!KgD?I<8iz#UG1yUDtIQalKji?)1yo09CQ{h-XBN2 z8w|&b^E9IN{q*{pSNggKn0!S}A3DFGvkm0du?c)0$Z+*lbO62BWgg)0O`P=Au5#+U zQf4b?O(44(|9ANPjQNLnH{oUBHtBmmc$_@W`8?Tt_^9aO9}Dk=$6@OSGl|OYko8pd zAo~Nmh}e2(_?o$$fS-FMZkNj->BjM|e@wc&8cl#i@5&a4B z3FPxT+kre^J8O(PX(vBss2jlRlxBk6D*T?p6=dTz5pn{hnqlB zZ~bw{t8_+~%q3)5yk||M7kV)mgBRx+X%4Hpq(@*5b=o)i9H{ExyC?it^b&2~0zUvr z%lnWIC*xeXVwJ;>>TbX8#i@JHdC`2PlU;PC4-JF7-`S;ZJx7AxjCTR0DwSESFBKfW8@Ydi>+Uy$GX+U>_iG(k!G!RVDNnc7y zA%pRU;$>kkr8gAa=*(fG()bLrcx)#4B>qVJec<Dq1o8l&2VhQc=iB15nfNFPvT`ux{EwnWH$a(xIXHGP`rAEIvwawlJ{niuh2P_PNL;> z@F)DYf!yhnnrEr=Fn9_)4_*Q{Q<*)IE;B8bVig1jKee+DC1N&D)ZlbdT*!SM|l*U2ye}Wf4`&sn?9agC*2|HNXIp)O!7V2 zisPC??de-B+DGXegJ(|76m#2~>_6%53zC`#lfMc47w86G2VVuB0q+IV!K3=WcVgQ> zKR2%9v?Cj|;(Wg+?+KQ5m>d4Bc-iKLX**|&73inY6X51qXNT9=V5a&z@E_LR^>iNR z_!IHA;`N}nKVF>t2xS+Y0ZM^YPI>~p(e&bMGsq6;<|ueOd<7f}&sw$MgW*}+d(}&z zbS~$`q zk_!9bT}JQk^h8Szk#$erW?_D$-YsMU=?x^mk6hbzMi`FwF}wxzrqX+sOlHaA)hT#6 zx$!n}#`Ba@l?j5m%G1-c-mnlc% z^~XC2-e_x-@y0>c7)uZQo8ezm-*(gDL^%jH````6o89$)-wEhliFat8f@6?#F#gz8 zC-6F%n?!RLI0!${_<5DDp_k~-!$+JU1AdXLAN(|UCeNUC4)~Tqo`u(2y`;N5=`JB# z&oORQF5s<+oMGfKrYOsSuXR~;EL;{-bmi*Pj3$q_KZ(EF1XjTl8Hu>xqT{@$;BCa4 zgqI931W#7UojYGSTmK^a6j%s)fkgLq<6QuDgB+UrndUw^m;XvRAabNO>Rq zo0Kv}MQWT*-%V_s^Nhu;pW??UI^hq|I}jd+N=AHA+c(hfkKRi5Id!IyC*%Hzd?Q{Q zb1ypQ0cREsL$U}WrB2|DPLJqpKRQsXz2ygZ7OvR?z04p-z)yuQ*wQ}KSg`D|&E=i# zU$?xhvlHjrlTi3sUKG9Ns(V?2mUby`}i$!T#Xe>N9v9zFwslW2^<6Ku`P`U_E#a z97O+Yu+lt}Iri-4JYBLZ-E0ZT9#il>fwvP+Kr|e#ZbysBFCpIty@PBT{GareYxfO! zGvGt$_kt%icPPiIbEPs1pOUjQ6O?h*}4;8iTcXoN&6q@YTrDL zBum6UNbgMYMEhUSeZg2dxw(YDLVHPzm73!%!?v_f=A%{MNu_9Ssk>wr?j<_A4DvL1 z7B1P~MED^1z8&ho*Xwjo6C8?n4_+eZaSm{sa+tbHl~1E*D&I*iQtHh|(LPw6WQaWVP@^6hwY=p-GVjeiea3(#bnamOx$uU4K8 zVvHUjk>3H{0zM1=!l(?`q|F#;9C*2_{grMId7SlX^3(9&gFl+SfM{ht??T^Cz5x9f z_$ad3@SnjSfG?rbzpH%}mCdq6a*iHz0oEKrO$122&&`pU!K3V(lB`xmiCksXa*NAGlU3sSFP!|{gV{es>p z_({uGkc|S;dhN*%(pd&#j0qr-zY1&s&wv zQ5R50Ks0f<>(HO1lg#rR{06cc;a`H=&+D+eNjupVWV1T`AF19tbrSJe_>^&$Bb0I4 zZ_~3L^{_P;Z!?}?twZTOaNAI&@-Fyfx+1%70&ho8A{$~3GFffgZ^CQz{~3DWUy-kY zF;b%WG0gnO0h0b|Z~83WD;9022Bg~h79T?`L1zLQY;K1?4Br9IqK>4`c=5(M(L1mu zBh)`f*HXIYHiMLLxC@o``8r%~>}bE!C%uZ~oImP%mvsGSb#BG~8l4{M9o{V^qyK$^ zFtf96B~4E{!^oC)$eMW9qQ8rN(s&Q=Y(L7}fc~m_caX(Fa~{gV?by=3P4s|2qW*=- zN7c)=Fo|q&XM4L{q1<8XOQ0-PH*?(=ujy(p^g?z2rrl(yVesAf$p9aR&xXeVCZpG* z`_S7DE%Vf4Qa4`C4O8)dPIm-Z_O6QNcVlMKKkR6yzwAxx@y4no1y!n@i{3)MS_e9DWz8|Y(|tI<~}n+a`aW3;*wC7Kh-dv&)R zBR8-*@?6VUeT_MW>IFDx>t1agMt>>j#FNJBIXDNsqt*RS@DiQ<$wge7CH2Z}cei3uxJ+ z4qPw8XTayEH;zu6%tAD=Zy&M*;4tI7n=ISyO7vqKW2W+c@&k-70b|i>&*qeQT&t`% z7oI>&gl~fnflK*y<@_xAQGNbBy4n)d^&;6DKaTNbFbKc)uHKM%?#_t}Nsl2LC+WEN(K$0!C_?>oObiPA2MteD&*#_$% z_&&Uu9qoVla||7kp6#d}$;RqW_N%uF-&dNc>cq*OS3kN_>CIQ(XPmbyr&;)$l>Nvj zD?dqYt`#s@wCve&%G{Weh2IHJAg;jw75pi|A8V)MM1{@?K?gE+=V zjBOuVK;5N$c^BUU*O9Eij2b=&hpl2>3YoeLAzCwdhHKbJfY?%4<3p zPQFsTS;}oDcZ>2~I*E!*Zi+Jde=nu>>SVec{vNWQY9nn;fxpnzeng7FFNKe%lL&to zdL+F8XeZ-(AIKpnk@OCFJ@G79IVxwan?RgzZ?K!*4)8PZGU$Of5F}e&24tFSfAzO} zpX_Syy$g-C5B|dFb=Ti0=J)w^n&)(N-Rhu|C>x4y8OL$-Wt*hjGXB%r+D7Lbyrlj+ z=)P(pvgOS+<|)bq(iO@z_}M~Epg+=BI8m}(Yn3wl_zw6r@a6C>b)%c@aM_l2cFg*< zfJ{=qr?frR^?4LtGHq|LSs&}V=$)(bA0Y$4Yyv4SZ`5_LTTkixc(>ubMsDEs%Nz~X zJ^TdxL*Pk)H^bj)Ffr6Yc)tV`_Iq54IczQ!MH9Y%YOH~I(wlPX=^NA7hWQ14!vCvg#rgW0`;E#;-brpC=XmuLpDi>2njm=??<@3f z#d`q$Vf+ME=9NdLWXDyYFS;N38_8vbT%Vh9c*(TM0{yJ*()@8~qUsq+BDy|_GN#jE z{Xs_Vz0IL2%|@@G^N5OZhNRPXo5X7Peei$4Po?ub{dnIVHA$7?;#a|F!pLJQ-KUw>moH zoTO58=8^eiUYTF!nfYek=3jPTkFpEk9IJI0=|>p!%`&Sh_QFZ*X5vL0C% z>r?Awz3LBXvVLR9A4)yz`V1ZGoO4s1%YKWWOtQ}ZX;d?e@&gpss4OKm*HAhZZvx(j zDP5tVq}ts1hrr`7JU8#)IZ)NR!1eI^4RBv|K2?{%ms?(OI{G z+J8@=BeELVDXF_&?KDO5cl+0>AE$q5XM52Yze$uxbIrB%7^M!093$t9Iw<~cMkc$3ZeOx9z?EQyddujvX)K3esJznRW0%BMKU*`4hx zchdSF)X#SG4`t3L-!g7nReh3=V?S#?X)8`YpN_HCHT^%}X)l3f`>ZSQbUN=xkJN_s ztGoZfc#HA2(fOu2)-Df!asE13+6FDUhQ<+&M`TbUqP}3QRp}>qEAW0#zRO_FgeS75 z!6(8qIUQurX^qiw79!7#KTz)&y#FAx2=(oGwDODS-pT_z>(wlW%X%eD^z?%dQ1>!; zjM7Vc$u=k8_e6hM-~m_!IhZHp;E0ver>}_v4Mk`-D0})V~UF{tv*j%7;CYKHt8hJVrK;QL55Qym+5<&iy*I=t>$R7tj6pi+d`!Jdv~e=}UUZ^yZ?ue2C+MWmi$Es( z7P4fF!DJJ_6+pz4qsFjr=xkpjIYvdlY*h=Gv(0pn_k({oX5*-<=rsL2hu=@zU+$>P z)x@DY@cxHhGRq$5?Gx+OuC~D!+2}I-Z`0XK=OXg8Zc)iTH{hM5{H!q^rre4?TKQh| zH06`*5XYY1(LPAV>7Uj2OuSd{PN$#t4#eN;;I}{gCiwTrX43mRd9v0ic%Q_}7Wy7M zYgad%IR6xL8=S9!G2&RlnH25uoEJ{@}vycFJGb)qYF(DV>YSlPPjg>rH<=zk;6!u}OL8h$1G2XJSoCJV8{ zoX6t*2=7I5QJr^++LPamJ{_IRlAvkPd!noTlWsv+=c65T)~b6q`N!cOAio(NXV}0- z$pG2fzK))Q{v-K3@=m;G@Zy-`y4v3)j>9KwY>5@bbp?DyrMDWuC>5@u@C@Y*Dh;A^ zIr{Br9oGr>N%*61#;&Kw{ng2YCgCkp<{&f+ZyvpD6L0Ej?|T`*b?6)>=hCw{*>meu z%4-w(&7S0g=!>{|oOu z%fLXe$$aJj2dg^p?p994Uk|d?4OH)3ZQcVqwey#*_CdHW**}bxf$LoJPW;JuC(=u1 zSc%?9z66~GUIb5|d>+oR%9*n$=iqHNP77RTr^m^TSKszfhwfyS-reo%+xyj>Lw}4h zo<-+hWDC_zrrid=hg>SJHygL0dZS7IFOhk0s*go7LoejNwb#7#u!`GtE_} zlpDfFD4p5aeu9*m@^!CHyXR4yh1PK$rg&fdIw-~-0#DZH4`1D3ft5K3UEirwon@Pt zMko880mSR-FnK|D`{T$KL*aZW-i`6cxUP3O!NfwSGDm5^3Cw~z*oW_f^)1ma~7pO5q}8p0J5HV-z6KO z+)V#aWir;E$qy%A)z!YCJUy{}yGW3oKsJxwujoxCp8-!6>}Ni&p>1t-kY0uU96C-c z7%G#_Q|G=d?M&VWKeAiQb5XW{pJ;d)VNz_oG->YLc#AsPKNuZ><{-5nPK7@Q*Kv96 zHUnIsj=ifDgZCrGXW%Ty(rx)@X5*+E%h)S9iA4YxempJY(0Sl8WtttCKtgz6E@o?CAPW815%YLCvg^IlEX3k)M$q5b3Vvj|^BzhdqqI@t_87A;M;A8+7)q^r+* zQjUXvAMg8kr{GPYmv$dA)?1ZpV?$*ea-8yO%3mA%X`OWrs%v!i_H}qG$=$GWU2d*4 z_P%sB81p~7+S@}Mb(ePUCm%_E7dm77oH|?a`_p@ztao?aE^_{nrZDq@B*n%{E6v@2 z7f(jF22sjEL!{RLlXBB&ymly^+u%zyI#}Hp^C>)wntibx;hpFc(O*LEsT|bV_V8Pj z(ra@#-jVRN+U+ptgW(XT1^cFtCYUB77U!yXZd; z`jQ_D&ID6HqVZf1ha3esWS#sUq}u`;)PK06eYl!yJ{OVy0sm=jX3svOvwis5h&Ps= zMQX;R`y2ESN1@2&icvxamrt!zd?UW zC!5H43A){QOYs)Le*nJ-o`5)b4Ure4)7Y~TY4l7@e3fNxOw8S-glv*3S&Uy7f_dlJNWRziCgT)t&xj_3k!_Jq`7Geq6JaagOydU@tovq*_U_Hn^c_T>5X4E=ojH7=YxIx`G?vJ|a z98%8xDxE9HIA;C7eLb(ggS2}S`YZHKAnzcLv)YR4on$Cnv^AI0+d}8Z`icWu=;khE zvgv%XMB^OgPV}wH?do4izJ`9E?)p(mYu~Q+?{{P@}@snMTQg630Z6#yZ zI!`5V6NkT^P8?-3{va@hY!>}ZU}v6!<1M_o5k*ZV_5<`&8cpMgn$c10aLR?p z*gf$xp+R&mga5aVk}?m$dx&0)HCub>{08(H%1@#9Q4Z*20QzyDfp~}F9Sa|3P$H>G zCdlpM0Q{@qS*$VoJcjIA^zYE?^!p#$Ncz5w-r4vq5W}q}O9oh_&XXW#j6LZvXk~+p z;U9R8-*uepZb+iq{2KmTRk#7sh+k8H_G_gf&^CEhfKK7?`E!x&pPvQ&7pM$@- zqaK&)%JpY>oOwI_+sQ{5^I6JA=nYqX9(}ZOJ^CEwYsUSC?)KgPXmis?&QEplOWJ=3 zemi-#k`v(8pfb`tw18{b>dK*VR@$V`H{tc8GY7=s($_D@?gOuo=f4Dc8F(q?C<<3< z#K7vS;K`lsk2dkpEbzr-y>%>7o21Wpc^2j0=^v|aYo%dZNpmwik-AI&1Id=5_X0ifmT4pD+afd<8&CGakKy+M zBTcG<`~x5vLnPE5`M=7)fS-cTfwzDjK$^}uB|n;MWS)w~N!os%Y@@awAd^vI$h@=H zubSd0&JwjXJw|>f`io@AYg7;SESomGI|MHdm@~%@wDCsx_3%HzU)0v|@TqicwRt&gMs&9ij@GJv<`(B+$JTUktFf3v zJ#2l1zJRX-c0cXZ1J1gR`cl+HIRg{Hbvn-k7E#IqpB)+eNca%=U^-cp1v)xH8RKT4 zN0RBJ$pB-V!OGt%lUh%v*GIVw@2z-=vMG3pTp1+kG`ElX*G5*sUw|*uXK(te$q&No zz&l-^B0C4Wx_=*z|26zcps}DmyV_T!$COWlpMe)ZqI4^G5X=B;wVh~rXGi--ljF2= z4`ZFI-EMNF{oI1qv+xA;0{m=+$+Bzc?`>`gNDf$U63Hf0=+DC68-D@5HK^l4WZRIj$WtA_JCE$0Ow`|)suoPW;_XLd?SkgoeFHIWtUlzDI1@0Qw zoRo&(v(&LDNo}psoo(Y9Xp_iHCpp|PPJQU;Nxs=&I+c$ayvVI<=ks`%;)&cknO+E= zqV6_rE~oRq@ElNGkMfdNsdE+Hs}}BMIu;@K?|MJa;b}EkXJYHfCzHP$d=h*Kd=(^0 z{}ZeR{lNl8@88kBx$L8zMATCK90eXBZ)s~g`Nd=mS=ml-G;x&E(F5qbgwCSB2`-DY z=D>IA{}^@lg(pJiDRW)Dsk0WV?&lV?uE#yhZ7KewiR~<#O!gv1G0$Gebj)Aj991YJ+V;G#L)2#82hbsFk`zre>2P+dmx@m@#wMjry7LEeGhNj4Wg9G-rTgYTk~v(631H(dE^vR(B0lYLVk1C%eI|4KfH z{NKpuDLF!JJoQU#+fWRimU)wp)p$2#gIV0zXndPbX(BVjR;?F`R zWld9Okov2@NWA~Si?Qa@+esFKWTFZ$J@@C)GE*}wucgW+R3+E3%7 z=%3tKLDTdk+mkE~(@Pnr%GP)+`8@4pk)GA|XtLh$8DuxXv(3aA7QkEh_Zepvb}oDi z+2i^(hsu&C;%&rB#<^epWb5f`WwlTzJ|k- zWfJuBLLWB>G-9FAh`h3vsH==+l(R9-Oy=OeU-|M1Qh4 z^-KDjL4GNI>d1Ue`nVbXW3o8zF7m6%6Xn?!?q!?Bc>mJIS@^L_vf3DM0C<_sQ~oxv z{>igvI@&2wG}gz3KcbhwAJxEzDDs}#6XO_{ zvJq{tb%4v>ds}DSpOXqJO?w8;3AUm{WaUd_IoS`@W8Ca*^=>^-y_tAJv>|P_rs0d2 z+W&uz|5osn`Xd=*F!@sOUhv`ngW%ys7MdW2l8TrW%_u zCJSWDHTKLQhBc?W4b&XXwdS0KVuP{;o0M(XsBFb%WxLprEz72{ZEVceW%JlRYhW#E zO{`7Us50jQGHX|B_yRe*C(3JahvL6#p4q|u4-pc5hS#(&Zq-YI1( zMPB`gBGI16Xc%&k0R~TG{lr9)F8JOeN~_Ot}$dR##Cc7#(Kxdn2o*W0I&4E zP@8YS%Um<(%sn=UE!d=P5A)Hn6`Pgq*syFFo5r@Wacmu%$M&1yS&RAbtWDM^Yjqnu zYq!IEY^$wv@kDujRGWi;uX$|fY9Fx2v*8V3nL4xRbSTH` zIE`)7!2VH&i<Ia%co%od25C`io>q z!;AEL6rSj-yZFKIi{NkUs4XTQTdDp&^iXw@MQ#S;=)~)LfS&lD0|(%rrG9P~S;%YY zT%t@ryuG60a^+3nE;?6qx8E!FfWJ@uW#)OQ_FgxynRG73-+?~}e;ZzmdNf{dyzkIU zR6YZr4YzgHp*9Yag=d*Cj0ey!~{;P2L6BJNM?{WsV{y|G|vXPq6|k0$i{ z8gmOT3w2y~9nR_pD3kF{LdT%layVmdAmt#}!$)_uQ~nX~aoSj^eBMG$?Q9>$j#Yk^ z&QVHHSqJ42=tSf;b~~fH9nBArEyr7_k2v9VaL(0wjBaev3q8pk|4eq9I)|YzBA4Bo zUg$W~EMq+Y|55zs&DoZbV63l|e^e%zlDUS0`s#P83R4g(2;+HKsF&g6;fdhq;TE8Y zXAaX*9LC|IexH_9Jef>X#bN3?#Hs2^`BC(KI?Ez0q`y)*6K`+4iST<(JkBr$J_i3A zbWExyInuztudg}eXOe%KJpVmP=Wx7h>CNqId;4$6a&SBatWz&<2h&V?4Oj(opB{wY zgM2mkf5yi^jYVzUqpf6*m%5z(!8Gz1?+)_8_`~r&OkZYb9f@AAy&hz9;q%FUMgMa6 zPW<8c{ou>-7Aa@q$vioXm6NZhpBv9x&n*A=sRD@Vd^@x2z?6rE6QY#ILryk z6?pOHcwwUVRTGIbTnb-|@1&eb)g(nlz2|2_=aDD%F2Z{|oxZ6uWtzZJ#gWyFF16|Ttzkq5^&{m#}AKOybz~*qWyYNIxu6Fgqj%(=l zN3XS=^&_7FKUy7`q?rm|WHHC!OSSc5mn>Eehu7ncp%*7#Y3!4fGtddFIO#3j_HB0K zZ0(Ozbdp^@+fo14K{-e_{098k;wbf6=+A2-HW-KIp!vvDeIe4qTipaZ-}Pj;z?ra8*T!C?HPReNKlcm`@LYVFZUg^zV{ zY7X--oyZp9B~r$1Y5%a}R=Pd$hH2{v@`>Ia?O@HT_+M_l!2)K|c=iJbV;9i<=B0(DG#8oYURjV!F_I zNP7a$IiPhnIE&st@!thD8^?Xxo!-@c2G7~z$KY4_8u(5M=a|qKl?*Hn&{_t682)L- z3cgswJv4X2SdCcH#+qU>YnNgZ{^u8hZ+wS}Bb zwjMrQABVz6(pjNS3_U{mlJeJhhmd_id&87pMJKcLB>zHJ`+L9|ZCs7_7@h5S$qpmn z|EvBL@MZ8#Z~@fpk6vUAzDIAaI%ClZDuG$wIY#5%nYkL%zGR;wI~`;Te2C5n?OX@m z1Z+j^ckoLn4p(s#g?|{}weTn;?Oq2T13yrMN5O}ZGjMAV-gxCF4P>A)9+haYbyNi3 zhn|Jb{*!(DzdKs>7s40dZJgLnd8ffQzbU!mPpxx&cuF#cRt=##t;L< zt9NspDfnLn4y5J47b-JePS9i@6$$m+8^g^+pQh}ud`6uZA=|^s4i8YBb(^XC_h0ej zbPt>FlnzM zbq?M#^3A+<8s7c%j!|yW`QgfVYSPqf^mR)6PrcCnKmB}}EUCXQJW((OzAt5#&J1f$O?DOBp9vtOOO+G2CSI2xZdv zXX%dwbF{I(!@_hr(1G*FeuN*V`(j7?&(k?g9rhliH>b1xA#9R4Wt%vfY#2PL|L^L> zF>k_qOnnhpC-;8JzmUB`wkO&DDu0eX62CF8^gB))vR=LTJ%G0o@89XgxmUnt;(F7V zW)7p!qtWlDH&LBS(Agr^n#&e{1!J$IBCK=fl6P(svo+OuT;T#Ssz#OUaTJZ&TWfnp^Ot!;0izDnGB@ zfR2Iidn0^LYwA zj{IEmgVC$V&g!hwbX_fPhriL74^SqU*6GWkt!^F*mFwxtM6F)hI6pMGzAFAA&g?OB-ITzf8&k37@l|Li@ z5SRxBg6HVwT#zzRRtuN?=01ZQsnW?Bp0uU?ha&OvP54)6=u>oluYu$7rmL5&LIl)R zN?P==Af=(NRwf;aWGAEcf#rIo1uEm64Bu*jh8pNZ_)u+rr>lLp?~Pudjc@4d5^@Vt zsc{b8Tj}hFC)Kx>;ZFcD_%rG=cwOOoDr1ZdU@Pc@o&_EPiIf;5(YeYzr)X=B?skMf zO_#IQbx*daZ~w3235YtV{a06A@0!ch-J5(jS+)dcpV}Vo#>Gw4L;i^@dr2zoI{Jn?kAgUL8orJxvK5Zsni2cz@g%jvvJ zy>kpaDfJQb#_3nUyUCZSGoS1i@CKgwam<_}>R>wx z?+&_a1<-7~>10!s^Sas}s9w|F9q2eH2dv-tIXBgrXFc95ZwpdfagG3Tkt@9L6V2N+&*$WO(tmep!XYk$rwKefABFV`(K@&@9%2g zCo}P_@DG|uCcQvM&IOHu)rt9bTqD?8dhb(a-dgYb{;YQGnV@H+Kp z(SD_kTge_Idz}6<_)>FgsdE}Uj+4b$jCZv1d3vwY+lwswa57D@+n2~sSN2ohg_pE{ zpfZlQNI#wMe(-hh(eUUd;^XWxYi=C%qnU-;KO8N1%ZZ<$^N=x&#g9WBiXR6{;4bfM zXNnohWWUME1l=sq8s>j^O9oyK9?1qylXY!L6pernrZWH@LtUqIYOM#3p=8;ECK()0 ztKX`vP{xzbqqn7_eS)8gm#96-pbmwLs`B0w;7QXjYv&F0|3!bht>OFHn}t4`{2O=; zomF&V%yYG|+61P7!^!_l{&|o?(|phY#)BC4E#Twe7slP6{#oD_b!KZP3;ofq_H}YS zoe^Z5yWZHJ-O_$9m_v66z5CF6kk5y&R>wK06+6V(oUoj!uRb#OF?gpcWsAD8$YAAs zzd{ehe-!N;Q3u5=jr475%8 zIyjP^h|UjE8_rn^{f;i#h{M^B>)Iyk)R(_W=JBjLH__c6FXx+No0)LVo-Ls=5o4DV z#+jz!-KpG#cQ)Ne=nYYR*O>b&x1ol)<^=-WYS zqW|G_8F>CgDktnb^3=8EeE2l{cxOC0hB_B-`^2_ajU?k)^%!!SvSr`8iF}fFMk)WM z{IGi0lMR6PH;|;XIh-LG<$U-o{7rO3SM6^isa^ojAfHd(1B}J%NoPA4iGMBK8%<(7 zNK_>Y+bqrOQ$1PcXtI1{ov0 z3!PN<4?K%f5wkD;yYaIa!@KH^U3c#xZIQPFXe22t1gZJ zzV{J$yaa?d5n@1jB7{#N$cG_HLI`M3poj`sBAAdsqA|fFq=>fst3Z`vja3wBW$>ed z3QVO~9TXBArJz``A}XTNii(Uc7zm zDe+Lv(4%uHr!k=}{0!Qv#P4W#p-e9f*>*IWvK3Ee*M^;XXj>}$W`O5hjrxKwqFzD2 z+qSa{TS9^o&TZXYZ-QeXb;m?m@NIx^AM)&lb}O`l$kY*f4&&%zjHOg%wbZual@4Fv z*M8ccal&|v8^+gpbUw`&#)4BhR379~`BcszFLLYg5kB)G@~B=xKh<+3{HnL=j~#+N zuuHHHb_({wZfd_^N9-Bws`kas!QN{3N%UtO!iOtE!0Y;qr5|}&G!a@J?K^36G|O?u zm+al>iq5I6~M|tXp`VBPE5YvpI_e$z})et39sOyfbLRfZer0rd_HI(7?x{%R)aD9Q@;Clmkj8m~aBw8Ax!?X7O@C|E8 z-GQ~#b~j25;d*^je(k6IbsWaiaf72UPneH+b^Z`JkSEBc@~E6Dugb0Rs~)P4>ZSUr zp6IIyuIe8?i&uMKmtY_46zqlFg8i_g+B4Wy?Ry%$nvAbvTbpsDkKtpsmn;(a^52ZWMz6N>@^i|*vVfY8>uZb4nSF`w#%_pG$6}s+P z&Gt3x&j$*CS%BUO^sFR5&_pd#M_)uAH9{J&a63w3tmohPQ`it}ib$Qp060)8%Y+!R&NCUL7xgM8ROODqKr$7wRTd(g#lHZj-oJ~1 zbrHyNL$-S#Z44Q*-~}ysXhB#sHNKv&A!|McPK`1}g#e#q%#QHRqrOjRD5c5S9O%Qr zk#vS+iEKSMh8kHH@dDs<-~@Dy7Ha`@)J9+-umX4(*bl_u8w5-*47UdjhkBa`w~FKF z`9Avn2)gbH&gF0m!J)&gT{Jxs_O>ZWWQY(zpQT6BpldkKP(E;7nWTdHR&Xc~J}KKw zeJOZVIuo8580BzE@u&xFb)55{cS2Zo1a(AR=taO<6dMU`Gr;*K-J$EwETWu1Nn#p} zr^F~xAIfy#W%zCYRv>R?L3kY-!aoZVj*KnPbk`q5zfy1-wfce6FsnPu(cXZJBdBwp zhVKlfES=W3a$!V zDfRc@E2n-7^?Rt7wxk|iuV;QXT!?@~W?2WFBO*L&;3$ro;41>(9#{`835-Ff*Wf9k z-xAIXI)vyBfTnU>vXci(#L{_zo*t?vSU4a|lL2O&iQ;ju* zg0*ak^?1W3($dYmD%^rcKE?KVnlP}F71)J!_VTo2Kab%KaM&JXD;?&|$x)s$A7i_J z%mMki$l?>czqUqh@J5zp7`ZuN!l?W~F0yE1gcYlIUaQ z5Exp%zM#F)k{`tUbj;Bwv}t%u~Pr8m8OrZT>Gh&>prt`{TG(-;^fBmPL`%S zS=Q0X@{^t1(%s3eJ)Jb4?&OaCPVO4w@CdH+QxAH3}3=qpZ+z3JqWcbt6szLVo0 zIQje&CtrQ$_uJSVJw_YZ%@iO&6FPCocGX3{nW^DFSy4B0yl=u+H&$Mq<&$o}DRZkAR#wbzs9sb#TN(1_*3^|X<_|q9 zFVA$2Y`lM>Z@f>u=a8DR+BubjD{JS}RUk>j;NrTP1y|ROZ)+!PToU8s?2v@>&GD?r z_BuN;B0emB>VI}TYv|x9W%DX0mR(!7pfQn%ch2?$Y;4R~2Ej@qJH`AjGhP_?QF?1S za~|obbDonJ6+ip?=Ik2J%#J16#eLkyl0R(TnQ`AbFdD?Xd%Nkp7bYge&;P!8bK<=d zoyKN_c{?X`_Skpja6dr*Y4NmZT(mngkrpk@ToO}JiW5cg!tWF1wCo-+lNBZVMQOQF zT7LSEJH#RrL`sge#@6>w)00j(mBR0ETbt7<{7MI;=r^^s54W{%Y-_jnOVK%@!tdMh W<_%2Y*R_@8Q{n;3-^8NH#s3CaRApBH literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/auxiliary.idx b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..4f60549bdc02c4f619c41ea4e179e1b1be4fc880 GIT binary patch literal 15754 zcmbu_30O_v|1a=LDn**mfMl+ON*d1kG$1mR28u+|B&A8o)GSTXpd`(bCJltrSs&3? znJZ(Gp@=A%GY|LVyUy=_ujjeXeSXi~9_Mx5YpuQZK6|gV&)FLpQGtVkr-eF(D2g2v z%n>Z){W1G*7BL~2AyQ$2iebiI6YNOGy9HpC-^S7NawfGc=HNLs8uXV>fk{OU=+|Y8 zj?0$grtz)xeUbn~HlKvM0%7pTKpdj;4iJZg(?oU2EBZ8cwZT83mT@v^X zxESk-2fn94sfiDjZTrc2{4N5HU2LPNZ%0G;>uU({=b-(zB3@O>B_~_W;d^r<_+I@7 z{T)QmUECjTPu+w!D>tInC0AISSViS6#bHc{PaRasVa=s{VrrR(KYkPgXV@K**%3n9 zhNeT(4Jo*;;(-@e7I2ryDbVB#Gcj1Nn{;;N!Gw{gaixbm+P&KYE#FFs>@NxYe7cJ^ zhAakMk>POiz&{u&x}9#_FoztzmtA+?BOFI%+CuJ{x%eiJO|fD#lzO`@gQGb2DgIBKu*UOOgF59ESpsj zTiQf?>~pxjn__UD+5wDx5l0)6-jkYXdx^5>Qrv2o0>z3#C~#vF{IV>>oeg2|>*Z7! zP_Lu;sdZ$!*)_b_odDZ4`$^VK3Bs}2N2cGp0*gm?)2xOF?)!227)j@W;mk_<_1yuo z=KE|M`y>UUR|!Fp*IHO}_z1qUmx5_Az2wJ{shIlWI0>1%A9r0lg0DU{V^ha1JY3z4 z0s1ZY{6-s27+-^v+q2MXttsBBlt{cpN4Zy6-5w8xDzD~a8xGLobl0Sgo+!?(bHQ00UQ?F%|Whuyu7 z(|+!QRXP%s(>WIo?!3%BV&+ii`Z5w!JWbL1)lAq;rSbJ#C0Je5KsFU76PMvvY2h9f zz{S=iX5V})0!dU>9St@EUT`LV89qF@5I4OVP3LA-LbYWZb$)t;BR#GLHt*2H$Vv{H zJ}KdNKU$6)iw=V&OPnCwc@8u$ybCVd+|lr}2a=x#IIBPpjgnI!!AXZ3zHBs9e02c} zsd6gqw;ba>Mw7FT1))hn4ZlW=hNmf~xZe3i^iBK@T(EF4s&Nj0@0X2WzbB+l&GIFu zSyc~onw9a?Q$pmQRB3(nQzldF}m(zin2)nPB1Cu+mTE(4hCqmAeN=h8w8caV3qp&3bHn4+Q$ zT`#)mD?>e+Jz*8M?bSJmf1QahHtBHhghWs}HnVQe&6`~F#o;h?T0W{dr4hHy8D~1r zl%cTAB`h#rMgJ%^j+c35LP6;5hJq1uy;aO~SqX#Aaw zaYL4X_FWrXwdw+Bz1htPUbz?N*~G%SbJZMit{o>Juz@r1O&;`gRzUWX9i(vBe3bCW zM8W8l*f!=Rw`0|0Afs}i{Omp$M?)a}mk+!-zYj#lkA|TG(X_{YfIHKmk$8(|Q_Dqr z@J{b2F!*H&*7IUX-}bo%$AfLilj${ZQn&3FvwRqkq1V#+ACXEh@@T;X2?K-XkMv__F z{Z^6mv%3*yJ+cPr1&$ms)y3S%lSqNBUNw3M`VxqwMoA zsP;zs>U$E>2Vt-yS_7M$3n41n0v|r@;(k@M#gLe6qUq-dKddDnb)gwHzlp_$sIj2+ zEdlaZN8)9JcicBu72)*4Geoz0JG$@mAoH$_#0<}Xr z!(0eF*MoI05V;k)#9908Dma%ew<2@_r0d6rUxMSdkq zebWY)aq6I}wF({&2UHYnz)-1G`25{-lJ%7fl`0CvcGgSo%SZ7r&u|=R5!S=>MXMk} zc0Zge)x!4+*MY#aZDi|^+cex#2$e7GN3WO?5WcAg>z6p=j5Zr+nb$?m>3idnz}48{ z;|hJ5YjIn19Q`F0MucXYqu$Ida9V9LZI(_T4lB~gTftngKb(uBF78IN>}a@O(!>=y zwHt~kK{?zuD2_h=$0xoibJ z_ZnJ1bvcH8c|?NrBrqy*1Z;XRiGDBMf?ET|gSm1n?LT*io2j0TGgBUOZjOtfcQ$dU z|Mv>iKQ@JG=Eq?6Y#-e4?GDy`{Z0RgOvBI)V?2J@9c3HekSvV|qH<*zETbyK;krK+ z&7e4Ul{?%iwSpQQecaHxAB00*)k!9v!5cY}(5fN{ucreVtna21TTJ1w);W?r#SRx1 z-Q%XZuEl`K7q}0dKXP|E&7vv&zGjKX8 z01M+Ulb@fQ(SN%ZWOQl5_wYGz)Zia{9Uo4P6-wfm(hD%$e?DH@?M~a&HAp=)g2?<_ zv?;ny9O7p{s?RZO*q#pe|B;1XA8k;^Bnn}0 z#9q7>I)$dmroxGXVPNl90Nju5GU3icn981 zn+gJx0&x0`2xzh13nCV+IA&QO+37>5-^!JkO9P=tU^=ub#K7J&C1g=x1D1bZg4FS6I&x$XEhd&5y}V`=PMMx}Q6GLl!wzbpk%cBtU9gAK5ND4Hl`1fN<^% z_^i-FEO^($VG@}%EOHF0+#5+8=^U64Y7dn!zY|@96&$Uy@7$t{<8;zIQz*U`1N&a7 z;j#7z=$#NtUhGUGGB@U6-Q{eEl=?-Er^G>-K{?*S1f07$j59r_g?bjmfX&cWG9j*% ztTdZHcc6V_?5THAi2~7l)1(f@)7gRQ`F0ny(p( zx+0NOInWt3hP~vz@9QS|(tAL*;W$-}JH*Yi?Is^yU4tu;U3IM$RorFE!bze_5^nlx z!4(ti<_6lf;hAPv*r_B7tA1R?vS;=9W~B`-`t^f2*%Wbb$^omfej1^i`mn*-oIxMEZ#PC0b|L!CEazPSME&6hIR;!uG5>u->onwQ94QCniXrGk6s+*u5&O@h^7 zY0zZjkIH#3$>HnsX}}0&e3I2dM}%&NYWcU+YHBuV8#4-QmWH9UlsTEIm;=VKqtOpz zV2I=qs#mOw?;k8jYuWAazHBLXr{FG-&CA8FCI#g3r8bIfmT=+377}`09j|DdKQl`^ zoXY>0gWGo0aVDLc4?~;NK`~E(#INQ+#)xQ6K}jGg(_+-D&PP`x2lys%6#UMmV5_|( zq|OSVC*umK;>e?5&ke)i)$RK8J~dEtV^R95;0Bs0Mnm(wY>u?iHu&AM933RwAf`Hn zlzBbwfPxYrku;fb8 zs^&(A7M99{_K`$;ASHcPw|D4T-PfL1CZ~nj&&g z>h^xBJ0yd2-g1QD?@V!x!cuDd-j1{M#vxi|I2<3xq>^#V>Ivuh0oae{>j zosAXv!OsF4#bVHG;sMl-w#9+t7wM(hqwu%cN4g!~u8s>3N%E_sqp5qhe6W zMhRzZy2B0h4x*7;Z9uQ_A`L521)}5!9uksujiYPGq0O;4|HeFgUe`ftpV^Q%?{eUn z=QfzV_CCIN$AKNjfH4_55GGWB!~G_MfNddnUvUnN@2R8T@BJW8^J_59L>eZpdO&Jl zH7_6TEUiHd8lXq@hr*~0 zC#dEF+d9GS)ezdb0KE^|;p$j*xVdo&YAb|7-Cqd;U^+3QzrhMkdVBAe&kRFl==^L`S*7=SM@~#IJBffkRYp-aHWUa)gIdBjBT0 z604H6m;(KX4~ea;KIxc^|WN}j>PfJ;!W5Qf5w?7(fB3_6z0pl7vt z*ORK1FgeKtTe8!^sbdme+?Wg9Cr2Z>APV0*P-w=(xkf-oJa-OZI*Dgfffuc-e$ zDct)o7qgnQaJEP#_AXArm#dr6%XtOr4rHOqgkN;-I0yU@3%KAzByCPON`DX6!;Zo{ z`t06l`p7xG-Gypk81jznJbRg5=qn{{i%vmRfdWhnjYqSvNc3^OL?*;1!p)(= z+?HHL=)c$sv9nKMY~2`?4|W8bY+E!*)rOq#@dnOsBhcoY1AH3dNy-BSF|#U}v$yvi zM|R(@x{F^5xD98+Ii$iCMo*5zX$Kmp+wI#VeqascDaGPjv3xpq$T8Sde~Su4Nur0{ zUYPV)gI1m0Ku(Is;GE3|;P9(iP?OPrs+rFgRT70IVe%eiqU59e^ z7??ux&C@78mdzaR7je9bnvz%LZgxj`YDu9bkl095xTkAirFvU|Wq06>Hs(u4&`Iyx)d%eY-ilRI$dWWv|Jx$YhYvPC)6W zyHTZK6DqIRi!EMNxNrIgl2adEXPuBietAm5{ae9gr@>@;)1ri)Y+FM1b9ch8&jsA1 z-4*z;Ac{`v3xc5Y$5G_2Er}BtN&2p=MJe^epsw3TY2q_-KW9Jg+#d|8BV%#=&j>K? z$;6AkX7Ki-HqMW6B|b6x(f_hOaDQ{D#GYcvGMkUp4}NlfD0*hKiWFQ;zQbvba>J&mSL zd+53WE8abXGiann!0MC$ysUAD1p1WHi7tzvcWXFm)GFYV`SJh~yKtdU6q!-93d*-O zkYqboII?Un-c#6vyM)D{t4ah+e=0(-ia#eQG8RPb6fk^>Kh}2LCPU_)BNt}n(_N;A zu&mx2rch7#HK&iB$>QDr7xSJO%o%~QYRz=$tSmJBQA=m|jfDN$B5=)SBrLl>8kPEt zsj{L6og}n@Yv{IyP5@hOvv4L9`@F=|Npk3(_J9~jCvm?WGXlMk?{wicC8!=#MNf7o z!?B^w7*oCvwC|E*&-|IAF(53!-{+H}Pwip!D8k z4E8<*jrPL0bze8PsYe`tc30C2CTXB}#EI&NZAFFqVIVNs1cVF@qyD>ZXJ#(C2e}K5 zQ3clq&gZ`GsM#h5=?^YK@x}tKoB0e}Yhgl6xMJ{S+bk4ti-v?aT{QLYfujR{Tx;Gh z_FUl;aH}biS_B>^6&M9$H`r3nM^|#`<58^YoDT&r*1|P25vWcwp>Nzq!#ybR|L z)dF?i^Pq+YhSc9^Ild6RMWUT6=}7y7F#bp^_82Tf%NNe@;ZzPxdNmJkr%c8$L2LNA zF&iUv%3!4QZ+dhMm%L2ai~Tt%aK1zf1Cz7JvTUL!uOG!LR|O2^3Z9S;0})hh zXFra#34^(Z8%f34e6Bsmiw2j@p^bHdlzVp;>3ueacYn;mXxAQ`X4VWjno%H~P|e+2 z?2l2Oc7xs4m)u-WYjoO}hf8jS<726n81%c8d!$$pz3L9Zli+3=X0{7zFDvn$8=ip+ z7bS7uv^^MkeSjpHjlmOM@lY=DfxNtthMrZ{5H_QhyzMXLjIPQT*2&(2XSEH0_^=gn&yi|!9JHa;969NE9Pln)#G+z{306WC}&{*{2k<$;V3Lq z=%==|T~uw;bYe_+zd6%`;n^b&EGgXs!4{|B*YE>y%<&jbb1y(0_bJ$3(}i)%FD5vyVc6iDl&3ZwE!3;D)v+&ddAXOY zyB(vyYo9{xXi+SmBuF#HhJa&a6mqI$i1dg)Zl^vMcJqFF#m`WI69!93!{I$h1B^L- ztFDv&f>ktmvpyW1<&96Y?IHFI;MiM>>9dXs^5N0vx+vcoTDmF&t)+KkKxsVj8pwoC zCy&9}i(w$D`;jA-ag-i6kU^tnH%^^O9MQhpGqJq?Mz%!3#+| zm-n1Ko+Ep!9cO_%+~f$-Ua>WF#MRC4)9ImszCZ!_@VpT}1Ukc_@Dk{#O{PMDPq?}} z8}Y{jJ*qkEIhA-@gdOYCAza-FLeG4r=0tx?Tjv&#oSbUtSdxP^5AKt$qZ@IJcLuS$69;lZ z7m3ShS$c6;7N&#*L+eKk^gcI)d&sJjN-HejR?61m$mo;sW^E5?l1k@Dd^=CQ= z!yEJ+UZQuFXmXT%BB+1QP$+-3og{IJ!Mw4acWrlpkR=sZI<*>Hd;7@pkl9ebB7!u2 zTZsLaj5z!En_#7GF4-?M2cjR&gIN-KoWmbi;4f=`ct2t${2Hyt&3Uwssumrjzsw~_ z*vX-&bWoM|JgtLXT+mGC1#W-|hvmr73K>{_xezbj*#kWlyYa_Z4)myS(fM^SoT@1z zcgl~Fn}J5u;ZX;5l8Gd_lUIW1CRxtSPX_quNi6Q1D@bn7Y6PP)-t*Ci_An&p5b>V7 z17-Kw;BP;BV!Y!b=v33lt|sF>-AKiMx*Cr9q)OzMtmStNe$=jShoswRX)%&Rog+uXgFy! zmO-=DDDwT4C`6abq1sX(v?*PH7AGT7@@PHjT{8iiL{f>H-3hX9#$W19^=6?6BZlPxCjWfJv7E?EX6|PmU}iFNnFY)eW*M`RS;eeoo@Ab8)-Y?C zXPEWObIgC37nm)~+swPnd(3v`eda^vW9Ad)Q)V}l$Di^0ocV&;%lydXA3y%_W!I`ne&;Z%#lp~eAvS>|9mZBnLiGv{nb96<-N>(OiQLHGl{9n#rs{iM&EY9);W)t%Y^D6T?Q;5mGPVvY04OV`W$-gcd zuzZKfziza#yqU?L5ByA6c?a_WlV7gPvJrDTv-7X~l;xdF{`lX;@-rqs_xzRl*D?Nf zUa|VuOdfxZvjmerkHT2~%>2Uq%KXke&wR@aWdbvt8Oa>ao(-c4ZT z2~2+8&vF`b5;L87keR_e#LQ$aV=ia%=XC+g{Qi!x%%5M@ESE8lG0U0!<0#1T3g%Si zNhZI370aiX{Jfgw8YVy2vV4YF$K*1HG5Oa4b(S5O{PV`IU(d=ln7^49nU|QenAeyt z%x0!5lRvNcnLocYS-l98KaV_EzQ=55dNSuQ`Sa-imLIWpolGBQ*I)VRU)h)CxlDiN z7G?l*2veTf&wRt=&x3a?zh`b^eq!n|zcBgpo8RvbR{oRui^)GP{PQ%5mDe+~nAyyA z%%Ojk=de7S$sZT|{{CU*9Hu#wKOY)dR%9+`?q%}(9mjG3a}o10a~AXJU-kTQ{y5{$ zzuByv5|f_`SsuY`Wt#ofjz9ixvGOG5ZKf4-409usKktkGs^{mDzsfhU%CJr1=9{lq-l9i`2`Tg>@>&wdd?fh6i!PI5i zGVPfB>wO^0FPZ$@$MP%YRwjSH(pe5-zWJ-3UmniN`TNVCk4CIqg86~TUr(83{yfZJ z`7=|D8PDX8Uw;2PSozn#+I?d=lc~Vu?+1S#^XDIbe#)|T$UMvBm-Ek$ppc*-`ztg= za0vgs;NV+fUX`$rkkFrcL7sv_LwLo1qAXlrXbxunYJT`4|h^hSBprbCB>Qj#*;imk1!za2Mw z5ENu)wkseYV9uN{{}4mNCC8`hS@_KzKWf5+yKa{4_HpBtl`YRFU#m<_O)W4qG&CxX zTC+w+ZF_W2z{aTd_SV^UZSL-^_gY)G)*r~yP7%FysU_`gMR`&F_3z(1I=a@RE3|uf z4E&rfpPc-$vhw-DL-uRdoIM+KBP4k8U%h%?HbCNAxl`khY4pAP_M+`cm(}uv z3$wFJACs;mn>_J`0rhXU?svnxw0%U0YpEf2pWU)leQe^0~-$hh3zr^YGyExJXn~R9sY4 zNg*~PSXcAV*{Oz)cuQ|wTwL{^WzsG4Tem_!91P=~zM1c}w8A~W$mq95Pyn}sb9K$& zQr7pB!&xe^(Dvwqty_l-iHwYt9r9SSGC4U}T2nVU`px6EsjovqLT(*=ZSzI5BIMEd zMm;?}U0op|aq(Y9w-v*}^7Eg5Z+QQ`yk25?IB#b9jVjeGU2<@&a5X7;YD ztW{L}baXmDefnhUa#u&k$Vm64Nr~oaz2>Ub7OUsL+Vj#~T_GWb*gLG8V-#P;a{DO^2KA)22=H{4{l{Z&Gz%)<*wY z&HfXsJ9C^bjm^yZ?d*IcC#SiY6VMV`R8;gf@VeEt^GmM0lIa%f*f6Tc%ge8SX-Zeg zjgD6z$lbE(aYs5*Q?|Rv(?{;drz8Mf*9=!G>k&XXohdhnp9$8K6pW?!d_QeuL&_QZ+WZ_>4r+p4R% zZ+`y#+23!zsaLw|#T(I%4)vlR9FBr?d)ALdyg|6bYR8qq#a8^l(d47aiOE}&A8#!g zZQImTQ889SV9S=7{Y#ft$c$AUUp=@dRduHv&z(=o&+qLGstO9~ebdv^Q&+codsEXP z$4%kVR=n{#SCzNi)gdHQUVFdXlP5-xA1`0Gj?>Zb`E$daq%~_q^Yimnco*Tg;`wG~ zSABiMK2y>7)ceaGKFl7WvEby%&y{-04_9?^GA>+U|gGwgiw^XJdo-7HHT98611OP4$-EX;fRHt&31zH`j={rf-I zH#<2E=;)ATV>`y1n@^tOcPSCJ7?UCsMR}sSg3J!)jiXP9UTuJ zR{8i4S05jh300ZXubw-1?wFNTgNO*xw)rCH<>e(Wubh-r|0wN_>-$ICDbv>6QRUpR zY$$AL@$vAVmX+dPQZn^U?J6rPcX#)xQ&)GVHFq_ae9$R8dh~hsDMv@!tqZm;6fw0f zSu7#3SaRu7j!n**zOy+|`omn*)HZBT_l&Ty*}Xf^FG^1@En7+FS>sgIW5;g4pTXH& zSUA15_UhHETl3-$AC60?e(+#;WOyu>TmL+J-Fi2-uV254_`!o2Q!R7IxN%-PJ32c0e0_bdU$;rm;AC^YO*G2P z%uLR>#T!mqvRVmRR=vI9CMMyD;pf$py1Ke_9i5CccdAZvm{FGaV*Gete_2^i*TU>< zU(Qa6;WgpmrB=u9Od6VY`ZUg+JNICiPG_f%j+UmDo8Sn^j$3FMXb_jhp>?sm36{Gwk{QgSqJaf$QB z)*z9fAy!+ef@Njp4}^yH_V#}@+GUiLo}BzkT3Rxn_oX#5gm(=s3ZFar^x3nLlJ3_d zG-g@ac6M5+sRL?;AzF5l8#Nab09rE%K7@_*|WXJ z%PURmG7^@`W2)IOW>a&rggS-ADf0|z=>H@M4j%E~#H&ov17`K?!WHE?or zx@52&Qu5W@d0$Qjp@Qn_7rk6H?**l(dfgLiI;yXxmo#l!U*DA-e$O0c`8a6UxG$Nm zZU08xQEU0wvBQVw{c6?r_08$n?6&sp&9=+8c*97FD>Z86*RC5k7EYKUWoc*Ew`7>F z@6(DobBw#QjrWU$gl8^m%{sunk@+F#^*o#Jt~{cN9zdsy<3-V&@tAkmuiX3G&H0& zAv;@I?CgSqimV<#Ubl5{v9*#FG(Ua%^dxh?nMGDxc^AhX6N|d*SHA8!{U#~2=%Up@ z6%P+9M^$BSxAYu)d;8Z~{NI!Rt>URd;>t22j{ZJD9xfAp^A|xikw6dcfVp#K3+f4q z>&OgqboBLeboOy^l^6WqTa9t^*yifuxW!|KtD~34mH>mnwe$@BtfrPEC@!@nz{lUo z-PLikYk-rBQ-G7qt~C>PI!qkwX@ifCr=zdW7LNcAA8&_=23j*5CVFr12-w1VKWFfL z;AY1yfg2pRx;pbZ87$S~mAZIrcJM7UO2K5Xbj z6B#3M5FhvVs#=;eEqMoHnbUTkzyO)C;);rr^M;EHiwlVv%M8AXX$cDI37LfrwG{ks zwruQ0(grSbMOv&@Tt2H@6R$5i~0Wx D3So^6 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/index.idx b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/a4de8fca-5bd2-4640-ae9f-e03abcc0b552/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..58799424beb42dea525fa68d6515e8636d1c1821 GIT binary patch literal 2388 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 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/f243db3b-18a5-4182-8c37-7481361bf628/index.idx b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_indices/f243db3b-18a5-4182-8c37-7481361bf628/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..72a682cb0233bdae4c590afb49ac7f26fd1cf697 GIT binary patch literal 2388 zcmaJ@dtA(U7oIMtQPE6WTX~Do<(+PJNb2`JgV9O zOFL7;EOTP`U_8jJ4uD2dB32*QehT_r@}6{1=}#m?WcTi;!-N zTmfOrzol`KG15PW|D>K*B)75AgSM!f^e-db?gHNkXRfRe=i z;ET?D2Cgm8!Ll#s;0u>R*m{>H~0$%~|3&(Fpqzx6lYr z9~k=W1^vN&D*9Tvk>3m3K)th>8JOb)b?(!#b($CZ+MkCp%7e7&Ng#X|mXF6qcv!u9 z9{qXBKEhiN#g-PnrL{wgz&N)9t3)Z_aAP0Zu1|%Vce|(s6+^R@P+GrYE1r5jj`{uy zkK@#n$-v?%ILV-f41X%ao;P#d5`Xrdb!j*RCfNUmKXS&{6H!OK>s;u|q;q6ZY%MJG zT*mr&Xkytw8@8$AaQzNFGNIZTK5IThF7>{^@weKT;=EJP8-e?hDXJRy`lBi zJ@RC(D|J3%z=ijja~E~3@p@+(6P2=pE$aFLN_2~0xwAeuy;+E5x6VN0;6oCnd4YtR zm9d7Yg-G8RKzhn_Z20vjsvUC*q)G>_b&?RfE`APX8%B`nRgqf;fF1$X^nuwp_H>~J z>{T8Cn}J%CzqKK%x*^sew~`gf_A_;|WcI9&CGO5T4+q=w@x2_6gD1=e)c zWq){OYDaG?PZBRS7lI$(r$LUH&>Q55PrVXw_~2J$`PwC{X-hJ;bT7b#t}^E8!Taik zO(o<;%vh=U{Eay8#ovtcAxjjlo5(F+poM!b`>VGnSTjKx)>8k{$!;eGo{?<>B6R2o z$L0VjpgIJ$%k}8dXc@UZVgW9m-2gejH-nS z#YS?PH$l4Yv#&s?w+0t4aiHzLd84DU7CPdtF~TuzbVq z@9+mP_nVBu4i!D1u>g*DzlBZmb42Mp0X5cJGUuxf!sD9PsJ?3mON5`Gch?1Mu#&=y zXcuUj;ElyCEwEunIab}6h=FYm)X(-u$dFB?9??Etbb4f&Kl`$`AwX64`s z^=XnPTmvzK`Dj*I1B$do%rf;!Qrh>81Eem__%S3bEU#fEmtN3eVH@xSnu|w*xkjxUK6TwWOT%?={C-mtWm%-q_<~ zr5rAd)KOE10W4WPh6^%@X4++GxKc$iJNg@%DtS)z5<1~Yw-L9;aV9#6yC|6cNG%kz zK{T|VJ{Pu7??@Su<;=hi$CJ#pa0!{j-GiMYp5QRv1NP5IqATlcVYOo#92iv4RR)V` zZO{fr{B10}$=1bdDShzJQpij>a2Db}Pr;>^3&{vK)z##B1Zi|0qBEFWbbsK*KK1{e8s~>`rieamj373&z%mr4MfqT^j8Yv2ah&fBC((^cOyT1hY zY>y-Q{(Z#apP#5g`YmzRr%-w|5APRe>=@&yq%)ZSoc-Q_LX6n*Hkc9=&m~W^7BsYmEc~r=+p^39MH?|mTbZMFFCR^^gJ;>o&`@<&nC%jji_}w6SgqN zp=mgeCN24$(KauE$VYo=ptOZ9o~;G0|JYNu!x)-smwq!wNcu8&!`0S&uw5mA zgnbvNptF}~kbHE=I*hJo!yql=9xU_igCuJQD3ngeMc&nTv|1Yjzqk$_B&}Oiv^9;k`i{rY+Ij533NhznVaUA> zDJJ^%ozyrh4-G4=NrBiHB{jd$ndjUfS9|((cA-5F*)2vZuDtUR`_0Znu#pYN+sLPBzpn6l3E$Gw$RH3u&^$ zW0JI|0V{8Lk%E}bP!w7X{rfkgn8#b3-WHKPcftP!e}@L&N}wMax;8c}F*Ghr5fiDH zJn|75c4L(?d7_K6tA?F9pC210507NtI|cf|B9X(#TxsXVAOB$~lSf2;EwD=!B_^+r z6fq*N0MF3He($UivV_F<=b@vE@c0CoJW`ZyXTaATJxy9G(2(%O0$aW{-*Vc&L#If2 zczlFR9+luUKR#9&C-)fD0!==zUFZGp!{gb1Al}?jT{x;gl4x}P(f@W->*;=QXuczj Nccu9*eB8gB|3BOoHt+xd literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/0-c28d1916-321e-48b7-a496-97da54424c30.txn b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/0-c28d1916-321e-48b7-a496-97da54424c30.txn new file mode 100644 index 0000000000000000000000000000000000000000..8d77cc6b1eb3491d6cf143409f3a551f9ad725c7 GIT binary patch literal 299 zcmZ{c!Ait16h%#%sW8ijizJf~u5G5BtYw+znZ#7-wn~kv%e1bXDU`~T&BbT@LAMWZztvI-vFhMUSkghN z%@MUK9h%nKs_U%Mby1XAeb<}8BCr!e*~R)JPH(CB{yO9D6fPm2#+SxB{_}TaxA8+L zl_tPp)0-CigdErL940?J3Zf}o0UO4E3H=Y?aQcikjMJP%#|-QJ9F_?JH^6+rr-bon Yci#C|bj|GFuvvk9*N-ObWu`Ux1=q!5v;Y7A literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/1-cb87fcf7-76e1-4c7e-865c-a191e2f9180a.txn b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/1-cb87fcf7-76e1-4c7e-865c-a191e2f9180a.txn new file mode 100644 index 0000000000000000000000000000000000000000..aaa973c8fe95250615947f668ca1543c3877a145 GIT binary patch literal 463 zcmaJ-%}T>S80O zV&LbQM+H785W(F0$=hN6>G=BAkym!{a|Z#XFxRC-MqGHTk*tGVbYP@XAT^%cXj%O< z+}ICrNT|-j22J$1uAh%wXG3^OC1!y@cWD)DWYkPfb@$-*x4!G^qS^8NfO;|Jl1UbY z9*IKI;hct~hk!LuZ~mvQV@aA+psZ4(ZXTkkvyBsvNy-IEmkqZFm!`}g+uDQ_Ef#x{4-(@@P?Ys?AgH?n7k|G0 mb+!VI?)x7vH>Dba^SG0+fMMR#2Sw*D8?^;EJ8pA`U(pxTZjRdk literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/2-b0ac79bc-4068-4cb9-97de-7c27c89e8534.txn b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/2-b0ac79bc-4068-4cb9-97de-7c27c89e8534.txn new file mode 100644 index 0000000000000000000000000000000000000000..1eff6569688e7d9e7709e050a3f798d6399a9026 GIT binary patch literal 128 zcmd;J5>iPrNK7`jOiI=@F)*{xHAzmg)U`BEN!2w^HZo7PuuQcuH8xqq7RnVYL3?Knwf*Gck$(E*OCYC8lmgZ?mCYEVNiI%1*X=zCYdO3-C$*Dpt42(=H TQXrC9fk}hO;QnE|ToC8z3T=B1=o=oKXCg@JW>g19cJC5f3i#X|i|9E?gV94rDHUOHUrQ1xYL zdc_%~X=ypB@db%RC7C6e`FZil`FY8uMMbH3$(2HkMnKid_*5q)mLzAS77MW&8W@=v zcu8@ILR1$N>SgDqCgv5#7p11;7Yi{Odda}#GC}qx<`w|0ElMm&6=F6rHS?0-5`yc@ zO{|E|EJ-aY7Gg3r@RH^dfy-cMlZ8nZXJ;0~mlOeQEXXfT6=F?G%qdRwlH?LbxE{q= r3r2?%+rA#{G6@pm;!P~A$jr%1EUMH42DCs|br2sHCnPjM{3}8L#T1e{ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/4-f99159cc-0549-4cc1-9919-fdecb1aa7f3b.txn b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_transactions/4-f99159cc-0549-4cc1-9919-fdecb1aa7f3b.txn new file mode 100644 index 0000000000000000000000000000000000000000..75107ba3a44ff1e05dbb66bd5a0360f8071c5c80 GIT binary patch literal 128 zcmd;J5mHIBv@|reOitD{Fg3B%HAzl3)CG!I>ZYZnCMOvtCYq-iCoN(NJmu-Az`ImP)}zdZ;LZhh>t?*w}1#P13rp zm+G+y{Rad^6ngSzPaeDo(t`(46coSiUIe}BWIt-Pw20u%2btmJ{oZ@Y?>BFzBtd|8 zB#2=8%jBCAnfntrZkD3!#ldf*2uK4x3)GJ4L0EO2W)|d784Cgs+Lmr@+PVmbk9)+o zsp9$$Z7K~*Ip4}U9lNJ!L|iXKt6~Za%PBdXsvLtO9sB}Q!r6JoJX&p#AaWzO?pN)) zZ_ft-_3cFjG>$&98`>g~JxfEBP_d@t$^bmrMmMe~b2Uo*uo_UO9wMMthPp8~?n`P7 z-Zmf+MUqx1Rx%K6X4Xiv>P9pOkyyZ$LD;t$*_L*w8w}^%Ml}j}$3{J*D8Yyq(n>!( z@bl|`DQkf7TkBt+tmrcc?kDq2*K&JO==T>AJ>5Z~m21CCw9LmLC8MLvG}VG>+j(5j&Ae{gYM#F_ z^UR^Pr4mwNW7gf|Id~RLLjz+~Rr!Kjj~aU|W4exMQO6}}7(7}m>4ch?nFdx`#|g;- z5aoe*m9pZfh~K~J%Pxy)kx%mwN(S|-d}6cTy9ROz*N=+20bmv-JYrEV1Ga{fVHCLj zB@7G^9!9cXk7!2R36Mp5I@dx*+KQ1qH;i}*07sC_$ETK&vr?{~xlQU+LwAW*V?ddC zbrO|T%`gCJkG?l7MM~84FZV*OC%=4AqNHF2FYW94lBQ^DU?cgA-|%e{g)7>?Z4_rBZN_9x969Axx4P8=K9pNm{q{ zQau)-M=yec6?*b!LGj>4kX{5)6a=;Zf}mGT_D8Ljmg2=rhaodB?|a`H=HtDY6gUn( z6d;1>Zxf%+W*(22fpbd~BYhA#vOQt?(%@B&Ni4s&X0*xAF5#3TEaQbE#1$e&~cw%`>c; zXU+LO^{fR1h_vEkK}98R+<&I4`Nz zqqIH=DH3G0Sjj-N6!wIP$AYR3le%Q0+*%3C_aR#$a-3a|CW4#tolwiaSXr&h( z`+fR9Xf-f)fBpNbWn~({qhzk(xDN3br0Am4OZId(Jlwj?*nWrF60Lq-*|_?4a_q^2 zujLmnpHA-P^5z1~Hli|C5ow~EBR5|D&`eNN_o@5 zcAha=V=AVjs%}3|J`xTj{ZCc5e@UN3lEML$^lLYx2AKWX86cN%ys)Tf0A^9bB_?$< zV7ogRgudfl!$9NV2_$;8kY@PZ09kaX-DNYvc8uscK^Rd0IE=)o8&xx6R><`-r$KEa za2BZ%1Io;;k+58lH4UJPXbNhD0><%duF)piHK$^ZQmQFMn-bHqN{m^GrmJdE)}>~P zLLvuvu`m7#S$>4aUq19?mw0q31!CGJQHwg}kJ;m2Sk*0EEh@Tg>Lq3>I+Ka6+Kica zPuh%#xpG%(^W)n4WO{S;o^%D6xzYT7sz(YN-t}%6U3~QDphQW+5?(ygu?1O@*T6<{ PFwuUeIG(#OJ~iw+-$EkfH=nBhFv55^6cP8N3eRc1FzS?CZ&b*WbNrphPGd0Zdyf5kYWZRSohE&69 zb*c~@R(46>1aJ zU=5oZHg#O)SaarfX&K%|i_pOsH=9jqq$5r44jjv+uGKQ#z<2G?H{H-6t`&r#kM+S> zkyZeTHj!Jkrpzk%(}%IzmhvVal_^w8lZSE~YCnbx)Qdb8Ez<$8hKdpKSyTl_)1^$L zJidp4qrme>ixa`B%HISvbmCy@sRgf;AMQ1dAXn+ zMhOw^rr|gM4Imr<*awjlkU#Rz^ye6J%vQjNPpKV-)O1|SY8mda5YTcN{0FvG6&Kng z<a0>5rF{^h!L(U0$sLJ3|zK~%JLtmDm7!&o(RV+XueFDrxBDveUO IHNUv<6YK{mq5uE@ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551613.manifest b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551613.manifest new file mode 100644 index 0000000000000000000000000000000000000000..9ccf2cbd997f7a301db18fba9e0fa44da67ef7d3 GIT binary patch literal 1264 zcmeHHL2J}N6wV~sb)9Ni#tPYO#ZZNo#f?eKCfW63sTUXNp@Mh|li7(Kn@!ftv~GK< z9;M*Pn+KtY{RKt5d-kFzco6@BpjS<{-C7aFqX&n_%sk%ry*Iph@9h9df=?BQVDW!jF}t;5s%=)qlMwNG)vgN*i4j)2vj8QWM97xxEw*bEDb6uaei zHHZ$GeLM`9pczMU%j{0WsYA;zv@>HPUuA9v$|)*EIOeolgQtGH{wKFSxbkH0 z%d3aZGJ+@Z+K|NzXB$SI=;~H)c@iGq&t{>&L9g?qR{%OsLf?x>FIu;{!QRL;_Sd3WjG#tSq`ED^5b1E`}?j6)i0;HbIG zMaGibCh%o=7O6=ps3!joprd04EvzX=F>1`X$Xx(9ht#~(` literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..23a3a3f7b0ffcc0b3621b74c8e5f0615d161c948 GIT binary patch literal 675 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

*+j4F?B-KWd2a<@xjD%1?pK;2E$Fc^oB+ zmI;z-%60Lp?ezl&&&{CAXW`>I>PTr*kGGc-ywqCW{pYIx8hj9$Oj4d+lbx2U(~5r- z{Vdk!@Xk?+sPd6xBirYr_i&sX{^F!ZD6=1OwlZlJD!+iKhT-|KN*tt0v^}A&#Vr|R zmwH3Cnh>(ZU?BM_yhrh#p>ujiz1^JEQoh91e~m=GS{r@oyZ{Eb*Qt1vvNw1Dud*<& z(MbmV6*xwH=b4-z%EQn5>9vvnlx&JVTk$`JH-yb6(3^-}gcj-Lo&PcTJ@90|yWtL; z)mS>5tlS0`;w2kD&E_u3f1x`mccG6^egu7?as=BFFy+@PFEC&<0j0*tnAdcapDN|` zE(ft{9~EN!cfdD+D@pks|KD^jt(H%a)99>J_dIYASl7;|M~ml{L6cQ|@DnLcpJo3& z6Fm{l`^)L{XYe^>SGBx(c7R_?r%QV|5tm;ZZ^s*nmx!9KwC`4ll2Pau<^5=0UkZ!$77D>5p7CVOL9k&#h16&V?o-dS2vsZm)ypYJ;TD;|$ynprcm-e%3r zdO5F6$|LD)SH1=P8T1#?$$ksb*{X)4<7CUxBh2SCI01MB{H$^>_`AwO;8n_(!|gKX z1^F8IxW+QbxfK2gI6!&swGZauC5zkW3m*XUq~Z*st4iZT;q2XufQ70?ch*myiRu_7 zlRlp8tz;sw98|J}oQ{{2`Zjv^nD{*Hh`bzb%GT2bJr#W;z4y_{BnRTn!J7|TsB(C` zdvk5f>F^qS*`T}wY|zI(`aDs+ZBktvB-v`6wr)iK5G_U5ZwPeun13ScGIf&m-b4P1 zHeaPq&M%LVt);&WWUGop4FMy-Dd0rVA8^F-uch2euNTPqCYc}sHOZW1 zu5vKVLUP7(MoAEL1#zA@%rf+5^2KPGqdX$b)y5L^r|@4ukE8RDwzFoOC68>44P?n; zoVOYb-=%ymyu;YzNNw8d2bZr-F~C3y+bIvgbl_>MF~Hd^jl*f6FC0$-CAtQ|W0YsY zIWx@etc~z%?If!2)8-bPoJzKsED@OKxF3(xl$1JA`K!%(;LoGSqOCA3|k$dpTE<2 z608Q<4t9($K~b_MyOq26e)NWs&u*48O0rD(9YNkc4x%$(c|G}E%3VLsU3EooVu+#mXQ7wSze7Lc$j(>(mhu({vu|i)B%M`w*%E$(-yWIl z76(dHB@65Y2hlqW91ddGeZaH$8$cUKL=S3~peTpYtJy7%nXLOfyU04_jB*9uGk6=# z=}0;kE5B3uOXP9(P3VWvH{x@`k~NM&PsYodtun7!^k&j?s4NHQv*8iSvF!k3Pq5zG z%r(>&;1E&v&kY9gKN{SZ5k`PnAgSVdm6Cd@EKHX8iWR~mPPVMxge-+s-vYe*l zJQMJ2O^u!)TS9~3lB#!+9o1PrHkF5`WT_jBQ6QAJ`e5aphl)JyL|?s9KkcMF?Ut>N zynL5WzxvNON@_N)j4xkY%XKf~&iFHr%qR0Qzs$2ds+o70f9w!@uuHKIJC!ZEjRVGh zGqf3dvTLz#*k3|_FkqT&JL`Iffg%pX91K_55Z??q2Gj-KdcWVt6N zn|z*p6kZm#AO3^*Yw?HScY=dE>nrWWu#{a=?@e^G@WHo%r1Hp5h3S`ish@VVSK5t! z`bmH3H~nWE8BfNQ@nxJDuW^_0n@5>X<~16fd1k)Z7Bc_XA@*RG;s~~~Y|+JTu^&4o zQLfk=1Rdvz*DpsOfOi~v0(lIP{cA4X zNU|yLL}R@ecF-%=qV49;q?Z$VobD2`t#}-?9PYBO_9Z_TeSUcZviUXeEBd++w(up>?b~ub(_TCL{CIyId;%f{W8{)XW86=HUub+^gX;~B1V@1* zKzEHf_>_g42QOlvZq4%TJziC=7`BD-V%3X$1=;cV3-Ep!eFKYeFIT=xc|Cc&KAz10 z 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�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 z zvP9lEnWx6qd?3w0qR z0y%1~zU2c_#+5B9(VuLU1$C zT&nZ)JZ<6_t4;FR_)pN^Cw5^1h`=~%_W$Zyu=o|nDA6xll?8lQyB_d}u|KTO`jMMa zd6Dxter^^!nk94PK-uVo_XB##EH9!5lAWVXXR=}VbMV*WKaXz1Ta&MW<6HF?t8Rqx zRt`{pNcfn>+j)I=^`(>(5x3(xK$N#wN8?$HYPtsuB724GORxa4xastCm;m>{>o5ub z6Yv`yI9R*0v|GlG)LNpK!Jo+Q?n(7nPTWl;-&$g0uz671UG6OTY z`G#JiVh!H@?CgPO8)zJ?+(PF72$&YL+nXbA<*_kYpe;~SRt4{y2PPqZS9e)7+ zI^)RU?D~%SD)_Sc$LJ0xznZ)^d_bH0m-M}x%$Cxa4!7#dEOMEv8l@brjPsqSY*$WI z%7o>WcY8r-k;wEdu<{w}@y^A`^FSE)!f@EI~*LWLVZ@Nzz!&3F1p{Ju~qJN2A zMeim$Q_vY-vch}u%IC&2Jgg5UZ!OUsFMF17vIoDe!F=*#@jin$TO@qOp!(otP*>ug z1aY9J$?t}V&=Yo;oNZuY%NDUh`8d1*gXzb45(Qc4MDH`6XRj-J{|)5X2W?U1or7qu zj#KZY{(|<4(GQ>>qM!7c$&M4onJUk`tgU|86UY5M*=~B>$T(l4i*ir=9~j5+$~d0I zDev5~RSZP0(U)=Peb5`xNz2hq7W}Su*#Zw$AFjS!`vK%h=V|*0-h6$SfS**IEP59C zwQvocX>`t1HkGF-$12~U6rttJGozz^)!m8yN3@^q`7_w;L>?zO8~+)6hrDu~GuEmv zUa}A;DIdwcPM!shQ*K6o9^X0^XXf-JD?CV^&yBf<=H6aTx4R84(e)3){2Jxg>hZWS zc$@Kt8`$j(W-@goC)eEjivztxo-B~P{cIQlgP;kE;nN@zv!^DabMh^(RI|`YP3;D7 z7aeptSE4i7oUl04ZhPN#^vB^1Q-0qVx+-5) zkMsRiU1liv;Y3~>FN?E`-Mu__1m4;@{U=kEzm-U4XhToX{`2f)3mmGxK)s#4MARZU z0q^^GJ5Q_A_v2*y;h(DgrEm-R6>arF?Of$K>gOphQC<(uJmtmMksb9dYKdnxtizr9 z)|32l7(@0A{C3ayr)Mp~>yFpeI5&9lY@126ImRr zKRm@w_t>KQGQ??O^Cx(-odN!=eH?(}=9fR^4eAv1H1fPR;B@)Q*~nZCML%N>=eL(18;<2+j-n>7mC$$bDU&25Z@;kNE0_2Sg=!{WjG5RYr z*p#Vo8;Z^Ij`jl*xXH+~Zq(&yOaP?|uq*yU9+M~Krm(yzBc9C9{0 zi?ule_V1`~QnGaU#M_zdVmfX3k9zLv)5<^ZU#^sYQ(tCr4PK$@=(BFJQ{B+P=GmJX;(z2*M>JIWL3T!bfmmp!?^hsU$BFkQ$7 z!|8A#%!LJT6@1`W-(nu1+BT64@yHKk0n3MfSFBbf2ZS zO#K(+qcbq{8|ZQP@#xQ@e}^7T|4Hp{!0V;orz=;H4Of0deUx&ldQxuo(2F~2r~WV5 zNW9G!Kj}IPBa*9A(24&0*fhx{g}?4Od5^JGeKPrY@@;rq=uBq&A2164I+#v&TwBRj z*c(ZZLtN}K4rV=MEaM)d~J{GkfB-}7J8EZ4W^Qf#s4ziW(&TbHks>W zio?iHB|lOb$&c4=9bN

}Tn6*p!~ct0ioBVIB>Iix+?s(&=` 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 z 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 W<_%2Y*R_@8Q{n;3-^8NH#s3CaRApBH literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/data/1100100111001100011011014b3ee846deabcc7ffc48955629.lance b/be/test/format_v2/table/lance/data/multivector_ivf_pq.lance/data/1100100111001100011011014b3ee846deabcc7ffc48955629.lance new file mode 100644 index 0000000000000000000000000000000000000000..170aa4fdb0e1659e42bca8beb9d0f7b91808ccd1 GIT binary patch literal 338911 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

7F)4d+3uEn3vkya?NyQR2?Him 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%0A;)RO%k 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 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/_transactions/1-5ddfb769-46bb-4370-91f7-34cc271f6ff7.txn b/be/test/format_v2/table/lance/data/multivector_zero.lance/_transactions/1-5ddfb769-46bb-4370-91f7-34cc271f6ff7.txn new file mode 100644 index 0000000000000000000000000000000000000000..55a14c1f7f2ca173960e2cc77fb008a069a4f20c GIT binary patch literal 376 zcmd;J6jCuwNl8mGH?!0=F-uC)H8D0f(6uy7GuJgXNlrF0H%v22OEcfac7}=TBomhq zm%ujVjZaGwy$m||E&Z=-OcNJkWR&7AOHD4xFDj1DOsP;{)Dp5XU|?WmfB*q7WptmB zOG!T`F)uk)FEcMCwL-5TNiPhn%M-+PNi9jt%qbSy!N|er#NZ{#B@9(tmZq1RSP`FD zl3G+O#AIsVCBr3(kSb2hEyziYFG?&)6=F6rHS^NpQbv-^C{0TPN*5#+m1LG==I6yH zC6**-q!tUY8X6dx7JN*W`^1*JAI(W4wpkD1=BzJG=k!TdGaWa+T^%$|+gpO4ns;m#4i-3(&y? MT|dJa@H5Q)7m<=1B>(^b literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551612.manifest b/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551612.manifest new file mode 100644 index 0000000000000000000000000000000000000000..c05e2e7bae92933da7e41afbc9a9d8e94e69edb0 GIT binary patch literal 843 zcmb_bzi-n(6!tlB2uCT=0cxmXmPUn09T1y!w$JK;V@LL-xY^h$ z{s;!9t`!nuLTrekhyf%vSUT_rFoRUFxgw31wXJ1%vV8U|Ka{7rD0LZKHcg@j zrcK(e;hAlNn0DK;T(fQ2y^hNW#XXO{s14ygv;i%GF~KB{e4ihRE8AukrG{_$u1jpQ z)1kiUldc{xt)P!&NnVvDpvu=|{Jp9IK67&o)spy0?wI;>5ul~;NOTPgKoy;sd)frY z0o9PF0)rfJ1yyrXMol?4d?nx+^PQAWnKJ|QgD|F|pKF2&<|XlxHl9WK2Ev$&b>Hw! z&(^y((K}|~2DU{l@(1QW6t#keb?{%MXjZV)U#fq3y8pS>c(?cMP30kQTYCFnjL}3E jJz9oJDYDYju!g5gi@c(1`abw5e^`73NtQNm-M{k-??CK~ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551613.manifest b/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551613.manifest new file mode 100644 index 0000000000000000000000000000000000000000..02d72ed623daa89fddc21f82d8efe1516592238d GIT binary patch literal 1016 zcmeH`&ubGw6vt;K-5AGO!>BZt3c)H$Fzf7Qvzz4PuS-K!=s|j0W_M@k=w>(UPU^Nd zZ{i=}xz{3y2!h~AXu*SuH&6K!JnJNBv3L-{tMBlJFYo&v%$v`wK>+XvgbA*`TG<;b z)~C_OIiW zW7W-(5V|~MnUYGTi61Z(Zt|QM7PTGPzlhJx-1%cU^i{@^e3<5(7=pz)*Tb&^5^fV{ci_$Oi-UL1oppjwvr!>q$+B%zZ>0LNyuN@>&aOSt2dL27sX%hM9YrGW z+-}oxgP`fOJlgD9!fUpiFtj~OxI%bu%KPa5?tgp8f7pF(!tydHXXz8oYyHPjz=k0c z*T~C(KUG7Fc-^QQK%hP$ec!UP(vE`MIj3w`MKQT{>0D|amrLr6G85gRotP} zqL!tzKIkN7!s0xjcH~6uuxq!0IZ{Hh<-Qfr5d83H(&Ys zboX<)I{xzhZD|7p4XgP#6q%|>9xY&FHren@YSNwgBVDphdl!C0`)KxQ0YG5w*8Mv_ E0aX_@;Q#;t literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..3062a10bc90df3416570361c30734d418ac0e583 GIT binary patch literal 525 zcmaFBz`!7+Vv%Z`VqtD+tZQaqYNTsonrfh%WSE$wYhs+7Y-wU_k!oa`w25sSBbTp` zCzpkRfuVt+A&>-81|R_87^bEs85pIQq?jgK8kt!d8X23WC8b$fBw85imHJ);$j3{QZO4*^UJK8}9Q0Pt#=TmS$7 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..f93d3984472d99 --- /dev/null +++ b/be/test/format_v2/table/lance/data/multivector_zero.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":3} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/data/001011001101000001100111eeb02d4d5c92691235fbf98a81.lance b/be/test/format_v2/table/lance/data/multivector_zero.lance/data/001011001101000001100111eeb02d4d5c92691235fbf98a81.lance new file mode 100644 index 0000000000000000000000000000000000000000..3d605e551c80d5ffbbfdc9220e45609080ddf9d7 GIT binary patch literal 757 zcmbu7&1%9x5XW~mTN~z5yO)O0k5G_O57q_|@nWn99;D>dLoX6E%F>vCiTyeS`W$_N zK0~2TX1mc1h=+#KS=gCB^V|6^?A8e(gMS1ehMcfkf!wp8n?y8~i$=SWD`I}@Golkq z&Vcn&rt6e;w$-LiJG-;;d*DljTWHA_aFUn5-nl_ zwgDE1IH`jqDx8VLpBvPI>d{m@`;$>DUj0!9w5LJjC2hL}WeqR+1y=CvD)7RwU-QFp zG!fw}uJxi|IS>0vbBcuDASDi`%rdm|CU2mPC%eb&>zeD${Gs;}Efao-2PQ+RJ2uEW z4Kx@2Vt0q76uuy(Tx0dJ^z8EOUx*^Y4oLR5`=4lFBvg-u8X~7v-p$ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/multivector_zero.lance/data/10010111100110111101001099e8aa4d8dbb19533ad5d162fe.lance b/be/test/format_v2/table/lance/data/multivector_zero.lance/data/10010111100110111101001099e8aa4d8dbb19533ad5d162fe.lance new file mode 100644 index 0000000000000000000000000000000000000000..f0bd7eb149af453246c8d4da9cca4c8432606a0a GIT binary patch literal 617 zcmbtRO-sW-5Zzf<4Fh7_i$VMdLJ=dxHWUdxwS+TC9{@s$QDp#mU!iJO_-iCIhBbXnKBjocx8~|Tl!^V( z0Gv&kmsedM(B|7q5tnLSSnyrIGFg;us1z;EWGQAAwZYk+$_J5zg?tiWE$B@%6_q{D z2NUp|pJ5A6F0&|)g)8z{B{EM7H&EGPmJc=O6bbh&IPG!|+j#U-?seQrl!|fms1_yP zz%HRevf`#babt4bxW%=9$W{X>V}h8 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp new file mode 100644 index 00000000000000..cdc4b2b58f7253 --- /dev/null +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -0,0 +1,3750 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "format_v2/table/lance_reader.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common/config.h" +#include "common/consts.h" +#include "core/assert_cast.h" +#include "core/block/block.h" +#include "core/column/column_array.h" +#include "core/column/column_map.h" +#include "core/column/column_nullable.h" +#include "core/column/column_string.h" +#include "core/column/column_struct.h" +#include "core/column/column_vector.h" +#include "core/data_type/data_type_array.h" +#include "core/data_type/data_type_date_or_datetime_v2.h" +#include "core/data_type/data_type_decimal.h" +#include "core/data_type/data_type_factory.hpp" +#include "core/data_type/data_type_map.h" +#include "core/data_type/data_type_nullable.h" +#include "core/data_type/data_type_number.h" +#include "core/data_type/data_type_string.h" +#include "core/data_type/data_type_varbinary.h" +#include "exec/common/endian.h" +#include "exprs/create_predicate_function.h" +#include "exprs/hybrid_set.h" +#include "exprs/runtime_filter_expr.h" +#include "exprs/vdirect_in_predicate.h" +#include "exprs/vectorized_fn_call.h" +#include "exprs/vexpr.h" +#include "exprs/vexpr_context.h" +#include "exprs/vliteral.h" +#include "exprs/vslot_ref.h" +#include "format_v2/lance/lance_reader_helper.h" +#include "runtime/runtime_profile.h" +#include "runtime/runtime_state.h" +#include "storage/utils.h" +#include "util/defer_op.h" +#include "util/timezone_utils.h" +#include "util/url_coding.h" + +namespace doris::format::lance { +namespace { + +using Columns = std::vector; + +// The BE-wide Lance session reads its configs once, when a test first opens a dataset. The +// default data cache gives Foyer's disk tier 100 GiB in 2 MiB blocks: 51200 files that stay open +// for the rest of the doris_be_test process, enough to exhaust stdio file descriptors on macOS. +// Keep the cache on, but small and under the UT temp dir. +class LanceDataCacheEnvironment : public ::testing::Environment { +public: + void SetUp() override { + config::lance_data_cache_path = "./ut_dir/lance_data_cache"; + config::lance_data_cache_disk_capacity_bytes = 64L * 1024 * 1024; + } +}; + +[[maybe_unused]] ::testing::Environment* const g_lance_data_cache_env = + ::testing::AddGlobalTestEnvironment(new LanceDataCacheEnvironment); + +class FailingResidualPredicate final : public VExpr { +public: + FailingResidualPredicate() : VExpr(std::make_shared(), false) {} + + Status execute_column_impl(VExprContext*, const Block*, const Selector*, size_t, + ColumnPtr&) const override { + return Status::InternalError("Lance reader evaluated a scanner residual predicate"); + } + + const std::string& expr_name() const override { return _expr_name; } + +private: + const std::string _expr_name = "FailingResidualPredicate"; +}; + +struct LanceFixtureInfo { + int64_t version = 0; + std::vector fragment_ids; +}; + +Status get_fixture_info(const std::filesystem::path& dataset_uri, LanceFixtureInfo* info) { + std::unique_ptr dataset( + lance_dataset_open(dataset_uri.c_str(), nullptr, 0), lance_dataset_close); + if (dataset == nullptr) { + return Status::InternalError("Failed to open Lance fixture: {}", dataset_uri.string()); + } + + info->version = static_cast(lance_dataset_version(dataset.get())); + const auto fragment_count = lance_dataset_fragment_count(dataset.get()); + std::vector raw_fragment_ids(fragment_count); + if (lance_dataset_fragment_ids(dataset.get(), raw_fragment_ids.data()) != 0) { + return Status::InternalError("Failed to list Lance fragments from {}", + dataset_uri.string()); + } + info->fragment_ids.clear(); + info->fragment_ids.reserve(raw_fragment_ids.size()); + for (const auto fragment_id : raw_fragment_ids) { + info->fragment_ids.emplace_back(static_cast(fragment_id)); + } + return Status::OK(); +} + +TFileRangeDesc make_lance_range(const std::filesystem::path& dataset_uri, int64_t version, + std::vector fragment_ids) { + TFileRangeDesc range; + range.__set_format_type(TFileFormatType::FORMAT_LANCE); + TLanceFileDesc lance_params; + lance_params.__set_dataset_uri(dataset_uri.string()); + lance_params.__set_version(version); + lance_params.__set_fragment_ids(std::move(fragment_ids)); + TTableFormatFileDesc table_params; + table_params.__set_table_format_type("lance"); + table_params.__set_lance_params(std::move(lance_params)); + range.__set_table_format_params(std::move(table_params)); + return range; +} + +TFileRangeDesc make_latest_lance_range(const std::filesystem::path& dataset_uri) { + auto range = make_lance_range(dataset_uri, 0, {}); + auto& lance_params = range.table_format_params.lance_params; + lance_params.fragment_ids.clear(); + lance_params.__isset.fragment_ids = false; + return range; +} + +ColumnDefinition projected_column(std::string name, DataTypePtr type) { + return { + .identifier = Field::create_field(name), + .name = std::move(name), + .type = std::move(type), + }; +} + +ColumnDefinition projected_column(std::string name, PrimitiveType type, bool nullable) { + return projected_column(std::move(name), + DataTypeFactory::instance().create_data_type(type, nullable)); +} + +VExprContextSPtr create_int64_runtime_in_conjunct(std::string column_name, + const std::vector& values, + int filter_id) { + std::shared_ptr filter(create_set(TYPE_BIGINT, false)); + for (const auto value : values) { + filter->insert(&value); + } + TExprNode node; + node.__set_type(std::make_shared()->to_thrift()); + node.__set_node_type(TExprNodeType::IN_PRED); + node.in_predicate.__set_is_not_in(false); + node.__set_opcode(TExprOpcode::FILTER_IN); + node.__set_is_nullable(false); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child(VSlotRef::create_shared( + 0, 0, -1, make_nullable(std::make_shared()), std::move(column_name))); + return VExprContext::create_shared( + RuntimeFilterExpr::create_shared(node, std::move(predicate), 0.0, false, filter_id)); +} + +template +VExprContextSPtr create_typed_runtime_in_conjunct( + std::string column_name, const typename PrimitiveTypeTraits::CppType& value, + DataTypePtr value_type, int filter_id) { + std::shared_ptr filter(create_set(PT, false)); + filter->insert(&value); + TExprNode node; + node.__set_type(std::make_shared()->to_thrift()); + node.__set_node_type(TExprNodeType::IN_PRED); + node.in_predicate.__set_is_not_in(false); + node.__set_opcode(TExprOpcode::FILTER_IN); + node.__set_is_nullable(false); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child( + VSlotRef::create_shared(0, 0, -1, make_nullable(value_type), std::move(column_name))); + return VExprContext::create_shared( + RuntimeFilterExpr::create_shared(node, std::move(predicate), 0.0, false, filter_id)); +} + +VExprContextSPtr create_string_runtime_in_conjunct(std::string column_name, + const std::string& value, int filter_id) { + std::shared_ptr filter(create_set(TYPE_STRING, false)); + const StringRef value_ref(value.data(), value.size()); + filter->insert(&value_ref); + TExprNode node; + node.__set_type(std::make_shared()->to_thrift()); + node.__set_node_type(TExprNodeType::IN_PRED); + node.in_predicate.__set_is_not_in(false); + node.__set_opcode(TExprOpcode::FILTER_IN); + node.__set_is_nullable(false); + auto predicate = VDirectInPredicate::create_shared(node, std::move(filter), true); + predicate->add_child(VSlotRef::create_shared( + 0, 0, -1, make_nullable(std::make_shared()), std::move(column_name))); + return VExprContext::create_shared( + RuntimeFilterExpr::create_shared(node, std::move(predicate), 0.0, false, filter_id)); +} + +template +VExprContextSPtr create_runtime_range_conjunct( + std::string column_name, TExprOpcode::type opcode, + const typename PrimitiveTypeTraits::CppType& value, DataTypePtr value_type, + int filter_id, bool null_aware = false) { + const auto nullable_value_type = make_nullable(value_type); + const auto result_type = make_nullable(std::make_shared()); + TFunctionName function_name; + function_name.__set_function_name(opcode == TExprOpcode::GE ? "ge" : "le"); + TFunction function; + function.__set_name(function_name); + function.__set_binary_type(TFunctionBinaryType::BUILTIN); + function.__set_arg_types({nullable_value_type->to_thrift(), value_type->to_thrift()}); + function.__set_ret_type(result_type->to_thrift()); + function.__set_has_var_args(false); + + TExprNode predicate_node; + predicate_node.__set_node_type(TExprNodeType::BINARY_PRED); + predicate_node.__set_opcode(opcode); + predicate_node.__set_type(result_type->to_thrift()); + predicate_node.__set_fn(function); + predicate_node.__set_num_children(2); + predicate_node.__set_is_nullable(true); + auto predicate = VectorizedFnCall::create_shared(predicate_node); + predicate->add_child( + VSlotRef::create_shared(0, 0, -1, nullable_value_type, std::move(column_name))); + predicate->add_child(VLiteral::create_shared(value_type, Field::create_field(value))); + + TExprNode wrapper_node; + wrapper_node.__set_type(std::make_shared()->to_thrift()); + wrapper_node.__set_is_nullable(false); + return VExprContext::create_shared(RuntimeFilterExpr::create_shared( + wrapper_node, std::move(predicate), 0.0, null_aware, filter_id)); +} + +Status write_lance_record_batch(const std::filesystem::path& dataset_uri, + const std::shared_ptr& batch) { + auto batch_reader = arrow::RecordBatchReader::Make({batch}, batch->schema()); + if (!batch_reader.ok()) { + return Status::InternalError("create Arrow record batch reader failed: {}", + batch_reader.status().message()); + } + ArrowArrayStream stream {}; + const auto export_status = + arrow::ExportRecordBatchReader(std::move(batch_reader).ValueUnsafe(), &stream); + if (!export_status.ok()) { + return Status::InternalError("export Arrow record batch reader failed: {}", + export_status.message()); + } + static_cast( + ::lance::Dataset::write(dataset_uri.string(), &stream, ::lance::WriteMode::Create)); + return Status::OK(); +} + +void add_output_columns(Block* block, const Columns& columns) { + for (const auto& column : columns) { + block->insert({column.type->create_column(), column.type, column.name}); + } +} + +Status init_reader(LanceTableReader* reader, const Columns& projected_columns, + RuntimeState* runtime_state, RuntimeProfile* profile, + TFileScanRangeParams* scan_params, VExprContextSPtrs conjuncts = {}) { + return reader->init({ + .projected_columns = projected_columns, + .conjuncts = std::move(conjuncts), + .format = FileFormat::LANCE, + .scan_params = scan_params, + .io_ctx = nullptr, + .runtime_state = runtime_state, + .scanner_profile = profile, + }); +} + +Status convert_record_batch_for_test(RuntimeState* runtime_state, const Columns& projected_columns, + const std::shared_ptr& record_batch, + Block* block, size_t* rows) { + LanceRecordBatchConverter converter; + RETURN_IF_ERROR(converter.init(runtime_state, projected_columns, SearchKind::NORMAL)); + return converter.convert_record_batch_to_block(record_batch, block, std::nullopt, rows); +} + +Status prepare_range(LanceTableReader* reader, TFileRangeDesc range, + std::optional global_rowid_context = std::nullopt) { + // Assign after value initialization so adding optional split state cannot break this fixture's + // designated initializer under -Wmissing-designated-field-initializers. + SplitReadOptions options; + options.all_runtime_filters_applied = true; + options.current_range = std::move(range); + options.current_split_format = FileFormat::LANCE; + options.global_rowid_context = global_rowid_context; + return reader->prepare_split(options); +} + +Status prepare_fixture(LanceTableReader* reader, const std::filesystem::path& dataset_uri, + const LanceFixtureInfo& fixture, std::vector fragment_ids, + std::optional global_rowid_context = std::nullopt) { + return prepare_range(reader, + make_lance_range(dataset_uri, fixture.version, std::move(fragment_ids)), + global_rowid_context); +} + +TFileScanRangeParams make_float32_vector_search_params( + const std::array& query_values, int64_t top_k, int64_t offset, + std::optional filter = std::nullopt) { + std::string encoded_values(query_values.size() * sizeof(float), '\0'); + for (size_t i = 0; i < query_values.size(); ++i) { + LittleEndian::Store32(encoded_values.data() + i * sizeof(float), + std::bit_cast(query_values[i])); + } + + TSearchVector query_vector; + query_vector.__set_element_type(TVectorElementType::FLOAT32); + query_vector.__set_dimension(static_cast(query_values.size())); + query_vector.__set_values(std::move(encoded_values)); + + TVectorSearchParams vector_params; + vector_params.__set_column("embedding"); + vector_params.__set_query_vector(std::move(query_vector)); + vector_params.__set_top_k(top_k); + vector_params.__set_offset(offset); + vector_params.__set_metric(TVectorMetric::L2); + + TExternalSearchQuery query; + query.__set_vector_search(std::move(vector_params)); + TExternalSearchRequest request; + request.__set_schema_version(1); + request.__set_search_query(std::move(query)); + TVectorSearchOptions vector_search_options; + vector_search_options.__set_use_index(false); + request.__set_vector_search_options(std::move(vector_search_options)); + if (filter.has_value()) { + TSearchFilter search_filter; + search_filter.__set_format(TSearchFilterFormat::SQL); + search_filter.__set_payload(*filter); + request.__set_search_filter(std::move(search_filter)); + } + + TLanceScanParams lance_scan_params; + lance_scan_params.__set_external_search_request(std::move(request)); + TFileScanRangeParams scan_params; + scan_params.__set_lance_scan_params(std::move(lance_scan_params)); + return scan_params; +} + +TFileScanRangeParams make_full_text_search_params( + std::string query_text, int64_t top_k, int64_t offset, + TFtsCoverageMode::type coverage_mode = TFtsCoverageMode::STRICT, + std::optional filter = std::nullopt, + TFtsMatchOperator::type match_operator = TFtsMatchOperator::OR, + int32_t max_fuzzy_distance = 0) { + TFullTextSearchParams full_text_params; + full_text_params.__set_column("body"); + full_text_params.__set_query(std::move(query_text)); + full_text_params.__set_top_k(top_k); + full_text_params.__set_offset(offset); + full_text_params.__set_coverage_mode(coverage_mode); + full_text_params.__set_query_type(TFtsQueryType::MATCH); + full_text_params.__set_match_operator(match_operator); + full_text_params.__set_max_fuzzy_distance(max_fuzzy_distance); + + TExternalSearchQuery query; + query.__set_full_text_search(std::move(full_text_params)); + TExternalSearchRequest request; + request.__set_schema_version(1); + request.__set_search_query(std::move(query)); + if (filter.has_value()) { + TSearchFilter search_filter; + search_filter.__set_format(TSearchFilterFormat::SQL); + search_filter.__set_payload(*filter); + request.__set_search_filter(std::move(search_filter)); + } + + TLanceScanParams lance_scan_params; + lance_scan_params.__set_external_search_request(std::move(request)); + TFileScanRangeParams scan_params; + scan_params.__set_lance_scan_params(std::move(lance_scan_params)); + return scan_params; +} + +TFileScanRangeParams make_phrase_search_params( + std::string query_text, int64_t top_k, int64_t offset, int32_t slop, + TFtsCoverageMode::type coverage_mode = TFtsCoverageMode::STRICT, + std::optional filter = std::nullopt) { + auto scan_params = make_full_text_search_params(std::move(query_text), top_k, offset, + coverage_mode, std::move(filter)); + auto& full_text = + scan_params.lance_scan_params.external_search_request.search_query.full_text_search; + full_text.__set_query_type(TFtsQueryType::PHRASE); + full_text.__isset.match_operator = false; + full_text.__isset.max_fuzzy_distance = false; + full_text.__set_phrase_slop(slop); + return scan_params; +} + +Status get_index_segment_uuids(const std::filesystem::path& dataset_uri, const char* index_name, + std::vector* encoded_uuids) { + std::unique_ptr dataset( + lance_dataset_open(dataset_uri.c_str(), nullptr, 0), lance_dataset_close); + if (dataset == nullptr) { + return Status::InternalError("Failed to open Lance fixture: {}", dataset_uri.string()); + } + const auto segment_count = lance_dataset_index_segment_count(dataset.get(), index_name); + if (segment_count == 0) { + return Status::InternalError("Lance fixture index '{}' has no segments", index_name); + } + std::vector raw_uuids(segment_count * 16); + uint64_t actual_count = 0; + if (lance_dataset_index_segments(dataset.get(), index_name, raw_uuids.data(), segment_count, + &actual_count) != 0 || + actual_count != segment_count) { + return Status::InternalError("Failed to enumerate Lance fixture index '{}' segments", + index_name); + } + encoded_uuids->clear(); + encoded_uuids->reserve(segment_count); + for (size_t index = 0; index < segment_count; ++index) { + encoded_uuids->emplace_back(reinterpret_cast(raw_uuids.data() + index * 16), + 16); + } + return Status::OK(); +} + +TFileRangeDesc make_full_text_search_range(const std::filesystem::path& dataset_uri, + const LanceFixtureInfo& fixture, + const char* index_name) { + auto range = make_lance_range(dataset_uri, fixture.version, fixture.fragment_ids); + std::vector segment_uuids; + EXPECT_TRUE(get_index_segment_uuids(dataset_uri, index_name, &segment_uuids).ok()); + range.table_format_params.lance_params.__set_index_segment_uuids(std::move(segment_uuids)); + return range; +} + +TEST(LanceTableReaderVectorSearchTest, RejectsMalformedVectorPayloadBeforeReadingIt) { + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_vector_search_invalid_request"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 0); + scan_params.lance_scan_params.external_search_request.search_query.vector_search.query_vector + .__set_dimension(4); + + LanceTableReader reader; + const auto status = init_reader(&reader, columns, &state, &profile, &scan_params); + + EXPECT_FALSE(status.ok()); + EXPECT_NE(status.to_string().find("query vector byte size"), std::string::npos); +} + +TEST(LanceTableReaderVectorSearchTest, ValidatesMultiVectorWireShapeBeforeDatasetAccess) { + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + auto valid = make_float32_vector_search_params({1.0F, 0.0F, 0.0F}, 4, 0); + auto& request = valid.lance_scan_params.external_search_request; + request.__set_schema_version(1); + auto& query = request.search_query.vector_search.query_vector; + query.__set_dimension(3); + query.__set_num_vectors(1); + const auto check = [&](TFileScanRangeParams params, bool expected) { + RuntimeProfile profile("multi_vector_validation"); + LanceTableReader reader; + EXPECT_EQ(expected, init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + }; + check(valid, true); + auto excessive_work = valid; + excessive_work.lance_scan_params.external_search_request.search_query.vector_search.__set_top_k( + 100001); + check(excessive_work, false); + excessive_work.lance_scan_params.external_search_request.search_query.vector_search.__set_top_k( + 1); + excessive_work.lance_scan_params.external_search_request.vector_search_options + .__set_refine_factor(std::numeric_limits::max()); + check(excessive_work, false); + for (const int count : {0, -1, 2, std::numeric_limits::max()}) { + auto invalid = valid; + invalid.lance_scan_params.external_search_request.search_query.vector_search.query_vector + .__set_num_vectors(count); + check(invalid, false); + } + auto unsupported_version = valid; + unsupported_version.lance_scan_params.external_search_request.__set_schema_version(2); + check(unsupported_version, false); + auto missing_count = valid; + missing_count.lance_scan_params.external_search_request.search_query.vector_search.query_vector + .__isset.num_vectors = false; + // Without num_vectors, the same payload is an ordinary single-vector request. + check(missing_count, true); + auto hamming = valid; + hamming.lance_scan_params.external_search_request.search_query.vector_search.__set_metric( + TVectorMetric::HAMMING); + check(hamming, false); + for (const auto type : {TVectorElementType::INT8, TVectorElementType::UINT8}) { + auto integer = valid; + auto& q = integer.lance_scan_params.external_search_request.search_query.vector_search + .query_vector; + q.__set_element_type(type); + q.__set_values(std::string(3, '\0')); + check(integer, false); + } +} + +TEST(LanceTableReaderFullTextSearchTest, ValidatesRequestAndScoreTypeBeforeDatasetAccess) { + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile valid_profile("lance_fts_valid_request"); + auto valid_params = make_full_text_search_params("lance", 4, 1); + LanceTableReader valid_reader; + ASSERT_TRUE(init_reader(&valid_reader, columns, &state, &valid_profile, &valid_params).ok()); + + RuntimeProfile empty_query_profile("lance_fts_empty_query"); + auto empty_query_params = make_full_text_search_params("", 4, 0); + LanceTableReader empty_query_reader; + const auto empty_query_status = init_reader(&empty_query_reader, columns, &state, + &empty_query_profile, &empty_query_params); + EXPECT_FALSE(empty_query_status.ok()); + EXPECT_NE(empty_query_status.to_string().find("non-empty query"), std::string::npos); + + RuntimeProfile coverage_profile("lance_fts_invalid_coverage"); + auto invalid_coverage_params = + make_full_text_search_params("lance", 4, 0, static_cast(99)); + LanceTableReader coverage_reader; + const auto coverage_status = init_reader(&coverage_reader, columns, &state, &coverage_profile, + &invalid_coverage_params); + EXPECT_FALSE(coverage_status.ok()); + EXPECT_NE(coverage_status.to_string().find("STRICT or INDEX_ONLY"), std::string::npos); + + const Columns wrong_score_columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_DOUBLE, true), + }; + RuntimeProfile score_profile("lance_fts_invalid_score_type"); + auto score_params = make_full_text_search_params("lance", 4, 0); + LanceTableReader score_reader; + const auto score_status = + init_reader(&score_reader, wrong_score_columns, &state, &score_profile, &score_params); + EXPECT_FALSE(score_status.ok()); + EXPECT_NE(score_status.to_string().find("must have Doris FLOAT type"), std::string::npos); +} + +TEST(LanceTableReaderFullTextSearchTest, ValidatesQuerySpecificParameters) { + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + + RuntimeProfile phrase_profile("lance_fts_phrase_request"); + auto phrase_params = make_phrase_search_params("lance search", 4, 0, 1); + LanceTableReader phrase_reader; + ASSERT_TRUE(init_reader(&phrase_reader, columns, &state, &phrase_profile, &phrase_params).ok()); + + RuntimeProfile fuzzy_profile("lance_fts_fuzzy_request"); + auto fuzzy_params = make_full_text_search_params("lance", 4, 0, TFtsCoverageMode::STRICT, + std::nullopt, TFtsMatchOperator::OR, 1); + LanceTableReader fuzzy_reader; + const auto fuzzy_status = + init_reader(&fuzzy_reader, columns, &state, &fuzzy_profile, &fuzzy_params); + EXPECT_FALSE(fuzzy_status.ok()); + EXPECT_NE(fuzzy_status.to_string().find("does not yet support max_fuzzy_distance=1"), + std::string::npos); + + RuntimeProfile match_slop_profile("lance_fts_match_with_slop"); + auto match_slop_params = make_full_text_search_params("lance", 4, 0); + match_slop_params.lance_scan_params.external_search_request.search_query.full_text_search + .__set_phrase_slop(1); + LanceTableReader match_slop_reader; + const auto match_slop_status = init_reader(&match_slop_reader, columns, &state, + &match_slop_profile, &match_slop_params); + EXPECT_FALSE(match_slop_status.ok()); + EXPECT_NE(match_slop_status.to_string().find("MATCH query cannot set phrase_slop"), + std::string::npos); + + RuntimeProfile negative_slop_profile("lance_fts_negative_phrase_slop"); + auto negative_slop_params = make_phrase_search_params("lance search", 4, 0, -1); + LanceTableReader negative_slop_reader; + const auto negative_slop_status = init_reader(&negative_slop_reader, columns, &state, + &negative_slop_profile, &negative_slop_params); + EXPECT_FALSE(negative_slop_status.ok()); + EXPECT_NE(negative_slop_status.to_string().find("phrase_slop must be non-negative"), + std::string::npos); +} + +std::vector> read_full_text_search_rows(LanceTableReader* reader, + Block* block) { + std::vector> rows; + bool eos = false; + while (!eos) { + EXPECT_TRUE(reader->get_block(block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block->get_by_position(0).column); + const auto& scores = assert_cast(*block->get_by_position(1).column); + const auto& score_values = assert_cast(scores.get_nested_column()); + for (size_t row = 0; row < block->rows(); ++row) { + EXPECT_EQ(0, scores.get_null_map_data()[row]); + rows.emplace_back(row_ids.get_data()[row], score_values.get_data()[row]); + } + } + return rows; +} + +TEST(LanceTableReaderFullTextSearchTest, SearchesIndexedSnapshotWithOptionalScoreProjection) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/fts_indexed.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + auto range = make_full_text_search_range(dataset_uri, fixture, "body_fts"); + + const Columns scored_columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile scored_profile("lance_fts_indexed_fixture"); + auto scored_params = make_full_text_search_params("lance", 4, 0); + LanceTableReader scored_reader; + ASSERT_TRUE(init_reader(&scored_reader, scored_columns, &state, &scored_profile, &scored_params) + .ok()); + ASSERT_TRUE(prepare_range(&scored_reader, range).ok()); + Block scored_block; + add_output_columns(&scored_block, scored_columns); + const auto scored_rows = read_full_text_search_rows(&scored_reader, &scored_block); + ASSERT_EQ(4U, scored_rows.size()); + EXPECT_EQ((std::vector {3, 2, 1, 7}), + (std::vector {scored_rows[0].first, scored_rows[1].first, + scored_rows[2].first, scored_rows[3].first})); + for (size_t index = 0; index < scored_rows.size(); ++index) { + EXPECT_GT(scored_rows[index].second, 0.0F); + if (index > 0) { + EXPECT_GT(scored_rows[index - 1].second, scored_rows[index].second); + } + } + EXPECT_TRUE(scored_reader.close().ok()); + + // Lance returns _score for ordering even when Doris does not materialize it. The reader must + // ignore that generated column while still rejecting any unexpected _rowid output. + const Columns row_id_columns {projected_column("row_id", TYPE_BIGINT, false)}; + RuntimeProfile row_id_profile("lance_fts_without_score_projection_fixture"); + auto row_id_params = make_full_text_search_params("lance", 2, 0); + LanceTableReader row_id_reader; + ASSERT_TRUE(init_reader(&row_id_reader, row_id_columns, &state, &row_id_profile, &row_id_params) + .ok()); + ASSERT_TRUE(prepare_range(&row_id_reader, range).ok()); + Block row_id_block; + add_output_columns(&row_id_block, row_id_columns); + std::vector row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(row_id_reader.get_block(&row_id_block, &eos).ok()); + if (!eos) { + const auto& values = + assert_cast(*row_id_block.get_by_position(0).column); + row_ids.insert(row_ids.end(), values.get_data().begin(), values.get_data().end()); + } + } + EXPECT_EQ((std::vector {3, 2}), row_ids); + EXPECT_TRUE(row_id_reader.close().ok()); +} + +TEST(LanceTableReaderFullTextSearchTest, SupportsMatchAndPhraseQueries) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/fts_indexed.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + auto range = make_full_text_search_range(dataset_uri, fixture, "body_fts"); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + + RuntimeProfile match_and_profile("lance_fts_match_and"); + auto match_and_params = make_full_text_search_params( + "lance storage", 10, 0, TFtsCoverageMode::STRICT, std::nullopt, TFtsMatchOperator::AND); + LanceTableReader match_and_reader; + ASSERT_TRUE( + init_reader(&match_and_reader, columns, &state, &match_and_profile, &match_and_params) + .ok()); + ASSERT_TRUE(prepare_range(&match_and_reader, range).ok()); + Block match_and_block; + add_output_columns(&match_and_block, columns); + const auto match_and_rows = read_full_text_search_rows(&match_and_reader, &match_and_block); + ASSERT_EQ(1U, match_and_rows.size()); + EXPECT_EQ(7, match_and_rows[0].first); + EXPECT_TRUE(match_and_reader.close().ok()); + + RuntimeProfile phrase_profile("lance_fts_phrase_exact"); + auto phrase_params = make_phrase_search_params("lance search", 10, 0, 0); + LanceTableReader phrase_reader; + ASSERT_TRUE(init_reader(&phrase_reader, columns, &state, &phrase_profile, &phrase_params).ok()); + ASSERT_TRUE(prepare_range(&phrase_reader, range).ok()); + Block phrase_block; + add_output_columns(&phrase_block, columns); + const auto phrase_rows = read_full_text_search_rows(&phrase_reader, &phrase_block); + std::vector phrase_row_ids; + phrase_row_ids.reserve(phrase_rows.size()); + for (const auto& [row_id, score] : phrase_rows) { + EXPECT_GT(score, 0.0F); + phrase_row_ids.emplace_back(row_id); + } + std::sort(phrase_row_ids.begin(), phrase_row_ids.end()); + EXPECT_EQ((std::vector {1, 2, 3}), phrase_row_ids); + EXPECT_TRUE(phrase_reader.close().ok()); + + RuntimeProfile phrase_slop_profile("lance_fts_phrase_slop"); + auto phrase_slop_params = make_phrase_search_params("lance engine", 10, 0, 1); + LanceTableReader phrase_slop_reader; + ASSERT_TRUE(init_reader(&phrase_slop_reader, columns, &state, &phrase_slop_profile, + &phrase_slop_params) + .ok()); + ASSERT_TRUE(prepare_range(&phrase_slop_reader, range).ok()); + Block phrase_slop_block; + add_output_columns(&phrase_slop_block, columns); + const auto phrase_slop_rows = + read_full_text_search_rows(&phrase_slop_reader, &phrase_slop_block); + std::vector phrase_slop_row_ids; + phrase_slop_row_ids.reserve(phrase_slop_rows.size()); + for (const auto& [row_id, score] : phrase_slop_rows) { + EXPECT_GT(score, 0.0F); + phrase_slop_row_ids.emplace_back(row_id); + } + std::sort(phrase_slop_row_ids.begin(), phrase_slop_row_ids.end()); + EXPECT_EQ((std::vector {1, 2, 3}), phrase_slop_row_ids); + EXPECT_TRUE(phrase_slop_reader.close().ok()); +} + +TEST(LanceTableReaderVectorSearchTest, RejectsMalformedIndexSegmentUuid) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_vector_search_invalid_index_segment_uuid"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 0); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + auto range = make_lance_range(dataset_uri, fixture.version, fixture.fragment_ids); + range.table_format_params.lance_params.__set_index_segment_uuids({"too-short"}); + + const auto status = prepare_range(&reader, std::move(range)); + + EXPECT_FALSE(status.ok()); + EXPECT_NE(status.to_string().find("must contain 16 bytes"), std::string::npos); + EXPECT_TRUE(reader.close().ok()); +} + +std::vector> read_vector_search_rows(LanceTableReader* reader, + Block* block) { + std::vector> rows; + bool eos = false; + while (!eos) { + EXPECT_TRUE(reader->get_block(block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block->get_by_position(0).column); + const auto& distances = + assert_cast(*block->get_by_position(1).column); + const auto& distance_values = + assert_cast(distances.get_nested_column()); + for (size_t row = 0; row < block->rows(); ++row) { + EXPECT_EQ(0, distances.get_null_map_data()[row]); + rows.emplace_back(row_ids.get_data()[row], distance_values.get_data()[row]); + } + } + return rows; +} + +GlobalRowLoacationV2 decode_lance_row_id(const ColumnString& column, size_t row) { + const auto encoded = column.get_data_at(row); + EXPECT_EQ(sizeof(GlobalRowLoacationV2), encoded.size); + GlobalRowLoacationV2 location(ROW_VERSION::LANCE_DATASET_ROW_ID, 0, 0, 0); + if (encoded.size == sizeof(location)) { + std::memcpy(&location, encoded.data, sizeof(location)); + } + return location; +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorScoresFiltersOffsetsAndIndexedCoverage) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + ASSERT_EQ(2, fixture.fragment_ids.size()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + TQueryOptions options; + options.__set_batch_size(1); + state.set_query_options(options); + for (const auto type : + {TVectorElementType::FLOAT16, TVectorElementType::FLOAT32, TVectorElementType::FLOAT64}) { + const size_t width = type == TVectorElementType::FLOAT16 ? 2 + : type == TVectorElementType::FLOAT32 ? 4 + : 8; + const std::string column = type == TVectorElementType::FLOAT16 ? "vectors16" + : type == TVectorElementType::FLOAT32 ? "vectors32" + : "vectors64"; + std::string bytes(4 * width, '\0'); + for (const size_t i : {0U, 3U}) { + if (width == 2) LittleEndian::Store16(bytes.data() + i * width, 0x3c00); + if (width == 4) + LittleEndian::Store32(bytes.data() + i * width, std::bit_cast(1.0F)); + if (width == 8) + LittleEndian::Store64(bytes.data() + i * width, std::bit_cast(1.0)); + } + for (const bool indexed : {false, true}) { + for (const bool filtered : {false, true}) { + SCOPED_TRACE(column + " indexed=" + std::to_string(indexed) + + " filtered=" + std::to_string(filtered)); + RuntimeProfile profile("multi_vector_search"); + auto params = make_float32_vector_search_params({0, 0, 0}, 10, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + request.vector_search_options.__set_use_index(indexed); + request.vector_search_options.__set_nprobes(1); + auto& search = request.search_query.vector_search; + search.__set_column(column); + search.__set_metric(indexed ? TVectorMetric::COSINE : TVectorMetric::L2); + auto& q = search.query_vector; + q.__set_dimension(2); + q.__set_num_vectors(2); + q.__set_element_type(type); + q.__set_values(bytes); + if (filtered) { + TSearchFilter filter; + filter.__set_format(TSearchFilterFormat::SQL); + filter.__set_payload("row_id >= 2"); + request.__set_search_filter(filter); + search.__set_offset(1); + search.__set_top_k(2); + } + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(filtered ? 2 : 4, rows.size()); + // L2 is sum of per-query nearest squared distances; null/empty rows never rank. + if (!indexed) { + const std::vector> expected = + filtered ? std::vector> {{2, 6.0F}, {3, 8.0F}} + : std::vector> { + {1, 0.0F}, {6, 2.0F}, {2, 6.0F}, {3, 8.0F}}; + EXPECT_EQ(expected, rows); + } else { + std::sort(rows.begin(), rows.end()); + const std::vector> expected = + filtered ? std::vector< + std::pair> {{2, 1.0F}, + {6, + 2.0F - std::sqrt(2.0F)}} + : std::vector> { + {1, 0.0F}, + {2, 1.0F}, + {3, 0.0F}, + {6, 2.0F - std::sqrt(2.0F)}}; + // Row 6 was appended after index creation and must use the same score scale. + for (size_t i = 0; i < rows.size(); ++i) { + EXPECT_EQ(expected[i].first, rows[i].first); + EXPECT_NEAR(expected[i].second, rows[i].second, 1e-5); + } + } + EXPECT_TRUE(reader.close().ok()); + if (indexed) { + // Warm searches still perform scoring even when every index partition is cached. + for (const char* name : + {"LanceIndexPartitionLoadTime", "LanceIndexCpuQueueWaitTime", + "LanceIndexSearchTime", "LanceIndexQueryPrepareTime", + "LanceIndexDistanceTopKTime", "LanceIndexResultMaterializeTime"}) { + auto* counter = profile.get_counter(name); + ASSERT_NE(nullptr, counter) << name; + EXPECT_GT(counter->value(), 0) << name; + } + // Read metrics after close: lance-c publishes its final execution summary + // when the stream is released, including for an early top-k stop. + for (const char* name : {"LancePrefilterLoads", "LancePrefilterInputRows", + "LancePrefilterInputBatches", "LancePrefilterRowIds", + "LancePrefilterLoadTime", "LancePrefilterInputTime", + "LancePrefilterBuildTime"}) { + auto* counter = profile.get_counter(name); + ASSERT_NE(nullptr, counter) << name; + if (filtered) { + EXPECT_GT(counter->value(), 0) << name; + } else { + EXPECT_EQ(counter->value(), 0) << name; + } + } + } + } + } + } +} + +std::vector representative_multi_vector(int id, int subvector) { + std::vector result(128); + for (int j = 0; j < 128; ++j) { + result[j] = ((id * 17 + subvector * 29 + j * 13 + j * j * 7 + id * j * 3) % 1009 - 504) / + 512.0F; + } + return result; +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorSegmentTopKMatchesIndependentGlobalOracle) { + const auto first = representative_multi_vector(7, 0); + const auto second = representative_multi_vector(11, 1); + std::vector query = first; + query.insert(query.end(), second.begin(), second.end()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const auto* kind : {"flat", "pq"}) { + const std::filesystem::path uri = std::string("./be/test/format_v2/table/lance/data/") + + "multivector_ivf_" + kind + ".lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + ASSERT_EQ(3, fixture.fragment_ids.size()); + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(uri, "vectors_idx", &segments).ok()); + ASSERT_EQ(2, segments.size()); + for (const bool filtered : {false, true}) { + std::vector> oracle; + for (int id = 1; id <= 768; ++id) { + if (filtered && id % 5 != 0) continue; + double score = 0; + for (const auto& q : {first, second}) { + double best = std::numeric_limits::infinity(); + for (int sub = 0; sub < 1 + id % 4; ++sub) { + const auto v = representative_multi_vector(id, sub); + double dot = 0, q_norm = 0, v_norm = 0; + for (size_t j = 0; j < v.size(); ++j) { + dot += static_cast(q[j]) * v[j]; + q_norm += static_cast(q[j]) * q[j]; + v_norm += static_cast(v[j]) * v[j]; + } + best = std::min(best, 1.0 - dot / std::sqrt(q_norm * v_norm)); + } + score += best; + } + oracle.emplace_back(id, static_cast(score)); + } + const auto order = [](const auto& a, const auto& b) { + return std::tie(a.second, a.first) < std::tie(b.second, b.first); + }; + std::sort(oracle.begin(), oracle.end(), order); + for (const int batch_size : {1, 64}) { + TQueryOptions options; + options.__set_batch_size(batch_size); + state.set_query_options(options); + std::vector> candidates; + for (int split = 0; split < 3; ++split) { + SCOPED_TRACE(std::string(kind) + " split=" + std::to_string(split) + + " filtered=" + std::to_string(filtered) + + " batch=" + std::to_string(batch_size)); + RuntimeProfile profile("multi_vector_segment_topk"); + // FE sends top_k + offset to each split, and applies offset only after merging. + auto params = make_float32_vector_search_params({0, 0, 0}, 20, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + request.vector_search_options.__set_use_index(split < 2); + request.vector_search_options.__set_nprobes(4); + request.vector_search_options.__set_refine_factor(64); + auto& search = request.search_query.vector_search; + search.__set_column("vectors"); + search.__set_metric(TVectorMetric::COSINE); + search.query_vector.__set_dimension(128); + search.query_vector.__set_num_vectors(2); + std::string bytes(query.size() * sizeof(float), '\0'); + for (size_t j = 0; j < query.size(); ++j) { + LittleEndian::Store32(bytes.data() + j * sizeof(float), + std::bit_cast(query[j])); + } + search.query_vector.__set_values(bytes); + if (filtered) { + TSearchFilter filter; + filter.__set_format(TSearchFilterFormat::SQL); + filter.__set_payload("row_id % 5 = 0"); + request.__set_search_filter(filter); + } + auto range = + make_lance_range(uri, fixture.version, {fixture.fragment_ids[split]}); + if (split < 2) { + range.table_format_params.lance_params.__set_index_segment_uuids( + {segments[split]}); + } + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_range(&reader, range).ok()); + Block block; + add_output_columns(&block, columns); + auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(20, rows.size()); + for (const auto& row : rows) EXPECT_EQ(split, (row.first - 1) % 3); + candidates.insert(candidates.end(), rows.begin(), rows.end()); + EXPECT_TRUE(reader.close().ok()); + } + std::sort(candidates.begin(), candidates.end(), order); + std::set unique; + for (const auto& row : candidates) ASSERT_TRUE(unique.insert(row.first).second); + for (int offset : {0, 7}) { + for (int j = 0; j < 13; ++j) { + EXPECT_EQ(oracle[offset + j].first, candidates[offset + j].first); + EXPECT_NEAR(oracle[offset + j].second, candidates[offset + j].second, 2e-5); + } + } + } + } + } +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorTopOnePreservesPrecisionAndBatchIndependence) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const int batch_size : {1, 2, 1024}) { + TQueryOptions options; + options.__set_batch_size(batch_size); + state.set_query_options(options); + for (const bool indexed : {false, true}) { + SCOPED_TRACE("batch_size=" + std::to_string(batch_size) + + " indexed=" + std::to_string(indexed)); + auto params = make_float32_vector_search_params({0, 0, 0}, 1, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + request.vector_search_options.__set_use_index(indexed); + request.vector_search_options.__set_nprobes(1); + auto& search = request.search_query.vector_search; + search.__set_column(indexed ? "batch_vectors" : "tiny_vectors"); + search.__set_metric(indexed ? TVectorMetric::COSINE : TVectorMetric::L2); + auto& query = search.query_vector; + query.__set_dimension(2); + query.__set_num_vectors(indexed ? 2 : 1); + std::string values(indexed ? 16 : 8, '\0'); + if (indexed) { + LittleEndian::Store32(values.data(), std::bit_cast(1.0F)); + LittleEndian::Store32(values.data() + 12, std::bit_cast(1.0F)); + } + query.__set_values(values); + RuntimeProfile profile("multi_vector_top_one"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(1, rows.size()); + EXPECT_EQ(indexed ? 3 : 2, rows[0].first); + EXPECT_NEAR(indexed ? 2.0F - std::sqrt(2.0F) : 1e-8F, rows[0].second, + indexed ? 1e-6F : 1e-13F); + EXPECT_TRUE(reader.close().ok()); + } + } +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorCosineMasksUndefinedRows) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector_zero.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const bool indexed : {false, true}) { + for (const bool zero_query : {false, true}) { + auto params = make_float32_vector_search_params({0, 0, 0}, 10, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + request.vector_search_options.__set_use_index(indexed); + request.vector_search_options.__set_nprobes(1); + auto& search = request.search_query.vector_search; + search.__set_column("vectors"); + search.__set_metric(TVectorMetric::COSINE); + auto& query = search.query_vector; + query.__set_dimension(2); + query.__set_num_vectors(2); + std::string values(16, '\0'); + if (!zero_query) { + LittleEndian::Store32(values.data(), std::bit_cast(1.0F)); + } + LittleEndian::Store32(values.data() + 12, std::bit_cast(1.0F)); + query.__set_values(values); + RuntimeProfile profile("multi_vector_cosine_zero_norm"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + auto rows = read_vector_search_rows(&reader, &block); + std::sort(rows.begin(), rows.end()); + // Undefined pairs cannot poison valid matches in the same row or other fragments. + const std::vector> expected = + zero_query ? std::vector> {} + : std::vector> {{2, 1}, {3, 1}}; + EXPECT_EQ(expected, rows); + EXPECT_TRUE(reader.close().ok()); + } + } +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorDefaultMetricIsConsistentAcrossFragments) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + std::vector> all_rows; + for (const auto fragment : fixture.fragment_ids) { + auto params = make_float32_vector_search_params({0, 0, 0}, 10, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + request.vector_search_options.__set_use_index(true); + auto& search = request.search_query.vector_search; + search.__set_column("vectors32"); + search.__isset.metric = false; + auto& query = search.query_vector; + query.__set_dimension(2); + query.__set_num_vectors(1); + std::string values(8, '\0'); + LittleEndian::Store32(values.data(), std::bit_cast(1.0F)); + query.__set_values(values); + RuntimeProfile profile("multi_vector_default_metric"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, {fragment}).ok()); + Block block; + add_output_columns(&block, columns); + auto rows = read_vector_search_rows(&reader, &block); + all_rows.insert(all_rows.end(), rows.begin(), rows.end()); + EXPECT_TRUE(reader.close().ok()); + } + std::sort(all_rows.begin(), all_rows.end()); + EXPECT_EQ((std::vector> {{1, 0}, {2, 1}, {3, 4}, {6, 1}}), all_rows); +} + +TEST(LanceTableReaderVectorSearchTest, MultiVectorRejectsActualNullAndNonFiniteElements) { + const std::filesystem::path uri = + "./be/test/format_v2/table/lance/data/multivector_invalid_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const auto& [bits, type, width] : {std::tuple {16, TVectorElementType::FLOAT16, 2}, + std::tuple {32, TVectorElementType::FLOAT32, 4}, + std::tuple {64, TVectorElementType::FLOAT64, 8}}) { + for (const auto* prefix : {"null", "nan", "inf"}) { + const auto column = std::string(prefix) + std::to_string(bits); + SCOPED_TRACE(column); + auto params = make_float32_vector_search_params({0, 0, 0}, 1, 0); + auto& request = params.lance_scan_params.external_search_request; + request.__set_schema_version(1); + auto& search = request.search_query.vector_search; + search.__set_column(column); + search.query_vector.__set_dimension(3); + search.query_vector.__set_element_type(type); + search.query_vector.__set_num_vectors(1); + search.query_vector.__set_values(std::string(3 * width, '\0')); + RuntimeProfile profile("multi_vector_invalid_values"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + bool eos = false; + auto status = reader.get_block(&block, &eos); + EXPECT_FALSE(status.ok()); + EXPECT_NE(status.to_string().find("finite, non-null elements"), std::string::npos); + EXPECT_TRUE(reader.close().ok()); + } + } +} + +TEST(LanceTableReaderVectorSearchTest, RejectsInvalidQueryParallelismBeforeOpeningDataset) { + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + RuntimeProfile profile("lance_invalid_query_parallelism"); + auto params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 0); + params.lance_scan_params.external_search_request.vector_search_options.__set_query_parallelism( + -2); + const Columns columns {projected_column("_distance", TYPE_FLOAT, true)}; + LanceTableReader reader; + const auto status = init_reader(&reader, columns, &state, &profile, ¶ms); + EXPECT_FALSE(status.ok()); + EXPECT_NE(std::string::npos, status.to_string().find("query_parallelism")); +} + +TEST(LanceTableReaderVectorSearchTest, QueryParallelismPreservesResults) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const int parallelism : {-1, 0, 1, 4}) { + SCOPED_TRACE(parallelism); + auto params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 1); + params.lance_scan_params.external_search_request.vector_search_options + .__set_query_parallelism(parallelism); + RuntimeProfile profile("lance_query_parallelism"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(2U, rows.size()); + EXPECT_EQ(2, rows[0].first); + EXPECT_EQ(4, rows[1].first); + ASSERT_TRUE(reader.close().ok()); + } +} + +TEST(LanceTableReaderVectorSearchTest, SearchesWholeSnapshotWithOffsetAndDistance) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryOptions query_options; + query_options.__set_batch_size(1); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 1); + auto& search_options = + scan_params.lance_scan_params.external_search_request.vector_search_options; + search_options.__set_nprobes(4); + search_options.__set_refine_factor(2); + search_options.__set_ef(16); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(2U, rows.size()); + EXPECT_EQ(2, rows[0].first); + EXPECT_FLOAT_EQ(1.0F, rows[0].second); + EXPECT_EQ(4, rows[1].first); + EXPECT_FLOAT_EQ(8.25F, rows[1].second); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderVectorSearchTest, AppliesSearchFilterBeforeTopK) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryOptions query_options; + query_options.__set_batch_size(2); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_prefilter_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 1, 0, "row_id >= 3"); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(1U, rows.size()); + EXPECT_EQ(4, rows[0].first); + EXPECT_FLOAT_EQ(8.25F, rows[0].second); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderVectorSearchTest, SearchesMultipleFragmentSplits) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_GT(fixture.fragment_ids.size(), 1U); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryOptions query_options; + query_options.__set_batch_size(2); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_fragment_splits_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 4, 0); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + std::vector row_ids; + for (const auto fragment_id : fixture.fragment_ids) { + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, {fragment_id}).ok()); + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + for (const auto& row : rows) { + row_ids.emplace_back(row.first); + } + } + std::ranges::sort(row_ids); + EXPECT_EQ((std::vector {1, 2, 3, 4}), row_ids); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderVectorSearchTest, ReturnsStableGlobalRowIdsAndFetchesPayload) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const auto global_rowid_name = BeConsts::GLOBAL_ROWID_COL + std::string("topn_fetch_lance"); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column(global_rowid_name, TYPE_STRING, false), + }; + TQueryOptions query_options; + query_options.__set_batch_size(1); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_global_rowid_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 4, 0); + const GlobalRowIdContext context {.backend_id = 123456789, .file_id = 42}; + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + const auto scan_row_ids = [&]() { + std::map row_ids; + const auto prepare_status = + prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids, context); + EXPECT_TRUE(prepare_status.ok()) << prepare_status.to_string(); + if (!prepare_status.ok()) { + return row_ids; + } + Block block; + add_output_columns(&block, columns); + bool eos = false; + while (!eos) { + const auto read_status = reader.get_block(&block, &eos); + EXPECT_TRUE(read_status.ok()) << read_status.to_string(); + if (!read_status.ok()) { + break; + } + if (eos) { + continue; + } + const auto& logical_row_ids = + assert_cast(*block.get_by_position(0).column); + const auto& global_row_ids = + assert_cast(*block.get_by_position(1).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto location = decode_lance_row_id(global_row_ids, row); + EXPECT_EQ(static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID), + location.version); + EXPECT_EQ(context.backend_id, location.backend_id); + EXPECT_EQ(context.file_id, location.lance_file_id); + row_ids.emplace(logical_row_ids.get_data()[row], location.lance_row_id); + } + } + return row_ids; + }; + + const auto first_scan = scan_row_ids(); + const auto second_scan = scan_row_ids(); + EXPECT_EQ(4U, first_scan.size()); + EXPECT_EQ(first_scan, second_scan); + EXPECT_TRUE(reader.close().ok()); + + ASSERT_TRUE(first_scan.contains(2)); + ASSERT_TRUE(first_scan.contains(4)); + const std::vector fetch_row_ids {first_scan.at(4), first_scan.at(2), + first_scan.at(4)}; + const Columns payload_columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("label", TYPE_STRING, true), + }; + RuntimeProfile fetch_profile("lance_vector_search_rowid_fetch_fixture"); + LanceTableReader payload_reader; + ASSERT_TRUE(init_reader(&payload_reader, payload_columns, &state, &fetch_profile, &scan_params) + .ok()); + Block payload_block; + add_output_columns(&payload_block, payload_columns); + ASSERT_TRUE(payload_reader + .read_by_row_ids(make_lance_range(dataset_uri, fixture.version, + fixture.fragment_ids), + fetch_row_ids, &payload_block) + .ok()); + + ASSERT_EQ(3U, payload_block.rows()); + const auto& logical_row_ids = + assert_cast(*payload_block.get_by_position(0).column); + const auto& labels = + assert_cast(*payload_block.get_by_position(1).column); + const auto& label_values = assert_cast(labels.get_nested_column()); + EXPECT_EQ((std::vector {4, 2, 4}), + std::vector(logical_row_ids.get_data().begin(), + logical_row_ids.get_data().end())); + ASSERT_EQ(3U, labels.size()); + EXPECT_EQ(0, labels.get_null_map_data()[0]); + EXPECT_EQ(0, labels.get_null_map_data()[1]); + EXPECT_EQ(0, labels.get_null_map_data()[2]); + EXPECT_EQ("extra", label_values.get_data_at(0).to_string()); + EXPECT_EQ("unit-x", label_values.get_data_at(1).to_string()); + EXPECT_EQ("extra", label_values.get_data_at(2).to_string()); + ASSERT_NE(nullptr, fetch_profile.get_counter("LanceRowIdFetchRows")); + EXPECT_EQ(3, fetch_profile.get_counter("LanceRowIdFetchRows")->value()); + ASSERT_NE(nullptr, fetch_profile.get_counter("LanceRowIdFetchCalls")); + EXPECT_EQ(1, fetch_profile.get_counter("LanceRowIdFetchCalls")->value()); + Block second_block; + add_output_columns(&second_block, payload_columns); + ASSERT_TRUE(payload_reader + .read_by_row_ids(make_lance_range(dataset_uri, fixture.version, + fixture.fragment_ids), + fetch_row_ids, &second_block) + .ok()); + EXPECT_EQ(6, fetch_profile.get_counter("LanceRowIdFetchRows")->value()); + EXPECT_EQ(2, fetch_profile.get_counter("LanceRowIdFetchCalls")->value()); + ASSERT_TRUE(payload_reader + .read_by_row_ids(make_lance_range(dataset_uri, fixture.version, + fixture.fragment_ids), + {}, &second_block) + .ok()); + EXPECT_EQ(2, fetch_profile.get_counter("LanceRowIdFetchCalls")->value()); + EXPECT_TRUE(payload_reader.close().ok()); +} + +TEST(LanceTableReaderVectorSearchTest, ReadsOnlyGlobalRowIdVirtualColumn) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const auto global_rowid_name = BeConsts::GLOBAL_ROWID_COL + std::string("topn_fetch_lance"); + const Columns columns {projected_column(global_rowid_name, TYPE_STRING, false)}; + TQueryOptions query_options; + query_options.__set_batch_size(2); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_only_global_rowid_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 0); + const GlobalRowIdContext context {.backend_id = 13579, .file_id = 24}; + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids, context).ok()); + + Block block; + add_output_columns(&block, columns); + std::set native_row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& global_row_ids = + assert_cast(*block.get_by_position(0).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto location = decode_lance_row_id(global_row_ids, row); + EXPECT_EQ(static_cast(ROW_VERSION::LANCE_DATASET_ROW_ID), location.version); + EXPECT_EQ(context.backend_id, location.backend_id); + EXPECT_EQ(context.file_id, location.lance_file_id); + native_row_ids.emplace(location.lance_row_id); + } + } + EXPECT_EQ(2U, native_row_ids.size()); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, CombinesStaticSubstraitFilterWithRuntimeFilter) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("label", TYPE_STRING, true)}; + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_filter_pushdown_fixture"); + TFileScanRangeParams scan_params; + // Generated by the FE LancePredicateConverter for row_id >= 3 against this + // fixture's complete Arrow schema. Keeping the FE-produced envelope here + // verifies Java Substrait -> thrift binary -> lance-c interoperability. + const std::string substrait_filter_base64 = + "Ch4IARIaL2Z1bmN0aW9uc19jb21wYXJpc29uLnlhbWwSERoPCAEaC2d0ZTphbnlfYW55GisKHBoaGgQKAhACIg" + "oa" + "CBIGCgISACIAIgYaBAoCOAMaC2ZpbHRlcl9tYXNrIrkGCgZyb3dfaWQKCmJvb2xfdmFsdWUKDXRpbnlpbnRfdm" + "Fs" + "dWUKDnNtYWxsaW50X3ZhbHVlCglpbnRfdmFsdWUKDGJpZ2ludF92YWx1ZQoLZmxvYXRfdmFsdWUKDGRvdWJsZV" + "92" + "YWx1ZQoLZGVjaW1hbF8xXzAKC2RlY2ltYWxfOV8yCgxkZWNpbWFsXzEwXzAKDGRlY2ltYWxfMThfNAoMZGVjaW" + "1h" + "bF8xOV8wCg1kZWNpbWFsXzM4XzEwCiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMTQKJF9fdW" + "5s" + "aWtlbHlfbmFtZV9wbGFjZWhvbGRlcl9kb3Jpc18xNQoKdGV4dF92YWx1ZQokX191bmxpa2VseV9uYW1lX3BsYW" + "Nl" + "aG9sZGVyX2RvcmlzXzE3CiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMTgKJF9fdW5saWtlbH" + "lf" + "bmFtZV9wbGFjZWhvbGRlcl9kb3Jpc18xOQokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzIwCi" + "Rf" + "X3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMjEKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbGRlcl" + "9k" + "b3Jpc18yMgokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzIzCiRfX3VubGlrZWx5X25hbWVfcG" + "xh" + "Y2Vob2xkZXJfZG9yaXNfMjQKBWxhYmVsCiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMjYSxw" + "EK" + "BDoCEAIKBAoCEAEKBBICEAEKBBoCEAEKBCoCEAEKBDoCEAEKBFICEAEKBFoCEAEKB8IBBBABIAEKCcIBBggCEA" + "kg" + "AQoHwgEEEAogAQoJwgEGCAQQEiABCgfCAQQQEyABCgnCAQYIChAmIAEKBfIBAhgBCgXyAQIYAQoEYgIQAQoF8g" + "EC" + "GAEKBfIBAhgBCgXyAQIYAQoF8gECGAEKBfIBAhgBCgXyAQIYAQoF8gECGAEKBfIBAhgBCgRiAhABCgXyAQIYAR" + "gC" + "Og8QRioLZG9yaXMtbGFuY2U="; + std::string substrait_filter; + ASSERT_TRUE(base64_decode(substrait_filter_base64, &substrait_filter)); + TLanceScanParams lance_scan_params; + lance_scan_params.__set_lance_substrait_filter(std::move(substrait_filter)); + scan_params.__set_lance_scan_params(std::move(lance_scan_params)); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + ASSERT_TRUE(reader.TEST_conjuncts_empty()); + + Block block; + add_output_columns(&block, columns); + std::vector labels; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& nullable = assert_cast(*block.get_by_position(0).column); + const auto& values = assert_cast(nullable.get_nested_column()); + for (size_t row = 0; row < block.rows(); ++row) { + ASSERT_EQ(0, nullable.get_null_map_data()[row]); + labels.emplace_back(values.get_data_at(row).to_string()); + } + } + std::ranges::sort(labels); + EXPECT_EQ((std::vector {"extra", "mixed"}), labels); + EXPECT_TRUE(reader.close().ok()); + + // The static Substrait prefilter and a later runtime filter must both remain active. Static + // row_id >= 3 yields {3, 4}; runtime row_id IN (2, 4) yields {2, 4}; their intersection is {4}. + std::string combined_substrait_filter; + ASSERT_TRUE(base64_decode(substrait_filter_base64, &combined_substrait_filter)); + TLanceScanParams combined_lance_scan_params; + combined_lance_scan_params.__set_lance_substrait_filter(std::move(combined_substrait_filter)); + TFileScanRangeParams combined_scan_params; + combined_scan_params.__set_lance_scan_params(std::move(combined_lance_scan_params)); + const Columns row_id_columns {projected_column("row_id", TYPE_BIGINT, false)}; + RuntimeProfile combined_profile("lance_substrait_and_runtime_filter_fixture"); + const auto combined_runtime_filter = create_int64_runtime_in_conjunct("row_id", {2, 4}, 42); + + LanceTableReader combined_reader; + ASSERT_TRUE(init_reader(&combined_reader, row_id_columns, &state, &combined_profile, + &combined_scan_params, {combined_runtime_filter}) + .ok()); + ASSERT_TRUE(prepare_fixture(&combined_reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block combined_block; + add_output_columns(&combined_block, row_id_columns); + std::vector combined_row_ids; + eos = false; + while (!eos) { + ASSERT_TRUE(combined_reader.get_block(&combined_block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = + assert_cast(*combined_block.get_by_position(0).column); + combined_row_ids.insert(combined_row_ids.end(), row_ids.get_data().begin(), + row_ids.get_data().end()); + } + EXPECT_EQ((std::vector {4}), combined_row_ids); + EXPECT_TRUE(combined_reader.close().ok()); +} + +TEST(LanceTableReaderScalarSegmentTest, FiltersIndexedAndUncoveredDomainsWithoutLosingRows) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + for (const auto index_type : {LANCE_SCALAR_BTREE, LANCE_SCALAR_BITMAP}) { + SCOPED_TRACE(index_type == LANCE_SCALAR_BTREE ? "BTREE" : "BITMAP"); + const auto dataset_uri = std::filesystem::temp_directory_path() / + ("doris_lance_scalar_segment_" + std::to_string(unique_suffix) + + "_" + std::to_string(index_type) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + const auto schema = arrow::schema({arrow::field("row_id", arrow::int64(), false)}); + for (int64_t first_id : {1, 3}) { + arrow::Int64Builder values; + ASSERT_TRUE(values.AppendValues({first_id, first_id + 1}).ok()); + auto array = values.Finish(); + ASSERT_TRUE(array.ok()); + auto batch = arrow::RecordBatch::Make(schema, 2, {std::move(array).ValueUnsafe()}); + auto batches = arrow::RecordBatchReader::Make({batch}, schema); + ASSERT_TRUE(batches.ok()); + ArrowArrayStream stream {}; + ASSERT_TRUE( + arrow::ExportRecordBatchReader(std::move(batches).ValueUnsafe(), &stream).ok()); + auto dataset = ::lance::Dataset::write( + dataset_uri.string(), &stream, + first_id == 1 ? ::lance::WriteMode::Create : ::lance::WriteMode::Append); + if (first_id == 1) { + // The second append remains uncovered by this index segment. + dataset.create_scalar_index("row_id", index_type, "row_id_idx"); + } + } + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_EQ(2, fixture.fragment_ids.size()); + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(dataset_uri, "row_id_idx", &segments).ok()); + ASSERT_EQ(1, segments.size()); + + const auto read_domain = [&](const std::vector& fragments, bool use_segment, + const std::vector& expected) { + SCOPED_TRACE(::testing::PrintToString(fragments)); + SCOPED_TRACE(use_segment ? "selected segment" : "scalar index disabled"); + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + RuntimeProfile profile("lance_scalar_segment"); + TFileScanRangeParams scan_params; + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + LanceTableReader reader; + auto filter = create_int64_runtime_in_conjunct("row_id", {2, 4}, 41); + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, {filter}).ok()); + auto range = make_lance_range(dataset_uri, fixture.version, fragments); + if (use_segment) { + range.table_format_params.lance_params.__set_index_segment_uuids(segments); + } else { + range.table_format_params.lance_params.__set_use_scalar_index(false); + } + ASSERT_TRUE(prepare_range(&reader, std::move(range)).ok()); + Block block; + add_output_columns(&block, columns); + std::vector actual; + bool eos = false; + while (!eos) { + auto status = reader.get_block(&block, &eos); + ASSERT_TRUE(status.ok()) << status.to_string(); + if (!eos) { + const auto& ids = + assert_cast(*block.get_by_position(0).column); + actual.insert(actual.end(), ids.get_data().begin(), ids.get_data().end()); + } + } + std::ranges::sort(actual); + EXPECT_EQ(expected, actual); + EXPECT_TRUE(reader.close().ok()); + }; + read_domain({fixture.fragment_ids[0]}, true, {2}); + read_domain({fixture.fragment_ids[1]}, false, {4}); + // A segment which cannot cover the whole task must filter the entire explicit domain. + read_domain(fixture.fragment_ids, true, {2, 4}); + // Disabling the index must produce the same rows in each read domain. + read_domain({fixture.fragment_ids[0]}, false, {2}); + read_domain(fixture.fragment_ids, false, {2, 4}); + } +} + +TEST(LanceTableReaderScalarSegmentTest, RejectsInvalidSegmentAssignments) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + const auto check_invalid = [&](TLanceFileDesc params, const std::string& message) { + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + RuntimeProfile profile("lance_invalid_scalar_segment"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, {projected_column("row_id", TYPE_BIGINT, false)}, &state, + &profile, &scan_params) + .ok()); + auto range = make_lance_range(dataset_uri, fixture.version, fixture.fragment_ids); + range.table_format_params.__set_lance_params(std::move(params)); + auto status = prepare_range(&reader, std::move(range)); + EXPECT_FALSE(status.ok()); + EXPECT_NE(status.to_string().find(message), std::string::npos) << status.to_string(); + EXPECT_TRUE(reader.close().ok()); + }; + auto params = make_lance_range(dataset_uri, fixture.version, fixture.fragment_ids) + .table_format_params.lance_params; + params.__set_index_segment_uuids({"too-short"}); + check_invalid(params, "16 bytes"); + params.__set_index_segment_uuids({std::string(16, 'a'), std::string(16, 'b')}); + check_invalid(params, "only one scalar index segment"); + params.__set_index_segment_uuids({std::string(16, 'a')}); + params.__set_fragment_ids({}); + check_invalid(params, "nonempty fragment ids"); + params.__set_fragment_ids(fixture.fragment_ids); + params.__set_version(0); + check_invalid(params, "fixed version"); + params.__set_version(fixture.version); + params.__set_use_scalar_index(false); + check_invalid(params, "use_scalar_index=false"); +} + +TEST(LanceTableReaderFilterTest, PushesRuntimeInFilterIntoLanceScanner) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_runtime_filter_pushdown_fixture"); + TFileScanRangeParams scan_params; + const auto runtime_filter = create_int64_runtime_in_conjunct("row_id", {2, 4}, 41); + + LanceTableReader reader; + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, {runtime_filter}).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::vector actual_row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + actual_row_ids.insert(actual_row_ids.end(), row_ids.get_data().begin(), + row_ids.get_data().end()); + } + std::ranges::sort(actual_row_ids); + EXPECT_EQ((std::vector {2, 4}), actual_row_ids); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, SkipsNullAwareRuntimeRangeBeforeLanceScanner) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_null_aware_runtime_filter_fixture"); + TFileScanRangeParams scan_params; + const VExprContextSPtrs runtime_filters { + create_runtime_range_conjunct("bigint_value", TExprOpcode::GE, + std::numeric_limits::lowest(), + std::make_shared(), 43, true), + create_runtime_range_conjunct("bigint_value", TExprOpcode::LE, + std::numeric_limits::max(), + std::make_shared(), 43, true), + }; + + LanceTableReader reader; + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, runtime_filters).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::vector row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (!eos) { + const auto& values = assert_cast(*block.get_by_position(0).column); + row_ids.insert(row_ids.end(), values.get_data().begin(), values.get_data().end()); + } + } + std::ranges::sort(row_ids); + EXPECT_EQ((std::vector {1, 2, 3, 4}), row_ids); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, SkipsUnsafeStringRuntimeFiltersBeforeLanceCStringBoundary) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_unsafe_string_runtime_filter_fixture"); + TFileScanRangeParams scan_params; + const VExprContextSPtrs runtime_filters { + create_string_runtime_in_conjunct("text_value", std::string("a\0b", 3), 44), + create_string_runtime_in_conjunct("text_value", std::string(1, static_cast(0xff)), + 45), + }; + + LanceTableReader reader; + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, runtime_filters).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (!eos) { + rows += block.rows(); + } + } + EXPECT_EQ(4U, rows); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, SkipsTimestampNanoRuntimeFilterBeforeMaterialization) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + const auto dataset_uri = + std::filesystem::temp_directory_path() / + ("doris_lance_timestamp_nano_rf_" + std::to_string(unique_suffix) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + + arrow::Int64Builder row_id_builder; + ASSERT_TRUE(row_id_builder.Append(1).ok()); + std::shared_ptr row_ids; + ASSERT_TRUE(row_id_builder.Finish(&row_ids).ok()); + const auto timestamp_type = arrow::timestamp(arrow::TimeUnit::NANO); + arrow::TimestampBuilder timestamp_builder(timestamp_type, arrow::default_memory_pool()); + ASSERT_TRUE(timestamp_builder.Append(123456789).ok()); + std::shared_ptr timestamps; + ASSERT_TRUE(timestamp_builder.Finish(×tamps).ok()); + const auto schema = arrow::schema({arrow::field("row_id", arrow::int64()), + arrow::field("timestamp_value", timestamp_type)}); + ASSERT_TRUE(write_lance_record_batch(dataset_uri, + arrow::RecordBatch::Make(schema, 1, {row_ids, timestamps})) + .ok()); + + DateV2Value bound; + bound.unchecked_set_time(1970, 1, 1, 0, 0, 0, 123456); + const auto runtime_filter = create_runtime_range_conjunct( + "timestamp_value", TExprOpcode::LE, bound, std::make_shared(6), 46); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("timestamp_value", + make_nullable(std::make_shared(6))), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_timestamp_nano_runtime_filter_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, {runtime_filter}).ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + bool eos = false; + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + ASSERT_FALSE(eos); + ASSERT_EQ(1U, block.rows()); + const auto& values = assert_cast(*block.get_by_position(0).column); + EXPECT_EQ(1, values.get_data()[0]); + const auto& timestamp = assert_cast(*block.get_by_position(1).column); + // The physical value has .123456789, while Doris materialization truncates it to .123456. + // Therefore the residual <= .123456 accepts this row and the pre-materialization SQL must not + // remove it. + EXPECT_EQ("1970-01-01 00:00:00.123456", columns[1].type->to_string(timestamp, 0)); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, SkipsPhysicalNumericTypesUnsupportedByPinnedPlanner) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + const auto dataset_uri = + std::filesystem::temp_directory_path() / + ("doris_lance_unsupported_numeric_rf_" + std::to_string(unique_suffix) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + + arrow::Int64Builder row_id_builder; + ASSERT_TRUE(row_id_builder.Append(1).ok()); + std::shared_ptr row_ids; + ASSERT_TRUE(row_id_builder.Finish(&row_ids).ok()); + arrow::HalfFloatBuilder half_float_builder; + ASSERT_TRUE(half_float_builder.Append(0x3E00).ok()); + std::shared_ptr half_floats; + ASSERT_TRUE(half_float_builder.Finish(&half_floats).ok()); + const auto scaled_decimal_type = arrow::decimal128(9, 2); + arrow::Decimal128Builder scaled_decimal_builder(scaled_decimal_type, + arrow::default_memory_pool()); + ASSERT_TRUE(scaled_decimal_builder.Append(arrow::Decimal128(12345)).ok()); + std::shared_ptr scaled_decimals; + ASSERT_TRUE(scaled_decimal_builder.Finish(&scaled_decimals).ok()); + const auto wide_decimal_type = arrow::decimal128(38, 0); + arrow::Decimal128Builder wide_decimal_builder(wide_decimal_type, arrow::default_memory_pool()); + const uint64_t wide_value = static_cast(std::numeric_limits::max()) + 1; + ASSERT_TRUE(wide_decimal_builder.Append(arrow::Decimal128(0, wide_value)).ok()); + std::shared_ptr wide_decimals; + ASSERT_TRUE(wide_decimal_builder.Finish(&wide_decimals).ok()); + arrow::UInt64Builder uint64_builder; + ASSERT_TRUE(uint64_builder.Append(wide_value).ok()); + std::shared_ptr uint64_values; + ASSERT_TRUE(uint64_builder.Finish(&uint64_values).ok()); + const auto schema = arrow::schema({ + arrow::field("row_id", arrow::int64()), + arrow::field("half_float", arrow::float16()), + arrow::field("scaled_decimal", scaled_decimal_type), + arrow::field("wide_decimal", wide_decimal_type), + arrow::field("wide_uint64", arrow::uint64()), + }); + ASSERT_TRUE( + write_lance_record_batch( + dataset_uri, arrow::RecordBatch::Make(schema, 1, + {row_ids, half_floats, scaled_decimals, + wide_decimals, uint64_values})) + .ok()); + + const auto doris_wide_value = static_cast(wide_value); + const VExprContextSPtrs runtime_filters { + create_typed_runtime_in_conjunct("half_float", 1.5F, + std::make_shared(), 47), + create_typed_runtime_in_conjunct( + "scaled_decimal", Decimal32(12345), std::make_shared(9, 2), + 48), + create_typed_runtime_in_conjunct( + "wide_decimal", Decimal128V3(doris_wide_value), + std::make_shared(38, 0), 49), + create_typed_runtime_in_conjunct("wide_uint64", doris_wide_value, + std::make_shared(), 50), + }; + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_unsupported_numeric_runtime_filter_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE( + init_reader(&reader, columns, &state, &profile, &scan_params, runtime_filters).ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + bool eos = false; + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + ASSERT_FALSE(eos); + EXPECT_EQ(1U, block.rows()); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, LeavesResidualPredicatesToScanner) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_scanner_residual_fixture"); + TFileScanRangeParams scan_params; + auto residual = VExprContext::create_shared(std::make_shared()); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params, {residual}).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + ASSERT_FALSE(reader.TEST_conjuncts_empty()); + + Block block; + add_output_columns(&block, columns); + bool eos = false; + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + EXPECT_FALSE(eos); + EXPECT_GT(block.rows(), 0); + EXPECT_TRUE(reader.close().ok()); +} + +void expect_filtered_row_ids(const char* profile_name, const std::string& substrait_filter_base64, + const std::vector& expected_row_ids) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile(profile_name); + TFileScanRangeParams scan_params; + std::string substrait_filter; + ASSERT_TRUE(base64_decode(substrait_filter_base64, &substrait_filter)); + TLanceScanParams lance_scan_params; + lance_scan_params.__set_lance_substrait_filter(std::move(substrait_filter)); + scan_params.__set_lance_scan_params(std::move(lance_scan_params)); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + ASSERT_TRUE(reader.TEST_conjuncts_empty()); + + Block block; + add_output_columns(&block, columns); + std::vector actual_row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& values = assert_cast(*block.get_by_position(0).column); + actual_row_ids.insert(actual_row_ids.end(), values.get_data().begin(), + values.get_data().end()); + } + auto sorted_expected_row_ids = expected_row_ids; + std::ranges::sort(actual_row_ids); + std::ranges::sort(sorted_expected_row_ids); + EXPECT_EQ(sorted_expected_row_ids, actual_row_ids); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderFilterTest, PushesDecimalFilterFromFeSubstrait) { + // Generated by the FE LancePredicateConverter for decimal_9_2 >= 0.00 + // against this fixture's complete Arrow schema. + const std::string substrait_filter_base64 = + "Ch4IARIaL2Z1bmN0aW9uc19jb21wYXJpc29uLnlhbWwSERoPCAEaC2d0ZTphbnlfYW55GkQKNRozGgQKAhACIg" + "waChIICgQS" + "AggJIgAiHRobChnCARYKEAAAAAAAAAAAAAAAAAAAAAAQCRgCGgtmaWx0ZXJfbWFzayKfBgoGcm93X2lkCgpib2" + "9sX3ZhbHVl" + "Cg10aW55aW50X3ZhbHVlCg5zbWFsbGludF92YWx1ZQoJaW50X3ZhbHVlCgxiaWdpbnRfdmFsdWUKC2Zsb2F0X3" + "ZhbHVlCgxk" + "b3VibGVfdmFsdWUKC2RlY2ltYWxfMV8wCgtkZWNpbWFsXzlfMgoMZGVjaW1hbF8xMF8wCgxkZWNpbWFsXzE4Xz" + "QKDGRlY2lt" + "YWxfMTlfMAoNZGVjaW1hbF8zOF8xMAokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzE0CiRfX3" + "VubGlrZWx5" + "X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMTUKCnRleHRfdmFsdWUKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbG" + "Rlcl9kb3Jp" + "c18xNwoKZGF0ZV92YWx1ZQokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzE5CiRfX3VubGlrZW" + "x5X25hbWVf" + "cGxhY2Vob2xkZXJfZG9yaXNfMjAKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbGRlcl9kb3Jpc18yMQokX191bm" + "xpa2VseV9u" + "YW1lX3BsYWNlaG9sZGVyX2RvcmlzXzIyCiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMjMKJF" + "9fdW5saWtl" + "bHlfbmFtZV9wbGFjZWhvbGRlcl9kb3Jpc18yNAoFbGFiZWwKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbGRlcl" + "9kb3Jpc18y" + "NhLHAQoEOgIQAgoECgIQAQoEEgIQAQoEGgIQAQoEKgIQAQoEOgIQAQoEUgIQAQoEWgIQAQoHwgEEEAEgAQoJwg" + "EGCAIQCSAB" + "CgfCAQQQCiABCgnCAQYIBBASIAEKB8IBBBATIAEKCcIBBggKECYgAQoF8gECGAEKBfIBAhgBCgRiAhABCgXyAQ" + "IYAQoFggEC" + "EAEKBfIBAhgBCgXyAQIYAQoF8gECGAEKBfIBAhgBCgXyAQIYAQoF8gECGAEKBGICEAEKBfIBAhgBGAI6DxBGKg" + "tkb3Jpcy1s" + "YW5jZQ=="; + expect_filtered_row_ids("lance_decimal_filter_fixture", substrait_filter_base64, {2, 4}); +} + +TEST(LanceTableReaderFilterTest, PushesDateFilterFromFeSubstrait) { + // Generated by the FE LancePredicateConverter for + // date_value >= DATE '1970-01-01' against this fixture's complete Arrow schema. + const std::string substrait_filter_base64 = + "Ch4IARIaL2Z1bmN0aW9uc19jb21wYXJpc29uLnlhbWwSERoPCAEaC2d0ZTphbnlfYW55Gi4KHxodGgQKAhACIg" + "waChIICgQS" + "AggSIgAiBxoFCgOAAQAaC2ZpbHRlcl9tYXNrIp8GCgZyb3dfaWQKCmJvb2xfdmFsdWUKDXRpbnlpbnRfdmFsdW" + "UKDnNtYWxs" + "aW50X3ZhbHVlCglpbnRfdmFsdWUKDGJpZ2ludF92YWx1ZQoLZmxvYXRfdmFsdWUKDGRvdWJsZV92YWx1ZQoLZG" + "VjaW1hbF8x" + "XzAKC2RlY2ltYWxfOV8yCgxkZWNpbWFsXzEwXzAKDGRlY2ltYWxfMThfNAoMZGVjaW1hbF8xOV8wCg1kZWNpbW" + "FsXzM4XzEw" + "CiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMTQKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbG" + "Rlcl9kb3Jp" + "c18xNQoKdGV4dF92YWx1ZQokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzE3CgpkYXRlX3ZhbH" + "VlCiRfX3Vu" + "bGlrZWx5X25hbWVfcGxhY2Vob2xkZXJfZG9yaXNfMTkKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbGRlcl9kb3" + "Jpc18yMAok" + "X191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzIxCiRfX3VubGlrZWx5X25hbWVfcGxhY2Vob2xkZX" + "JfZG9yaXNf" + "MjIKJF9fdW5saWtlbHlfbmFtZV9wbGFjZWhvbGRlcl9kb3Jpc18yMwokX191bmxpa2VseV9uYW1lX3BsYWNlaG" + "9sZGVyX2Rv" + "cmlzXzI0CgVsYWJlbAokX191bmxpa2VseV9uYW1lX3BsYWNlaG9sZGVyX2RvcmlzXzI2EscBCgQ6AhACCgQKAh" + "ABCgQSAhAB" + "CgQaAhABCgQqAhABCgQ6AhABCgRSAhABCgRaAhABCgfCAQQQASABCgnCAQYIAhAJIAEKB8IBBBAKIAEKCcIBBg" + "gEEBIgAQoH" + "wgEEEBMgAQoJwgEGCAoQJiABCgXyAQIYAQoF8gECGAEKBGICEAEKBfIBAhgBCgWCAQIQAQoF8gECGAEKBfIBAh" + "gBCgXyAQIY" + "AQoF8gECGAEKBfIBAhgBCgXyAQIYAQoEYgIQAQoF8gECGAEYAjoPEEYqC2RvcmlzLWxhbmNl"; + expect_filtered_row_ids("lance_date_filter_fixture", substrait_filter_base64, {2, 3}); +} + +DataTypePtr nullable_type(PrimitiveType type, int precision = 0, int scale = 0) { + return DataTypeFactory::instance().create_data_type(type, true, precision, scale); +} + +// Creates an Arrow Duration array with one value and one null. +std::shared_ptr make_duration_array(arrow::TimeUnit::type unit, int64_t value) { + arrow::DurationBuilder builder(arrow::duration(unit), arrow::default_memory_pool()); + EXPECT_TRUE(builder.Append(value).ok()); + EXPECT_TRUE(builder.AppendNull().ok()); + std::shared_ptr array; + EXPECT_TRUE(builder.Finish(&array).ok()); + return array; +} + +// Creates a Lance BFloat16 array with one vector and one null. +std::shared_ptr make_bfloat16_vector_array() { + auto values = std::make_shared(arrow::fixed_size_binary(2)); + arrow::FixedSizeListBuilder builder(arrow::default_memory_pool(), values, 2); + EXPECT_TRUE(builder.Append().ok()); + const std::array one {0x80, 0x3F}; + const std::array two {0x00, 0x40}; + EXPECT_TRUE(values->Append(one.data()).ok()); + EXPECT_TRUE(values->Append(two.data()).ok()); + EXPECT_TRUE(builder.AppendNull().ok()); + std::shared_ptr array; + EXPECT_TRUE(builder.Finish(&array).ok()); + return array; +} + +// Creates a scalar Lance BFloat16 array from raw 16-bit values. +std::shared_ptr make_bfloat16_array( + const std::vector>& values) { + arrow::FixedSizeBinaryBuilder builder(arrow::fixed_size_binary(2)); + for (const auto& value : values) { + if (!value.has_value()) { + EXPECT_TRUE(builder.AppendNull().ok()); + continue; + } + std::array bytes {}; + LittleEndian::Store16(bytes.data(), *value); + EXPECT_TRUE(builder.Append(bytes.data()).ok()); + } + std::shared_ptr array; + EXPECT_TRUE(builder.Finish(&array).ok()); + return array; +} + +std::pair array_range(const ColumnArray& array, size_t row) { + const auto& offsets = array.get_offsets(); + return {row == 0 ? 0 : static_cast(offsets[row - 1]), + static_cast(offsets[row])}; +} + +std::pair map_range(const ColumnMap& map, size_t row) { + const auto& offsets = map.get_offsets(); + return {row == 0 ? 0 : static_cast(offsets[row - 1]), + static_cast(offsets[row])}; +} + +} // namespace + +TEST(LanceTableReaderSchemaTest, FetchesSchemaWithoutFragmentIdsOrScanInitialization) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + + // A local TVF schema request opens the latest dataset snapshot but returns only its schema. + auto range = make_latest_lance_range(dataset_uri); + + TFileScanRangeParams scan_params; + std::vector column_names; + std::vector column_types; + LanceTableReader reader; + ASSERT_TRUE(reader.fetch_schema(range, scan_params, &column_names, &column_types).ok()); + ASSERT_EQ(column_names.size(), column_types.size()); + + const auto row_id = std::find(column_names.begin(), column_names.end(), "row_id"); + ASSERT_NE(column_names.end(), row_id); + const auto row_id_idx = static_cast(std::distance(column_names.begin(), row_id)); + ASSERT_NE(nullptr, column_types[row_id_idx]); + EXPECT_EQ(TYPE_BIGINT, column_types[row_id_idx]->get_primitive_type()); + + const auto embedding = std::find(column_names.begin(), column_names.end(), "embedding"); + ASSERT_NE(column_names.end(), embedding); + const auto embedding_idx = static_cast(std::distance(column_names.begin(), embedding)); + ASSERT_NE(nullptr, column_types[embedding_idx]); + EXPECT_EQ(TYPE_ARRAY, column_types[embedding_idx]->get_primitive_type()); + + const auto binary_value = std::find(column_names.begin(), column_names.end(), "binary_value"); + ASSERT_NE(column_names.end(), binary_value); + const auto binary_idx = static_cast(std::distance(column_names.begin(), binary_value)); + ASSERT_NE(nullptr, column_types[binary_idx]); + const auto binary_type = remove_nullable(column_types[binary_idx]); + ASSERT_EQ(TYPE_VARBINARY, binary_type->get_primitive_type()); + EXPECT_EQ(std::numeric_limits::max(), + assert_cast(*binary_type).len()); +} + +// Verifies the additional mappings and preserves unknown extensions as unsupported. +TEST(LanceTableReaderSchemaTest, MapsAdditionalTypesAndPreservesUnknownExtensions) { + const auto unknown_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"doris.test.extension"}); + const auto json_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"arrow.json"}); + const auto bfloat16_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto bfloat16_item = arrow::field("item", arrow::fixed_size_binary(2)) + ->WithMetadata(bfloat16_extension_metadata); + const auto arrow_schema = arrow::schema({ + arrow::field("row_id", arrow::int64()), + arrow::field("null_value", arrow::null()), + arrow::field("duration", arrow::duration(arrow::TimeUnit::MILLI)), + arrow::field("json", arrow::utf8())->WithMetadata(json_extension_metadata), + arrow::field("bfloat16_vector", arrow::fixed_size_list(bfloat16_item, 4)), + arrow::field("dictionary", arrow::dictionary(arrow::int16(), arrow::utf8())), + arrow::field("unknown_extension", arrow::utf8()) + ->WithMetadata(unknown_extension_metadata), + arrow::field("name", arrow::utf8()), + }); + + std::vector column_names; + std::vector column_types; + ASSERT_TRUE(convert_arrow_schema_to_doris(arrow_schema, &column_names, &column_types).ok()); + + EXPECT_EQ((std::vector {"row_id", "null_value", "duration", "json", + "bfloat16_vector", "dictionary", "unknown_extension", + "name"}), + column_names); + ASSERT_EQ(column_names.size(), column_types.size()); + for (const auto& column_type : column_types) { + ASSERT_NE(nullptr, column_type); + } + EXPECT_EQ(TYPE_BIGINT, column_types[0]->get_primitive_type()); + EXPECT_TRUE(column_types[1]->is_null_literal()); + EXPECT_EQ(TYPE_BIGINT, column_types[2]->get_primitive_type()); + EXPECT_EQ(TYPE_JSONB, column_types[3]->get_primitive_type()); + ASSERT_EQ(TYPE_ARRAY, column_types[4]->get_primitive_type()); + const auto& bfloat16_array = + assert_cast(*remove_nullable(column_types[4])); + EXPECT_EQ(TYPE_FLOAT, bfloat16_array.get_nested_type()->get_primitive_type()); + EXPECT_EQ(INVALID_TYPE, column_types[5]->get_primitive_type()); + EXPECT_EQ(INVALID_TYPE, column_types[6]->get_primitive_type()); + EXPECT_EQ(TYPE_STRING, column_types[7]->get_primitive_type()); +} + +// Verifies malformed storage for known extensions remains unsupported. +TEST(LanceTableReaderSchemaTest, RejectsMalformedKnownExtensionStorage) { + const auto json_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"arrow.json"}); + const auto bfloat16_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto arrow_schema = arrow::schema({ + arrow::field("json", arrow::binary())->WithMetadata(json_extension_metadata), + arrow::field("bfloat16", arrow::fixed_size_binary(4)) + ->WithMetadata(bfloat16_extension_metadata), + }); + + std::vector column_names; + std::vector column_types; + ASSERT_TRUE(convert_arrow_schema_to_doris(arrow_schema, &column_names, &column_types).ok()); + ASSERT_EQ(2, column_types.size()); + for (const auto& column_type : column_types) { + ASSERT_NE(nullptr, column_type); + EXPECT_EQ(INVALID_TYPE, column_type->get_primitive_type()); + } +} + +// Verifies values, nullability, and precision when reading the additional types. +TEST(LanceTableReaderTypeTest, ReadsAdditionalArrowAndLanceTypes) { + const auto json_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"arrow.json"}); + const auto bfloat16_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto bfloat16_item = arrow::field("item", arrow::fixed_size_binary(2)) + ->WithMetadata(bfloat16_extension_metadata); + const auto schema = arrow::schema({ + arrow::field("null_value", arrow::null()), + arrow::field("duration_s", arrow::duration(arrow::TimeUnit::SECOND)), + arrow::field("duration_ms", arrow::duration(arrow::TimeUnit::MILLI)), + arrow::field("duration_us", arrow::duration(arrow::TimeUnit::MICRO)), + arrow::field("duration_ns", arrow::duration(arrow::TimeUnit::NANO)), + arrow::field("json_value", arrow::utf8())->WithMetadata(json_extension_metadata), + arrow::field("bfloat16_vector", arrow::fixed_size_list(bfloat16_item, 2)), + }); + + arrow::StringBuilder json_builder; + ASSERT_TRUE(json_builder.Append(R"({"engine":"doris"})").ok()); + ASSERT_TRUE(json_builder.AppendNull().ok()); + std::shared_ptr json_array; + ASSERT_TRUE(json_builder.Finish(&json_array).ok()); + + const auto record_batch = + arrow::RecordBatch::Make(schema, 2, + { + std::make_shared(2), + make_duration_array(arrow::TimeUnit::SECOND, 1), + make_duration_array(arrow::TimeUnit::MILLI, 1000), + make_duration_array(arrow::TimeUnit::MICRO, 1000000), + make_duration_array(arrow::TimeUnit::NANO, 1000000000), + json_array, + make_bfloat16_vector_array(), + }); + + const auto bfloat16_array_type = + make_nullable(std::make_shared(nullable_type(TYPE_FLOAT))); + const Columns columns { + projected_column("null_value", nullable_type(TYPE_NULL)), + projected_column("duration_s", TYPE_BIGINT, true), + projected_column("duration_ms", TYPE_BIGINT, true), + projected_column("duration_us", TYPE_BIGINT, true), + projected_column("duration_ns", TYPE_BIGINT, true), + projected_column("json_value", TYPE_JSONB, true), + projected_column("bfloat16_vector", bfloat16_array_type), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_additional_types"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(2, rows); + + const auto& null_values = assert_cast(*block.get_by_position(0).column); + EXPECT_EQ((ColumnUInt8::Container {1, 1}), null_values.get_null_map_data()); + + const std::array expected_durations {1, 1000, 1000000, 1000000000}; + for (size_t column_idx = 0; column_idx < expected_durations.size(); ++column_idx) { + const auto& duration = + assert_cast(*block.get_by_position(column_idx + 1).column); + const auto& values = assert_cast(duration.get_nested_column()); + EXPECT_EQ(0, duration.get_null_map_data()[0]); + EXPECT_EQ(1, duration.get_null_map_data()[1]); + EXPECT_EQ(expected_durations[column_idx], values.get_data()[0]); + } + + const auto& json_values = assert_cast(*block.get_by_position(5).column); + EXPECT_EQ(0, json_values.get_null_map_data()[0]); + EXPECT_EQ(1, json_values.get_null_map_data()[1]); + EXPECT_EQ(R"({"engine":"doris"})", columns[5].type->to_string(json_values, 0)); + + const auto& vectors = assert_cast(*block.get_by_position(6).column); + EXPECT_EQ(0, vectors.get_null_map_data()[0]); + EXPECT_EQ(1, vectors.get_null_map_data()[1]); + const auto& vector_values = assert_cast(vectors.get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {2, 4}), vector_values.get_offsets()); + const auto& bfloat16_values = assert_cast(vector_values.get_data()); + const auto& floats = assert_cast(bfloat16_values.get_nested_column()); + EXPECT_FLOAT_EQ(1.0F, floats.get_data()[0]); + EXPECT_FLOAT_EQ(2.0F, floats.get_data()[1]); + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies sliced scalar arrays are compacted before Doris reads rows from offset zero. +TEST(LanceTableReaderTypeTest, ReadsSlicedDurationAndJsonValues) { + const auto json_extension_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"arrow.json"}); + const auto duration_type = arrow::duration(arrow::TimeUnit::MILLI); + const auto schema = arrow::schema({ + arrow::field("duration", duration_type), + arrow::field("json_value", arrow::utf8())->WithMetadata(json_extension_metadata), + }); + + arrow::DurationBuilder duration_builder(duration_type, arrow::default_memory_pool()); + ASSERT_TRUE(duration_builder.Append(111).ok()); + ASSERT_TRUE(duration_builder.Append(222).ok()); + ASSERT_TRUE(duration_builder.AppendNull().ok()); + ASSERT_TRUE(duration_builder.Append(444).ok()); + std::shared_ptr durations; + ASSERT_TRUE(duration_builder.Finish(&durations).ok()); + + arrow::StringBuilder json_builder; + ASSERT_TRUE(json_builder.Append(R"({"sentinel":true})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"row":1})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"row":2})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"tail":true})").ok()); + std::shared_ptr json_values; + ASSERT_TRUE(json_builder.Finish(&json_values).ok()); + + const auto record_batch = + arrow::RecordBatch::Make(schema, 2, {durations->Slice(1, 2), json_values->Slice(1, 2)}); + const Columns columns { + projected_column("duration", TYPE_BIGINT, true), + projected_column("json_value", TYPE_JSONB, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_sliced_scalars"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(2, rows); + + const auto& duration = assert_cast(*block.get_by_position(0).column); + const auto& duration_values = assert_cast(duration.get_nested_column()); + EXPECT_EQ((ColumnUInt8::Container {0, 1}), duration.get_null_map_data()); + EXPECT_EQ(222, duration_values.get_data()[0]); + + const auto& json = assert_cast(*block.get_by_position(1).column); + EXPECT_EQ((ColumnUInt8::Container {0, 0}), json.get_null_map_data()); + EXPECT_EQ(R"({"row":1})", columns[1].type->to_string(json, 0)); + EXPECT_EQ(R"({"row":2})", columns[1].type->to_string(json, 1)); + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies sliced nested registered JSON arrays are unwrapped before parent compaction. +TEST(LanceTableReaderTypeTest, ReadsRegisteredJsonNestedInSlicedList) { + const auto json_type = arrow::extension::json(); + const auto item_field = arrow::field("item", json_type); + const auto list_type = arrow::list(item_field); + + arrow::StringBuilder json_builder; + ASSERT_TRUE(json_builder.Append(R"({"sentinel":true})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"row":1})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"row":2})").ok()); + ASSERT_TRUE(json_builder.Append(R"({"tail":true})").ok()); + std::shared_ptr json_storage; + ASSERT_TRUE(json_builder.Finish(&json_storage).ok()); + const auto json_values = arrow::ExtensionType::WrapArray(json_type, json_storage); + + arrow::Int32Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 1, 3, 4}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + auto list_result = arrow::ListArray::FromArrays(list_type, *offsets, *json_values); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + const auto input = std::move(list_result).ValueUnsafe()->Slice(1, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(arrow::field("values", list_type), + input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto normalized_list = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, normalized_list); + EXPECT_EQ(0, normalized_list->offset()); + ASSERT_EQ(2, normalized_list->values()->length()); + const auto normalized_json = + std::dynamic_pointer_cast(normalized_list->values()); + ASSERT_NE(nullptr, normalized_json); + EXPECT_EQ(R"({"row":1})", normalized_json->GetString(0)); + EXPECT_EQ(R"({"row":2})", normalized_json->GetString(1)); + + const auto schema = arrow::schema({arrow::field("values", list_type)}); + const auto record_batch = arrow::RecordBatch::Make(schema, 1, {input}); + const auto doris_list_type = + make_nullable(std::make_shared(nullable_type(TYPE_JSONB))); + const Columns columns {projected_column("values", doris_list_type)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_sliced_nested_json"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(1, rows); + + const auto& nullable_list = + assert_cast(*block.get_by_position(0).column); + const auto& list = assert_cast(nullable_list.get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {2}), list.get_offsets()); + const auto& items = assert_cast(list.get_data()); + const auto json_item_type = nullable_type(TYPE_JSONB); + EXPECT_EQ(R"({"row":1})", json_item_type->to_string(items, 0)); + EXPECT_EQ(R"({"row":2})", json_item_type->to_string(items, 1)); + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies BFloat16 special values retain their exact Float32 bit patterns. +TEST(LanceTableReaderTypeTest, ConvertsBFloat16SpecialValuesExactly) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto field = arrow::field("value", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const std::vector> input_bits {0x0000, 0x8000, 0x3F80, 0xBF80, + 0x7F80, 0xFF80, 0x7FC1, std::nullopt}; + const std::array expected_bits {0x00000000, 0x80000000, 0x3F800000, 0xBF800000, + 0x7F800000, 0xFF800000, 0x7FC10000}; + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(field, make_bfloat16_array(input_bits), + &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto floats = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, floats); + ASSERT_EQ(input_bits.size(), static_cast(floats->length())); + for (size_t index = 0; index < expected_bits.size(); ++index) { + ASSERT_FALSE(floats->IsNull(index)); + EXPECT_EQ(expected_bits[index], std::bit_cast(floats->Value(index))); + } + EXPECT_TRUE(floats->IsNull(expected_bits.size())); +} + +// Verifies normalization honors the supplied pool when widening and compacting arrays. +TEST(LanceTableReaderTypeTest, HonorsNormalizationMemoryPoolLimit) { + arrow::ProxyMemoryPool proxy_pool(arrow::default_memory_pool()); + arrow::CappedMemoryPool capped_pool(&proxy_pool, 0); + std::shared_ptr normalized; + + const auto bfloat16_metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto bfloat16_field = + arrow::field("value", arrow::fixed_size_binary(2))->WithMetadata(bfloat16_metadata); + const auto bfloat16_status = normalize_lance_arrow_array_for_test( + bfloat16_field, make_bfloat16_array({0x3F80}), &normalized, &capped_pool); + EXPECT_FALSE(bfloat16_status.ok()); + EXPECT_NE(std::string::npos, + bfloat16_status.to_string().find("reserve Lance BFloat16 output failed")); + + const auto duration_type = arrow::duration(arrow::TimeUnit::MILLI); + arrow::DurationBuilder duration_builder(duration_type, arrow::default_memory_pool()); + ASSERT_TRUE(duration_builder.AppendValues({100, 200}).ok()); + std::shared_ptr durations; + ASSERT_TRUE(duration_builder.Finish(&durations).ok()); + const auto duration_status = + normalize_lance_arrow_array_for_test(arrow::field("duration", duration_type), + durations->Slice(1, 1), &normalized, &capped_pool); + EXPECT_FALSE(duration_status.ok()); + EXPECT_NE(std::string::npos, + duration_status.to_string().find("reserve sliced Lance array builder failed")); +} + +// Verifies nested BFloat16 fields are converted without rebuilding unaffected sibling data. +TEST(LanceTableReaderTypeTest, ConvertsBFloat16NestedInStruct) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto value_field = + arrow::field("value", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const auto id_field = arrow::field("id", arrow::int32()); + const auto bfloat16_values = make_bfloat16_array( + {std::optional {0x3F80}, std::optional {0xC020}}); + arrow::Int32Builder id_builder; + ASSERT_TRUE(id_builder.AppendValues({7, 8}).ok()); + std::shared_ptr ids; + ASSERT_TRUE(id_builder.Finish(&ids).ok()); + auto struct_result = arrow::StructArray::Make({bfloat16_values, ids}, {value_field, id_field}); + ASSERT_TRUE(struct_result.ok()) << struct_result.status().ToString(); + const auto input = std::move(struct_result).ValueUnsafe(); + const auto field = arrow::field("record", input->type()); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(field, input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + ASSERT_NE(input.get(), normalized.get()); + const auto normalized_struct = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, normalized_struct); + const auto floats = std::dynamic_pointer_cast(normalized_struct->field(0)); + ASSERT_NE(nullptr, floats); + EXPECT_FLOAT_EQ(1.0F, floats->Value(0)); + EXPECT_FLOAT_EQ(-2.5F, floats->Value(1)); + EXPECT_EQ(ids->data().get(), normalized_struct->field(1)->data().get()); +} + +// Verifies sliced List normalization converts only values visible through parent offsets. +TEST(LanceTableReaderTypeTest, NormalizesVisibleBFloat16ValuesInSlicedList) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto item_field = + arrow::field("item", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const auto values = make_bfloat16_array({0x3F80, 0x4000, 0x4040, 0x4080, 0x40A0, 0x40C0}); + arrow::Int32Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 2, 5, 6}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + auto list_result = arrow::ListArray::FromArrays(arrow::list(item_field), *offsets, *values); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + const auto input = std::move(list_result).ValueUnsafe()->Slice(1, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field("values", arrow::list(item_field)), input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto list = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, list); + EXPECT_EQ(0, list->offset()); + ASSERT_EQ(1, list->length()); + EXPECT_EQ(0, list->value_offset(0)); + EXPECT_EQ(3, list->value_offset(1)); + const auto floats = std::dynamic_pointer_cast(list->values()); + ASSERT_NE(nullptr, floats); + ASSERT_EQ(3, floats->length()); + EXPECT_FLOAT_EQ(3.0F, floats->Value(0)); + EXPECT_FLOAT_EQ(4.0F, floats->Value(1)); + EXPECT_FLOAT_EQ(5.0F, floats->Value(2)); +} + +// Verifies sliced LargeList normalization rebases 64-bit offsets and trims child values. +TEST(LanceTableReaderTypeTest, NormalizesVisibleBFloat16ValuesInSlicedLargeList) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto item_field = + arrow::field("item", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const auto values = make_bfloat16_array({0x3F80, 0x4000, 0x4040, 0x4080, 0x40A0, 0x40C0}); + arrow::Int64Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 1, 3, 6}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + auto list_result = + arrow::LargeListArray::FromArrays(arrow::large_list(item_field), *offsets, *values); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + const auto input = std::move(list_result).ValueUnsafe()->Slice(1, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field("values", arrow::large_list(item_field)), input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto list = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, list); + EXPECT_EQ(0, list->offset()); + ASSERT_EQ(1, list->length()); + EXPECT_EQ(0, list->value_offset(0)); + EXPECT_EQ(2, list->value_offset(1)); + const auto floats = std::dynamic_pointer_cast(list->values()); + ASSERT_NE(nullptr, floats); + ASSERT_EQ(2, floats->length()); + EXPECT_FLOAT_EQ(2.0F, floats->Value(0)); + EXPECT_FLOAT_EQ(3.0F, floats->Value(1)); +} + +// Verifies sliced FixedSizeList normalization trims values using the fixed child width. +TEST(LanceTableReaderTypeTest, NormalizesVisibleBFloat16ValuesInSlicedFixedSizeList) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto item_field = + arrow::field("item", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const auto values = + make_bfloat16_array({0x3F80, 0x4000, 0x4040, 0x4080, 0x40A0, 0x40C0, 0x40E0, 0x4100}); + auto list_result = arrow::FixedSizeListArray::FromArrays(values, 2); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + const auto input = std::move(list_result).ValueUnsafe()->Slice(2, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field("values", arrow::fixed_size_list(item_field, 2)), input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto list = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, list); + EXPECT_EQ(0, list->offset()); + ASSERT_EQ(1, list->length()); + const auto floats = std::dynamic_pointer_cast(list->values()); + ASSERT_NE(nullptr, floats); + ASSERT_EQ(2, floats->length()); + EXPECT_FLOAT_EQ(5.0F, floats->Value(0)); + EXPECT_FLOAT_EQ(6.0F, floats->Value(1)); +} + +// Verifies sliced Map normalization trims entries while preserving visible keys and values. +TEST(LanceTableReaderTypeTest, NormalizesVisibleBFloat16ValuesInSlicedMap) { + const auto metadata = + arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.bfloat16"}); + const auto item_field = + arrow::field("value", arrow::fixed_size_binary(2))->WithMetadata(metadata); + const auto values = make_bfloat16_array({0x3F80, 0x4000, 0x4040, 0x4080, 0x40A0, 0x40C0}); + arrow::Int32Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 2, 5, 6}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + arrow::StringBuilder keys_builder; + ASSERT_TRUE(keys_builder.AppendValues({"k0", "k1", "k2", "k3", "k4", "k5"}).ok()); + std::shared_ptr keys; + ASSERT_TRUE(keys_builder.Finish(&keys).ok()); + const auto map_type = arrow::map(arrow::utf8(), item_field); + auto map_result = arrow::MapArray::FromArrays(map_type, offsets, keys, values); + ASSERT_TRUE(map_result.ok()) << map_result.status().ToString(); + const auto input = std::move(map_result).ValueUnsafe()->Slice(1, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(arrow::field("values", map_type), + input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto map = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, map); + EXPECT_EQ(0, map->offset()); + ASSERT_EQ(1, map->length()); + EXPECT_EQ(0, map->value_offset(0)); + EXPECT_EQ(3, map->value_offset(1)); + const auto normalized_keys = std::dynamic_pointer_cast(map->keys()); + ASSERT_NE(nullptr, normalized_keys); + ASSERT_EQ(3, normalized_keys->length()); + EXPECT_EQ("k2", normalized_keys->GetString(0)); + EXPECT_EQ("k3", normalized_keys->GetString(1)); + EXPECT_EQ("k4", normalized_keys->GetString(2)); + const auto floats = std::dynamic_pointer_cast(map->items()); + ASSERT_NE(nullptr, floats); + ASSERT_EQ(3, floats->length()); + EXPECT_FLOAT_EQ(3.0F, floats->Value(0)); + EXPECT_FLOAT_EQ(4.0F, floats->Value(1)); + EXPECT_FLOAT_EQ(5.0F, floats->Value(2)); + + const auto schema = arrow::schema({arrow::field("values", map_type)}); + const auto record_batch = arrow::RecordBatch::Make(schema, 1, {input}); + const auto doris_map_type = make_nullable( + std::make_shared(nullable_type(TYPE_STRING), nullable_type(TYPE_FLOAT))); + const Columns columns {projected_column("values", doris_map_type)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_sliced_map"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(1, rows); + + const auto& nullable_map = assert_cast(*block.get_by_position(0).column); + const auto& materialized_map = assert_cast(nullable_map.get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {3}), materialized_map.get_offsets()); + const auto& materialized_keys = assert_cast(materialized_map.get_keys()); + const auto& key_values = + assert_cast(materialized_keys.get_nested_column()); + const auto& materialized_items = + assert_cast(materialized_map.get_values()); + const auto& item_values = + assert_cast(materialized_items.get_nested_column()); + ASSERT_EQ(3, key_values.size()); + ASSERT_EQ(3, item_values.size()); + EXPECT_EQ("k2", key_values.get_data_at(0).to_string()); + EXPECT_EQ("k3", key_values.get_data_at(1).to_string()); + EXPECT_EQ("k4", key_values.get_data_at(2).to_string()); + EXPECT_FLOAT_EQ(3.0F, item_values.get_data()[0]); + EXPECT_FLOAT_EQ(4.0F, item_values.get_data()[1]); + EXPECT_FLOAT_EQ(5.0F, item_values.get_data()[2]); + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies the Lance JSON extension reads LargeBinary values and nulls through JSON SerDe. +TEST(LanceTableReaderTypeTest, ReadsLanceJsonLargeBinaryValues) { + const auto metadata = arrow::KeyValueMetadata::Make({"ARROW:extension:name"}, {"lance.json"}); + const auto schema = arrow::schema( + {arrow::field("json_value", arrow::large_binary())->WithMetadata(metadata)}); + arrow::LargeBinaryBuilder builder; + ASSERT_TRUE(builder.Append(R"({"format":"lance","value":42})").ok()); + ASSERT_TRUE(builder.AppendNull().ok()); + std::shared_ptr values; + ASSERT_TRUE(builder.Finish(&values).ok()); + const auto record_batch = arrow::RecordBatch::Make(schema, 2, {values}); + + const Columns columns {projected_column("json_value", TYPE_JSONB, true)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_json_large_binary"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(2, rows); + const auto& json_values = assert_cast(*block.get_by_position(0).column); + EXPECT_EQ((ColumnUInt8::Container {0, 1}), json_values.get_null_map_data()); + EXPECT_EQ(R"({"format":"lance","value":42})", columns[0].type->to_string(json_values, 0)); + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies Duration values preserve signed 64-bit boundaries and nullability. +TEST(LanceTableReaderTypeTest, ReadsDurationBoundaryValues) { + const auto duration_type = arrow::duration(arrow::TimeUnit::NANO); + const auto schema = arrow::schema({arrow::field("duration", duration_type)}); + arrow::DurationBuilder builder(duration_type, arrow::default_memory_pool()); + const std::array expected {std::numeric_limits::min(), -1, 0, + std::numeric_limits::max()}; + ASSERT_TRUE(builder.AppendValues(expected.data(), expected.size()).ok()); + ASSERT_TRUE(builder.AppendNull().ok()); + std::shared_ptr values; + ASSERT_TRUE(builder.Finish(&values).ok()); + const auto record_batch = arrow::RecordBatch::Make(schema, 5, {values}); + + const Columns columns {projected_column("duration", TYPE_BIGINT, true)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_duration_boundaries"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + ASSERT_TRUE(convert_record_batch_for_test(&state, columns, record_batch, &block, &rows).ok()); + ASSERT_EQ(5, rows); + const auto& durations = assert_cast(*block.get_by_position(0).column); + const auto& duration_values = assert_cast(durations.get_nested_column()); + EXPECT_EQ((ColumnUInt8::Container {0, 0, 0, 0, 1}), durations.get_null_map_data()); + for (size_t index = 0; index < expected.size(); ++index) { + EXPECT_EQ(expected[index], duration_values.get_data()[index]); + } + EXPECT_TRUE(reader.close().ok()); +} + +// Verifies ordinary nested columns bypass Arrow reconstruction when no BFloat16 exists. +TEST(LanceTableReaderTypeTest, KeepsOrdinaryNestedArrayUnchangedDuringNormalization) { + const auto nested_type = arrow::struct_({ + arrow::field("items", + arrow::list(arrow::field( + "item", arrow::struct_({arrow::field("value", arrow::int64())})))), + arrow::field("metadata", arrow::struct_({arrow::field("name", arrow::utf8()), + arrow::field("enabled", arrow::boolean())})), + }); + const auto field = arrow::field("ordinary_nested", nested_type); + auto array_result = arrow::MakeArrayOfNull(nested_type, 3); + ASSERT_TRUE(array_result.ok()) << array_result.status().ToString(); + const auto array = std::move(array_result).ValueUnsafe(); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(field, array, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + EXPECT_EQ(array.get(), normalized.get()); +} + +// Verifies the additional types through the full scan path. +TEST(LanceTableReaderTypeTest, ReadsAdditionalTypesFromCompatibilityFixture) { + const std::filesystem::path dataset_uri = + "./docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/" + "all_types.lance"; + const auto bfloat16_array_type = + make_nullable(std::make_shared(nullable_type(TYPE_FLOAT))); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("null_col", nullable_type(TYPE_NULL)), + projected_column("duration_s_col", TYPE_BIGINT, true), + projected_column("duration_ms_col", TYPE_BIGINT, true), + projected_column("duration_us_col", TYPE_BIGINT, true), + projected_column("duration_ns_col", TYPE_BIGINT, true), + projected_column("json_col", TYPE_JSONB, true), + projected_column("bfloat16_vector_col", bfloat16_array_type), + }; + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_additional_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + bool found = false; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto& null_values = + assert_cast(*block.get_by_position(1).column); + EXPECT_EQ(1, null_values.get_null_map_data()[row]); + if (row_ids.get_data()[row] != 1) { + continue; + } + found = true; + const std::array expected_durations {1, 1000, 1000000, 1000000000}; + for (size_t duration_idx = 0; duration_idx < expected_durations.size(); + ++duration_idx) { + const auto& duration = assert_cast( + *block.get_by_position(duration_idx + 2).column); + const auto& values = assert_cast(duration.get_nested_column()); + EXPECT_EQ(0, duration.get_null_map_data()[row]); + EXPECT_EQ(expected_durations[duration_idx], values.get_data()[row]); + } + + const auto& json_values = + assert_cast(*block.get_by_position(6).column); + EXPECT_EQ(R"({"engine":"doris","format":"lance"})", + columns[6].type->to_string(json_values, row)); + + const auto& vectors = + assert_cast(*block.get_by_position(7).column); + const auto& vector_values = + assert_cast(vectors.get_nested_column()); + const auto [begin, end] = array_range(vector_values, row); + ASSERT_EQ(4, end - begin); + const auto& nullable_values = + assert_cast(vector_values.get_data()); + const auto& floats = + assert_cast(nullable_values.get_nested_column()); + for (size_t index = 0; index < 4; ++index) { + EXPECT_FLOAT_EQ(static_cast(index + 1), floats.get_data()[begin + index]); + } + } + } + EXPECT_TRUE(found); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderSchemaTest, FetchesNegativeScaleDecimalAsUnsupported) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + const auto dataset_uri = + std::filesystem::temp_directory_path() / + ("doris_lance_negative_decimal_scale_" + std::to_string(unique_suffix) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + + const auto decimal_type = arrow::decimal128(10, -2); + const auto arrow_schema = arrow::schema({arrow::field("negative_scale_decimal", decimal_type)}); + auto array = arrow::MakeArrayOfNull(decimal_type, 1); + ASSERT_TRUE(array.ok()) << array.status().ToString(); + const auto batch = arrow::RecordBatch::Make(arrow_schema, 1, {std::move(array).ValueUnsafe()}); + auto batch_reader = arrow::RecordBatchReader::Make({batch}, arrow_schema); + ASSERT_TRUE(batch_reader.ok()) << batch_reader.status().ToString(); + + ArrowArrayStream stream {}; + const auto export_status = + arrow::ExportRecordBatchReader(std::move(batch_reader).ValueUnsafe(), &stream); + ASSERT_TRUE(export_status.ok()) << export_status.ToString(); + static_cast( + ::lance::Dataset::write(dataset_uri.string(), &stream, ::lance::WriteMode::Create)); + + TFileScanRangeParams scan_params; + std::vector column_names; + std::vector column_types; + LanceTableReader reader; + const auto status = reader.fetch_schema(make_latest_lance_range(dataset_uri), scan_params, + &column_names, &column_types); + ASSERT_TRUE(status.ok()) << status.to_string(); + EXPECT_EQ((std::vector {"negative_scale_decimal"}), column_names); + ASSERT_EQ(1, column_types.size()); + ASSERT_NE(nullptr, column_types[0]); + EXPECT_EQ(INVALID_TYPE, column_types[0]->get_primitive_type()); +} + +TEST(LanceTableReaderScanTest, ReadsLatestSnapshotWithoutFragmentIds) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryOptions query_options; + query_options.__set_batch_size(2); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_latest_all_fragments_fixture"); + TFileScanRangeParams scan_params; + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderScanTest, RejectsStorageOptionWithEmbeddedNul) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_storage_option_embedded_nul"); + + // lance-c reads these as C strings, so a NUL truncates the option here while the FE goes on + // using the whole thing, leaving the two halves opening the dataset with different + // configuration. Dropping it instead of failing would only move that divergence. + TFileScanRangeParams scan_params; + TLanceScanParams lance_scan_params; + lance_scan_params.__set_lance_storage_options( + {{std::string("aws_region\0ignored", 18), "us-east-1"}}); + scan_params.__set_lance_scan_params(std::move(lance_scan_params)); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + const auto status = prepare_range(&reader, make_latest_lance_range(dataset_uri)); + + EXPECT_FALSE(status.ok()); + EXPECT_NE(status.to_string().find("contains a NUL"), std::string::npos); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsNumericTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("bool_value", TYPE_BOOLEAN, true), + projected_column("tinyint_value", TYPE_TINYINT, true), + projected_column("smallint_value", TYPE_SMALLINT, true), + projected_column("int_value", TYPE_INT, true), + projected_column("bigint_value", TYPE_BIGINT, true), + projected_column("float_value", TYPE_FLOAT, true), + projected_column("double_value", TYPE_DOUBLE, true), + }; + TQueryOptions query_options; + query_options.__set_batch_size(3); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_numeric_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + const auto read_split = [&](std::vector fragment_ids) { + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, std::move(fragment_ids)).ok()); + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + const auto& bools = + assert_cast(*block.get_by_position(1).column); + const auto& tinyints = + assert_cast(*block.get_by_position(2).column); + const auto& smallints = + assert_cast(*block.get_by_position(3).column); + const auto& ints = assert_cast(*block.get_by_position(4).column); + const auto& bigints = + assert_cast(*block.get_by_position(5).column); + const auto& floats = + assert_cast(*block.get_by_position(6).column); + const auto& doubles = + assert_cast(*block.get_by_position(7).column); + const auto& bool_values = assert_cast(bools.get_nested_column()); + const auto& tinyint_values = + assert_cast(tinyints.get_nested_column()); + const auto& smallint_values = + assert_cast(smallints.get_nested_column()); + const auto& int_values = assert_cast(ints.get_nested_column()); + const auto& bigint_values = + assert_cast(bigints.get_nested_column()); + const auto& float_values = + assert_cast(floats.get_nested_column()); + const auto& double_values = + assert_cast(doubles.get_nested_column()); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + if (row_id == 3) { + EXPECT_EQ(1, bools.get_null_map_data()[row]); + EXPECT_EQ(1, tinyints.get_null_map_data()[row]); + EXPECT_EQ(1, smallints.get_null_map_data()[row]); + EXPECT_EQ(1, ints.get_null_map_data()[row]); + EXPECT_EQ(1, bigints.get_null_map_data()[row]); + EXPECT_EQ(1, floats.get_null_map_data()[row]); + EXPECT_EQ(1, doubles.get_null_map_data()[row]); + } else { + EXPECT_EQ(0, bools.get_null_map_data()[row]); + EXPECT_EQ(0, tinyints.get_null_map_data()[row]); + EXPECT_EQ(0, smallints.get_null_map_data()[row]); + EXPECT_EQ(0, ints.get_null_map_data()[row]); + EXPECT_EQ(0, bigints.get_null_map_data()[row]); + EXPECT_EQ(0, floats.get_null_map_data()[row]); + EXPECT_EQ(0, doubles.get_null_map_data()[row]); + if (row_id == 1) { + EXPECT_EQ(1, bool_values.get_data()[row]); + EXPECT_EQ(-128, tinyint_values.get_data()[row]); + EXPECT_EQ(-32768, smallint_values.get_data()[row]); + EXPECT_EQ(-2147483648, int_values.get_data()[row]); + EXPECT_EQ(-9223372036854775807LL, bigint_values.get_data()[row]); + EXPECT_FLOAT_EQ(-1.25F, float_values.get_data()[row]); + EXPECT_DOUBLE_EQ(-1.25, double_values.get_data()[row]); + } else if (row_id == 2) { + EXPECT_EQ(0, bool_values.get_data()[row]); + EXPECT_EQ(127, tinyint_values.get_data()[row]); + EXPECT_EQ(32767, smallint_values.get_data()[row]); + EXPECT_EQ(2147483647, int_values.get_data()[row]); + EXPECT_EQ(9223372036854775807LL, bigint_values.get_data()[row]); + EXPECT_FLOAT_EQ(3.5F, float_values.get_data()[row]); + EXPECT_DOUBLE_EQ(3.5, double_values.get_data()[row]); + } else { + EXPECT_EQ(0, bool_values.get_data()[row]); + EXPECT_EQ(0, tinyint_values.get_data()[row]); + EXPECT_EQ(0, smallint_values.get_data()[row]); + EXPECT_EQ(0, int_values.get_data()[row]); + EXPECT_EQ(0, bigint_values.get_data()[row]); + EXPECT_FLOAT_EQ(0.0F, float_values.get_data()[row]); + EXPECT_DOUBLE_EQ(0.0, double_values.get_data()[row]); + } + } + } + } + }; + for (const auto fragment_id : fixture.fragment_ids) { + read_split({fragment_id}); + } + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsDecimalTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + + const std::array, 8> decimal_specs {{ + {"decimal_1_0", TYPE_DECIMAL32, 1, 0}, + {"decimal_9_2", TYPE_DECIMAL32, 9, 2}, + {"decimal_10_0", TYPE_DECIMAL64, 10, 0}, + {"decimal_18_4", TYPE_DECIMAL64, 18, 4}, + {"decimal_19_0", TYPE_DECIMAL128I, 19, 0}, + {"decimal_38_10", TYPE_DECIMAL128I, 38, 10}, + {"decimal_39_4", TYPE_DECIMAL256, 39, 4}, + {"decimal_76_38", TYPE_DECIMAL256, 76, 38}, + }}; + Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + for (const auto& [name, type, precision, scale] : decimal_specs) { + columns.emplace_back(projected_column(name, nullable_type(type, precision, scale))); + } + + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_decimal_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + const std::array, 8> expected_values {{ + {{"-9", "9", "0"}}, + {{"-9999999.99", "9999999.99", "0.00"}}, + {{"-9999999999", "9999999999", "0"}}, + {{"-99999999999999.9999", "99999999999999.9999", "0.0000"}}, + {{"-9999999999999999999", "9999999999999999999", "0"}}, + {{"-9999999999999999999999999999.9999999999", "9999999999999999999999999999.9999999999", + "0.0000000000"}}, + {{"-99999999999999999999999999999999999.9999", + "99999999999999999999999999999999999.9999", "0.0000"}}, + {{"-99999999999999999999999999999999999999.99999999999999999999999999999999999999", + "99999999999999999999999999999999999999.99999999999999999999999999999999999999", + "0.00000000000000000000000000000000000000"}}, + }}; + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + for (size_t column = 0; column < decimal_specs.size(); ++column) { + const auto& decimal_column = assert_cast( + *block.get_by_position(column + 1).column); + if (row_id == 3) { + EXPECT_EQ(1, decimal_column.get_null_map_data()[row]); + } else { + EXPECT_EQ(0, decimal_column.get_null_map_data()[row]); + const auto expected_index = row_id == 1 ? 0 : row_id == 2 ? 1 : 2; + EXPECT_EQ(expected_values[column][expected_index], + columns[column + 1].type->to_string(decimal_column, row)); + } + } + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsStringAndBinaryTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("text_value", TYPE_STRING, true), + projected_column("binary_value", TYPE_VARBINARY, true), + }; + + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_string_binary_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + const auto& texts = assert_cast(*block.get_by_position(1).column); + const auto& binaries = assert_cast(*block.get_by_position(2).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + if (row_id == 3) { + EXPECT_EQ(1, texts.get_null_map_data()[row]); + EXPECT_EQ(1, binaries.get_null_map_data()[row]); + continue; + } + EXPECT_EQ(0, texts.get_null_map_data()[row]); + EXPECT_EQ(0, binaries.get_null_map_data()[row]); + const auto text = texts.get_nested_column().get_data_at(row).to_string(); + const auto binary = binaries.get_nested_column().get_data_at(row).to_string(); + if (row_id == 1) { + EXPECT_EQ("", text); + EXPECT_EQ("", binary); + } else if (row_id == 2) { + EXPECT_EQ("Doris 与 Lance ��", text); + EXPECT_EQ(std::string("\x00\x01\xFF\x7F", 4), binary); + } else { + EXPECT_EQ( + "a moderately long text value used to exercise variable-length Arrow " + "buffers", + text); + EXPECT_EQ("lance", binary); + } + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsComplexTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + + const auto int_type = nullable_type(TYPE_INT); + const auto string_type = nullable_type(TYPE_STRING); + const auto int_array = make_nullable(std::make_shared(int_type)); + const auto attributes = make_nullable(std::make_shared(string_type, int_type)); + const auto profile = make_nullable(std::make_shared( + DataTypes {string_type, int_type}, Strings {"city", "level"})); + const auto visit = make_nullable(std::make_shared( + DataTypes {string_type, int_type}, Strings {"page", "duration_seconds"})); + const auto visits = make_nullable(std::make_shared(visit)); + const auto scores = make_nullable(std::make_shared( + string_type, make_nullable(std::make_shared(int_type)))); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("int_array", int_array), + projected_column("attributes", attributes), + projected_column("profile", profile), + projected_column("visits", visits), + projected_column("scores_by_source", scores), + }; + + TQueryOptions query_options; + query_options.__set_batch_size(3); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile_stats("lance_complex_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile_stats, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + const auto& int_arrays_column = + assert_cast(*block.get_by_position(1).column); + const auto& attributes_column = + assert_cast(*block.get_by_position(2).column); + const auto& profiles = assert_cast(*block.get_by_position(3).column); + const auto& visits_column = + assert_cast(*block.get_by_position(4).column); + const auto& scores_column = + assert_cast(*block.get_by_position(5).column); + const auto& int_arrays = + assert_cast(int_arrays_column.get_nested_column()); + const auto& int_array_items = assert_cast(int_arrays.get_data()); + const auto& int_array_values = + assert_cast(int_array_items.get_nested_column()); + const auto& attribute_map = + assert_cast(attributes_column.get_nested_column()); + const auto& attribute_keys = assert_cast(attribute_map.get_keys()); + const auto& attribute_key_values = + assert_cast(attribute_keys.get_nested_column()); + const auto& attribute_items = + assert_cast(attribute_map.get_values()); + const auto& attribute_item_values = + assert_cast(attribute_items.get_nested_column()); + const auto& profile_struct = assert_cast(profiles.get_nested_column()); + const auto& profile_cities = + assert_cast(profile_struct.get_column(0)); + const auto& profile_city_values = + assert_cast(profile_cities.get_nested_column()); + const auto& profile_levels = + assert_cast(profile_struct.get_column(1)); + const auto& profile_level_values = + assert_cast(profile_levels.get_nested_column()); + const auto& visits = assert_cast(visits_column.get_nested_column()); + const auto& visit_items = assert_cast(visits.get_data()); + const auto& visit_struct = + assert_cast(visit_items.get_nested_column()); + const auto& visit_pages = assert_cast(visit_struct.get_column(0)); + const auto& visit_page_values = + assert_cast(visit_pages.get_nested_column()); + const auto& visit_durations = + assert_cast(visit_struct.get_column(1)); + const auto& visit_duration_values = + assert_cast(visit_durations.get_nested_column()); + const auto& score_map = assert_cast(scores_column.get_nested_column()); + const auto& score_keys = assert_cast(score_map.get_keys()); + const auto& score_key_values = + assert_cast(score_keys.get_nested_column()); + const auto& score_items = assert_cast(score_map.get_values()); + const auto& score_arrays = assert_cast(score_items.get_nested_column()); + const auto& score_array_items = assert_cast(score_arrays.get_data()); + const auto& score_array_values = + assert_cast(score_array_items.get_nested_column()); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + if (row_id == 1) { + EXPECT_EQ(0, int_arrays_column.get_null_map_data()[row]); + const auto [int_begin, int_end] = array_range(int_arrays, row); + ASSERT_EQ(3U, int_end - int_begin); + EXPECT_EQ(0, int_array_items.get_null_map_data()[int_begin]); + EXPECT_EQ(1, int_array_values.get_data()[int_begin]); + EXPECT_EQ(1, int_array_items.get_null_map_data()[int_begin + 1]); + EXPECT_EQ(0, int_array_items.get_null_map_data()[int_begin + 2]); + EXPECT_EQ(3, int_array_values.get_data()[int_begin + 2]); + + EXPECT_EQ(0, attributes_column.get_null_map_data()[row]); + const auto [attribute_begin, attribute_end] = map_range(attribute_map, row); + ASSERT_EQ(2U, attribute_end - attribute_begin); + EXPECT_EQ("views", attribute_key_values.get_data_at(attribute_begin).to_string()); + EXPECT_EQ(10, attribute_item_values.get_data()[attribute_begin]); + EXPECT_EQ("likes", + attribute_key_values.get_data_at(attribute_begin + 1).to_string()); + EXPECT_EQ(2, attribute_item_values.get_data()[attribute_begin + 1]); + + EXPECT_EQ(0, profiles.get_null_map_data()[row]); + EXPECT_EQ(0, profile_cities.get_null_map_data()[row]); + EXPECT_EQ("Beijing", profile_city_values.get_data_at(row).to_string()); + EXPECT_EQ(0, profile_levels.get_null_map_data()[row]); + EXPECT_EQ(7, profile_level_values.get_data()[row]); + + EXPECT_EQ(0, visits_column.get_null_map_data()[row]); + const auto [visit_begin, visit_end] = array_range(visits, row); + ASSERT_EQ(2U, visit_end - visit_begin); + EXPECT_EQ(0, visit_items.get_null_map_data()[visit_begin]); + EXPECT_EQ("home", visit_page_values.get_data_at(visit_begin).to_string()); + EXPECT_EQ(0, visit_durations.get_null_map_data()[visit_begin]); + EXPECT_EQ(5, visit_duration_values.get_data()[visit_begin]); + EXPECT_EQ(0, visit_items.get_null_map_data()[visit_begin + 1]); + EXPECT_EQ("search", visit_page_values.get_data_at(visit_begin + 1).to_string()); + EXPECT_EQ(1, visit_durations.get_null_map_data()[visit_begin + 1]); + + EXPECT_EQ(0, scores_column.get_null_map_data()[row]); + const auto [score_begin, score_end] = map_range(score_map, row); + ASSERT_EQ(2U, score_end - score_begin); + EXPECT_EQ("organic", score_key_values.get_data_at(score_begin).to_string()); + const auto [organic_begin, organic_end] = array_range(score_arrays, score_begin); + ASSERT_EQ(2U, organic_end - organic_begin); + EXPECT_EQ(1, score_array_values.get_data()[organic_begin]); + EXPECT_EQ(2, score_array_values.get_data()[organic_begin + 1]); + EXPECT_EQ("ad", score_key_values.get_data_at(score_begin + 1).to_string()); + const auto [ad_begin, ad_end] = array_range(score_arrays, score_begin + 1); + ASSERT_EQ(1U, ad_end - ad_begin); + EXPECT_EQ(3, score_array_values.get_data()[ad_begin]); + } else if (row_id == 2) { + EXPECT_EQ(0, int_arrays_column.get_null_map_data()[row]); + const auto [int_begin, int_end] = array_range(int_arrays, row); + EXPECT_EQ(int_begin, int_end); + + EXPECT_EQ(0, attributes_column.get_null_map_data()[row]); + const auto [attribute_begin, attribute_end] = map_range(attribute_map, row); + EXPECT_EQ(attribute_begin, attribute_end); + + EXPECT_EQ(0, profiles.get_null_map_data()[row]); + EXPECT_EQ(0, profile_cities.get_null_map_data()[row]); + EXPECT_EQ("", profile_city_values.get_data_at(row).to_string()); + EXPECT_EQ(0, profile_levels.get_null_map_data()[row]); + EXPECT_EQ(0, profile_level_values.get_data()[row]); + + EXPECT_EQ(0, visits_column.get_null_map_data()[row]); + const auto [visit_begin, visit_end] = array_range(visits, row); + EXPECT_EQ(visit_begin, visit_end); + + EXPECT_EQ(0, scores_column.get_null_map_data()[row]); + const auto [score_begin, score_end] = map_range(score_map, row); + EXPECT_EQ(score_begin, score_end); + } else { + EXPECT_EQ(1, int_arrays_column.get_null_map_data()[row]); + EXPECT_EQ(1, attributes_column.get_null_map_data()[row]); + EXPECT_EQ(1, profiles.get_null_map_data()[row]); + EXPECT_EQ(1, visits_column.get_null_map_data()[row]); + EXPECT_EQ(1, scores_column.get_null_map_data()[row]); + } + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsVectorTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + + const auto embedding = + make_nullable(std::make_shared(nullable_type(TYPE_FLOAT))); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("label", TYPE_STRING, true), + projected_column("embedding", embedding), + }; + TQueryOptions query_options; + query_options.__set_batch_size(3); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + const auto& labels = assert_cast(*block.get_by_position(1).column); + const auto& label_values = assert_cast(labels.get_nested_column()); + const auto& embeddings = + assert_cast(*block.get_by_position(2).column); + const auto& embedding_arrays = + assert_cast(embeddings.get_nested_column()); + const auto& embedding_items = + assert_cast(embedding_arrays.get_data()); + const auto& embedding_values = + assert_cast(embedding_items.get_nested_column()); + const auto expect_embedding = [&](size_t row, const std::string& label, + const std::array& expected) { + EXPECT_EQ(0, labels.get_null_map_data()[row]); + EXPECT_EQ(label, label_values.get_data_at(row).to_string()); + EXPECT_EQ(0, embeddings.get_null_map_data()[row]); + const auto [begin, end] = array_range(embedding_arrays, row); + ASSERT_EQ(3U, end - begin); + for (size_t i = 0; i < expected.size(); ++i) { + EXPECT_EQ(0, embedding_items.get_null_map_data()[begin + i]); + EXPECT_FLOAT_EQ(expected[i], embedding_values.get_data()[begin + i]); + } + }; + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + if (row_id == 1) { + expect_embedding(row, "origin", {0.0F, 0.0F, 0.0F}); + } else if (row_id == 2) { + expect_embedding(row, "unit-x", {1.0F, 0.0F, 0.0F}); + } else if (row_id == 3) { + expect_embedding(row, "mixed", {-1.5F, 0.25F, 3.75F}); + } else { + expect_embedding(row, "extra", {2.0F, -2.0F, 0.5F}); + } + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +TEST(LanceTableReaderTypeTest, ReadsTemporalTypesFromAllTypesFixture) { + // The committed fixture contains four rows covering values, nulls, and boundary cases. + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + ASSERT_FALSE(fixture.fragment_ids.empty()); + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("date_value", TYPE_DATEV2, true), + projected_column("timestamp_value", nullable_type(TYPE_DATETIMEV2, 0, 6)), + }; + + // Spark generated this fixture with spark.sql.session.timeZone=Asia/Shanghai (+08:00). + TimezoneUtils::load_offsets_to_cache(); + TQueryOptions query_options; + query_options.__set_batch_size(4); + TQueryGlobals query_globals; + query_globals.__set_time_zone("+08:00"); + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_temporal_types_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + std::array seen_rows {}; + size_t total_rows = 0; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& row_ids = assert_cast(*block.get_by_position(0).column); + const auto& dates = assert_cast(*block.get_by_position(1).column); + const auto& timestamps = + assert_cast(*block.get_by_position(2).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = row_ids.get_data()[row]; + ASSERT_GE(row_id, 1); + ASSERT_LE(row_id, 4); + EXPECT_FALSE(seen_rows[row_id]); + seen_rows[row_id] = true; + if (row_id == 1) { + EXPECT_EQ("1969-12-31", columns[1].type->to_string(dates, row)); + EXPECT_EQ("1969-12-31 23:59:59.123456", + columns[2].type->to_string(timestamps, row)); + } else if (row_id == 2) { + EXPECT_EQ("1970-01-01", columns[1].type->to_string(dates, row)); + EXPECT_EQ("1970-01-01 08:00:00.000001", + columns[2].type->to_string(timestamps, row)); + } else if (row_id == 3) { + EXPECT_EQ("2024-02-29", columns[1].type->to_string(dates, row)); + EXPECT_EQ("2024-02-29 12:34:56.654321", + columns[2].type->to_string(timestamps, row)); + } else { + EXPECT_EQ(1, dates.get_null_map_data()[row]); + EXPECT_EQ(1, timestamps.get_null_map_data()[row]); + } + } + total_rows += block.rows(); + } + EXPECT_EQ(4U, total_rows); + EXPECT_TRUE(seen_rows[1]); + EXPECT_TRUE(seen_rows[2]); + EXPECT_TRUE(seen_rows[3]); + EXPECT_TRUE(seen_rows[4]); + EXPECT_TRUE(reader.close().ok()); +} + +} // namespace doris::format::lance diff --git a/docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_transactions/0-4d80709b-dcb0-4dea-8c7f-99828f67f781.txn b/docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_transactions/0-4d80709b-dcb0-4dea-8c7f-99828f67f781.txn new file mode 100644 index 0000000000000000000000000000000000000000..1145f333b55bc72f8a27d977036dc4f1a916bd50 GIT binary patch literal 3222 zcma);+iv1k6o$(&K+ZdmIEP7`b3y{Kfq>bWOgj@*9ZfGPMXh>?jBTcFjft?GPWl*q zl&Uwq@8k3x+O-dc1tHZS1(dzM|KDrvGdXJ5hSt*B-HL5>wMxTw%!*;PdX;wDs2ROx ztJgC0KeGQQg})Ny&qTq{_(#_@O@}Y`$G&v!y4!-UM$5L0n(fr=-gUikZMDp9yXu*~ z<&f4FiDW9B$DhVt;<8e`(u7`3o+Y)ve^00jWS3-zgI_zYt^ON-66K8Rhs}nTFcM^s z2p~BDux9Q72pAgNBQ=4rW{w<^d^BRxn91<=7y?Fb za-+-y#M?P^ObSdPsVt_lB7nT=HSRTsDOP;FhP@<}!xZF@*+F<|U~D zrnr|J?{hNW^9E*||2*dMKbc;SM`d;bmFX>DG&9Cdq@(P45o1|<5OqC=+cn6N?O1N# z^z@pTt0j!C${>X(ts4|pH(MWLRqa|#%<@bXL}{xDLasU_xhU+3URE%l4Z@-8e*`E= zuE>&S4nI1b5xR=e1rbC77~-z$o5LqQ5d_0o5#YW$SrJkMuVGj^Bgq?5>bajByA!y- zIUS@cVqNhWL-i)F_nZ`LGj!xkm9R(#sBJ!R^h}^~w$?G4XCBQ4?FZ6yA$0r9G~fkq zU^XX0RG=4RQKEgpDwxenR{Ba9GKd7c`3#06q6ue!eF1OHf_(w&WSMmpgl7LiCcTYu zo+OXbfL3^sb+R&+$mDmhW@!|LahWBOMZ9`J6wMULVs>8;`LU=?ilhG7a7CfT=VA{F z#}&Y+(I39Q#2Be1uuHk0Ai}!#YX(X5Uec)uS@r-5VqmSc9RXoUi~ohv2sG z+(3AqV$U>d=0jH^X*YEG%9(n~?<#o?Ljhcgk~+r*^DJ78GlRpcD1FN6InQk};|sMs zk?}goJepqQD3=gGw**Y2I8R1tS8%U|ad0B}s#+YPM#Y2SYqB{N?Tl~s26ow);wa~&&9`KG zD%`>M;x#s!Ch6#&lxE+&U?$JwCN_JP74KFWy??<-p4KgFG(DD7ta0hIN9OwG1K&6X zR;8d-E|WROhs)3jl(uTbvr5)T>KErpp=vvxQn)EcEAs}L(S%YsVqA-zF!81M8uzuq zf)th-+_-EC^(O6^UcjCMDH6cD&Kq=jhPPNX+S(r$`SZ2Pu7kkJR}T zI(`7XQnvHS6t-1Rrm?;gnsB$7WQU~LukuE{EkD17OC%KyUFAy%;*(^HQS(B=>Uw2QPcpzQfg}Su+ek@&oK!c$`<+|Mv$kl!lrAtLr^k c>&DCX(Xqn8koSCtdse5`JC&m=bz(^b literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_versions/18446744073709551614.manifest b/docker/thirdparties/docker-compose/iceberg/scripts/preinstalled_data/lance/all_types.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..19579561068e06771ab5504a4bc24a2991f187a1 GIT binary patch literal 6521 zcmdU!OK%%h6vyLdoEztL^O~lQOq)j&r*_7U# zW3XVsiX~!+*sy2Ek_Dfjtoj|`+&g#1XPmJ;ZX+ZtB~s@6&wtLj&tK&4(=#)4x7e&G zWu;orHXC&%TWsoDw$doKvejy(P-&IQt#T#*OY)6Gev8mwBc!76Pd=|GdHBVC*sr{D zS}((|V!7F<6qCSi2!Qc;OiB6ORkI(^fuHM*u0!J0UGtVHNdnyPoZjv(q2 zu*cj3Bw$$K9xO}$~XH8Wpu=4ug3S42>SsCrUSVRf_h zF~};MIuo-Lm<3U_T!KWNwL?>VyXCxP8S9gl-7`8*Koq6NbkWp$PxP86UBS|{6GRCx z#C4;i^n-Dj-mF>1E4_yD)^Oh11&x|7@qP~} zX==7EW@;TLiGbSFUUKPyBNel?fu(cIqf}JemM~4*Mw^*hyx~o(O*tXeksi?nA#FQa z32WzsR`?1rRM2%JgQo1mN$7q zmj@}L_-i<4(F?=41SN?ku8&CS2PTPTZj4CkxJgyI=DnW{SKn^%x!A^ugAQQS)Gt0i zAc1T~__#{rGxWhJVyKD~WRIU>?AJeNt;Tpad zPqERkQuXdhVfN7oGjSf5u-S#G_-lpHqY*~pv@T<#;jvVmH7=aC>1F>E95F_NoiOgDcn`m8lLb{+ zYH;JSDa@DDmS$QE2V&F$t~0xJUg3S5f^;^(uG|uGGd-DCv#anot#`--&dLM%LB-x^=XI;x+ZAu@o z7+XgIr{MHqSGM$E=y{u_o?3A5GOT@wyNk2OFaXiVux|m*bL{W)TO-QHnlbIuM|8FB zF5l;R!|wL@o6qo@<)QViiqRE$&bs*n{xcyHn4L^wb~2gSnZ(=s!OTv=Fgp|RmBsrV z!R#a)vkNb=X-6=->m^j9m|b{@eLI5LT`!>;#q1 z*kooW(=t07VuaJ9n4L_|?BpGp9cDEwvy;%w4yIw5olL{*t{7J8WM)U=$;=KTKP|J9 zw_$dFQb=a^Cxv8o^7hP5rek*44bw5ZFCh%G`x3%1JM7}g%uYryI~m37?6&aWH<;N; zFtf7;cqRhgvCK{ancb^+h}q$JAhWZH9FR1>o5nG_SG=Fu$-6MS*NBhVy+($Zeb9)X z*~w)vJGmTYCzr|WnR~p{Ky}xtL_nrIj)NFD}n+sor3Y!3mIG5Lp7krPM3LM&SpshuWl8 zs*7;Er|4Ig6cwS!C5Y1EVy?)I)(>{6l|;L~lvn@ho8Z4^4gVLG00|*jf>u=!{6&(+@aVjP|XtT->HCFAb{8HL9GE$TV3fkgp85)nE}$Xq9%2z;O$ zqGH~bjkaGSM)8BpY_d-C*bOmdewmHo0?0GVBh!=kp9UF);%^Yc-~bZ&pfi$T*tbB6 zJSOsxXvr9ngY(d_q8-2>+hg{e*gpY+h#rz33i%PD%9g)`ow<3lfSq)Fi0wjxYEj8Q z97OBtyi}?mWG3hP`|1S+Q1b^wv=`*Ai2Q4|Y_^`UO(e}UpjTf(f2XdU} z1LlFS!?SSvuP&1!`XAm-JoGyX`)(}I_Ftd+&EtSyy4cn7G@;|ihi!l8(0|=G?sh1~ z%L~*2VTbYeI`?0z;c80T#ajKn?so{Rzp(vs4Yb!rU;IgfLs^=1y>!J3Z~^-_d;b2v z>lgJ$TpyD*Lh8Sq^XWS(JjUxWP`pPQ@Uw!5Hp=YmLIRxj2%5ZU0SqjB61hcXbu9SW;|8*FL zwdN1R4UV55X6+vi_tE3e9Dal3@{f-Vj6k8Wd=hjP!j;m`>Nk0UKt_LYF=zi*uzr)e zT?d~=_|ST5X454Zw%+=`S^F2U|6Q;Bq;5*#FnvnaFDb0KbytjMF@ep%JEg&w8!FLT zw;6GWvx${8m zzhJi=3WanC$;KQa9%ftghzIS&j``$+ld*^aCS<*V0)Wwhz1B948FrWj0Wnu?IP`SO>%~&PkEiy5eEU_HI4KuNa zqLIl|?DNq{iLYMft6xPE>>Z^3c3~8OM=*S(8e}Gp2u8veC}}4n<)hUolU5QLgZ;sH ziVJn6V{sxhMICOEX`KueWTbm>H7AWTT8~Uy$!WP^_H23r*+8$kA)^PA%WyWxF6Sw zo=F~uT{3-@z>4W1Gw>Mf&dxc7nQ&5aVZSV_ZkZ;ZBR*|^9!GjLUw%jYfRG#+!yYMvQE#BGu`Jyu zThW+979?arwqdvxZ_U9@E?4$`SxQq5U69goF`vZSa?q1WazWz-1o3P=Bn!%oWsuErE~y1q#KUuR;RIwZEA;YdQV~tSqy1>gGpq%~ zsG=>{dOmu=6V!&qkV2)*&ddYQEe&W8QcU)Wg6bNPbu|%W5T+WuKR|}CcQ7~;o=uVM zfEC>j`#N~Pl5!oCxw1?9$)$-$(_z>KgwZ(OG9^~T1JUVpa-M1)lQnBOODM?n3qCd#-7eIHJ5U>H z+0W2oG*dle$ys=%5Lj;n++|0=t~)l@0Eb=y2289s0$RBd(4B^J^9;BXCSj$Hu+^rk>kR>i7ghhX>9~-sn)A`?&-n%khhpAmAHcB z9*c6wO!7GdVXroXA|LKS`-&;5!j(i3+|ANLW>k%WPc?cC_o*NIk*}DlT3k(3kw@5Y zxJ;=#2A$?IDi~Rt?t&{ z*xE|#*9H~Idm+khy$%+QK^Dz1JdTbQ^S2GPu39uuIcYU3Z|M?mvA#uz-EY%IdQ0?d z(d+ekZ0+1gJ!J0I8})n=nVP%4UVmTzz~E3|I6O5SiO!grG>{DR2EBo+HI)p0Heqg= zKr%2I457+gGB|60j=Z*L*0V;vu^i79eq>se(P)&V>iw=4Of7PfQJeH8?v<$^h8F+! zbp-j%Oc2SKH5p~8Q@r-7Gta4{86z*-)3z4NZ3NA#CBtQ zIWti4K5~07{acU88L02jca)<}yew=|ow36xOC5OzO%9Xl^qu<7a=d$+zW`-Yow3s> zOI>J`J-aliPH)j$%JEM5-VTKI}!E#muU}cCS@cZDs-xf`ISQ z+pvYI@nawADW;|xS5Y;78~JUu8D$V{qfKu&+9BGZ4UD$Me6%}^4!!e3iFT*nRbI5o zg`1gZ-v>k6rF-En#62*BPT=F{Sh1mnMZIbwyG|jeja_|v)UvL>!4Q3~v3K(gxgR33 zPw$4=M{i2pgpjz)3<@ouSurUmFY1<)YrP{S>nM0{|x_7%z)fCWe5q$8UfI7Aewf2w?FzI*E#$khi~(+dS3bKS=JRcOdi Mliy7qKXPL1e=1MgwEzGB literal 0 HcmV?d00001 diff --git a/gensrc/proto/internal_service.proto b/gensrc/proto/internal_service.proto index b0da58fdf17dfd..c0baef819c3ff7 100644 --- a/gensrc/proto/internal_service.proto +++ b/gensrc/proto/internal_service.proto @@ -829,7 +829,9 @@ message PRequestBlockDesc { repeated PSlotDescriptor slots = 2; repeated ColumnPB column_descs = 3; repeated uint32 file_id = 4; - repeated uint32 row_id = 5; + // The wire field is uint64 for every version. FILE_LOCAL_ROW_ID values are zero-extended + // from uint32, while LANCE_DATASET_ROW_ID uses the full uint64 range. + repeated uint64 row_id = 5; optional PTupleDescriptor desc = 6; repeated uint32 column_idxs = 7; // Numeric value of ROW_VERSION. Keep this as uint32 so a receiver can detect and reject a diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift index 1cb49705c5bd4d..da4d584ca711bf 100644 --- a/gensrc/thrift/PlanNodes.thrift +++ b/gensrc/thrift/PlanNodes.thrift @@ -475,6 +475,122 @@ struct TRemoteDorisFileDesc { 6: optional string password } +// The external search enums below spell out their values because those values are on the wire: +// branch-4.1/4.2 declared the same enums without explicit values, so each member must keep its +// implicit position (FLOAT16 = 0, FLOAT32 = 1, ...) on every branch. + +// Element type and byte layout of a vector search query. The encoded values use little-endian +// byte order and contain exactly `dimension` elements of `element_type`. +enum TVectorElementType { + FLOAT16 = 0, + FLOAT32 = 1, + FLOAT64 = 2, + UINT8 = 3, + INT8 = 4 +} + +enum TVectorMetric { + DEFAULT = 0, + L2 = 1, + COSINE = 2, + DOT_PRODUCT = 3, + HAMMING = 4 +} + +struct TSearchVector { + 1: optional TVectorElementType element_type + 2: optional i32 dimension + 3: optional binary values + // Present only for one multi-vector query; values contains a row-major matrix. + 4: optional i32 num_vectors +} + +// Logical result parameters for one vector query. `top_k` is the number of rows returned after +// skipping `offset`; an adapter may fetch more physical candidates to implement that contract. +struct TVectorSearchParams { + 1: optional string column + 2: optional TSearchVector query_vector + 3: optional i64 top_k + 4: optional i64 offset + 5: optional TVectorMetric metric +} + +enum TFtsCoverageMode { + STRICT = 0, + INDEX_ONLY = 1 +} + +enum TFtsQueryType { + MATCH = 0, + PHRASE = 1 +} + +enum TFtsMatchOperator { + OR = 0, + AND = 1 +} + +// Logical parameters for one full-text query. MATCH combines analyzed terms with match_operator; +// PHRASE searches the analyzed terms in order and permits phrase_slop intervening positions. +struct TFullTextSearchParams { + 1: optional string column + 2: optional string query + 3: optional i64 top_k + 4: optional i64 offset + // STRICT requires the selected FTS index to cover the complete pinned snapshot. INDEX_ONLY + // searches and scores only fragments covered by committed FTS index segments. + 5: optional TFtsCoverageMode coverage_mode + // Reserved for distributed FTS. Every BE may search a different index-segment subset, so + // statistics prepared independently on each BE would produce BM25 scores that are not + // comparable during the final TopK merge. The payload must be prepared once for the exact + // snapshot, logical FTS index, segment set, and query (including its final fuzzy vocabulary), + // then validated and installed unchanged on every BE scanner. + // + // Doris currently leaves this field unset and BE rejects a set value because Lance/lance-c + // does not yet provide the complete producer and consumer contract. Track the upstream work + // at https://github.com/lance-format/lance/issues/8937. + 6: optional binary global_statistics + 7: optional TFtsQueryType query_type + // MATCH-only parameters. max_fuzzy_distance is reserved as zero until the bundled Lance-C + // supports one canonical fuzzy vocabulary across all prepared index segments. + 8: optional TFtsMatchOperator match_operator + 9: optional i32 max_fuzzy_distance + // PHRASE-only parameter. Zero requires an exact phrase. + 10: optional i32 phrase_slop +} + +enum TSearchFilterFormat { + SQL = 0, + SUBSTRAIT = 1 +} + +// A search filter is evaluated before candidate selection. A normal SQL predicate above the search +// relation remains a post-search filter and is not serialized here. +struct TSearchFilter { + 1: optional TSearchFilterFormat format + 2: optional binary payload +} + +// Optional vector search tuning. Logical query fields stay in TVectorSearchParams so providers +// can reuse the same request and interpret the supported tuning fields independently. +struct TVectorSearchOptions { + 1: optional i32 nprobes + 2: optional i32 refine_factor + 3: optional i32 ef + 4: optional bool use_index + // Lance: -1 uses available CPU parallelism, 0 selects automatically, positive values cap it. + 5: optional i32 query_parallelism +} + +// The active union field identifies the logical search kind. A future hybrid field can contain both +// vector and full-text subqueries plus its fusion parameters without changing either existing field. +union TExternalSearchQuery { + 1: TVectorSearchParams vector_search + 2: TFullTextSearchParams full_text_search +} + +// A catalog/S3 range reads fragments from a fixed snapshot. A local TVF range uses version zero +// without fragment_ids to open the latest snapshot and scan the whole dataset on its selected BE. struct TLanceFileDesc { // URI of the Lance dataset (s3://..., file:///..., etc.) 1: optional string dataset_uri @@ -482,6 +598,19 @@ struct TLanceFileDesc { 2: optional list fragment_ids // Dataset version for time travel 3: optional i64 version + // Per-split row limit pushed down from the query LIMIT. Each scanner returns at + // most this many rows; the upper LIMIT operator still enforces the global bound. + // Only set for ordinary scans whose predicates are fully pushed into Lance. + 4: optional i64 limit + // Physical index segments assigned to this split. Each UUID is 16 bytes in RFC 4122 order. + // An ordinary scan accepts exactly one scalar segment and requires a fixed version and + // nonempty fragment_ids. Vector/FTS scans interpret these as their own index segments. + // Unset for fragment scans without an assigned segment. + 5: optional list index_segment_uuids + // Ordinary scans only. False for uncovered-fragment tasks in a scalar segment plan, + // so these tasks filter their rows without repeating global scalar-index evaluation. + // Unset preserves Lance's default; an explicit scalar segment must not be combined with false. + 6: optional bool use_scalar_index } struct TTableFormatFileDesc { @@ -530,11 +659,27 @@ enum TTextSerdeType { // provider FileDesc (for example, dataset_uri/version/fragment_ids in TLanceFileDesc). struct TExternalSearchRequest { 1: optional i32 schema_version = 1 + 2: optional TExternalSearchQuery search_query + 3: optional TSearchFilter search_filter + 4: optional TVectorSearchOptions vector_search_options } struct TLanceScanParams { + // Serialized Substrait ExtendedExpression executed by the native Lance scanner. Set at + // ScanNode level so it is not serialized once per fragment split. 1: optional binary lance_substrait_filter + // Provider-independent search request. Set at ScanNode level so all ranges use the same logical + // query. Lance external search uses one range per fragment or physical index segment, and Doris + // merges the split-local candidates. 2: optional TExternalSearchRequest external_search_request + // Lance-native storage options, handed to lance-c untranslated. The namespace protocol treats + // storage_options as opaque configuration passed directly to Lance, so any key vocabulary the + // BE imposed here would drop options it does not happen to know - including credentials a + // namespace spelled with a different accepted alias, and every non-S3 provider's keys. + // Set at ScanNode level so credentials are not serialized once per fragment split. + // These are the initial options for the scan and are never refreshed: lance-c opens datasets + // with a static option set, so credentials that expire mid-scan are not re-vended. Renewal + // needs a refresh channel of its own, which this field is not. 3: optional map lance_storage_options } From 5786e60987d706ef4df3723ab5acd7cafc0fdfc7 Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 14:38:13 +0800 Subject: [PATCH 02/10] [fix](be) Keep the Lance record batch converter header off table_reader.h ### What problem does this PR solve? Issue Number: None Related PR: #69581 Problem Summary: BE configure fails the build-hygiene gate on this PR (COMPILE and BE UT): util/threadpool.h now reaches 1088 TUs, one over its limit of 1087 (baseline 988 +10%). Master reaches 1083. Five of the new Lance TUs reach the header through exprs/vexpr_context.h -> storage/segment/column_reader.h -> io/cache/cached_remote_file_reader.h -> io/cache/block_file_cache.h, an existing chain this PR does not touch. One of them did not need to. lance_record_batch_converter.h included the whole format_v2/table_reader.h for two structs, ColumnDefinition and GlobalRowIdContext, which are defined in format_v2/column_data.h, and that header reaches nothing on the chain. The converter header now includes column_data.h instead, so lance_record_batch_converter.cpp no longer reaches util/threadpool.h and the reach is 1087, within the limit. No gate table changes. The other four TUs (lance_reader.cpp, lance_runtime_filter_helper.cpp and their unit tests) evaluate conjuncts and runtime filters, so they include vexpr_context.h on purpose; lance_reader.h still gets table_reader.h directly. ### Release note None ### Check List (For Author) - Test: Manual test - build-support/check-build-hygiene.sh passes (threadpool.h reach 1087 of 1087). - With the BE UT compile flags, clang++ -fsyntax-only passes on lance_record_batch_converter.cpp, on a TU that includes only its header, and on the unity batch that holds it. - Behavior changed: No - Does this need documentation: No Co-Authored-By: Claude Opus 5.5 (1M context) --- be/src/format_v2/lance/lance_record_batch_converter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/src/format_v2/lance/lance_record_batch_converter.h b/be/src/format_v2/lance/lance_record_batch_converter.h index 69ebd4618a9e30..491d480a26fe8f 100644 --- a/be/src/format_v2/lance/lance_record_batch_converter.h +++ b/be/src/format_v2/lance/lance_record_batch_converter.h @@ -28,8 +28,8 @@ #include "common/status.h" #include "core/data_type_serde/data_type_serde.h" +#include "format_v2/column_data.h" #include "format_v2/lance/lance_reader_helper.h" -#include "format_v2/table_reader.h" namespace arrow { class Array; From 872e39c276c62f9ce217ff5cdf6fe077d2361a57 Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 03/10] [fix](be) Reject Arrow Date32 values outside the Doris DATE range ### What problem does this PR solve? Issue Number: None Related PR: #69581, #68649 Problem Summary: Reproduction: read an Arrow Date32 array holding a day outside 0000-01-01..9999-12-31 into a Doris DATE column, for example 2932897 (10000-01-01) written by PyArrow into a Lance dataset, or the same value returned by an ADBC driver, an Arrow stream load or the paimon-rust reader. The row comes back as a non-null `0000-00-00`, also inside ARRAY, STRUCT and MAP values. Root cause: the DATE32 branch of the shared `DataTypeDateV2SerDe::read_column_from_arrow` ignores the bool returned by `get_date_from_daynr()` (dropped since #48944) and appends the default-constructed value. It also adds the epoch offset in 32 bits, so INT32_MAX overflows, and it decodes the payload of NULL slots. The DATE64 branch next to it already rejects out-of-range days. Fix: port the DATE32 range part of the branch-4.1/4.2 fix #68649. NULL slots append the default value without being decoded, the day number is computed in 64 bits, and a day number <= 0, above DATE_MAX_DAYNR or rejected by `get_date_from_daynr()` returns `InvalidArgument("Arrow Date32 value is outside the Doris DATE range: row=..., days=...")` with the 4.x wording. ARRAY/STRUCT/MAP leaves get the same check through their element SerDes. `write_column_to_arrow` and the year-zero calendar mapping (the other part of #68649, and master draft #67449) are unchanged; the new tests avoid the days whose meaning that mapping changes. Before: out-of-range days read as `0000-00-00`. After: the read fails with the error above; in-range values and NULLs read as before. The Lance reader ported in #69581 (from the branch-4.2 snapshot, which already contains #68649) relies on this SerDe check. ### Release note Reading Arrow DATE32 values outside 0000-01-01..9999-12-31 (ADBC, Arrow stream load, paimon-rust, Lance) now fails instead of returning 0000-00-00. ### Check List (For Author) - Test: Unit Test - New: `DataTypeDateTimeV2SerDeTest.RejectsInvalidDate32Values`, `LanceTableReaderTypeTest.RejectsDate32OutsideDorisDateRange`, `LanceTableReaderTypeTest.ReadsLastDorisDateAndIgnoresNullDate32Payload`. - All pass on macOS arm64 (ASAN), together with `DataTypeDateTimeV2SerDeTest.*`, `DataTypeSerDeArrowTest.*`, `DataTypeSerDeArrowValidationTest.*`, `ArrowColumnToDorisColumnTest.*`, `ParquetExprTest.*`, `IcebergV2ReaderTest.*` and the Lance suites. With master's DATE32 branch restored, the first two fail. - `DataTypeDateTimeV2SerDeTest` aborts in its setup under macOS ASAN on master: `load_data_from_csv()` in `be/test/testutil/test_util.cpp` dereferences `std::set::end()`. It ran here with that assertion removed locally; that fix goes in a separate PR. - Behavior changed: Yes. An Arrow DATE32 day outside 0000-01-01..9999-12-31 used to be returned as a non-null 0000-00-00; the scan now fails with an InvalidArgument error, as Arrow DATE64 values already did. - Does this need documentation: No Co-authored-by: Gabriel Co-Authored-By: Claude Opus 5.5 (1M context) --- .../data_type_datev2_serde.cpp | 18 +++- .../data_type_serde_datetime_v2_test.cpp | 58 +++++++++++++ be/test/format_v2/table/lance_reader_test.cpp | 83 +++++++++++++++++++ 3 files changed, 158 insertions(+), 1 deletion(-) diff --git a/be/src/core/data_type_serde/data_type_datev2_serde.cpp b/be/src/core/data_type_serde/data_type_datev2_serde.cpp index b7021af6f01503..80b6ebd5e8a575 100644 --- a/be/src/core/data_type_serde/data_type_datev2_serde.cpp +++ b/be/src/core/data_type_serde/data_type_datev2_serde.cpp @@ -277,11 +277,27 @@ Status DataTypeDateV2SerDe::read_column_from_arrow(IColumn& column, const arrow: const auto* base_ptr = reinterpret_cast(concrete_array->raw_values()); const size_t element_size = sizeof(int32_t); for (auto value_i = start; value_i < end; ++value_i) { + // A null slot has no calendar value and its payload may be outside the DATE range. + if (concrete_array->IsNull(value_i)) { + col_data.emplace_back(DateV2Value()); + continue; + } const uint8_t* raw_byte_ptr = base_ptr + value_i * element_size; auto date_value = unaligned_load(raw_byte_ptr); + // Arrow allows any int32 day, Doris DATE only day numbers 1..DATE_MAX_DAYNR + // (0000-01-01..9999-12-31). For example, 2932897 is 10000-01-01: its day number + // 3652425 makes get_date_from_daynr() fail, and ignoring that result used to append + // a non-null 0000-00-00. Add in 64 bits so INT32_MAX cannot overflow, and reject + // the value like the DATE64 branch above. + const int64_t daynr = static_cast(date_value) + date_threshold; DateV2Value v; - v.get_date_from_daynr(date_value + date_threshold); + if (daynr <= 0 || daynr > DATE_MAX_DAYNR || + !v.get_date_from_daynr(static_cast(daynr))) { + return Status::InvalidArgument( + "Arrow Date32 value is outside the Doris DATE range: row={}, days={}", + value_i, date_value); + } col_data.emplace_back(v); } } else { diff --git a/be/test/core/data_type_serde/data_type_serde_datetime_v2_test.cpp b/be/test/core/data_type_serde/data_type_serde_datetime_v2_test.cpp index 51dec6fc83ba4e..4b08e2c23b7bff 100644 --- a/be/test/core/data_type_serde/data_type_serde_datetime_v2_test.cpp +++ b/be/test/core/data_type_serde/data_type_serde_datetime_v2_test.cpp @@ -388,6 +388,64 @@ TEST_F(DataTypeDateTimeV2SerDeTest, RejectsInvalidDate64Values) { expect_invalid(out_of_range, "outside the Doris DATE range"); } +TEST_F(DataTypeDateTimeV2SerDeTest, RejectsInvalidDate32Values) { + const auto make_date32 = [](int32_t days) { + arrow::Date32Builder builder; + EXPECT_TRUE(builder.Append(days).ok()); + std::shared_ptr array; + EXPECT_TRUE(builder.Finish(&array).ok()); + return array; + }; + cctz::time_zone tz; + + // 1970-01-01 + 2932896 days is 9999-12-31, the last Doris DATE. + auto last_date = ColumnDateV2::create(); + auto status = + serde_date_v2->read_column_from_arrow(*last_date, make_date32(2932896).get(), 0, 1, tz); + ASSERT_TRUE(status.ok()) << status.to_string(); + ASSERT_EQ(1, last_date->size()); + EXPECT_EQ(9999, last_date->get_data()[0].year()); + EXPECT_EQ(12, last_date->get_data()[0].month()); + EXPECT_EQ(31, last_date->get_data()[0].day()); + + // 10000-01-01, -719529 (the day before 0000-01-01 in Arrow's proleptic Gregorian calendar) + // and both int32 extremes used to read as a non-null 0000-00-00; INT32_MAX also overflowed + // the 32-bit day number. + for (const int32_t days : {2932897, -719529, std::numeric_limits::min(), + std::numeric_limits::max()}) { + SCOPED_TRACE(days); + auto column = ColumnDateV2::create(); + status = serde_date_v2->read_column_from_arrow(*column, make_date32(days).get(), 0, 1, tz); + EXPECT_FALSE(status.ok()); + EXPECT_NE(std::string::npos, + status.to_string().find("Arrow Date32 value is outside the Doris DATE range")) + << status.to_string(); + } + + // A NULL slot keeps whatever payload its writer left; it must not be decoded. Validity + // bitmap 0b10 marks row 0 NULL over the out-of-range payload and row 1 valid. + arrow::Date32Builder builder; + ASSERT_TRUE(builder.AppendValues({2932897, 0}).ok()); + std::shared_ptr payload_array; + ASSERT_TRUE(builder.Finish(&payload_array).ok()); + auto data = payload_array->data()->Copy(); + data->buffers[0] = arrow::Buffer::FromVector(std::vector {0x02}); + data->SetNullCount(1); + const auto nullable_array = arrow::MakeArray(data); + DataTypeNullableSerDe nullable_serde(serde_date_v2); + auto nullable_column = ColumnNullable::create(ColumnDateV2::create(), ColumnUInt8::create()); + status = + nullable_serde.read_column_from_arrow(*nullable_column, nullable_array.get(), 0, 2, tz); + ASSERT_TRUE(status.ok()) << status.to_string(); + ASSERT_EQ(2, nullable_column->size()); + EXPECT_TRUE(nullable_column->is_null_at(0)); + EXPECT_FALSE(nullable_column->is_null_at(1)); + const auto& dates = assert_cast(nullable_column->get_nested_column()); + EXPECT_EQ(1970, dates.get_data()[1].year()); + EXPECT_EQ(1, dates.get_data()[1].month()); + EXPECT_EQ(1, dates.get_data()[1].day()); +} + TEST_F(DataTypeDateTimeV2SerDeTest, ArrowTimeToTimeV2) { const auto read_time = [](arrow::ArrayBuilder* builder, int scale, const std::vector& expected) { diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index cdc4b2b58f7253..31bc03061eee3c 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -2893,6 +2893,89 @@ TEST(LanceTableReaderTypeTest, ReadsDurationBoundaryValues) { EXPECT_TRUE(reader.close().ok()); } +// Verifies Date32 days after 9999-12-31 fail instead of reading as a non-null 0000-00-00, also +// when ARRAY, STRUCT, and MAP leaves reach the DATE SerDe through their element SerDes. +TEST(LanceTableReaderTypeTest, RejectsDate32OutsideDorisDateRange) { + // 1970-01-01 + 2932897 days is 10000-01-01. + arrow::Date32Builder date_builder; + ASSERT_TRUE(date_builder.Append(2932897).ok()); + std::shared_ptr dates; + ASSERT_TRUE(date_builder.Finish(&dates).ok()); + arrow::Int32Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 1}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + arrow::StringBuilder keys_builder; + ASSERT_TRUE(keys_builder.Append("k").ok()); + std::shared_ptr keys; + ASSERT_TRUE(keys_builder.Finish(&keys).ok()); + + auto list_result = arrow::ListArray::FromArrays( + arrow::list(arrow::field("item", arrow::date32())), *offsets, *dates); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + auto struct_result = arrow::StructArray::Make({dates}, {arrow::field("d", arrow::date32())}); + ASSERT_TRUE(struct_result.ok()) << struct_result.status().ToString(); + auto map_result = arrow::MapArray::FromArrays(arrow::map(arrow::utf8(), arrow::date32()), + offsets, keys, dates); + ASSERT_TRUE(map_result.ok()) << map_result.status().ToString(); + + const auto date_type = nullable_type(TYPE_DATEV2); + const std::vector, DataTypePtr>> cases { + {dates, date_type}, + {std::move(list_result).ValueUnsafe(), + make_nullable(std::make_shared(date_type))}, + {std::move(struct_result).ValueUnsafe(), + make_nullable(std::make_shared(DataTypes {date_type}, Strings {"d"}))}, + {std::move(map_result).ValueUnsafe(), + make_nullable(std::make_shared(nullable_type(TYPE_STRING), date_type))}, + }; + for (const auto& [array, doris_type] : cases) { + SCOPED_TRACE(array->type()->ToString()); + const auto schema = arrow::schema({arrow::field("value", array->type())}); + const auto record_batch = arrow::RecordBatch::Make(schema, 1, {array}); + const Columns columns {projected_column("value", doris_type)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + const auto status = + convert_record_batch_for_test(&state, columns, record_batch, &block, &rows); + EXPECT_FALSE(status.ok()); + EXPECT_NE(std::string::npos, + status.to_string().find("Arrow Date32 value is outside the Doris DATE range")) + << status.to_string(); + } +} + +// Verifies the last Doris DATE reads exactly and the payload under a NULL slot is not decoded. +TEST(LanceTableReaderTypeTest, ReadsLastDorisDateAndIgnoresNullDate32Payload) { + arrow::Date32Builder builder; + ASSERT_TRUE(builder.AppendValues({2932896, 2932897}).ok()); + std::shared_ptr payload; + ASSERT_TRUE(builder.Finish(&payload).ok()); + // Validity bitmap 0b01: row 0 holds 9999-12-31, row 1 is NULL over 10000-01-01. + auto data = payload->data()->Copy(); + data->buffers[0] = arrow::Buffer::FromVector(std::vector {0x01}); + data->SetNullCount(1); + const auto schema = arrow::schema({arrow::field("value", arrow::date32())}); + const auto record_batch = arrow::RecordBatch::Make(schema, 2, {arrow::MakeArray(data)}); + + const auto date_type = nullable_type(TYPE_DATEV2); + const Columns columns {projected_column("value", date_type)}; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + const auto status = convert_record_batch_for_test(&state, columns, record_batch, &block, &rows); + ASSERT_TRUE(status.ok()) << status.to_string(); + ASSERT_EQ(2, rows); + const auto& values = assert_cast(*block.get_by_position(0).column); + EXPECT_EQ((ColumnUInt8::Container {0, 1}), values.get_null_map_data()); + EXPECT_EQ("9999-12-31", date_type->to_string(values, 0)); +} + // Verifies ordinary nested columns bypass Arrow reconstruction when no BFloat16 exists. TEST(LanceTableReaderTypeTest, KeepsOrdinaryNestedArrayUnchangedDuringNormalization) { const auto nested_type = arrow::struct_({ From d49a45a0668df8a4019fbf763e8f085c12f51f1c Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 04/10] [fix](be) Narrow Lance Decimal256 columns that fit Decimal128 before decoding ### What problem does this PR solve? Issue Number: None Related PR: #69581 Problem Summary: Reproduction: write a Lance dataset with a `pa.decimal256(18, 2)` column and scan it with the Lance reader added in #69581. Lance keeps the 256-bit width on disk, so the scanner returns an Arrow `Decimal256Array`, and the BE crashes on the first non-empty batch. The same happens for any `decimal256(p, s)` with p <= 38, also as a list, large_list, fixed_size_list, struct or map leaf. The existing fixture only has decimal256 columns with precision 39 and 76, which is why the tests did not catch it. Root cause: `arrow_field_to_doris_type()` and the FE pick the Doris type from the precision alone (DECIMAL32 up to 9, DECIMAL64 up to 18, DECIMAL128I up to 38), while `LanceArrowArrayNormalizer` passes the `Decimal256Array` through unchanged. `DataTypeDecimalSerDe::read_column_from_arrow` casts the array with `dynamic_cast`, gets null for a `Decimal256Array`, and dereferences it in `Value()`. Fix: at schema binding, `LanceArrowArrayNormalizer::create()` records `decimal128(p, s)` for a Decimal256 field with p <= 38 and marks it as needing special handling, which parents inherit through the existing child loop. `normalize_for_doris()` then narrows the array with `arrow::compute::Cast(..., CastOptions::Safe())` on the query's Arrow memory pool, the cast master's ADBC normalizer already uses (`format/arrow/arrow_array_normalizer.cpp`). Nested parents rebuild their type around the narrowed child through `set_lance_nested_type()`, as for BFloat16 leaves, before compaction. A value outside the declared precision, which is invalid Arrow data (for example unscaled 10^18 in decimal(18, 2)), fails with `narrow Lance Decimal256 field '' to decimal128(18, 2) failed: Decimal value does not fit in precision 18` instead of being truncated. Precision 39..76 keeps Decimal256 and DECIMAL256 as before. Before: the BE dereferences a null pointer and crashes. After: the values are read unchanged, and an out-of-precision value fails with an error that names the field. branch-4.1 and branch-4.2 have the same normalizer, so the same change applies there. ### Release note None ### Check List (For Author) - Test: Unit Test - New: `LanceTableReaderTypeTest.NarrowsDecimal256WithDecimal128PrecisionDuringNormalization`, `LanceTableReaderTypeTest.KeepsWideDecimal256UnchangedDuringNormalization`, `LanceTableReaderTypeTest.ConvertsDecimal256WithDecimal128PrecisionToDorisDecimals`, `LanceTableReaderTypeTest.NarrowsDecimal256LeavesInSlicedNestedArrays`, `LanceTableReaderTypeTest.RejectsDecimal256ValuesOutsideDeclaredPrecision`, `LanceTableReaderTypeTest.ReadsDecimal256WithDecimal128PrecisionFromLanceDataset` (writes a decimal256(18, 2) dataset, checks that Lance stores Decimal256 and that the reader returns DECIMAL64 values). - All pass on macOS arm64 (ASAN) with the Lance suites. With the narrowing disabled, the normalization cases fail and the sliced nested case then crashes in `DataTypeDecimalSerDe::read_column_from_arrow`, as reported. - Behavior changed: No (fixes a crash in the reader this PR adds) - Does this need documentation: No Co-Authored-By: Claude Opus 5.5 (1M context) --- .../format_v2/lance/lance_reader_helper.cpp | 48 ++- be/src/format_v2/lance/lance_reader_helper.h | 3 + be/test/format_v2/table/lance_reader_test.cpp | 306 ++++++++++++++++++ 3 files changed, 355 insertions(+), 2 deletions(-) diff --git a/be/src/format_v2/lance/lance_reader_helper.cpp b/be/src/format_v2/lance/lance_reader_helper.cpp index aecd4adf550f31..7977240b70a1f8 100644 --- a/be/src/format_v2/lance/lance_reader_helper.cpp +++ b/be/src/format_v2/lance/lance_reader_helper.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -318,6 +319,30 @@ Status convert_bfloat16_array(const std::shared_ptr& array, return Status::OK(); } +// Narrow a Decimal256 array whose declared precision fits Decimal128. The safe cast keeps every +// in-precision value and its scale, and rejects a value that exceeds the declared precision +// instead of truncating it: unscaled 10^18 stored in a decimal256(18, 2) field fails with +// "Decimal value does not fit in precision 18". +Status narrow_decimal256_array(std::string_view field_name, + const std::shared_ptr& array, + const std::shared_ptr& decimal128_type, + arrow::MemoryPool* memory_pool, + std::shared_ptr* normalized) { + DORIS_CHECK(array != nullptr); + DORIS_CHECK(memory_pool != nullptr); + DORIS_CHECK(normalized != nullptr); + arrow::compute::ExecContext exec_context(memory_pool); + auto narrowed = arrow::compute::Cast(*array, decimal128_type, + arrow::compute::CastOptions::Safe(), &exec_context); + if (!narrowed.ok()) { + return Status::InvalidArgument("narrow Lance Decimal256 field '{}' to {} failed: {}", + field_name, decimal128_type->ToString(), + narrowed.status().message()); + } + *normalized = std::move(narrowed).ValueUnsafe(); + return Status::OK(); +} + // Rebuild a nested Arrow type after one or more child arrays changed physical type. Status set_lance_nested_type(std::string_view field_name, const std::shared_ptr& source_type, @@ -488,8 +513,20 @@ Status LanceArrowArrayNormalizer::create(const std::shared_ptr& fi result._storage_type = std::move(storage_type); result._unwrap_registered_extension = field->type()->id() == arrow::Type::EXTENSION; result._convert_bfloat16 = extension_kind == LanceExtensionKind::BFLOAT16; - result._requires_special_handling = - result._unwrap_registered_extension || result._convert_bfloat16; + // Lance keeps the 256-bit carrier of pa.decimal256(18, 2), while the FE and + // arrow_field_to_doris_type() type the column DECIMAL64 by precision. The DECIMAL32/64/128I + // SerDes read only Decimal128Array, so a Decimal256Array reaching them made their dynamic_cast + // return null and the BE crash on the first value, also for nested leaves. Precision 39..76 + // stays Decimal256 and maps to DECIMAL256. + if (result._storage_type->id() == arrow::Type::DECIMAL256) { + const auto& decimal = static_cast(*result._storage_type); + if (decimal.precision() <= arrow::Decimal128Type::kMaxPrecision) { + result._decimal128_type = arrow::decimal128(decimal.precision(), decimal.scale()); + } + } + result._requires_special_handling = result._unwrap_registered_extension || + result._convert_bfloat16 || + result._decimal128_type != nullptr; result._child_normalizers.reserve(result._storage_type->num_fields()); for (const auto& child_field : result._storage_type->fields()) { LanceArrowArrayNormalizer child_normalizer; @@ -532,6 +569,13 @@ Status LanceArrowArrayNormalizer::normalize_for_doris( if (_convert_bfloat16) { return convert_bfloat16_array(storage_array, memory_pool, normalized); } + if (_decimal128_type != nullptr) { + // The cast reads only the visible slice and returns an offset-zero array, so no + // compaction follows. For a nested leaf, the parent's call swaps in this array in the + // child loop below and rebuilds its own type through set_lance_nested_type(). + return narrow_decimal256_array(_field_name, storage_array, _decimal128_type, memory_pool, + normalized); + } // Normalize extension children before compacting the parent. Arrow cannot create a builder // for list/struct types whose child is still an ExtensionType (Arrow 24 returns diff --git a/be/src/format_v2/lance/lance_reader_helper.h b/be/src/format_v2/lance/lance_reader_helper.h index c2f67e201bedce..558bc1593b0a19 100644 --- a/be/src/format_v2/lance/lance_reader_helper.h +++ b/be/src/format_v2/lance/lance_reader_helper.h @@ -87,6 +87,9 @@ class LanceArrowArrayNormalizer { private: std::string _field_name; std::shared_ptr _storage_type; + // decimal128(p, s) for a Decimal256 field with p <= 38, which Doris types DECIMAL32/64/128I + // by precision; null for every other field. + std::shared_ptr _decimal128_type; std::vector _child_normalizers; bool _unwrap_registered_extension = false; bool _convert_bfloat16 = false; diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index 31bc03061eee3c..fdfb66816451de 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -2236,6 +2236,26 @@ std::shared_ptr make_bfloat16_array( return array; } +// Creates an Arrow Decimal256 array; std::nullopt appends NULL. Each value is written with exactly +// `scale` fraction digits, so Decimal256::FromString() returns the unscaled integer that the +// array stores: "-0.01" becomes -1 in a decimal256(18, 2) array. +std::shared_ptr make_decimal256_array( + int32_t precision, int32_t scale, const std::vector>& values) { + arrow::Decimal256Builder builder(arrow::decimal256(precision, scale)); + for (const auto& value : values) { + if (!value.has_value()) { + EXPECT_TRUE(builder.AppendNull().ok()); + continue; + } + const auto decimal = arrow::Decimal256::FromString(*value); + EXPECT_TRUE(decimal.ok()) << *value << ": " << decimal.status().ToString(); + EXPECT_TRUE(decimal.ok() && builder.Append(*decimal).ok()) << *value; + } + std::shared_ptr array; + EXPECT_TRUE(builder.Finish(&array).ok()); + return array; +} + std::pair array_range(const ColumnArray& array, size_t row) { const auto& offsets = array.get_offsets(); return {row == 0 ? 0 : static_cast(offsets[row - 1]), @@ -2996,6 +3016,292 @@ TEST(LanceTableReaderTypeTest, KeepsOrdinaryNestedArrayUnchangedDuringNormalizat EXPECT_EQ(array.get(), normalized.get()); } +// Verifies a Decimal256 field whose precision fits Decimal128 is narrowed with unchanged values, +// because Doris types it DECIMAL32/64/128I and those SerDes read only Decimal128Array. +TEST(LanceTableReaderTypeTest, NarrowsDecimal256WithDecimal128PrecisionDuringNormalization) { + const auto input = make_decimal256_array( + 18, 2, {"9999999999999999.99", "-9999999999999999.99", std::nullopt}); + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field("amount", arrow::decimal256(18, 2)), input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + EXPECT_TRUE(normalized->type()->Equals(arrow::decimal128(18, 2))) + << normalized->type()->ToString(); + const auto decimals = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, decimals); + ASSERT_EQ(3, decimals->length()); + EXPECT_EQ("9999999999999999.99", decimals->FormatValue(0)); + EXPECT_EQ("-9999999999999999.99", decimals->FormatValue(1)); + EXPECT_TRUE(decimals->IsNull(2)); +} + +// Verifies a Decimal256 field above Decimal128 precision keeps its array for DECIMAL256. +TEST(LanceTableReaderTypeTest, KeepsWideDecimal256UnchangedDuringNormalization) { + const auto input = make_decimal256_array( + 39, 4, {"99999999999999999999999999999999999.9999", std::nullopt}); + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field("wide_amount", arrow::decimal256(39, 4)), input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + EXPECT_EQ(input.get(), normalized.get()); +} + +// Verifies narrowed Decimal256 values reach DECIMAL32, DECIMAL64, and DECIMAL128I unchanged. +TEST(LanceTableReaderTypeTest, ConvertsDecimal256WithDecimal128PrecisionToDorisDecimals) { + struct DecimalCase { + const char* name; + PrimitiveType doris_type; + int precision; + int scale; + std::array values; + }; + const std::array cases {{ + {"decimal_9_2", TYPE_DECIMAL32, 9, 2, {"9999999.99", "-9999999.99"}}, + {"decimal_18_2", TYPE_DECIMAL64, 18, 2, {"9999999999999999.99", "-0.01"}}, + {"decimal_38_10", + TYPE_DECIMAL128I, + 38, + 10, + {"9999999999999999999999999999.9999999999", + "-9999999999999999999999999999.9999999999"}}, + }}; + arrow::FieldVector fields; + std::vector> arrays; + Columns columns; + for (const auto& decimal_case : cases) { + fields.emplace_back(arrow::field( + decimal_case.name, arrow::decimal256(decimal_case.precision, decimal_case.scale))); + arrays.emplace_back(make_decimal256_array( + decimal_case.precision, decimal_case.scale, + {decimal_case.values[0], decimal_case.values[1], std::nullopt})); + columns.emplace_back(projected_column( + decimal_case.name, nullable_type(decimal_case.doris_type, decimal_case.precision, + decimal_case.scale))); + } + const auto record_batch = arrow::RecordBatch::Make(arrow::schema(fields), 3, arrays); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + const auto status = convert_record_batch_for_test(&state, columns, record_batch, &block, &rows); + ASSERT_TRUE(status.ok()) << status.to_string(); + ASSERT_EQ(3, rows); + for (size_t column = 0; column < cases.size(); ++column) { + SCOPED_TRACE(cases[column].name); + const auto& decimals = + assert_cast(*block.get_by_position(column).column); + EXPECT_EQ((ColumnUInt8::Container {0, 0, 1}), decimals.get_null_map_data()); + EXPECT_EQ(std::string(cases[column].values[0]), + columns[column].type->to_string(decimals, 0)); + EXPECT_EQ(std::string(cases[column].values[1]), + columns[column].type->to_string(decimals, 1)); + } +} + +// Verifies Decimal256 leaves are narrowed inside sliced List, Map, and Struct arrays. The parent +// type is rebuilt around the narrowed child before compaction keeps only the visible values. +TEST(LanceTableReaderTypeTest, NarrowsDecimal256LeavesInSlicedNestedArrays) { + const auto decimal_type = arrow::decimal256(18, 2); + const auto values = make_decimal256_array(18, 2, {"1.00", "2.50", "-3.75", "4.00"}); + arrow::Int32Builder offsets_builder; + ASSERT_TRUE(offsets_builder.AppendValues({0, 1, 3, 4}).ok()); + std::shared_ptr offsets; + ASSERT_TRUE(offsets_builder.Finish(&offsets).ok()); + arrow::StringBuilder keys_builder; + ASSERT_TRUE(keys_builder.AppendValues({"k0", "k1", "k2", "k3"}).ok()); + std::shared_ptr keys; + ASSERT_TRUE(keys_builder.Finish(&keys).ok()); + arrow::Int32Builder ids_builder; + ASSERT_TRUE(ids_builder.AppendValues({10, 11, 12, 13}).ok()); + std::shared_ptr ids; + ASSERT_TRUE(ids_builder.Finish(&ids).ok()); + + // Offsets {0, 1, 3, 4}: list and map row 1 cover the child values 2.50 and -3.75. Struct row 2 + // holds -3.75 and id 12. + const auto list_type = arrow::list(arrow::field("item", decimal_type)); + auto list_result = arrow::ListArray::FromArrays(list_type, *offsets, *values); + ASSERT_TRUE(list_result.ok()) << list_result.status().ToString(); + const auto map_type = arrow::map(arrow::utf8(), decimal_type); + auto map_result = arrow::MapArray::FromArrays(map_type, offsets, keys, values); + ASSERT_TRUE(map_result.ok()) << map_result.status().ToString(); + auto struct_result = arrow::StructArray::Make( + {values, ids}, + {arrow::field("amount", decimal_type), arrow::field("id", arrow::int32())}); + ASSERT_TRUE(struct_result.ok()) << struct_result.status().ToString(); + const auto list_input = std::move(list_result).ValueUnsafe()->Slice(1, 1); + const auto map_input = std::move(map_result).ValueUnsafe()->Slice(1, 1); + const auto struct_input = std::move(struct_result).ValueUnsafe()->Slice(2, 1); + + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test(arrow::field("values", list_type), + list_input, &normalized); + ASSERT_TRUE(status.ok()) << status.to_string(); + const auto normalized_list = std::dynamic_pointer_cast(normalized); + ASSERT_NE(nullptr, normalized_list); + EXPECT_EQ(0, normalized_list->offset()); + EXPECT_TRUE(normalized_list->value_type()->Equals(arrow::decimal128(18, 2))) + << normalized_list->value_type()->ToString(); + EXPECT_EQ(2, normalized_list->values()->length()); + + const auto schema = arrow::schema({ + arrow::field("list_value", list_type), + arrow::field("map_value", map_type), + arrow::field("struct_value", struct_input->type()), + }); + const auto record_batch = + arrow::RecordBatch::Make(schema, 1, {list_input, map_input, struct_input}); + const auto decimal_doris_type = nullable_type(TYPE_DECIMAL64, 18, 2); + const Columns columns { + projected_column("list_value", + make_nullable(std::make_shared(decimal_doris_type))), + projected_column("map_value", make_nullable(std::make_shared( + nullable_type(TYPE_STRING), decimal_doris_type))), + projected_column("struct_value", + make_nullable(std::make_shared( + DataTypes {decimal_doris_type, nullable_type(TYPE_INT)}, + Strings {"amount", "id"}))), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + Block block; + add_output_columns(&block, columns); + size_t rows = 0; + const auto convert_status = + convert_record_batch_for_test(&state, columns, record_batch, &block, &rows); + ASSERT_TRUE(convert_status.ok()) << convert_status.to_string(); + ASSERT_EQ(1, rows); + + const auto& list_column = assert_cast( + assert_cast(*block.get_by_position(0).column) + .get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {2}), list_column.get_offsets()); + EXPECT_EQ("2.50", decimal_doris_type->to_string(list_column.get_data(), 0)); + EXPECT_EQ("-3.75", decimal_doris_type->to_string(list_column.get_data(), 1)); + + const auto& map_column = assert_cast( + assert_cast(*block.get_by_position(1).column) + .get_nested_column()); + EXPECT_EQ((ColumnArray::Offsets64 {2}), map_column.get_offsets()); + EXPECT_EQ("k1", nullable_type(TYPE_STRING)->to_string(map_column.get_keys(), 0)); + EXPECT_EQ("k2", nullable_type(TYPE_STRING)->to_string(map_column.get_keys(), 1)); + EXPECT_EQ("2.50", decimal_doris_type->to_string(map_column.get_values(), 0)); + EXPECT_EQ("-3.75", decimal_doris_type->to_string(map_column.get_values(), 1)); + + const auto& struct_column = assert_cast( + assert_cast(*block.get_by_position(2).column) + .get_nested_column()); + EXPECT_EQ("-3.75", decimal_doris_type->to_string(struct_column.get_column(0), 0)); + EXPECT_EQ("12", nullable_type(TYPE_INT)->to_string(struct_column.get_column(1), 0)); +} + +// Verifies a value outside the declared precision fails with the field name instead of being +// truncated: unscaled 10^18 does not fit decimal(18, 2), nor 10^38 decimal(38, 0). +TEST(LanceTableReaderTypeTest, RejectsDecimal256ValuesOutsideDeclaredPrecision) { + const std::array, 2> cases {{ + {"amount", 18, 2, "10000000000000000.00"}, + {"wide_amount", 38, 0, "100000000000000000000000000000000000000"}, + }}; + for (const auto& [name, precision, scale, value] : cases) { + SCOPED_TRACE(name); + std::shared_ptr normalized; + const auto status = normalize_lance_arrow_array_for_test( + arrow::field(name, arrow::decimal256(precision, scale)), + make_decimal256_array(precision, scale, {value}), &normalized); + EXPECT_FALSE(status.ok()); + EXPECT_NE(std::string::npos, status.to_string().find(std::string("field '") + name + "'")) + << status.to_string(); + EXPECT_NE(std::string::npos, status.to_string().find("does not fit in precision")) + << status.to_string(); + } +} + +// Verifies Lance keeps the 256-bit carrier of decimal256(18, 2) on disk, and the reader returns +// it as the DECIMAL64 column that the precision selects. +TEST(LanceTableReaderTypeTest, ReadsDecimal256WithDecimal128PrecisionFromLanceDataset) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + const auto dataset_uri = + std::filesystem::temp_directory_path() / + ("doris_lance_narrow_decimal256_" + std::to_string(unique_suffix) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + + arrow::Int64Builder row_id_builder; + ASSERT_TRUE(row_id_builder.AppendValues({1, 2, 3}).ok()); + std::shared_ptr row_ids; + ASSERT_TRUE(row_id_builder.Finish(&row_ids).ok()); + const auto amounts = + make_decimal256_array(18, 2, {"9999999999999999.99", "-0.01", std::nullopt}); + const auto schema = arrow::schema({arrow::field("row_id", arrow::int64()), + arrow::field("amount", arrow::decimal256(18, 2))}); + ASSERT_TRUE(write_lance_record_batch(dataset_uri, + arrow::RecordBatch::Make(schema, 3, {row_ids, amounts})) + .ok()); + + std::unique_ptr dataset( + lance_dataset_open(dataset_uri.c_str(), nullptr, 0), lance_dataset_close); + ASSERT_NE(nullptr, dataset); + std::shared_ptr stored_schema; + ASSERT_TRUE(import_lance_dataset_schema(dataset.get(), &stored_schema).ok()); + const auto stored_amount = stored_schema->GetFieldByName("amount"); + ASSERT_NE(nullptr, stored_amount); + EXPECT_EQ(arrow::Type::DECIMAL256, stored_amount->type()->id()); + + TFileScanRangeParams scan_params; + std::vector column_names; + std::vector column_types; + LanceTableReader schema_reader; + ASSERT_TRUE(schema_reader + .fetch_schema(make_latest_lance_range(dataset_uri), scan_params, + &column_names, &column_types) + .ok()); + ASSERT_EQ((std::vector {"row_id", "amount"}), column_names); + ASSERT_EQ(2, column_types.size()); + EXPECT_EQ(TYPE_DECIMAL64, remove_nullable(column_types[1])->get_primitive_type()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("amount", column_types[1]), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_narrow_decimal256"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + const std::map> expected { + {1, "9999999999999999.99"}, {2, "-0.01"}, {3, std::nullopt}}; + std::set seen_row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (eos) { + continue; + } + const auto& block_row_ids = + assert_cast(*block.get_by_position(0).column); + const auto& block_amounts = + assert_cast(*block.get_by_position(1).column); + for (size_t row = 0; row < block.rows(); ++row) { + const auto row_id = block_row_ids.get_data()[row]; + ASSERT_TRUE(expected.contains(row_id)) << row_id; + EXPECT_TRUE(seen_row_ids.emplace(row_id).second) << row_id; + const auto& expected_amount = expected.at(row_id); + EXPECT_EQ(!expected_amount.has_value(), block_amounts.is_null_at(row)) << row_id; + if (expected_amount.has_value()) { + EXPECT_EQ(*expected_amount, columns[1].type->to_string(block_amounts, row)); + } + } + } + EXPECT_EQ(3U, seen_row_ids.size()); + EXPECT_TRUE(reader.close().ok()); +} + // Verifies the additional types through the full scan path. TEST(LanceTableReaderTypeTest, ReadsAdditionalTypesFromCompatibilityFixture) { const std::filesystem::path dataset_uri = From 2e49fba189d9db7e0584e47d0b2b15af667ef081 Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 05/10] [fix](be) Keep floating >= runtime filters out of the Lance scan SQL ### What problem does this PR solve? Issue Number: None Related PR: #69581 Problem Summary: Reproduction: scan a Lance FLOAT or DOUBLE column that holds a negative NaN (float bits 0xffc00000, double bits 0xfff8000000000000) under a runtime filter `x >= c`, for example a MIN-only filter from a nested-loop join on `x >= y`. Doris treats every NaN as the greatest value regardless of its sign (`GreaterThanEqualsFloat` in `common/compare.h`), so the row satisfies the filter, but it is missing from the result. Root cause: `build_range_filter_sql()` translates the filter into the Lance SQL `(x >= c)`. Lance evaluates it with Arrow/DataFusion comparison kernels that order floating values by IEEE 754 totalOrder, where a negative NaN sorts below every finite value, so Lance drops the row before the scanner evaluates the Doris residual. The residual can only remove rows, not bring them back. Fix: `build_range_filter_sql()` returns `std::nullopt` for a `>=` filter whose slot is FLOAT or DOUBLE, so the filter stays residual-only and is reported under `LanceRuntimeFilterSkippedIds`, the policy `PaimonRustPredicateConverter` already applies to floating predicates. `<=` filters are still pushed: Lance then only returns extra negative-NaN rows, which the residual removes. IN filters are still pushed: a NaN row never matches a finite member, and sets with NaN members were already rejected. A MIN_MAX filter now pushes only its `<=` half. Before: rows holding a negative NaN were dropped under a floating `>=` runtime filter. After: Lance returns them and the Doris residual decides, so the result matches a scan without the pushed filter. branch-4.1 and branch-4.2 carry the identical helper, so the same change applies there. ### Release note None ### Check List (For Author) - Test: Unit Test - New: `LanceRuntimeFilterHelperTest.KeepsFloatingMinFiltersResidualOnly` (`>=` skipped, `<=` and IN still pushed, SQL of a MIN_MAX pair), `LanceTableReaderFilterTest.PreservesNegativeNaNUnderFloatingMinRuntimeFilter` (FLOAT and DOUBLE rows 0.5, 1, 2, +NaN, -NaN under `>= 1`; every row Doris keeps must come back from Lance). - Both pass on macOS arm64 (ASAN) with the Lance suites; with `build_range_filter_sql()` as before this change, both fail. - Behavior changed: No (the Lance reader is added by this PR; floating `>=` runtime filters are no longer pushed into Lance, so such scans may read more rows) - Does this need documentation: No Co-Authored-By: Claude Opus 5.5 (1M context) --- .../lance/lance_runtime_filter_helper.cpp | 13 +++ .../lance_runtime_filter_helper_test.cpp | 44 ++++++++++ be/test/format_v2/table/lance_reader_test.cpp | 86 +++++++++++++++++++ 3 files changed, 143 insertions(+) diff --git a/be/src/format_v2/lance/lance_runtime_filter_helper.cpp b/be/src/format_v2/lance/lance_runtime_filter_helper.cpp index d72a98bb8d947b..a04c8ce278a4c9 100644 --- a/be/src/format_v2/lance/lance_runtime_filter_helper.cpp +++ b/be/src/format_v2/lance/lance_runtime_filter_helper.cpp @@ -403,6 +403,19 @@ std::optional build_range_filter_sql(const VExpr& predicate, // SQL. return std::nullopt; } + const auto slot_type = remove_nullable(slot->data_type())->get_primitive_type(); + if (predicate.op() == TExprOpcode::GE && + (slot_type == TYPE_FLOAT || slot_type == TYPE_DOUBLE)) { + // Doris orders every NaN above all other values regardless of its sign + // (GreaterThanEqualsFloat in common/compare.h), so `x >= 1` keeps NaN rows. Lance + // evaluates the pushed SQL with Arrow/DataFusion kernels that use IEEE 754 totalOrder, + // where a negative NaN such as 0xffc00000 sorts below every finite value: `x >= 1` drops + // that row before the Doris residual can keep it. A MIN-only filter, for example from a + // nested-loop join on `x >= y`, would lose such rows. `<=` only lets negative NaNs + // through to the residual, which removes them, and IN sets with NaN members are not + // pushed. PaimonRustPredicateConverter keeps floating predicates residual-only too. + return std::nullopt; + } const auto physical_type = find_unique_physical_type(physical_schema, slot->column_name()); if (physical_type == nullptr) { // A missing or ambiguous top-level field cannot be bound safely by column name. diff --git a/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp b/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp index c1b7bdcc1af085..0fa47687adbff8 100644 --- a/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp +++ b/be/test/format_v2/lance/lance_runtime_filter_helper_test.cpp @@ -272,6 +272,50 @@ TEST(LanceRuntimeFilterHelperTest, SkipsPhysicalNumericTypesUnsupportedByPinnedP EXPECT_EQ((std::vector {25, 26, 27, 28}), result->skipped_filter_ids); } +TEST(LanceRuntimeFilterHelperTest, KeepsFloatingMinFiltersResidualOnly) { + const auto schema = arrow::schema( + {arrow::field("f32", arrow::float32()), arrow::field("f64", arrow::float64())}); + + // Lance's totalOrder sorts a negative NaN below 1, while Doris keeps it for `x >= 1`. + const VExprContextSPtrs min_filters { + typed_runtime_range("f32", TExprOpcode::GE, 1.0F, + std::make_shared(), 31), + typed_runtime_range("f64", TExprOpcode::GE, 1.0, + std::make_shared(), 32), + }; + const auto skipped = get_or_create_lance_runtime_filter_sql(min_filters, *schema, nullptr); + ASSERT_NE(skipped, nullptr); + EXPECT_TRUE(skipped->expression.empty()); + EXPECT_TRUE(skipped->pushable_filter_ids.empty()); + EXPECT_EQ((std::vector {31, 32}), skipped->skipped_filter_ids); + + // `<=` can only let negative NaNs through to the residual, and IN never matches a NaN row. + const VExprContextSPtrs max_and_in_filters { + typed_runtime_range("f32", TExprOpcode::LE, 1.0F, + std::make_shared(), 33), + typed_runtime_in("f32", 1.5F, std::make_shared(), 34), + }; + const auto pushed = + get_or_create_lance_runtime_filter_sql(max_and_in_filters, *schema, nullptr); + ASSERT_NE(pushed, nullptr); + EXPECT_EQ("(`f32` <= 1) AND (`f32` IN (1.5))", pushed->expression); + EXPECT_EQ((std::vector {33, 34}), pushed->pushable_filter_ids); + EXPECT_TRUE(pushed->skipped_filter_ids.empty()); + + // The two halves of a MIN_MAX filter share one id; only its `<=` half reaches Lance. + const VExprContextSPtrs min_max_filter { + typed_runtime_range("f64", TExprOpcode::GE, 1.0, + std::make_shared(), 35), + typed_runtime_range("f64", TExprOpcode::LE, 2.0, + std::make_shared(), 35), + }; + const auto min_max = get_or_create_lance_runtime_filter_sql(min_max_filter, *schema, nullptr); + ASSERT_NE(min_max, nullptr); + EXPECT_EQ("(`f64` <= 2)", min_max->expression); + EXPECT_EQ((std::vector {35}), min_max->pushable_filter_ids); + EXPECT_TRUE(min_max->skipped_filter_ids.empty()); +} + TEST(LanceRuntimeFilterHelperTest, ReusesSnapshotAcrossParallelReaders) { ShardedKVCache cache(2); const VExprContextSPtrs first_conjuncts { diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index fdfb66816451de..ca87ba2f7afa5d 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -1967,6 +1967,92 @@ TEST(LanceTableReaderFilterTest, SkipsTimestampNanoRuntimeFilterBeforeMaterializ EXPECT_TRUE(reader.close().ok()); } +TEST(LanceTableReaderFilterTest, PreservesNegativeNaNUnderFloatingMinRuntimeFilter) { + const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); + const auto dataset_uri = + std::filesystem::temp_directory_path() / + ("doris_lance_negative_nan_rf_" + std::to_string(unique_suffix) + ".lance"); + Defer cleanup {[&] { + std::error_code error; + std::filesystem::remove_all(dataset_uri, error); + }}; + + // Rows 1..5 hold 0.5, 1, 2, +NaN, and a negative NaN in both columns. + const auto negative_nan_f32 = std::bit_cast(uint32_t {0xffc00000}); + const auto negative_nan_f64 = std::bit_cast(uint64_t {0xfff8000000000000}); + ASSERT_TRUE(std::isnan(negative_nan_f32) && std::signbit(negative_nan_f32)); + ASSERT_TRUE(std::isnan(negative_nan_f64) && std::signbit(negative_nan_f64)); + arrow::Int64Builder row_id_builder; + ASSERT_TRUE(row_id_builder.AppendValues({1, 2, 3, 4, 5}).ok()); + std::shared_ptr row_ids; + ASSERT_TRUE(row_id_builder.Finish(&row_ids).ok()); + arrow::FloatBuilder f32_builder; + ASSERT_TRUE(f32_builder + .AppendValues({0.5F, 1.0F, 2.0F, std::numeric_limits::quiet_NaN(), + negative_nan_f32}) + .ok()); + std::shared_ptr f32_values; + ASSERT_TRUE(f32_builder.Finish(&f32_values).ok()); + arrow::DoubleBuilder f64_builder; + ASSERT_TRUE(f64_builder + .AppendValues({0.5, 1.0, 2.0, std::numeric_limits::quiet_NaN(), + negative_nan_f64}) + .ok()); + std::shared_ptr f64_values; + ASSERT_TRUE(f64_builder.Finish(&f64_values).ok()); + const auto schema = arrow::schema({arrow::field("row_id", arrow::int64()), + arrow::field("f32", arrow::float32()), + arrow::field("f64", arrow::float64())}); + ASSERT_TRUE(write_lance_record_batch( + dataset_uri, + arrow::RecordBatch::Make(schema, 5, {row_ids, f32_values, f64_values})) + .ok()); + + const Columns columns {projected_column("row_id", TYPE_BIGINT, false)}; + for (const bool use_double : {false, true}) { + SCOPED_TRACE(use_double ? "f64" : "f32"); + const auto runtime_filter = use_double ? create_runtime_range_conjunct( + "f64", TExprOpcode::GE, 1.0, + std::make_shared(), 52) + : create_runtime_range_conjunct( + "f32", TExprOpcode::GE, 1.0F, + std::make_shared(), 51); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + RuntimeProfile profile("lance_negative_nan_runtime_filter_fixture"); + TFileScanRangeParams scan_params; + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params, {runtime_filter}) + .ok()); + ASSERT_TRUE(prepare_range(&reader, make_latest_lance_range(dataset_uri)).ok()); + + Block block; + add_output_columns(&block, columns); + std::vector returned_row_ids; + bool eos = false; + while (!eos) { + ASSERT_TRUE(reader.get_block(&block, &eos).ok()); + if (!eos) { + const auto& values = + assert_cast(*block.get_by_position(0).column); + returned_row_ids.insert(returned_row_ids.end(), values.get_data().begin(), + values.get_data().end()); + } + } + EXPECT_TRUE(reader.close().ok()); + const auto* skipped_ids = profile.get_info_string("LanceRuntimeFilterSkippedIds"); + ASSERT_NE(nullptr, skipped_ids); + EXPECT_EQ(use_double ? "52" : "51", *skipped_ids); + // Doris keeps rows 2..5 for `x >= 1`, both NaNs included. A pushed `x >= 1` let Lance drop + // row 5, which sorts below every finite value in totalOrder. Row 1 may come back too: the + // Doris residual removes it. + std::ranges::sort(returned_row_ids); + for (const int64_t row_id : {2, 3, 4, 5}) { + EXPECT_TRUE(std::ranges::binary_search(returned_row_ids, row_id)) << row_id; + } + } +} + TEST(LanceTableReaderFilterTest, SkipsPhysicalNumericTypesUnsupportedByPinnedPlanner) { const auto unique_suffix = std::chrono::steady_clock::now().time_since_epoch().count(); const auto dataset_uri = From c98994ad492ce421d1b8b526c45bd80b1e263b46 Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 06/10] [feature](be) Honor the prefilter flag and group the Lance reader profile as in branch-4.x ### What problem does this PR solve? Issue Number: None Related PR: #69581, #68813 Problem Summary: #69581 ports the Lance reader from the branch-4.2 snapshot cabcf45c1af. After that snapshot, #68813 changed two things in the 4.x BE, both ported here. 1. Search filter timing. #68813 added `TExternalSearchRequest.prefilter` (field 5): unset or false means the TVF search filter refines the top-k candidates (postfilter), true means it constrains them before top-k (prefilter). The 4.x FE sends it for `vector_search()` and `full_text_search()`. Without the field, a master BE always prefiltered vector search and never prefiltered full-text search, so a 4.x FE paired with it got different rows: on the all_types.lance fixture, top_k 1 with search filter `row_id >= 3` returns row 4 with prefilter and no row with postfilter. - `gensrc/thrift/PlanNodes.thrift`: `5: optional bool prefilter` with the 4.x comment; the stale `TSearchFilter` comment is replaced. - `_configure_vector_search()` and `_configure_full_text_search()` pass `request.__isset.prefilter && request.prefilter` to `lance_scanner_set_prefilter()`, replacing the comment that fragment-scoped nearest queries need prefiltering (master's lance-c pin 4fafcd64525 no longer does). - Compatibility (gensrc/AGENTS.md): field 5 is `optional bool prefilter` on the branch-4.2 (a7ae6f4611e) and branch-4.1 (3f911d030b6) heads; branch-4.0 and branch-3.1 have no `TExternalSearchRequest`. No id is reused. 2. Profile layout. The snapshot hangs about 45 counters directly under `LanceReader`, looks Lance's scan metrics up in two maps, and creates two scalar-index timers from Lance's statistics callback the first time they are reported, that is from Lance's execution threads while the scan runs. As in #68813: - The counters are grouped under `LanceTiming`, `LanceIO`, `LanceIndex`, `LanceVectorIndex`, `LanceScalarIndex`, `LanceExecutionPlan`, `LanceScan`, `LanceSearchPlan` and `LanceDataCache` (label counters, `TUnit::NONE`, like `RuntimeFilterInfo`). - One immutable table, `LANCE_SCAN_METRICS` in `lance_reader_helper.h`, drives both registration and the callback lookup. Every metric is registered in `_init_scanner_profile()` before the callback is installed, so the callback only updates existing counters and every split has the same counter tree. - The callback is `noexcept` and swallows exceptions, so nothing unwinds through the lance-c ABI. - `LanceIndexObjectLoads` (`indices_loaded`), `LanceIndexCacheHits` and `LanceIndexCacheMisses` are new; the info strings `LanceTopKPlusOffset` and `LanceSubstraitFilterBytes` are dropped. - Renames: `LanceScannerReadTime` -> `LanceScannerNextTime`, `LanceRuntimeFilterSqlTime` -> `LanceRuntimeFilterSqlTranslationTime`, `LanceExecutionIOOps` / `IORequests` / `IOBytesRead` -> `LanceIOReadOps` / `LanceIOReadRequests` / `LanceIOReadBytes`, `LanceIndexPartitionCacheMissLoads` -> `LanceIndexComponentsLoaded`, `LancePrefilter*` -> `RowIdPrefilter*` (`LancePrefilterRowIds` -> `RowIdPrefilterIds`), `LanceIVFPartitionsRanked` -> `LanceIVFPartitionsConsidered`, `LanceIVFPartitionsSearched` -> `LanceIndexPartitionsSearched`, `LanceVectorIndexSegmentsSearched` -> `LanceVectorIndexDeltasSearched`, `LanceTaskWaitTime` -> `LanceScanTaskWaitTime`, `LanceIVFPartitionRankingTime` -> `LanceIVFPartitionSelectionTime`, `LanceScalarIndexSegmentPrepareTime` -> `LanceScalarIndexCandidateEvaluationTime`. - Master differs from 4.x in one line: the callback asserts with `DCHECK_LT` that a found metric has a registered counter, where 4.x checks it in the `if`; both come from the same array. - Not ported: #68813's FE change that makes `AggCounter` print nothing for `TUnit.NONE`. It belongs to the FE port; until then master's merged profile prints the group labels like the existing `RuntimeFilterInfo`. ### Release note None ### Check List (For Author) - Test: Unit Test - New: `LanceTableReaderVectorSearchTest.SearchFilterDefaultsToPostfilter` (from #68813) and `LanceTableReaderFullTextSearchTest.SearchFilterHonorsPrefilterFlag` (top_k 1 with filter `row_id <= 2`: no row with postfilter, row 2 with prefilter; 4.x has no BE test for the full-text path). - Changed as in #68813: `AppliesSearchFilterBeforeTopK` becomes `AppliesSearchFilterBeforeTopKWhenPrefilterEnabled`; `MultiVectorScoresFiltersOffsetsAndIndexedCoverage` and `MultiVectorSegmentTopKMatchesIndependentGlobalOracle` set `prefilter` for their filtered cases, and the former checks the `RowIdPrefilter*` counters and that a flat split exposes `LanceIndexPartitionLoadTime`. - All pass on macOS arm64 (ASAN) against master's pinned lance-c, with the Lance suites. With vector search always prefiltering and full-text search never prefiltering, the two new cases fail. - Behavior changed: Yes, on the Lance path added by #69581. A search filter without `prefilter` now postfilters vector search, and full-text search honors `prefilter = true`, as on branch-4.1/4.2. Lance profile counters are grouped and renamed. Master has no FE that plans Lance scans yet. - Does this need documentation: No Co-authored-by: zhangstar333 Co-Authored-By: Claude Opus 5.5 (1M context) --- .../format_v2/lance/lance_reader_helper.cpp | 8 + be/src/format_v2/lance/lance_reader_helper.h | 198 ++++++++++++ be/src/format_v2/table/lance_reader.cpp | 290 +++++------------- be/src/format_v2/table/lance_reader.h | 13 +- be/test/format_v2/table/lance_reader_test.cpp | 105 ++++++- gensrc/thrift/PlanNodes.thrift | 8 +- 6 files changed, 401 insertions(+), 221 deletions(-) diff --git a/be/src/format_v2/lance/lance_reader_helper.cpp b/be/src/format_v2/lance/lance_reader_helper.cpp index 7977240b70a1f8..81876f0097bcf1 100644 --- a/be/src/format_v2/lance/lance_reader_helper.cpp +++ b/be/src/format_v2/lance/lance_reader_helper.cpp @@ -44,6 +44,14 @@ #include "exec/common/endian.h" namespace doris::format::lance { + +RuntimeProfile::Counter* add_lance_counter(RuntimeProfile* profile, const char* name, + TUnit::type unit, const char* group) { + // These counters label sections; they do not represent time or a sum of their children. + ADD_CHILD_COUNTER_WITH_LEVEL(profile, group, TUnit::NONE, LANCE_READER_PROFILE, 1); + return ADD_CHILD_COUNTER_WITH_LEVEL(profile, name, unit, group, 1); +} + namespace { constexpr std::string_view ARROW_EXTENSION_NAME = "ARROW:extension:name"; diff --git a/be/src/format_v2/lance/lance_reader_helper.h b/be/src/format_v2/lance/lance_reader_helper.h index 558bc1593b0a19..decc3d5dc63b8b 100644 --- a/be/src/format_v2/lance/lance_reader_helper.h +++ b/be/src/format_v2/lance/lance_reader_helper.h @@ -27,6 +27,7 @@ #include "common/status.h" #include "core/data_type/data_type.h" #include "gen_cpp/PlanNodes_types.h" +#include "runtime/runtime_profile.h" struct LanceBatch; struct LanceDataset; @@ -46,6 +47,203 @@ inline constexpr std::string_view LANCE_DISTANCE_COLUMN = "_distance"; inline constexpr std::string_view LANCE_SCORE_COLUMN = "_score"; inline constexpr std::string_view LANCE_ROW_ID_COLUMN = "_rowid"; inline constexpr const char* LANCE_READER_PROFILE = "LanceReader"; +inline constexpr const char* LANCE_TIMING_PROFILE = "LanceTiming"; +inline constexpr const char* LANCE_IO_PROFILE = "LanceIO"; +inline constexpr const char* LANCE_INDEX_PROFILE = "LanceIndex"; +inline constexpr const char* LANCE_VECTOR_INDEX_PROFILE = "LanceVectorIndex"; +inline constexpr const char* LANCE_SCALAR_INDEX_PROFILE = "LanceScalarIndex"; +inline constexpr const char* LANCE_EXECUTION_PLAN_PROFILE = "LanceExecutionPlan"; +inline constexpr const char* LANCE_SCAN_PROFILE = "LanceScan"; +inline constexpr const char* LANCE_SEARCH_PLAN_PROFILE = "LanceSearchPlan"; +inline constexpr const char* LANCE_DATA_CACHE_PROFILE = "LanceDataCache"; + +struct LanceProfileMetric { + std::string_view native_name; + const char* profile_name; + const char* group; + TUnit::type unit; +}; + +// Lance invokes the statistics callback from its execution streams. Keep the metric definitions +// immutable and pre-register their counters before installing the callback. The callback then +// updates only metrics reported by Lance without changing the profile counter tree. +inline constexpr LanceProfileMetric LANCE_SCAN_METRICS[] = { + {.native_name = "index_cache_hits", + .profile_name = "LanceIndexCacheHits", + .group = LANCE_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "index_cache_misses", + .profile_name = "LanceIndexCacheMisses", + .group = LANCE_INDEX_PROFILE, + .unit = TUnit::UNIT}, + // Row-ID prefilter loader metrics are separate from ANN/FTS result counts. + {.native_name = "prefilter_loads", + .profile_name = "RowIdPrefilterLoads", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "prefilter_input_rows", + .profile_name = "RowIdPrefilterInputRows", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "prefilter_input_batches", + .profile_name = "RowIdPrefilterInputBatches", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "prefilter_row_ids", + .profile_name = "RowIdPrefilterIds", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + // LoadTime includes input polling and set construction, so it overlaps component timers. + {.native_name = "prefilter_load_time", + .profile_name = "RowIdPrefilterLoadTime", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "prefilter_input_time", + .profile_name = "RowIdPrefilterInputTime", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "prefilter_build_time", + .profile_name = "RowIdPrefilterBuildTime", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "fragments_scanned", + .profile_name = "LanceFragmentsScanned", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "ranges_scanned", + .profile_name = "LanceRowOffsetRangesScanned", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "rows_scanned", + .profile_name = "LanceRowsScanned", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::UNIT}, + // This is Lance scan execution wait time, not Doris scanner scheduling wait time. + {.native_name = "task_wait_time", + .profile_name = "LanceScanTaskWaitTime", + .group = LANCE_SCAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "partitions_ranked", + .profile_name = "LanceIVFPartitionsConsidered", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + // Lance also reports partitions_searched for FTS, so keep it in the generic index group. + {.native_name = "partitions_searched", + .profile_name = "LanceIndexPartitionsSearched", + .group = LANCE_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "deltas_searched", + .profile_name = "LanceVectorIndexDeltasSearched", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + // These partition stages accumulate across concurrent work and can overlap each other. + {.native_name = "find_partitions_elapsed", + .profile_name = "LanceIVFPartitionSelectionTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "scalar_segments_requested", + .profile_name = "LanceScalarIndexSegmentsRequested", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "scalar_segments_searched", + .profile_name = "LanceScalarIndexSegmentsSearched", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "scalar_segment_fallbacks", + .profile_name = "LanceScalarIndexSegmentFallbacks", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "scalar_segment_candidate_rows", + .profile_name = "LanceScalarIndexCandidateRows", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::UNIT}, + {.native_name = "scalar_segment_prepare_time", + .profile_name = "LanceScalarIndexCandidateEvaluationTime", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "scalar_segment_search_time", + .profile_name = "LanceScalarIndexSegmentSearchTime", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "search_time", + .profile_name = "LanceScalarIndexQueryTime", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "serialization_time", + .profile_name = "LanceScalarIndexResultSerializationTime", + .group = LANCE_SCALAR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + // Index partition times overlap; DistanceTopK includes candidate filtering, scoring, + // and heap updates. + {.native_name = "index_open_time", + .profile_name = "LanceIndexOpenTime", + .group = LANCE_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_partition_load_time", + .profile_name = "LanceIndexPartitionLoadTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_partition_prepare_time", + .profile_name = "LanceIndexPartitionPrepareTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_prefilter_wait_time", + .profile_name = "LanceIndexPrefilterWaitTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_cpu_queue_wait_time", + .profile_name = "LanceIndexCpuQueueWaitTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_search_time", + .profile_name = "LanceIndexSearchTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_query_prepare_time", + .profile_name = "LanceIndexQueryPrepareTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_distance_topk_time", + .profile_name = "LanceIndexDistanceTopKTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "index_result_materialize_time", + .profile_name = "LanceIndexResultMaterializeTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + // These execution-plan stage timers are also cumulative across concurrent tasks. + {.native_name = "ANNIVFPartitionExec_elapsed_compute", + .profile_name = "LanceANNPartitionExecTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "ANNSubIndexExec_elapsed_compute", + .profile_name = "LanceANNSubIndexExecTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "ANNIvfBatchExec_elapsed_compute", + .profile_name = "LanceANNBatchExecTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "SortExec_elapsed_compute", + .profile_name = "LanceSortComputeTime", + .group = LANCE_EXECUTION_PLAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "SortPreservingMergeExec_elapsed_compute", + .profile_name = "LanceSortMergeComputeTime", + .group = LANCE_EXECUTION_PLAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "TakeExec_elapsed_compute", + .profile_name = "LanceTakeExecTime", + .group = LANCE_EXECUTION_PLAN_PROFILE, + .unit = TUnit::TIME_NS}, + {.native_name = "KNNVectorDistanceExec_elapsed_compute", + .profile_name = "LanceVectorDistanceComputeTime", + .group = LANCE_VECTOR_INDEX_PROFILE, + .unit = TUnit::TIME_NS}, +}; + +RuntimeProfile::Counter* add_lance_counter(RuntimeProfile* profile, const char* name, + TUnit::type unit, const char* group); struct LanceDatasetDeleter { void operator()(LanceDataset* dataset) const; diff --git a/be/src/format_v2/table/lance_reader.cpp b/be/src/format_v2/table/lance_reader.cpp index b9e5054a2a6e81..fa1380478bb4dd 100644 --- a/be/src/format_v2/table/lance_reader.cpp +++ b/be/src/format_v2/table/lance_reader.cpp @@ -82,18 +82,18 @@ Status LanceTableReader::init(TableReadOptions&& options) { RETURN_IF_ERROR(_resolve_search_kind()); const auto& lance_scan_params = _scan_params->lance_scan_params; - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, LANCE_READER_PROFILE, - file_scan_profile::TABLE_READER, 1); - _dataset_open_time = ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceDatasetOpenTime", - LANCE_READER_PROFILE, 1); - _arrow_to_doris_block_time = ADD_CHILD_TIMER_WITH_LEVEL( - _scanner_profile, "LanceArrowToDorisBlockTime", LANCE_READER_PROFILE, 1); + ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, LANCE_READER_PROFILE, TUnit::NONE, + file_scan_profile::TABLE_READER, 1); + _dataset_open_time = add_lance_counter(_scanner_profile, "LanceDatasetOpenTime", TUnit::TIME_NS, + LANCE_TIMING_PROFILE); + _arrow_to_doris_block_time = add_lance_counter(_scanner_profile, "LanceArrowToDorisBlockTime", + TUnit::TIME_NS, LANCE_TIMING_PROFILE); _data_cache_bytes_read_from_cache = - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceDataCacheBytesReadFromCache", - TUnit::BYTES, LANCE_READER_PROFILE, 1); + add_lance_counter(_scanner_profile, "LanceDataCacheBytesReadFromCache", TUnit::BYTES, + LANCE_DATA_CACHE_PROFILE); _data_cache_bytes_read_from_remote = - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceDataCacheBytesReadFromRemote", - TUnit::BYTES, LANCE_READER_PROFILE, 1); + add_lance_counter(_scanner_profile, "LanceDataCacheBytesReadFromRemote", TUnit::BYTES, + LANCE_DATA_CACHE_PROFILE); if (_search_kind != SearchKind::NORMAL) { RETURN_IF_ERROR(_validate_external_search_request()); const auto& request = lance_scan_params.external_search_request; @@ -128,14 +128,10 @@ Status LanceTableReader::init(TableReadOptions&& options) { } _scanner_profile->add_info_string("LanceTopK", std::to_string(top_k)); _scanner_profile->add_info_string("LanceOffset", std::to_string(offset)); - _scanner_profile->add_info_string("LanceTopKPlusOffset", std::to_string(top_k + offset)); } if (_scan_params->__isset.lance_scan_params && lance_scan_params.__isset.lance_substrait_filter) { _scanner_profile->add_info_string("LancePushdownFormat", "SUBSTRAIT"); - _scanner_profile->add_info_string( - "LanceSubstraitFilterBytes", - std::to_string(lance_scan_params.lance_substrait_filter.size())); } return _record_batch_converter.init(_runtime_state, _projected_columns, _search_kind); @@ -200,7 +196,7 @@ Status LanceTableReader::get_block(Block* block, bool* eos) { LanceBatch* raw_batch = nullptr; int32_t scan_status = 0; { - SCOPED_TIMER(_scanner_read_time); + SCOPED_TIMER(_scanner_next_time); scan_status = lance_scanner_next(_scanner, &raw_batch); } if (scan_status == 1) { @@ -249,11 +245,11 @@ Status LanceTableReader::read_by_row_ids(const TFileRangeDesc& range, } if (_row_id_take_read_time == nullptr) { _row_id_take_read_time = ADD_CHILD_TIMER_WITH_LEVEL( - _scanner_profile, "LanceRowIdTakeReadTime", LANCE_READER_PROFILE, 1); + _scanner_profile, "LanceRowIdTakeReadTime", LANCE_TIMING_PROFILE, 1); } if (_row_id_fetch_total_time == nullptr) { _row_id_fetch_total_time = ADD_CHILD_TIMER_WITH_LEVEL( - _scanner_profile, "LanceRowIdFetchTotalTime", LANCE_READER_PROFILE, 1); + _scanner_profile, "LanceRowIdFetchTotalTime", LANCE_TIMING_PROFILE, 1); } auto* fetch_calls = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowIdFetchCalls", TUnit::UNIT, LANCE_READER_PROFILE, 1); @@ -374,7 +370,7 @@ Status LanceTableReader::_validate_external_search_request() const { DORIS_CHECK(lance_scan_params.__isset.external_search_request); if (lance_scan_params.__isset.lance_substrait_filter) { return Status::InvalidArgument( - "Lance external search cannot combine its pre-search filter with " + "Lance external search cannot combine external_search_request with " "lance_substrait_filter"); } @@ -642,155 +638,44 @@ void LanceTableReader::_init_scanner_profile() { return; } - _scanner_configure_time = ADD_CHILD_TIMER_WITH_LEVEL( - _scanner_profile, "LanceScannerConfigureTime", LANCE_READER_PROFILE, 1); - _runtime_filter_sql_time = ADD_CHILD_TIMER_WITH_LEVEL( - _scanner_profile, "LanceRuntimeFilterSqlTime", LANCE_READER_PROFILE, 1); - _scanner_read_time = ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScannerReadTime", - LANCE_READER_PROFILE, 1); - _execution_iops = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceExecutionIOOps", - TUnit::UNIT, LANCE_READER_PROFILE, 1); - _execution_requests = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceExecutionIORequests", - TUnit::UNIT, LANCE_READER_PROFILE, 1); - _execution_bytes_read = ADD_CHILD_COUNTER_WITH_LEVEL( - _scanner_profile, "LanceExecutionIOBytesRead", TUnit::BYTES, LANCE_READER_PROFILE, 1); - _index_partition_cache_miss_loads = - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionCacheMissLoads", - TUnit::UNIT, LANCE_READER_PROFILE, 1); - _index_comparisons = ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIndexComparisons", - TUnit::UNIT, LANCE_READER_PROFILE, 1); - - // Prefilter counters isolate row-id materialization. The generic scan counts below come - // from Lance's FilteredRead execution node and are scan inputs, not ANN result counts. - _lance_count_metrics = { - {"prefilter_loads", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterLoads", TUnit::UNIT, - LANCE_READER_PROFILE, 1)}, - {"prefilter_input_rows", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputRows", TUnit::UNIT, - LANCE_READER_PROFILE, 1)}, - {"prefilter_input_batches", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputBatches", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"prefilter_row_ids", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePrefilterRowIds", TUnit::UNIT, - LANCE_READER_PROFILE, 1)}, - {"fragments_scanned", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceFragmentsScanned", TUnit::UNIT, - LANCE_READER_PROFILE, 1)}, - {"ranges_scanned", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowOffsetRangesScanned", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"rows_scanned", ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceRowsScanned", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"partitions_ranked", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionsRanked", TUnit::UNIT, - LANCE_READER_PROFILE, 1)}, - {"partitions_searched", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionsSearched", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"deltas_searched", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceVectorIndexSegmentsSearched", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"scalar_segments_requested", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentsRequested", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"scalar_segments_searched", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentsSearched", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"scalar_segment_fallbacks", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentFallbacks", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - {"scalar_segment_candidate_rows", - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexCandidateRows", - TUnit::UNIT, LANCE_READER_PROFILE, 1)}, - }; - _lance_time_metrics = { - // Partition stages accumulate across concurrent work and overlap their parent timers. - // DistanceTopK includes fused candidate filtering, scoring, and heap updates. - {"index_open_time", ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexOpenTime", - LANCE_READER_PROFILE, 1)}, - {"index_partition_load_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionLoadTime", - LANCE_READER_PROFILE, 1)}, - {"index_partition_prepare_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPartitionPrepareTime", - LANCE_READER_PROFILE, 1)}, - {"index_prefilter_wait_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexPrefilterWaitTime", - LANCE_READER_PROFILE, 1)}, - {"index_cpu_queue_wait_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexCpuQueueWaitTime", - LANCE_READER_PROFILE, 1)}, - {"index_search_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexSearchTime", - LANCE_READER_PROFILE, 1)}, - {"index_query_prepare_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexQueryPrepareTime", - LANCE_READER_PROFILE, 1)}, - {"index_distance_topk_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexDistanceTopKTime", - LANCE_READER_PROFILE, 1)}, - {"index_result_materialize_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIndexResultMaterializeTime", - LANCE_READER_PROFILE, 1)}, - {"ANNIVFPartitionExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNPartitionExecTime", - LANCE_READER_PROFILE, 1)}, - {"ANNSubIndexExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNSubIndexExecTime", - LANCE_READER_PROFILE, 1)}, - {"ANNIvfBatchExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceANNBatchExecTime", - LANCE_READER_PROFILE, 1)}, - {"SortExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceSortComputeTime", - LANCE_READER_PROFILE, 1)}, - {"SortPreservingMergeExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceSortMergeComputeTime", - LANCE_READER_PROFILE, 1)}, - {"TakeExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceTakeExecTime", LANCE_READER_PROFILE, - 1)}, - {"KNNVectorDistanceExec_elapsed_compute", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceVectorDistanceComputeTime", - LANCE_READER_PROFILE, 1)}, - // These are wall times in the ANN row-id loader. LoadTime includes input polling - // and set construction; it must not be added to its component timers. - {"prefilter_load_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterLoadTime", - LANCE_READER_PROFILE, 1)}, - {"prefilter_input_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterInputTime", - LANCE_READER_PROFILE, 1)}, - {"prefilter_build_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LancePrefilterBuildTime", - LANCE_READER_PROFILE, 1)}, - - // This is wait time reported by the same Lance scan execution node described above, - // rather than Doris scanner scheduling wait time. - {"task_wait_time", ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceTaskWaitTime", - LANCE_READER_PROFILE, 1)}, - {"find_partitions_elapsed", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceIVFPartitionRankingTime", - LANCE_READER_PROFILE, 1)}, - {"scalar_segment_prepare_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentPrepareTime", - LANCE_READER_PROFILE, 1)}, - {"scalar_segment_search_time", - ADD_CHILD_TIMER_WITH_LEVEL(_scanner_profile, "LanceScalarIndexSegmentSearchTime", - LANCE_READER_PROFILE, 1)}, - }; + _scanner_configure_time = add_lance_counter(_scanner_profile, "LanceScannerConfigureTime", + TUnit::TIME_NS, LANCE_TIMING_PROFILE); + _runtime_filter_sql_translation_time = + add_lance_counter(_scanner_profile, "LanceRuntimeFilterSqlTranslationTime", + TUnit::TIME_NS, LANCE_TIMING_PROFILE); + _scanner_next_time = add_lance_counter(_scanner_profile, "LanceScannerNextTime", TUnit::TIME_NS, + LANCE_TIMING_PROFILE); + _execution_iops = + add_lance_counter(_scanner_profile, "LanceIOReadOps", TUnit::UNIT, LANCE_IO_PROFILE); + _execution_requests = add_lance_counter(_scanner_profile, "LanceIOReadRequests", TUnit::UNIT, + LANCE_IO_PROFILE); + _execution_bytes_read = + add_lance_counter(_scanner_profile, "LanceIOReadBytes", TUnit::BYTES, LANCE_IO_PROFILE); + _index_object_loads = add_lance_counter(_scanner_profile, "LanceIndexObjectLoads", TUnit::UNIT, + LANCE_INDEX_PROFILE); + _index_components_loaded = add_lance_counter(_scanner_profile, "LanceIndexComponentsLoaded", + TUnit::UNIT, LANCE_INDEX_PROFILE); + _index_comparisons = add_lance_counter(_scanner_profile, "LanceIndexComparisons", TUnit::UNIT, + LANCE_INDEX_PROFILE); + + _scan_metric_counters.reserve(sizeof(LANCE_SCAN_METRICS) / sizeof(LANCE_SCAN_METRICS[0])); + for (const auto& definition : LANCE_SCAN_METRICS) { + _scan_metric_counters.emplace_back(add_lance_counter( + _scanner_profile, definition.profile_name, definition.unit, definition.group)); + } + if (_search_kind != SearchKind::NORMAL) { _planned_index_segment_count = - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePlannedIndexSegmentCount", - TUnit::UNIT, LANCE_READER_PROFILE, 1); + add_lance_counter(_scanner_profile, "LancePlannedIndexSegmentCount", TUnit::UNIT, + LANCE_SEARCH_PLAN_PROFILE); _planned_indexed_fragment_count = - ADD_CHILD_COUNTER_WITH_LEVEL(_scanner_profile, "LancePlannedIndexedFragmentCount", - TUnit::UNIT, LANCE_READER_PROFILE, 1); - _planned_flat_search_fragment_count = ADD_CHILD_COUNTER_WITH_LEVEL( - _scanner_profile, "LancePlannedFlatSearchFragmentCount", TUnit::UNIT, - LANCE_READER_PROFILE, 1); + add_lance_counter(_scanner_profile, "LancePlannedIndexedFragmentCount", TUnit::UNIT, + LANCE_SEARCH_PLAN_PROFILE); + if (_search_kind == SearchKind::VECTOR) { + _planned_flat_search_fragment_count = + add_lance_counter(_scanner_profile, "LancePlannedFlatSearchFragmentCount", + TUnit::UNIT, LANCE_SEARCH_PLAN_PROFILE); + } } } @@ -822,7 +707,7 @@ Status LanceTableReader::_open_scanner(const TFileRangeDesc& range) { if (_dataset_schema == nullptr) { RETURN_IF_ERROR(import_lance_dataset_schema(_dataset, &_dataset_schema)); } - SCOPED_TIMER(_runtime_filter_sql_time); + SCOPED_TIMER(_runtime_filter_sql_translation_time); runtime_filter_sql = get_or_create_lance_runtime_filter_sql( _conjuncts, *_dataset_schema, _runtime_filter_cache); } @@ -840,8 +725,12 @@ Status LanceTableReader::_open_scanner(const TFileRangeDesc& range) { } std::unique_ptr scanner_guard(scanner); const auto collect_scan_statistics = [](void* callback_ctx, - const LanceScanStatistics* statistics) { - LanceTableReader::_collect_scan_statistics(callback_ctx, statistics); + const LanceScanStatistics* statistics) noexcept { + try { + LanceTableReader::_collect_scan_statistics(callback_ctx, statistics); + } catch (...) { + // Lance statistics are best-effort; never unwind through the callback ABI. + } }; if (lance_scanner_set_statistics_callback(scanner, collect_scan_statistics, this) != 0) { return lance_error("set Lance scanner statistics callback"); @@ -963,6 +852,10 @@ Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, DORIS_CHECK(scanner != nullptr); DORIS_CHECK(_scan_params != nullptr); DORIS_CHECK(_scan_params->__isset.lance_scan_params); + const auto& lance_scan_params = _scan_params->lance_scan_params; + DORIS_CHECK(lance_scan_params.__isset.external_search_request); + const auto& request = lance_scan_params.external_search_request; + const bool prefilter = request.__isset.prefilter && request.prefilter; std::vector fragment_ids; RETURN_IF_ERROR(parse_fragment_ids(lance_params, &fragment_ids)); if (!fragment_ids.empty() && @@ -976,14 +869,11 @@ Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, lance_scanner_set_index_segments(scanner, segment_uuids.data(), segment_count) != 0) { return lance_error("set Lance vector scanner index segments"); } - // Fragment-scoped nearest queries require prefiltering before installing the query. The same - // path applies the TVF search filter, when present. - if (lance_scanner_set_prefilter(scanner, true) != 0) { - return lance_error("enable Lance vector prefilter"); + // This setting controls only the external-search TVF's search_filter. Doris WHERE conjuncts + // remain scanner residuals and are not included in external_search_request. + if (lance_scanner_set_prefilter(scanner, prefilter) != 0) { + return lance_error("set Lance vector search prefilter"); } - const auto& lance_scan_params = _scan_params->lance_scan_params; - DORIS_CHECK(lance_scan_params.__isset.external_search_request); - const auto& request = lance_scan_params.external_search_request; const auto& vector = request.search_query.vector_search; const auto& query = vector.query_vector; const auto dimension = static_cast(query.dimension); @@ -1142,6 +1032,11 @@ Status LanceTableReader::_configure_full_text_search(LanceScanner* scanner, } const auto& full_text = _scan_params->lance_scan_params.external_search_request.search_query.full_text_search; + const auto& request = _scan_params->lance_scan_params.external_search_request; + const bool prefilter = request.__isset.prefilter && request.prefilter; + if (lance_scanner_set_prefilter(scanner, prefilter) != 0) { + return lance_error("set Lance full-text search prefilter"); + } if (lance_scanner_set_fts_query_context(scanner, _fts_query_context) != 0) { return lance_error("attach Lance FTS query context"); } @@ -1180,7 +1075,8 @@ void LanceTableReader::_collect_scan_statistics(void* callback_ctx, const void* update_counter(reader->_execution_iops, statistics->iops, "iops"); update_counter(reader->_execution_requests, statistics->requests, "requests"); update_counter(reader->_execution_bytes_read, statistics->bytes_read, "bytes_read"); - update_counter(reader->_index_partition_cache_miss_loads, statistics->index_partitions_loaded, + update_counter(reader->_index_object_loads, statistics->indices_loaded, "indices_loaded"); + update_counter(reader->_index_components_loaded, statistics->index_partitions_loaded, "index_partitions_loaded"); update_counter(reader->_index_comparisons, statistics->index_comparisons, "index_comparisons"); @@ -1197,38 +1093,23 @@ void LanceTableReader::_collect_scan_statistics(void* callback_ctx, const void* continue; } const std::string_view name(metric.name == nullptr ? "" : metric.name, metric.name_len); - RuntimeProfile::Counter* counter = nullptr; - switch (metric.kind) { - case LANCE_SCAN_METRIC_COUNT: { - const auto found = reader->_lance_count_metrics.find(name); - if (found != reader->_lance_count_metrics.end()) { - counter = found->second; + size_t metric_index = 0; + for (const auto& definition : LANCE_SCAN_METRICS) { + if (definition.native_name != name) { + ++metric_index; + continue; } - break; - } - case LANCE_SCAN_METRIC_TIME_NANOSECONDS: { - const auto found = reader->_lance_time_metrics.find(name); - if (found != reader->_lance_time_metrics.end()) { - counter = found->second; - } else if (name == "search_time") { - // Scalar-index metrics exist only when Lance includes the corresponding - // execution node in this scan plan. - counter = ADD_CHILD_TIMER_WITH_LEVEL(reader->_scanner_profile, - "LanceScalarIndexQueryTime", - LANCE_READER_PROFILE, 1); - } else if (name == "serialization_time") { - counter = ADD_CHILD_TIMER_WITH_LEVEL(reader->_scanner_profile, - "LanceScalarIndexResultSerializationTime", - LANCE_READER_PROFILE, 1); + const auto expected_kind = definition.unit == TUnit::TIME_NS + ? LANCE_SCAN_METRIC_TIME_NANOSECONDS + : LANCE_SCAN_METRIC_COUNT; + // _init_scanner_profile() registers one counter per LANCE_SCAN_METRICS entry before + // the callback is installed. + DCHECK_LT(metric_index, reader->_scan_metric_counters.size()); + if (metric.kind == expected_kind) { + update_counter(reader->_scan_metric_counters[metric_index], metric.value, name); } break; } - default: - break; - } - if (counter != nullptr) { - update_counter(counter, metric.value, name); - } } } @@ -1255,8 +1136,7 @@ void LanceTableReader::_close_dataset() { } void LanceTableReader::_collect_data_cache_statistics() { - if (_dataset == nullptr || (_data_cache_bytes_read_from_cache == nullptr && - _data_cache_bytes_read_from_remote == nullptr)) { + if (_dataset == nullptr) { return; } diff --git a/be/src/format_v2/table/lance_reader.h b/be/src/format_v2/table/lance_reader.h index 88deea610b301a..b0284e768df353 100644 --- a/be/src/format_v2/table/lance_reader.h +++ b/be/src/format_v2/table/lance_reader.h @@ -22,8 +22,6 @@ #include #include #include -#include -#include #include #include "common/status.h" @@ -110,20 +108,21 @@ class LanceTableReader final : public TableReader { RuntimeProfile::Counter* _planned_flat_search_fragment_count = nullptr; RuntimeProfile::Counter* _dataset_open_time = nullptr; RuntimeProfile::Counter* _scanner_configure_time = nullptr; - RuntimeProfile::Counter* _runtime_filter_sql_time = nullptr; - RuntimeProfile::Counter* _scanner_read_time = nullptr; + RuntimeProfile::Counter* _runtime_filter_sql_translation_time = nullptr; + RuntimeProfile::Counter* _scanner_next_time = nullptr; RuntimeProfile::Counter* _arrow_to_doris_block_time = nullptr; RuntimeProfile::Counter* _row_id_take_read_time = nullptr; RuntimeProfile::Counter* _row_id_fetch_total_time = nullptr; RuntimeProfile::Counter* _execution_iops = nullptr; RuntimeProfile::Counter* _execution_requests = nullptr; RuntimeProfile::Counter* _execution_bytes_read = nullptr; + // Pre-registered before installing Lance's callback so it only updates existing counters. + std::vector _scan_metric_counters; RuntimeProfile::Counter* _data_cache_bytes_read_from_cache = nullptr; RuntimeProfile::Counter* _data_cache_bytes_read_from_remote = nullptr; - RuntimeProfile::Counter* _index_partition_cache_miss_loads = nullptr; + RuntimeProfile::Counter* _index_object_loads = nullptr; + RuntimeProfile::Counter* _index_components_loaded = nullptr; RuntimeProfile::Counter* _index_comparisons = nullptr; - std::unordered_map _lance_count_metrics; - std::unordered_map _lance_time_metrics; LanceFtsQueryContext* _fts_query_context = nullptr; SearchKind _search_kind = SearchKind::NORMAL; bool _eof = false; diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index ca87ba2f7afa5d..e626008fccad0b 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -782,6 +782,46 @@ TEST(LanceTableReaderFullTextSearchTest, SupportsMatchAndPhraseQueries) { EXPECT_TRUE(phrase_slop_reader.close().ok()); } +TEST(LanceTableReaderFullTextSearchTest, SearchFilterHonorsPrefilterFlag) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/fts_indexed.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + auto range = make_full_text_search_range(dataset_uri, fixture, "body_fts"); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_score", TYPE_FLOAT, true), + }; + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + // "lance" ranks rows 3, 2, 1, 7. With top_k = 1, the default postfilter keeps only the best + // match, row 3, and the filter then removes it; prefilter applies the filter first, so the best + // remaining match, row 2, is returned. + for (const bool prefilter : {false, true}) { + SCOPED_TRACE(prefilter ? "prefilter" : "postfilter"); + RuntimeProfile profile("lance_fts_prefilter_flag"); + auto params = make_full_text_search_params("lance", 1, 0, TFtsCoverageMode::STRICT, + std::string("row_id <= 2")); + if (prefilter) { + params.lance_scan_params.external_search_request.__set_prefilter(true); + } + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_range(&reader, range).ok()); + Block block; + add_output_columns(&block, columns); + const auto rows = read_full_text_search_rows(&reader, &block); + if (prefilter) { + ASSERT_EQ(1U, rows.size()); + EXPECT_EQ(2, rows[0].first); + } else { + EXPECT_TRUE(rows.empty()); + } + EXPECT_TRUE(reader.close().ok()); + } +} + TEST(LanceTableReaderVectorSearchTest, RejectsMalformedIndexSegmentUuid) { const std::filesystem::path dataset_uri = "./be/test/format_v2/table/lance/data/all_types.lance"; @@ -892,6 +932,7 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorScoresFiltersOffsetsAndIndexed filter.__set_format(TSearchFilterFormat::SQL); filter.__set_payload("row_id >= 2"); request.__set_search_filter(filter); + request.__set_prefilter(true); search.__set_offset(1); search.__set_top_k(2); } @@ -940,18 +981,24 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorScoresFiltersOffsetsAndIndexed } // Read metrics after close: lance-c publishes its final execution summary // when the stream is released, including for an early top-k stop. - for (const char* name : {"LancePrefilterLoads", "LancePrefilterInputRows", - "LancePrefilterInputBatches", "LancePrefilterRowIds", - "LancePrefilterLoadTime", "LancePrefilterInputTime", - "LancePrefilterBuildTime"}) { + for (const char* name : {"RowIdPrefilterLoads", "RowIdPrefilterInputRows", + "RowIdPrefilterInputBatches", "RowIdPrefilterIds", + "RowIdPrefilterLoadTime", "RowIdPrefilterInputTime", + "RowIdPrefilterBuildTime"}) { auto* counter = profile.get_counter(name); - ASSERT_NE(nullptr, counter) << name; if (filtered) { + ASSERT_NE(nullptr, counter) << name; EXPECT_GT(counter->value(), 0) << name; - } else { + } else if (counter != nullptr) { EXPECT_EQ(counter->value(), 0) << name; } } + } else { + // Flat splits still expose the same metric tree so FE aggregation can merge + // later indexed splits even when this task reports no vector-index metrics. + auto* counter = profile.get_counter("LanceIndexPartitionLoadTime"); + ASSERT_NE(nullptr, counter); + EXPECT_EQ(0, counter->value()); } } } @@ -1043,6 +1090,7 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorSegmentTopKMatchesIndependentG filter.__set_format(TSearchFilterFormat::SQL); filter.__set_payload("row_id % 5 = 0"); request.__set_search_filter(filter); + request.__set_prefilter(true); } auto range = make_lance_range(uri, fixture.version, {fixture.fragment_ids[split]}); @@ -1322,7 +1370,7 @@ TEST(LanceTableReaderVectorSearchTest, SearchesWholeSnapshotWithOffsetAndDistanc EXPECT_TRUE(reader.close().ok()); } -TEST(LanceTableReaderVectorSearchTest, AppliesSearchFilterBeforeTopK) { +TEST(LanceTableReaderVectorSearchTest, AppliesSearchFilterBeforeTopKWhenPrefilterEnabled) { const std::filesystem::path dataset_uri = "./be/test/format_v2/table/lance/data/all_types.lance"; LanceFixtureInfo fixture; @@ -1339,6 +1387,7 @@ TEST(LanceTableReaderVectorSearchTest, AppliesSearchFilterBeforeTopK) { state.set_query_options(query_options); RuntimeProfile profile("lance_vector_search_prefilter_fixture"); auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 1, 0, "row_id >= 3"); + scan_params.lance_scan_params.external_search_request.__set_prefilter(true); LanceTableReader reader; ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); @@ -1353,6 +1402,48 @@ TEST(LanceTableReaderVectorSearchTest, AppliesSearchFilterBeforeTopK) { EXPECT_TRUE(reader.close().ok()); } +TEST(LanceTableReaderVectorSearchTest, SearchFilterDefaultsToPostfilter) { + const std::filesystem::path dataset_uri = + "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(dataset_uri, &fixture).ok()); + + const Columns columns { + projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true), + }; + TQueryOptions query_options; + query_options.__set_batch_size(2); + TQueryGlobals query_globals; + RuntimeState state(TQueryOptions(), query_globals); + state.set_query_options(query_options); + RuntimeProfile profile("lance_vector_search_postfilter_default_fixture"); + auto scan_params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 1, 0, "row_id >= 3"); + const auto& request = scan_params.lance_scan_params.external_search_request; + ASSERT_FALSE(request.__isset.prefilter); + + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, &scan_params).ok()); + ASSERT_TRUE(prepare_fixture(&reader, dataset_uri, fixture, fixture.fragment_ids).ok()); + + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + // The nearest row has row_id < 3, so filtering the top-1 candidate leaves nothing. With + // prefilter enabled, the same request returns row 4 (see the test above). + EXPECT_TRUE(rows.empty()); + EXPECT_TRUE(reader.close().ok()); + + for (const char* name : + {"RowIdPrefilterLoads", "RowIdPrefilterInputRows", "RowIdPrefilterInputBatches", + "RowIdPrefilterIds", "RowIdPrefilterLoadTime", "RowIdPrefilterInputTime", + "RowIdPrefilterBuildTime"}) { + auto* counter = profile.get_counter(name); + ASSERT_NE(nullptr, counter) << name; + EXPECT_EQ(0, counter->value()) << name; + } +} + TEST(LanceTableReaderVectorSearchTest, SearchesMultipleFragmentSplits) { const std::filesystem::path dataset_uri = "./be/test/format_v2/table/lance/data/all_types.lance"; diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift index da4d584ca711bf..f520197e4f7866 100644 --- a/gensrc/thrift/PlanNodes.thrift +++ b/gensrc/thrift/PlanNodes.thrift @@ -564,8 +564,9 @@ enum TSearchFilterFormat { SUBSTRAIT = 1 } -// A search filter is evaluated before candidate selection. A normal SQL predicate above the search -// relation remains a post-search filter and is not serialized here. +// A TVF search filter is evaluated by the search provider. TExternalSearchRequest.prefilter +// controls whether Lance applies it before or after vector/FTS candidate selection. A normal SQL +// predicate above the search relation remains a Doris residual. struct TSearchFilter { 1: optional TSearchFilterFormat format 2: optional binary payload @@ -662,6 +663,9 @@ struct TExternalSearchRequest { 2: optional TExternalSearchQuery search_query 3: optional TSearchFilter search_filter 4: optional TVectorSearchOptions vector_search_options + // Applies only to search_filter. Defaults to false (postfilter); Doris WHERE predicates remain + // residuals regardless of this setting. + 5: optional bool prefilter } struct TLanceScanParams { From 0fc678445e5ee2c92057783e4df552662fc904c6 Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 07/10] [fix](be) Search a Lance vector split only with the index segments FE planned ### What problem does this PR solve? Issue Number: None Related PR: #69581, #68707, #68815 Problem Summary: #69581 ports the Lance reader from the branch-4.2 snapshot cabcf45c1af, where `_configure_vector_search()` passes the request's `use_index` to `lance_scanner_set_use_index()`. FE decides per split whether to use an index: a split it plans with index segments carries their UUIDs, and a split without them is meant to be searched flat. With `use_index = true` and no segments, Lance instead searches the split with the first index on the column in manifest order. That index need not be the one FE chose: when FE finds no index whose metric matches the query, it plans every split flat, and the snapshot BE still searched them with the mismatched index. On branch-4.2, #68815 also plans distance-range searches over quantized indexes (IVF_SQ) as flat fallback splits, because quantized distances can drop rows inside the range; the snapshot BE searches those with the index and returns too few rows. Fix: port the split-level rule of #68707. - `lance_scanner_set_use_index(scanner, segment_count > 0)`: a split with segments searches exactly those, a split without segments searches flat, and `LancePlannedFlatSearchFragmentCount` now matches what Lance does. - A split that carries index segments while the request sets `use_index = false` is rejected with InvalidArgument. FE plans segments only when `use_index` allows them, on branch-4.1 (4.1.4 onward) and branch-4.2 alike, so a 4.x FE never sends this combination. - Not ported: the rest of #68707 (searching historical versions, tags and branches; rejecting fragment ids missing from the snapshot; naming the snapshot in errors and the profile). That comes with the next 4.x catch-up. ### Release note None ### Check List (For Author) - Test: Unit Test - New, from #68707 (only master's `RuntimeState(TQueryOptions(), globals)` constructor differs): `LanceTableReaderVectorSearchTest.SplitWithoutIndexSegmentsSearchesFlat`, `LanceTableReaderVectorSearchTest.RejectsIndexSegmentsWhenUseIndexIsFalse`. - Changed as in #68707: `MultiVectorScoresFiltersOffsetsAndIndexedCoverage`, `MultiVectorTopOnePreservesPrecisionAndBatchIndependence` and `MultiVectorCosineMasksUndefinedRows` pass the index segments for their indexed cases (new helper `make_indexed_lance_range`) and check `LanceIndexPartitionsSearched`; `MultiVectorDefaultMetricIsConsistentAcrossFragments` checks that every split is searched flat. - All pass on macOS arm64 (ASAN) against master's pinned lance-c, with the Lance suites. With `use_index` taken from the request and the rejection removed, the two new cases fail. - Behavior changed: Yes, on the Lance path added by #69581: a vector split without index segments is searched flat even when `use_index` is true, and a split with segments under `use_index = false` is rejected. Master has no FE that plans Lance scans yet. - Does this need documentation: No Co-authored-by: zy-kkk Co-Authored-By: Claude Opus 5.5 (1M context) --- be/src/format_v2/table/lance_reader.cpp | 20 +- be/test/format_v2/table/lance_reader_test.cpp | 176 +++++++++++++++++- 2 files changed, 188 insertions(+), 8 deletions(-) diff --git a/be/src/format_v2/table/lance_reader.cpp b/be/src/format_v2/table/lance_reader.cpp index fa1380478bb4dd..2f9831b5f4ee4f 100644 --- a/be/src/format_v2/table/lance_reader.cpp +++ b/be/src/format_v2/table/lance_reader.cpp @@ -865,6 +865,15 @@ Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, std::vector segment_uuids; size_t segment_count = 0; RETURN_IF_ERROR(parse_index_segment_uuids(lance_params, &segment_uuids, &segment_count)); + // FE plans index segments only when use_index allows them. A split carrying both contradicts + // itself, and the BE would have to override either FE's plan or the request. + if (segment_count > 0 && request.__isset.vector_search_options && + request.vector_search_options.__isset.use_index && + !request.vector_search_options.use_index) { + return Status::InvalidArgument( + "Lance vector search split carries {} index segments although use_index is false", + segment_count); + } if (segment_count > 0 && lance_scanner_set_index_segments(scanner, segment_uuids.data(), segment_count) != 0) { return lance_error("set Lance vector scanner index segments"); @@ -992,10 +1001,13 @@ Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, lance_scanner_set_ef(scanner, static_cast(options.ef)) != 0) { return lance_error("set Lance vector ef"); } - if (options.__isset.use_index && - lance_scanner_set_use_index(scanner, options.use_index) != 0) { - return lance_error("set Lance vector use_index"); - } + } + // FE plans a split without index segments as a flat search, and EXPLAIN and the profile count + // it as one. Lance would otherwise search it with the first index on the column in manifest + // order, which need not be the index FE selected. A split with segments searches exactly + // those; one that also carries use_index=false was rejected above. + if (lance_scanner_set_use_index(scanner, segment_count > 0) != 0) { + return lance_error("set Lance vector use_index"); } if (lance_scanner_set_offset(scanner, vector.offset) != 0) { return lance_error("set Lance vector offset"); diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index e626008fccad0b..c41f69cb610355 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -465,6 +465,18 @@ Status get_index_segment_uuids(const std::filesystem::path& dataset_uri, const c return Status::OK(); } +// A split over `fragment_ids` searching the segments of `index_name`, as FE plans an indexed split; +// BE searches a vector index only through the segments FE names. +TFileRangeDesc make_indexed_lance_range(const std::filesystem::path& dataset_uri, + const LanceFixtureInfo& fixture, + std::vector fragment_ids, const char* index_name) { + auto range = make_lance_range(dataset_uri, fixture.version, std::move(fragment_ids)); + std::vector segment_uuids; + EXPECT_TRUE(get_index_segment_uuids(dataset_uri, index_name, &segment_uuids).ok()); + range.table_format_params.lance_params.__set_index_segment_uuids(std::move(segment_uuids)); + return range; +} + TFileRangeDesc make_full_text_search_range(const std::filesystem::path& dataset_uri, const LanceFixtureInfo& fixture, const char* index_name) { @@ -938,7 +950,16 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorScoresFiltersOffsetsAndIndexed } LanceTableReader reader; ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); - ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + // BE searches an index only through the segments FE planned; the index covers + // fragment 0 and fragment 1 is searched flat in the same split. + auto range = make_lance_range(uri, fixture.version, fixture.fragment_ids); + if (indexed) { + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(uri, (column + "_idx").c_str(), &segments) + .ok()); + range.table_format_params.lance_params.__set_index_segment_uuids(segments); + } + ASSERT_TRUE(prepare_range(&reader, range).ok()); Block block; add_output_columns(&block, columns); auto rows = read_vector_search_rows(&reader, &block); @@ -1123,6 +1144,130 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorSegmentTopKMatchesIndependentG } } +TEST(LanceTableReaderVectorSearchTest, SplitWithoutIndexSegmentsSearchesFlat) { + // FE plans a split without index segments as a flat search. Lance must not search it with + // an index of its own choosing, even one covering the split and with use_index=true. + const std::filesystem::path uri = + "./be/test/format_v2/table/lance/data/multivector_ivf_flat.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + ASSERT_EQ(3, fixture.fragment_ids.size()); + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(uri, "vectors_idx", &segments).ok()); + ASSERT_EQ(2, segments.size()); + const auto query = representative_multi_vector(7, 0); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + std::map>> results; + for (const auto* mode : {"segment", "no_segment_default", "no_segment_use_index"}) { + SCOPED_TRACE(mode); + RuntimeProfile profile("lance_segmentless_split"); + auto params = make_float32_vector_search_params({0, 0, 0}, 5, 0); + auto& request = params.lance_scan_params.external_search_request; + request.vector_search_options.__isset.use_index = false; + if (std::string(mode) == "no_segment_use_index") { + request.vector_search_options.__set_use_index(true); + } + request.vector_search_options.__set_nprobes(64); + auto& search = request.search_query.vector_search; + search.__set_column("vectors"); + search.__set_metric(TVectorMetric::COSINE); + search.query_vector.__set_dimension(128); + search.query_vector.__set_num_vectors(1); + std::string bytes(query.size() * sizeof(float), '\0'); + for (size_t j = 0; j < query.size(); ++j) { + LittleEndian::Store32(bytes.data() + j * sizeof(float), + std::bit_cast(query[j])); + } + search.query_vector.__set_values(bytes); + auto range = make_lance_range(uri, fixture.version, {fixture.fragment_ids[0]}); + if (std::string(mode) == "segment") { + range.table_format_params.lance_params.__set_index_segment_uuids({segments[0]}); + } + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_range(&reader, range).ok()); + Block block; + add_output_columns(&block, columns); + results[mode] = read_vector_search_rows(&reader, &block); + ASSERT_EQ(5, results[mode].size()); + EXPECT_TRUE(reader.close().ok()); + auto* partitions = profile.get_counter("LanceIndexPartitionsSearched"); + ASSERT_NE(nullptr, partitions); + auto* flat = profile.get_counter("LancePlannedFlatSearchFragmentCount"); + ASSERT_NE(nullptr, flat); + if (std::string(mode) == "segment") { + EXPECT_GT(partitions->value(), 0); + EXPECT_EQ(0, flat->value()); + } else { + EXPECT_EQ(0, partitions->value()); + EXPECT_EQ(1, flat->value()); + } + } + EXPECT_EQ(results["no_segment_default"], results["no_segment_use_index"]); +} + +TEST(LanceTableReaderVectorSearchTest, RejectsIndexSegmentsWhenUseIndexIsFalse) { + // FE plans index segments only when use_index allows them. A split carrying segments under + // use_index=false is rejected instead of being searched with or without the index. + const std::filesystem::path uri = + "./be/test/format_v2/table/lance/data/multivector_ivf_flat.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(uri, "vectors_idx", &segments).ok()); + ASSERT_FALSE(segments.empty()); + const auto query = representative_multi_vector(7, 0); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const bool with_segment : {true, false}) { + SCOPED_TRACE(with_segment ? "with segment" : "without segment"); + RuntimeProfile profile("lance_segment_with_use_index_false"); + auto params = make_float32_vector_search_params({0, 0, 0}, 5, 0); + auto& request = params.lance_scan_params.external_search_request; + ASSERT_TRUE(request.vector_search_options.__isset.use_index); + ASSERT_FALSE(request.vector_search_options.use_index); + auto& search = request.search_query.vector_search; + search.__set_column("vectors"); + search.__set_metric(TVectorMetric::COSINE); + search.query_vector.__set_dimension(128); + search.query_vector.__set_num_vectors(1); + std::string bytes(query.size() * sizeof(float), '\0'); + for (size_t j = 0; j < query.size(); ++j) { + LittleEndian::Store32(bytes.data() + j * sizeof(float), + std::bit_cast(query[j])); + } + search.query_vector.__set_values(bytes); + auto range = make_lance_range(uri, fixture.version, {fixture.fragment_ids[0]}); + if (with_segment) { + range.table_format_params.lance_params.__set_index_segment_uuids({segments[0]}); + } + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + const auto status = prepare_range(&reader, range); + if (with_segment) { + EXPECT_FALSE(status.ok()); + EXPECT_NE( + status.to_string().find("carries 1 index segments although use_index is false"), + std::string::npos) + << status.to_string(); + } else { + ASSERT_TRUE(status.ok()) << status.to_string(); + Block block; + add_output_columns(&block, columns); + EXPECT_EQ(5, read_vector_search_rows(&reader, &block).size()); + auto* flat = profile.get_counter("LancePlannedFlatSearchFragmentCount"); + ASSERT_NE(nullptr, flat); + EXPECT_EQ(1, flat->value()); + } + EXPECT_TRUE(reader.close().ok()); + } +} + TEST(LanceTableReaderVectorSearchTest, MultiVectorTopOnePreservesPrecisionAndBatchIndependence) { const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector.lance"; LanceFixtureInfo fixture; @@ -1158,7 +1303,12 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorTopOnePreservesPrecisionAndBat RuntimeProfile profile("multi_vector_top_one"); LanceTableReader reader; ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); - ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + ASSERT_TRUE(prepare_range(&reader, indexed ? make_indexed_lance_range( + uri, fixture, fixture.fragment_ids, + "batch_vectors_idx") + : make_lance_range(uri, fixture.version, + fixture.fragment_ids)) + .ok()); Block block; add_output_columns(&block, columns); auto rows = read_vector_search_rows(&reader, &block); @@ -1167,6 +1317,9 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorTopOnePreservesPrecisionAndBat EXPECT_NEAR(indexed ? 2.0F - std::sqrt(2.0F) : 1e-8F, rows[0].second, indexed ? 1e-6F : 1e-13F); EXPECT_TRUE(reader.close().ok()); + auto* partitions = profile.get_counter("LanceIndexPartitionsSearched"); + ASSERT_NE(nullptr, partitions); + EXPECT_EQ(indexed, partitions->value() > 0); } } } @@ -1201,7 +1354,12 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorCosineMasksUndefinedRows) { RuntimeProfile profile("multi_vector_cosine_zero_norm"); LanceTableReader reader; ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); - ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + ASSERT_TRUE(prepare_range(&reader, indexed ? make_indexed_lance_range( + uri, fixture, fixture.fragment_ids, + "vectors_idx") + : make_lance_range(uri, fixture.version, + fixture.fragment_ids)) + .ok()); Block block; add_output_columns(&block, columns); auto rows = read_vector_search_rows(&reader, &block); @@ -1212,10 +1370,16 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorCosineMasksUndefinedRows) { : std::vector> {{2, 1}, {3, 1}}; EXPECT_EQ(expected, rows); EXPECT_TRUE(reader.close().ok()); + auto* partitions = profile.get_counter("LanceIndexPartitionsSearched"); + ASSERT_NE(nullptr, partitions); + EXPECT_EQ(indexed, partitions->value() > 0); } } } +// FE plans an omitted metric as L2, and this column's only index is cosine, so FE plans every split +// flat. BE must then search flat too, with the same L2 metric in every split, although the request +// allows indexes. TEST(LanceTableReaderVectorSearchTest, MultiVectorDefaultMetricIsConsistentAcrossFragments) { const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/multivector.lance"; LanceFixtureInfo fixture; @@ -1248,6 +1412,9 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorDefaultMetricIsConsistentAcros auto rows = read_vector_search_rows(&reader, &block); all_rows.insert(all_rows.end(), rows.begin(), rows.end()); EXPECT_TRUE(reader.close().ok()); + auto* partitions = profile.get_counter("LanceIndexPartitionsSearched"); + ASSERT_NE(nullptr, partitions); + EXPECT_EQ(0, partitions->value()); } std::sort(all_rows.begin(), all_rows.end()); EXPECT_EQ((std::vector> {{1, 0}, {2, 1}, {3, 4}, {6, 1}}), all_rows); @@ -1285,7 +1452,8 @@ TEST(LanceTableReaderVectorSearchTest, MultiVectorRejectsActualNullAndNonFiniteE bool eos = false; auto status = reader.get_block(&block, &eos); EXPECT_FALSE(status.ok()); - EXPECT_NE(status.to_string().find("finite, non-null elements"), std::string::npos); + EXPECT_NE(status.to_string().find("finite, non-null elements"), std::string::npos) + << status.to_string(); EXPECT_TRUE(reader.close().ok()); } } From a7e620547a9776bfb445ba7070ac2a43c6c159fa Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 08/10] [feature](be) Apply vector_search distance bounds in the Lance reader ### What problem does this PR solve? Issue Number: None Related PR: #69581, #68815 Problem Summary: #69581 ports the Lance reader from the branch-4.2 snapshot cabcf45c1af. After that snapshot, #68815 added `TVectorSearchParams.distance_lower_bound` (6) and `distance_upper_bound` (7) to branch-4.1 and branch-4.2: FLOAT bounds, inclusive lower and exclusive upper, which the 4.x FE fills for a single-vector `vector_search()` with distance bounds. #68815 kept the external-search `schema_version` at 1, so a BE cannot tell a bounded request from an unbounded one by version. A master BE without the fields ignored them and returned the unbounded top-k rows, for example rows with `_distance` below the lower bound. Fix: port the BE side of #68815. - `gensrc/thrift/PlanNodes.thrift`: add `6: optional double distance_lower_bound` and `7: optional double distance_upper_bound` to `TVectorSearchParams` with the 4.x comment. - `LanceTableReader::_validate_external_search_request()` rejects bounds on a multi-vector query (NotSupported), a bound that is not a finite FLOAT value (NaN, infinity, or beyond FLT_MAX), and a lower bound that is not below the upper bound at FLOAT precision (InvalidArgument), before the dataset is opened. - `_configure_vector_search()` narrows the bounds to FLOAT and installs them with `lance_scanner_set_distance_range()` after `lance_scanner_nearest()`, which clears any earlier range. A missing bound is passed as NULL (unbounded on that side). Requests without bounds are unchanged. Before: distance bounds sent by a 4.x FE were silently ignored. After: the reader returns only rows with lower <= _distance < upper, still capped by top_k and offset, and rejects invalid bounds. Compatibility (gensrc/AGENTS.md): fields 6 and 7 of `TVectorSearchParams` are `optional double distance_lower_bound` and `optional double distance_upper_bound` on the branch-4.2 (a7ae6f4611e) and branch-4.1 (3f911d030b6) heads, the same ids and types as here. branch-4.0 and branch-3.1 have no `TVectorSearchParams`, and on master the struct is new in #69581 with fields 1-5. No id is reused, and both fields are optional. `lance_scanner_set_distance_range()` is in master's lance-c pin (4fafcd64525), so only the BE changes. ### Release note None ### Check List (For Author) - Test: Unit Test - New (copied unchanged from #68815 except for master's `RuntimeState(TQueryOptions(), globals)` constructor): `LanceTableReaderVectorSearchTest.ValidatesDistanceRangeBeforeDatasetAccess`, `LanceTableReaderVectorSearchTest.AppliesDistanceBoundsAndOffset`, `LanceTableReaderVectorSearchTest.DistanceRangeFallbackPreservesExactScores`, `LanceTableReaderVectorSearchTest.DistanceRangeCoversIndexedAndAppendedFragments`. - Fixtures copied from d3063235507 (identical on the branch-4.2 head): `be/test/format_v2/table/lance/data/distance_range.lance` (11 files), `distance_range_dot.lance` (8 files), `distance_range_sq.lance` (8 files) and their description `be/test/format_v2/table/lance/distance_range_fixture.md`. - All pass on macOS arm64 (ASAN) against master's pinned lance-c, with the Lance suites. `DistanceRangeFallbackPreservesExactScores` needs the previous commit: without it the IVF_SQ fallback split is searched with the quantized index and loses its only row. With the range not installed, the three cases that read rows fail. - Behavior changed: Yes, on the Lance external-search path added by #69581: distance bounds are applied instead of ignored, and invalid bounds are rejected. Master has no FE that sends Lance search requests yet. - Does this need documentation: No Co-authored-by: Gabriel Co-Authored-By: Claude Opus 5.5 (1M context) --- be/src/format_v2/table/lance_reader.cpp | 35 ++++ .../auxiliary.idx | Bin 0 -> 3254 bytes .../index.idx | Bin 0 -> 329 bytes ...0-388c379e-6e57-4a48-a567-603ce868bdea.txn | Bin 0 -> 205 bytes ...1-831523ce-b62e-46b0-bcd2-501920af09b8.txn | Bin 0 -> 376 bytes ...2-4546c7a5-c68b-47d3-8f54-1e3036ad6429.txn | Bin 0 -> 122 bytes .../_versions/18446744073709551612.manifest | Bin 0 -> 824 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 997 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 486 bytes .../_versions/latest_version_hint.json | 1 + ...0101111111a29c2749f892029e3946d88007.lance | Bin 0 -> 661 bytes ...1110010011f2593f448ba30e92dc54b90567.lance | Bin 0 -> 3100 bytes .../auxiliary.idx | Bin 0 -> 3255 bytes .../index.idx | Bin 0 -> 330 bytes ...0-ec982602-f60a-425e-8b31-f77179548301.txn | Bin 0 -> 205 bytes ...1-bd4b52a8-552e-4270-b52f-3f678df92fed.txn | Bin 0 -> 378 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1001 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 487 bytes .../_versions/latest_version_hint.json | 1 + ...0101111101bccc4b4c19af77197f1a92b69c.lance | Bin 0 -> 3100 bytes .../auxiliary.idx | Bin 0 -> 2805 bytes .../index.idx | Bin 0 -> 327 bytes ...0-2dfc92d6-8481-4406-8893-9fc051e167d2.txn | Bin 0 -> 205 bytes ...1-f4a6b175-3626-4561-817e-c45c857597fa.txn | Bin 0 -> 407 bytes .../_versions/18446744073709551613.manifest | Bin 0 -> 1059 bytes .../_versions/18446744073709551614.manifest | Bin 0 -> 487 bytes .../_versions/latest_version_hint.json | 1 + ...01000001014167dc46e9aa87a5e01e036b2a.lance | Bin 0 -> 4892 bytes .../table/lance/distance_range_fixture.md | 93 ++++++++++ be/test/format_v2/table/lance_reader_test.cpp | 167 ++++++++++++++++++ gensrc/thrift/PlanNodes.thrift | 3 + 31 files changed, 301 insertions(+) create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/index.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_transactions/0-388c379e-6e57-4a48-a567-603ce868bdea.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_transactions/1-831523ce-b62e-46b0-bcd2-501920af09b8.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_transactions/2-4546c7a5-c68b-47d3-8f54-1e3036ad6429.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_versions/18446744073709551612.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/data/011111011100000101111111a29c2749f892029e3946d88007.lance create mode 100644 be/test/format_v2/table/lance/data/distance_range.lance/data/100110001000101110010011f2593f448ba30e92dc54b90567.lance create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_indices/76cb567d-f24f-4dd0-85b1-b0f486361b5e/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_indices/76cb567d-f24f-4dd0-85b1-b0f486361b5e/index.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/0-ec982602-f60a-425e-8b31-f77179548301.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/1-bd4b52a8-552e-4270-b52f-3f678df92fed.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/distance_range_dot.lance/data/110000101000110101111101bccc4b4c19af77197f1a92b69c.lance create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_indices/16361222-c72d-4428-9826-beeb3bfd3667/auxiliary.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_indices/16361222-c72d-4428-9826-beeb3bfd3667/index.idx create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_transactions/0-2dfc92d6-8481-4406-8893-9fc051e167d2.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_transactions/1-f4a6b175-3626-4561-817e-c45c857597fa.txn create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551613.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551614.manifest create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/latest_version_hint.json create mode 100644 be/test/format_v2/table/lance/data/distance_range_sq.lance/data/0000100001010101000001014167dc46e9aa87a5e01e036b2a.lance create mode 100644 be/test/format_v2/table/lance/distance_range_fixture.md diff --git a/be/src/format_v2/table/lance_reader.cpp b/be/src/format_v2/table/lance_reader.cpp index 2f9831b5f4ee4f..dc5a233b13ab6e 100644 --- a/be/src/format_v2/table/lance_reader.cpp +++ b/be/src/format_v2/table/lance_reader.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -407,6 +408,29 @@ Status LanceTableReader::_validate_external_search_request() const { static_cast(query_vector.element_type)); } const bool multi_vector = query_vector.__isset.num_vectors; + const bool has_distance_range = + vector.__isset.distance_lower_bound || vector.__isset.distance_upper_bound; + if (has_distance_range && multi_vector) { + return Status::NotSupported( + "Distance bounds are not supported for Lance multi-vector search"); + } + // Validate doubles before narrowing: non-finite or out-of-range values cannot reach the + // C API. + const auto valid_bound = [](double bound) { + return std::isfinite(bound) && std::abs(bound) <= std::numeric_limits::max(); + }; + if ((vector.__isset.distance_lower_bound && !valid_bound(vector.distance_lower_bound)) || + (vector.__isset.distance_upper_bound && !valid_bound(vector.distance_upper_bound))) { + return Status::InvalidArgument("Lance distance bounds must be finite FLOAT values"); + } + if (vector.__isset.distance_lower_bound && vector.__isset.distance_upper_bound && + static_cast(vector.distance_lower_bound) >= + static_cast(vector.distance_upper_bound)) { + return Status::InvalidArgument( + "distance_lower_bound must be less than distance_upper_bound at FLOAT " + "precision"); + } + // The optional count distinguishes a query matrix, including a one-row matrix. if (multi_vector && query_vector.num_vectors <= 0) { return Status::InvalidArgument( @@ -977,6 +1001,17 @@ Status LanceTableReader::_configure_vector_search(LanceScanner* scanner, } } + if (vector.__isset.distance_lower_bound || vector.__isset.distance_upper_bound) { + const float lower = static_cast(vector.distance_lower_bound); + const float upper = static_cast(vector.distance_upper_bound); + // nearest() clears the range; install bounds only after setting the query vector. + if (lance_scanner_set_distance_range( + scanner, vector.__isset.distance_lower_bound ? &lower : nullptr, + vector.__isset.distance_upper_bound ? &upper : nullptr) != 0) { + return lance_error("set Lance vector distance range"); + } + } + // Exact refinement validates stored elements and gives indexed and unindexed candidates // the same row-level score before either path truncates its results. if (query.__isset.num_vectors && lance_scanner_set_refine_factor(scanner, 1) != 0) { diff --git a/be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/auxiliary.idx b/be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..f6ecf98bb6ccd50d1e1c4d3e53af834a491f19e9 GIT binary patch literal 3254 zcmbW(duUT<9LDi;(pb~is@d@t>!mT?ql>+%HQrL|rQ2$kIX7?B^w=czXqwdKR9mkH z5h*f88AC)x>KH@D7$PDv#t0%qWQd3i86rhQL_}nWh)DFb@00eyf21BL-_I{SZ{IX< z$g8PJk;77JKK61CRg{li+q+ItI`b4Io3;N8Um;aaRSww|_D#K4wNrNG5ZP7vva7Lv zjZ4lo1+t$B+0Tc`eo-h}J6v|{2-&)kvR}%0Wt1tX51oomL#LxN(3$8gbT;Zo=b&@Z zPtgE6PqqQ0j&4UA(I^^2<7gAQ12xc{=q@yYHls;2CF{oc396x^(9!4^bSyd!^`PU? zB6I>e5uJoiMvG;`7{5Z-pqZR0U zbOE{$twa~0L3A;?1YL?QLzm08VBC$iqG{Ab+t5AeUbG$UK=+~h(F5o~^bmSjcCgQ~ zVn0xWUBma=yV{R%Hj8(GSokpd#?Zj;LS&2FP0o;e$V!#cf4RwCatS#^4wD4@^kVlva+K8<58Ss7rBt^CXXh2$P>w4@-*@+ z@?3HWxq@6tUP2C$SCVVUwd62)J$WO!p4>o=l6R037saE-|K-` zvN07kl1=GAbt=);oLq%ja|lISE%HK^s^vMmhI%a3w@{le%EhGjSC*9q!uDIM)jLvc zrltvZk<;&Rh00X>U#+p!@SwI_E1VgZRbcPgS=hVhQf;wV^r1aHVr-Gv>~iI4PT_EQ u2X@wR%+4KF?qJRxLNYjxpBwn9=~M3XpIcvtV|o&G*mubvhf-TrSN#q;2w80a literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/index.idx b/be/test/format_v2/table/lance/data/distance_range.lance/_indices/9634c881-df64-46a5-95dc-2468928008a5/index.idx new file mode 100644 index 0000000000000000000000000000000000000000..d7646e4098cb7337d1e0d1af48f22ceb3627031a GIT binary patch literal 329 zcmWe)WRPNHP!i!_5@KRxmf~SxsB>a~0!=U-%IfHW8*nuc1SB$mYICKhF< z7AgFP0Y)vh(#*UPGZPC&Ej}*JoW#83RIALgG$BSqEg>#02p^I>8$N#_>#=KkDS%K;CwMSut!wrH Z`Jc=xcSc)u?t(?_x<0S!R`)pv@&f!OKqLSF literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range.lance/_transactions/1-831523ce-b62e-46b0-bcd2-501920af09b8.txn b/be/test/format_v2/table/lance/data/distance_range.lance/_transactions/1-831523ce-b62e-46b0-bcd2-501920af09b8.txn new file mode 100644 index 0000000000000000000000000000000000000000..949b47f39d9e45d599f088f55a80f993cba67244 GIT binary patch literal 376 zcmZXQK}y3w6oxaAN*$<_Q5O{j(Sjf*PNqp|U5SWbmR-0FlgY#mrb(EYO1je{SkMbd zuh4}ju;2+q@f_}Ktx&xTYdeXbesb{}Ar|k~gufy8Sp#c#u=6g%(*FgjBOG zSE%G*;$puB*A{e-7J<-QDr9=t-+~(pOVM6Fy(6jSXo+~uY0Ul~_g@UlQr4G}r)+=# z@wegnoL1K&545DI$}`1LDW-|yEpRe?di%O}I|x>2zYvL_a$ryYQ61Mht8isrdZs7l EH`0T4Qvd(} literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range.lance/_transactions/2-4546c7a5-c68b-47d3-8f54-1e3036ad6429.txn b/be/test/format_v2/table/lance/data/distance_range.lance/_transactions/2-4546c7a5-c68b-47d3-8f54-1e3036ad6429.txn new file mode 100644 index 0000000000000000000000000000000000000000..afebdade12db8db3c3648ffb630549801f884f67 GIT binary patch literal 122 zcmd;J5>hcSH8D#zPc+p{HnT|5H8D>y*0o48HPJOpH8wCdOH45{F|u65=FjCT$-X literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range.lance/_versions/18446744073709551612.manifest b/be/test/format_v2/table/lance/data/distance_range.lance/_versions/18446744073709551612.manifest new file mode 100644 index 0000000000000000000000000000000000000000..7ed8e3d926b9f4a6ae0af040b74cdb80deaa82ba GIT binary patch literal 824 zcmb_a&ui2`6wYMHvK`v8jEdV*VbOw8+&DX#WRpGl3!zJGp@-rvOp=K^noX7@tLdKF zyB7=fkH?n#qu*B12P!3Q(Ud+(ch-+SMz0ZD=ODBz|GeDa+o>HQ02b%?z~P=J!pFAovL;wTT`WoYozm*%PQCzm^;W<_m#ZT5c%}{= zb&I=c6t5QUeV#HAB8nZANMhQoX&w_-T;P&2|Pd{GLO$6uIC=-ET@wS@Jqkg=wIS*$hO&9)&JkCc_ zlhHEOso{2*-f|7oY0-|SwM<{9tv1)NW-!m7#5$;Mz=voRnz&t9vE#zZQxRdra!H3; zzG)FmEUsD9@Jtiqj#~0XvIG|M)s%0@cwcE&whA?uP&JO8=Xy1NP7SOmB1{cx0;r*x z-Tkr@tE2Q-=DyV4|KADHgWTHw( b#VQ`pPW=i|$r1PT;Oa}~ z{qEQ3!NH5q%e}pw=>r1c;+*IQB8p_X>C337!v^V40LnY#sE$|m1>&o>5}t;_lxZXi za}byhMX0lUb(G#0n#)9yBX}2dZ{lmem``I<^@eer2!FtHEw#*2Kj1p-2}KNxGKY2- z@P#vWpBKK=B3A^tw7Y~aos|^t56V6{*Mdwjw^fe0ey;k*m@rGjVV;XL+#-;5ui%Rl zwt6B5zRr272ALAXhYy5)Ef+hpdqqigUy<#H?w5&24P3qO%ccj6@Dx?_8gtdmvjS(I8O=mgeiKR$|? z+qPrJ@d9pB(PmNTIzgMdtrc_ZDS`l8EKx@{5Pemv@4yGcvU_PBSsFNJ=y|NVPOdNj5b}vNQl1q?ePJmz*lZ#K0&8 z#0pFrOa^l#6dD+XWQ5p?^2_5hQxyKg0HYRbW?qSzi3OvOu@Gl!Zc=JWN@iZV1S7H% z@wCi})Rg$*%&OG*oXp}9tF)Z_#1boG3r0pp1_my?#&VHktPqubF2QKU&9S0!(KR-K zZ;!A0L@*?28R!xd4SFRNd0Bj1tdJ08HPso@PG)h5Ra#DdVu_Wp1)~5nm!^<9mnxUMeokUua;jcxUUELjfMPx8 z{G8I43q$cc-I!9j?LML~jD$xO(E%ZN)BU7L}iUO-}cs!w8Nerbu2AQ!(B z3l|fIgApU61)~RZ03#{Zd2z8cFdkq8T4(^Y&_>9L%Yu-F;#{IqTu~ex%t9b*72wu} pGeUwq9~$zeMnPL9LDi`=gN7qTDKRMX)UuXGc~nbnl&@a%51%xz36n)R&z6*rM+GvLLx#U zLLx#ULLx#ULLx#!A|fIpLLx#!LLwp}A|h7P^UNOlC!_=8`}whZcgEndV~$jmqW@Tm z(h{L4!C>fPc-d7s<7T^B7|JXUu7 zIN6f%vKwTqGRjOe0iA^=qO;LCXc9UXorfl)^U)M^0h)@Y$yQ)=qLpYB>O$RUHClu2 zMLp;~bU*4vYf&HSmo;OYfNJPObP_rlor1=o7IZ2ai%vu1(0Ft@Iz!fhaU;43-HdKQ zx1!t7?Pw{w11&>$qPx)D=pM9OHXY+aGy}~r)^dZ0#n4__bJHS`DvgZLJRjvr%a zwEua}PS(loy zKJozhGxx*K1n`BK22^RpCO+mpCh-D&yz2ZFOu8Hm&ljNSIF(; ztK@6s>*Nmd4f0L$EpjLMHu(lXV@^|tN@=tPb*!-U`5{u0uP8(hC zKUD5nmo$m3oOpEsUlO0a@SV6T`rHW#-j2iG1Zs=a<^ zASctNnsrso(~`t&F(b|E^i{c2-M%XS;3qVs7Wlo5wZ1~knn5U9p)e?REyCCuY0=e$ zY;BRq6!CxGn6WU`;jD2NJDdHD0ZkL;SYxumWY17ln_8r+juGv+UKn*#w<)w|OZ4EL zd0MVm@~=HDVoIziGnpbZqcE7Pe|GN0Avt{12p^WiM+Y76hYwca>w9ph?nl+oABbV- LWl)OqOA3Ai3-&X^ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/_indices/76cb567d-f24f-4dd0-85b1-b0f486361b5e/auxiliary.idx b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_indices/76cb567d-f24f-4dd0-85b1-b0f486361b5e/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..3ca57b8d6de34bc0062fae081b3565e7cde0ba2f GIT binary patch literal 3255 zcmeI#TUQcM6bJBg20}b}p_3_5reS7Ig#unN3nR@6FWpPAX=DbP0>)(Unl+C;_5ph8 zllUe2I@I9#Q>`I8P`6Co$ft>h7M=pv+Cc0Q(d z#Hom8B;j3WQe`CE!h5HLvmW6b^6z^^Jl`yQz=RJ^3m>%zldZyqHsNBsa7oZBAeUhf z_Q5N#A6|t6@ERP1GQ19Nz?(1xhlFnts&E~qp$2uBfm!$t8t^^*0CO-83(yq$5T1b? zo`oIo9PET$&=1eU0K5P%!ftp8_6U~|K88==Q}_%%hcDnu_zJ#;D{vL2;2L}b72z<# zFpR(`9D$>7435JII0<8L3f_X#@HV_7+(7sdZo(q8U;U3(FpWp%f48I8L z-OI$;Q1#~2&UdOhTew^%#KsLczK+JR_&FN)p>ZD?YoM_P{`)mh`%I|kn0=$HhkKMw zbKB5*e^v*TJtd=Hjg1V`3Ccp;oyn<|pVm(3${0JkrWB1mUC9|mE0)Qbsuhb)P`QJ( zYR(z8kk%DzcSGkc&9vk`<||s}rkd52yl$zQYN@<^HMpM&YDPX4j71NEYjPWF&QQ;Ir9bFvgD0NsPkRtZMs}n$pz*<^4iT#&BK;T&1pWxCjV8_ z&pHEa#p`u(HliR zbd*vui%URi;-OM0`6WuVT0&f05S<`9gjk}Llw!5`xHzGvm8A(W8ggk0sdK4v$?Jm! z^-}Ya^HVbO(u?(+^K(jb^IV~PAto+{<51seLum&n-43N;lq!?~Q~wFdXJUjfn1B?B L$pnNxj(*MnD6~p7 literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/0-ec982602-f60a-425e-8b31-f77179548301.txn b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/0-ec982602-f60a-425e-8b31-f77179548301.txn new file mode 100644 index 0000000000000000000000000000000000000000..72e846c899873dbd8656c442c29a6e5fc5cfbcaa GIT binary patch literal 205 zcmYj|u?oU47=%s1f*rG1#G!+O2$B44+9Z7g7hjrsbGSFHpVc`3`jK{ zC3m1?stalMjcSd>!3?cNC&4zL&p3G?yvE_ByH>tVK0nZI?%SbY0^tlV>{;8o_U$P~ Z|C6QjH(OV|zuT(u{ZP85Q$v{v^aanQKo0-_ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/1-bd4b52a8-552e-4270-b52f-3f678df92fed.txn b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_transactions/1-bd4b52a8-552e-4270-b52f-3f678df92fed.txn new file mode 100644 index 0000000000000000000000000000000000000000..57cf3b8d551b5d2449314c76feddaea8a184a2b7 GIT binary patch literal 378 zcmd;J6jDh_F-bBtO0>{5H8o1rH8C#VERE7qQ+BbPW8yl^#3jTf zPN0 z$fcy8lbDyBs+XCUl3Jlxkfaxunp~1!MsO)Ra*%*jkFs?-C9h`@HqAU-Zmh_^xfQ%nHF Cfp?S9_E)5!?hvLa)c6Y{3-Ry?lN!`6R$)Po=RCs>f;p*Qj3T@bHQcN42Ui3g9qVSdA7-u#Anyy-&#@GimxSGIQ7 z?|;2{WADL>=ieT-Pu?aFF3}BbC=nYYTXG`s{+gL*v|? zG9+ic!17v@IgM6}@`goiqmgsbXo|M&1foL)58jsEqyO&zOZT-R&nu*q#P{;V)(#E< z>za&I+j1aolG$IWuEL{|6GCP@a8o(vZYWdL6=BR&x9LFAC#%>oO(TbykGvL(S->zo z-}f!g^34ttwrzH7VX_YO+8tk?go+>lm-AUe=aKQaTHAqDWPt8m`RSJ@`=!eM!RL?Y u7Vzq3<8MNvt1Q}Fz}mF6X6uG-jOPyd4Ato~_yO&q=^q6Ef$Nw1SAPIK**D|> literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..9aebc63bd809b78050d2af7bc26bbe29f121fe1f GIT binary patch literal 487 zcmX@hz`!7+lA3I3VPs}tq?=}Dkf>{7WSXjLkz{PBn`UlqXl`k0Vqt7xxQT5sBbT3$ zCzpkxp#cyW0wItDQHCI3V3?GgoNSV0l5A+12-0Y2o@SV6X_RDUnXH$Sn3tR?#KgcT z1;h$W8cYUrBorDLg=B=-it@|jGgB1)!vLceYi3@FnTZ9Xkg*VFYHm_$N=jy4x&$M# z67jUmiqw?&;>@bl_?*n*605YF{KOI~V+%$mMg|5hyvA~oW2_LBeJ;Uh#lx}W{i17Z z0(bWRKgSfokfddxOH4fIl~m+q@o}+2f|S)<&p^+hiU-DLHqtX%!N_nC7_AV%#NgxT G=L`U*>XLf^ literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..218abba1699bfa --- /dev/null +++ b/be/test/format_v2/table/lance/data/distance_range_dot.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":2} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/distance_range_dot.lance/data/110000101000110101111101bccc4b4c19af77197f1a92b69c.lance b/be/test/format_v2/table/lance/data/distance_range_dot.lance/data/110000101000110101111101bccc4b4c19af77197f1a92b69c.lance new file mode 100644 index 0000000000000000000000000000000000000000..b72e061da897d204c04ca1a2c0f58d8187a0babd GIT binary patch literal 3100 zcmeI!+j7!C7{Ku)&^BGGV$>F~wOFmSsMJCalv<@Cib^Y5kM)2Q0!BG#q4wa3%U=3O zUic6`fX{&j_s__9<1pSiY%YHLO?LBTHoKG0)uSl!e`t!b>rj+>-F{4Ki>NYM)TEc~ zL5&u5O0RTDW8KoL%)h3~INmG0E~Gd1NN@H@6MLmg`=rbJrMDzriEQ~(7{WOW z<2+u#1-yutq^}9z;5t^YiW~SAH*pKMaR=Ywd;EYO@sqUOqpa8ms@*xQ2ReJ;zuyC`|Acn>VnqxZ-RtGel$G`VXg1Z?WtFNkQz2CZ zjb5|3W@fWiDeqQWhYaMbEi;>{SUYB_U{$K&T%nwdF(yXE@I)b9%9wt$ zlqol!Q1M60g^gk$8F=9efB8J2HxyM~oM`n#_5fnpzP7F-?lj*#fNN<-ns)iw4 z9;Z*!BLP(nsqvbcY%AlEaMtuMx}9^kuaR@Xm=|+@%jp*V9=L4?2UR|v#-SBa`Yz?TI!tu literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/_indices/16361222-c72d-4428-9826-beeb3bfd3667/auxiliary.idx b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_indices/16361222-c72d-4428-9826-beeb3bfd3667/auxiliary.idx new file mode 100644 index 0000000000000000000000000000000000000000..1483b3a7c8ea4822f4dab3b3208db22fa6c5bf26 GIT binary patch literal 2805 zcmbu>dwh*`9Ki9Dd70RI zxtOv-?6Xp&W|9Q8I*N|YV(qSCo$g}Yo?^XZv3`o!AXRMGPmCHMHX0;09wIgwCPt@; zO-G81+AV==kC?t!9KBC;?-xA>#EgSt<{@#+VbOa;9D7t8cTCJWE@qz)eJ917QzG`7 z5|nd@W*srSo>;ztSRqQR*jTI-Ek?wMm1D)o=3IPSECR^R#|#zILK^ zl6JDTKwGGtqMfRproFT7jMMtS8SPo^IqiAv1?@%cCGBPH7422+HSKln4ed?sE$!Xz zW%iK&yZ;3R1@=Gn{?#2=L1k(KECK4mCBX)2Yc!w~l!h`824%qx<-mk+C=V5&B2Do4$u)gL1*X!U7?$LH_!umLN7>$-jD))AQk#TKj;qwU?2>F!7v1d z!Y~*PX)pptf)hr83({dUsAlj$24sS21TUyI7ze5evO%>#4yXp00IK}+Kox&JsM4PV zs_+XymHiY@ML!Lu!wi@SMKBBQgV}ID%z+2guM<27^WY(v4+~%+JPeEA5m*e5!V-84 zmcrw(44#1H@Fc8&r(h*K4XfZ8SPjp@8h8%Y!t<~WUV!!RB5Z(-unAs*&G0g8fmdKF zyb9akHP{ZX!wz@@cEX#m3*Lg=@HXs$cVI8P3;W^vNvrLh`*n ze~acZmIR9tZ-zRZc@vzYbKIT?%RkSml;NH1aXa(8g&t>?H_x9Kn3a$i7nl|mW`t(B ze4{;y-iaBerCC(CQO2##2^@0z3&wj)YgTO3aKoPG&&hRVdYsuFzsv3NyUcFG9aGXA zZf|y)BQdUVn!}f$?M(Oj^HiFk()65spF5DKlhoyM{VI%!j#1xud~OxT#>Yp;Oq=Ey zVK1^84bA#SU86?R;ya1<_|!9aeVKXDopQ4BvwdB3Zdwh@u11jh_hJSGFA9w)vN~Ft z@kX3c?cXzFn?L*mJk;ggb&gw#1gHf6su** z#SK-Hmy%i`q*kp|Qdy9yWToU8<`y3usHCHml382=G9?}=kz=G(%cUu#&ZWvFuMgI% zmztNHpOTrEUaaSwpHrHf=L+QuF>x^*fqG3FN;^R57AOs)RG|!*`u9-&e<;laq#1#j K2?%{0{hR@p9Zg{X literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/_transactions/0-2dfc92d6-8481-4406-8893-9fc051e167d2.txn b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_transactions/0-2dfc92d6-8481-4406-8893-9fc051e167d2.txn new file mode 100644 index 0000000000000000000000000000000000000000..6cd36ac96683b03799cdb0cb1eecc0e36d125746 GIT binary patch literal 205 zcmWeqF-l2GwlqpH)3q?MFw`|MF#xhGERA(7(~=EL4O0!x%u|duu`Oog@)PppvM>Mw zLkM9AWPq6<+61I7*~Bc>GBMG@Jkd1Oz%bRo*euB?Q7%)Ama6AMNmVItY7g^W|4A)jq9Me%P+cDIZ;Zl`YHfhTac$;u_b}Mc)fs;I@KF5-x1=DuCBe?r* zbQ@`+*N>tJ&M}uvvMlujEJ=?FR5o0ItW&AzhE)Le4tJ0s=d`a M%W!Gd$y5)OPt6Q{bpQYW literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551613.manifest b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551613.manifest new file mode 100644 index 0000000000000000000000000000000000000000..3a4c998b41263e14024c0f7bc9e9a96767312f71 GIT binary patch literal 1059 zcmeHGy>8S%5cclLr^_mdP78q$f^-TfL?^tgeg4bQfJl=QN|6H5S!;WpEb-aK-UBBU zyaEjrREUBX03iz66f`v98IV#$6m%f)-H{(bLzRk=c6LTH`|aqPnJu6w=nF&`HP6|2 zVOLvOdcOE!|Hcn{0|PKO#rr-FLy>HFA}m{=jk{D)sy8EPj|Lb8oK-&=wU>P%|R4Z z;f&={NRcL<&t$O43#{tYFlq175!9B*Jejkk$kKviHDYnWd-G`K1lXTnT|j4!qkUF- zLh`)8(4tipSC2z~R}rL1FvxSB1lt%GF1We(_RZs`<~l}GY*30=uzZ_TbTz-ttWTqf zF(*TR7e1?~YXE#DGMVk`j-_>M!`4j8)-_jmxE7dJ;98Eg>_qH+eINdB4LPmWsKZT| z$MrmYRLy$p=b?bMDiUd%E)Vc7E+}<*?4vE z@^iiU>D||l@Sftgb?sj!ipVm#KaJEewCWH_=+5M!Uo(jD8XQ1W8*jIwK;_P@wcEb{ DIsiib literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551614.manifest b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/18446744073709551614.manifest new file mode 100644 index 0000000000000000000000000000000000000000..97194c3229ac31ea4d4bee3bd7ae2b2f93fb89dc GIT binary patch literal 487 zcmX@hz`!7+Vw94WY-yBYrfXqhVW?|jVgO`WSQ_hErX?Gg8m1bWnWq?SVq46} zQd8oKGpkbLb25udtkQDw6HBa&Ef|>?85p?m8p}nFu|ib#xdfvX566=Ci>|Q=bY8o> zjwym6Ny|W&n0U}DsmROX<6?ybDXY1jfu2DX4~)-jq-V5(k>MgRS|Nam!N<|h836x6 Bk)r?r literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/latest_version_hint.json b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/latest_version_hint.json new file mode 100644 index 00000000000000..218abba1699bfa --- /dev/null +++ b/be/test/format_v2/table/lance/data/distance_range_sq.lance/_versions/latest_version_hint.json @@ -0,0 +1 @@ +{"version":2} \ No newline at end of file diff --git a/be/test/format_v2/table/lance/data/distance_range_sq.lance/data/0000100001010101000001014167dc46e9aa87a5e01e036b2a.lance b/be/test/format_v2/table/lance/data/distance_range_sq.lance/data/0000100001010101000001014167dc46e9aa87a5e01e036b2a.lance new file mode 100644 index 0000000000000000000000000000000000000000..ac7848247438440164c7be9a7551d32910d4eef3 GIT binary patch literal 4892 zcmbu?e`w5q9Ki9<-Ok)ThVwCVW;ip<%*-}3GjsdJ%*-&%jQzUXcHHh}yD>8yNlVg_ zv?MJ_k|arzv?NKABrQq%N|Gc=lC_hD(Q!l3H!jFhilkb4OZxSL(Vab>ElPJ&@Kvlr}t)dLB!+K9O#FD)shB8=pyi&!zqsQqATN zjERvNvC^?Kq!Dq_aq-f~1nKxhsXa+LAz2!gDxH`njZT+N%8*XZlupT#Y9&2_)n}w@ z&Pvywla`*BuDc*ze^I*OlClcqLE=Wms!d8G?{()1?j!e(hkK)Ps$G_y^*xLumnAziXpeSs#`?W)bHEvf<4 zR@EJNwr}|#?gX%}sPpY3)zo>py z{iZsg`ny}1!~UoHUwHWU{ZFp{&~tFfkOu4gWhWejd*EKUAJ($9pTh<_;3U`ym%vqU z6C8v);V!rv?t#z4m*MMhFMJPv1oy%H@EiC8`~}u>eqJ8U0$bs5*akDo~d*LQH0Jp&%a1cHKAA}FVo$z7!2z(Uo zf{($+;S+E-d=fqdpN4zjGw@mX9DE+W0AGYJ!I$AH@KyL4d>y_4--K_$z3^@L4ty8B z2j7Puzz^X^@MHK1{1onkpTW=J7jQrP5`G20hTp(%;dk(R_yhbA{se!9zrbJNZ}0%D z<^I}#Ot2Xafi3VbI20ZZTj4NRheyES@JM(RJQ}vaV_*Xw3rE1?;7E8pY=F^AACL9OPg5%-YZ~{CBPK4*eN$@;48BT#y;rVbHyZ}yz z7s46vA~+LX3}?YhU?-dn=fJse9-I#^g_pqv@N&2iUI7=uE8${z6%o z1rETi@D6w<+y?K0+u_}C2fPQ~3-9~sg1^3I4ekE}gX90+hv;kdXd|@Qzq8Wga{N6s zO!31!zCc=Px=Bwl!rYBDZkNmBtGAnY%J@1@o7+{{;%RqRdOa$8lR`gDEDTyM3n)}83~)%w4GLQ7(<-`m>g%U5&5tZPQTZq}Seh@~sczTX_Pz?iS6 z=#&2a#^ia4CDrxrqUv4#)_`H?wkS)y+3HL-nbJ)K`^_b$-&t{`ZVBqW`rw+~_U~&h zHWuj%|7%UV9vP*VTdg66MK@a=zgF%WBUfJCENg{^%+<}Y7F5T})DJXt{vCDRD^=6r Oar2LdSu4se&iw~b7`J%< literal 0 HcmV?d00001 diff --git a/be/test/format_v2/table/lance/distance_range_fixture.md b/be/test/format_v2/table/lance/distance_range_fixture.md new file mode 100644 index 00000000000000..d1f3723304b508 --- /dev/null +++ b/be/test/format_v2/table/lance/distance_range_fixture.md @@ -0,0 +1,93 @@ + + +# Distance range fixture + +Synthetic single-vector data generated with `pylance==7.0.0`, using Lance data +format 2.2 and an IVF_FLAT V3 index. No external service is required to read it. +Rows 0–127 are indexed in fragment 0. Rows 128–130 were appended after indexing +in fragment 1. For query `[127, 0, 0]`, range `[1, 4)` returns rows 126 and 128, +which exercises both index coverage and the unindexed tail. + +Regenerate from the repository root: + +```python +import lance +import pyarrow as pa + +path = "be/test/format_v2/table/lance/data/distance_range.lance" +schema = pa.schema([ + pa.field("row_id", pa.int64(), nullable=False), + pa.field("embedding", pa.list_(pa.float32(), 3), nullable=False), +]) + +def batch(ids): + return pa.Table.from_pydict({ + "row_id": list(ids), + "embedding": [[float(i), 0.0, 0.0] for i in ids], + }, schema=schema) + +dataset = lance.write_dataset(batch(range(128)), path, mode="overwrite", + data_storage_version="2.2") +dataset.create_index("embedding", index_type="IVF_FLAT", num_partitions=1, + name="embedding_idx", index_file_version="V3") +lance.write_dataset(batch(range(128, 131)), path, mode="append", + data_storage_version="2.2") +``` + +Delete the previous generated dataset directory before regenerating to keep the +fixture free of obsolete files. Filenames and index UUIDs may change; tests discover +them from the manifest. + +## Range fallback fixtures + +`distance_range_sq.lance` contains vectors `[i, 0, 0]` for integers 0 through 255, +followed by row 256 with `[0.49, 0, 0]`, and an IVF_SQ V3 index. With query +`[0.51, 0, 0]`, row 256 has squared L2 distance approximately `0.0004`, inside +`[0.0001, 0.001)`. Its quantized distance is zero, so applying the lower bound +before refinement incorrectly discards it. + +`distance_range_dot.lance` contains row 0 with `[1, 0, 0]` and 127 rows with +`[0.5, 0, 0]`, and an IVF_FLAT V3 DOT index. Query `[-FLT_MAX, 0, 0]` with only +an inclusive lower bound of `FLT_MAX` must return row 0. Replacing the absent +upper bound with an exclusive `FLT_MAX` incorrectly discards it. + +These fixtures exercise fragment splits without index UUIDs, as planned by the +FE for unsafe indexed range searches, with both `use_index=true` and `false`. +They use the same schema and writer versions as the fixture above: + +```python +from pathlib import Path + +root = Path("be/test/format_v2/table/lance/data") +for name, values, index_type, metric in [ + ("distance_range_sq", [[float(i), 0.0, 0.0] for i in range(256)] + + [[0.49, 0.0, 0.0]], "IVF_SQ", "l2"), + ("distance_range_dot", [[1.0, 0.0, 0.0]] + + [[0.5, 0.0, 0.0] for _ in range(127)], "IVF_FLAT", "dot"), +]: + data = pa.Table.from_pydict({ + "row_id": list(range(len(values))), "embedding": values, + }, schema=schema) + dataset = lance.write_dataset(data, str(root / (name + ".lance")), + data_storage_version="2.2") + dataset.create_index("embedding", index_type=index_type, metric=metric, + num_partitions=1, name="embedding_idx", + index_file_version="V3") +``` diff --git a/be/test/format_v2/table/lance_reader_test.cpp b/be/test/format_v2/table/lance_reader_test.cpp index c41f69cb610355..74344542e57041 100644 --- a/be/test/format_v2/table/lance_reader_test.cpp +++ b/be/test/format_v2/table/lance_reader_test.cpp @@ -1473,6 +1473,173 @@ TEST(LanceTableReaderVectorSearchTest, RejectsInvalidQueryParallelismBeforeOpeni EXPECT_NE(std::string::npos, status.to_string().find("query_parallelism")); } +TEST(LanceTableReaderVectorSearchTest, ValidatesDistanceRangeBeforeDatasetAccess) { + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + const Columns columns {projected_column("_distance", TYPE_FLOAT, true)}; + for (int mode = 0; mode < 6; ++mode) { + SCOPED_TRACE(mode); + auto params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 2, 0); + auto& request = params.lance_scan_params.external_search_request; + auto& vector = request.search_query.vector_search; + vector.__set_distance_lower_bound(1.0); + vector.__set_distance_upper_bound(2.0); + if (mode == 0) vector.__set_distance_upper_bound(std::numeric_limits::infinity()); + if (mode == 1) vector.__set_distance_lower_bound(std::numeric_limits::quiet_NaN()); + if (mode == 2) vector.__set_distance_upper_bound(std::numeric_limits::max()); + if (mode == 3) vector.__set_distance_upper_bound(1.0); + if (mode == 4) vector.__set_distance_upper_bound(1.00000001); + if (mode == 5) vector.query_vector.__set_num_vectors(1); + RuntimeProfile profile("invalid_distance_range"); + LanceTableReader reader; + const auto status = init_reader(&reader, columns, &state, &profile, ¶ms); + EXPECT_FALSE(status.ok()); + EXPECT_NE(std::string::npos, + status.to_string().find(mode == 5 ? "multi-vector" : "distance")); + } +} + +TEST(LanceTableReaderVectorSearchTest, AppliesDistanceBoundsAndOffset) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/all_types.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (int mode = 0; mode < 5; ++mode) { + SCOPED_TRACE(mode); + auto params = make_float32_vector_search_params({0.0F, 0.0F, 0.0F}, 10, mode == 4 ? 1 : 0); + auto& request = params.lance_scan_params.external_search_request; + auto& vector = request.search_query.vector_search; + if (mode != 1) vector.__set_distance_lower_bound(1.0); + if (mode != 2) vector.__set_distance_upper_bound(mode == 3 ? 1.1 : 8.25); + RuntimeProfile profile("distance_range"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + if (mode == 4) { + EXPECT_TRUE(rows.empty()); + } else { + ASSERT_FALSE(rows.empty()); + EXPECT_EQ(mode == 1 ? 1 : 2, rows[0].first); + for (const auto& [id, distance] : rows) { + if (mode != 1) EXPECT_GE(distance, 1.0F); + if (mode != 2) EXPECT_LT(distance, mode == 3 ? 1.1F : 8.25F); + } + if (mode == 0 || mode == 3) EXPECT_EQ(1U, rows.size()); + } + ASSERT_TRUE(reader.close().ok()); + } +} + +TEST(LanceTableReaderVectorSearchTest, DistanceRangeFallbackPreservesExactScores) { + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const bool dot : {false, true}) { + const std::filesystem::path uri = + dot ? "./be/test/format_v2/table/lance/data/distance_range_dot.lance" + : "./be/test/format_v2/table/lance/data/distance_range_sq.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + for (const bool use_index : {false, true}) { + for (const bool filtered : {false, true}) { + SCOPED_TRACE(std::to_string(dot) + "/" + std::to_string(use_index) + "/" + + std::to_string(filtered)); + const float max = std::numeric_limits::max(); + auto params = make_float32_vector_search_params( + dot ? std::array {-max, 0.0F, 0.0F} + : std::array {0.51F, 0.0F, 0.0F}, + 300, 0, + filtered ? std::optional("row_id >= 0") : std::nullopt); + auto& request = params.lance_scan_params.external_search_request; + auto& vector = request.search_query.vector_search; + vector.__set_distance_lower_bound(dot ? max : 0.0001); + if (dot) { + vector.__set_metric(TVectorMetric::DOT_PRODUCT); + } else { + vector.__set_distance_upper_bound(0.001); + } + request.vector_search_options.__set_use_index(use_index); + request.vector_search_options.__set_refine_factor(1); + request.vector_search_options.__set_query_parallelism(4); + // Range fallback splits have no index UUIDs even when use_index was requested. + // SQ quantization must not drop 0.0004, nor an absent upper bound drop FLT_MAX. + RuntimeProfile profile("distance_range_fallback"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_fixture(&reader, uri, fixture, fixture.fragment_ids).ok()); + Block block; + add_output_columns(&block, columns); + const auto rows = read_vector_search_rows(&reader, &block); + ASSERT_EQ(1U, rows.size()); + EXPECT_EQ(dot ? 0 : 256, rows[0].first); + if (dot) { + EXPECT_FLOAT_EQ(max, rows[0].second); + } else { + EXPECT_NEAR(0.0004F, rows[0].second, 1e-8F); + } + ASSERT_TRUE(reader.close().ok()); + } + } + } +} + +TEST(LanceTableReaderVectorSearchTest, DistanceRangeCoversIndexedAndAppendedFragments) { + const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/distance_range.lance"; + LanceFixtureInfo fixture; + ASSERT_TRUE(get_fixture_info(uri, &fixture).ok()); + ASSERT_EQ(2U, fixture.fragment_ids.size()); + std::vector segments; + ASSERT_TRUE(get_index_segment_uuids(uri, "embedding_idx", &segments).ok()); + ASSERT_EQ(1U, segments.size()); + const Columns columns {projected_column("row_id", TYPE_BIGINT, false), + projected_column("_distance", TYPE_FLOAT, true)}; + TQueryGlobals globals; + RuntimeState state(TQueryOptions(), globals); + for (const bool use_index : {false, true}) { + for (const bool filtered : {false, true}) { + std::vector ids; + for (size_t split = 0; split < fixture.fragment_ids.size(); ++split) { + SCOPED_TRACE(std::to_string(use_index) + "/" + std::to_string(filtered) + "/" + + std::to_string(split)); + auto params = make_float32_vector_search_params( + {127.0F, 0.0F, 0.0F}, 10, 0, + filtered ? std::optional("row_id >= 127") : std::nullopt); + auto& request = params.lance_scan_params.external_search_request; + request.search_query.vector_search.__set_distance_lower_bound(1.0); + request.search_query.vector_search.__set_distance_upper_bound(4.0); + const bool indexed_split = use_index && split == 0; + request.vector_search_options.__set_use_index(indexed_split); + request.vector_search_options.__set_nprobes(1); + auto range = make_lance_range(uri, fixture.version, {fixture.fragment_ids[split]}); + if (indexed_split) { + range.table_format_params.lance_params.__set_index_segment_uuids(segments); + } + RuntimeProfile profile("mixed_distance_range"); + LanceTableReader reader; + ASSERT_TRUE(init_reader(&reader, columns, &state, &profile, ¶ms).ok()); + ASSERT_TRUE(prepare_range(&reader, range).ok()); + Block block; + add_output_columns(&block, columns); + for (const auto& [id, distance] : read_vector_search_rows(&reader, &block)) { + ids.push_back(id); + EXPECT_FLOAT_EQ(1.0F, distance); + } + ASSERT_TRUE(reader.close().ok()); + } + std::ranges::sort(ids); + EXPECT_EQ(filtered ? std::vector {128} : std::vector({126, 128}), + ids); + } + } +} + TEST(LanceTableReaderVectorSearchTest, QueryParallelismPreservesResults) { const std::filesystem::path uri = "./be/test/format_v2/table/lance/data/all_types.lance"; LanceFixtureInfo fixture; diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift index f520197e4f7866..7ccac23cc0c199 100644 --- a/gensrc/thrift/PlanNodes.thrift +++ b/gensrc/thrift/PlanNodes.thrift @@ -513,6 +513,9 @@ struct TVectorSearchParams { 3: optional i64 top_k 4: optional i64 offset 5: optional TVectorMetric metric + // FLOAT bounds: inclusive lower and exclusive upper. + 6: optional double distance_lower_bound + 7: optional double distance_upper_bound } enum TFtsCoverageMode { From 8e0543f1b79bef2562daa0ccd5e1983daaabb0ad Mon Sep 17 00:00:00 2001 From: morningman Date: Sun, 25 Oct 2026 18:19:46 +0800 Subject: [PATCH 09/10] [chore](build) Rebaseline the util/threadpool.h reach budget for the Lance reader ### What problem does this PR solve? Issue Number: None Related PR: #69581 Problem Summary: BE configure runs `build-support/check-build-hygiene.sh`. Its reverse reach budget caps how many TUs may transitively include `util/threadpool.h` at the baseline 988 (master 9a48f8120c0, 2026-08-18) plus 10%, that is 1087. Master 76fb880330c is at 1084, and the Lance reader adds four TUs that reach it (`format_v2/table/lance_reader.cpp`, `format_v2/lance/lance_runtime_filter_helper.cpp` and their unit tests), so configure on master plus this PR fails with "util/threadpool.h now reaches 1088 TUs (baseline 988 +10% = 1087)". The four TUs add no new edge. They need `VExprContext`, directly or through `format_v2/table_reader.h`, and `exprs/vexpr_context.h` holds `segment_v2::ColumnIteratorOptions` by value, so it includes `storage/segment/column_reader.h` -> `io/cache/cached_remote_file_reader.h` -> `io/cache/block_file_cache.h` -> `util/threadpool.h`, the path the other format_v2 readers already take. Narrowing includes inside the Lance files cannot remove it; the record batch converter header was already narrowed to `format_v2/column_data.h` in this PR. As the gate's message prescribes, this rebaselines `util/threadpool.h` to the measured 1088 (limit 1197) and records the reason next to the entry. Cutting the `vexpr_context.h` -> `column_reader.h` edge, by moving `ColumnIteratorOptions` into a light header, would bring the reach down to about 846; that is a separate build cleanup. ### Release note None ### Check List (For Author) - Test: No need to test: build configuration only. `bash build-support/check-build-hygiene.sh` passes on this branch and on master 76fb880330c plus this PR. - Behavior changed: No - Does this need documentation: No Co-Authored-By: Claude Opus 5.5 (1M context) --- build-support/check-header-deps.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/build-support/check-header-deps.py b/build-support/check-header-deps.py index 8b2eb403755636..6d17945a98cd49 100755 --- a/build-support/check-header-deps.py +++ b/build-support/check-header-deps.py @@ -587,7 +587,14 @@ "gen_cpp/Types_types.h": 1993, "gen_cpp/segment_v2.pb.h": 1234, "gen_cpp/PaloInternalService_types.h": 1133, - "util/threadpool.h": 988, + # Rebaselined from 988 at master 76fb880330c plus the Lance reader, + # 2026-10-25 (master alone: 1084). The reader adds four TUs, two sources + # and their tests, and no new edge: they reach it through + # exprs/vexpr_context.h, which holds segment_v2::ColumnIteratorOptions by + # value and so includes storage/segment/column_reader.h -> + # io/cache/cached_remote_file_reader.h -> io/cache/block_file_cache.h. + # Cutting that edge would bring this down to about 846. + "util/threadpool.h": 1088, # parsed_page.h holds RleDecoder by value and constructs it in the # header, so the whole storage read stack sees the RLE machinery; a live # dependency, budgeted as-is (trimming it is a refactor, not a gate). From a19d360276aeeff137273020a2677ddba1a467c7 Mon Sep 17 00:00:00 2001 From: morningman Date: Mon, 26 Oct 2026 10:42:36 +0800 Subject: [PATCH 10/10] [chore](build) Rebaseline the util/rle_encoding.h reach budget for the Lance reader ### What problem does this PR solve? Issue Number: None Related PR: #69581 Problem Summary: BE configure runs `build-support/check-build-hygiene.sh`. Its reverse reach budget caps how many TUs may transitively include `util/rle_encoding.h` at the baseline 823 (master 9a48f8120c0, 2026-08-18) plus 10%, that is 906. Master 9af1840dcd0 is at 903 (#69333 added the load table reader and its tests), and the Lance reader adds the same four TUs that the `util/threadpool.h` rebaseline in this PR counts (`format_v2/table/lance_reader.cpp`, `format_v2/lance/lance_runtime_filter_helper.cpp` and their unit tests), so configure on master plus this PR fails with "util/rle_encoding.h now reaches 907 TUs (baseline 823 +10% = 906)". Before #69333 the PR stayed under the limit, which is why the earlier rebaseline only had to cover `util/threadpool.h`. The four TUs add no new edge. `exprs/vexpr_context.h` includes `storage/segment/column_reader.h`, which includes `storage/segment/parsed_page.h` -> `util/rle_encoding.h`, the path the other format_v2 readers already take. As for `util/threadpool.h`, this rebaselines `util/rle_encoding.h` to the measured 907 (limit 998) and records the reason next to the entry; cutting the `vexpr_context.h` -> `column_reader.h` edge stays the separate build cleanup and would lower both. ### Release note None ### Check List (For Author) - Test: No need to test: build configuration only. `bash build-support/check-build-hygiene.sh` passes on master 9af1840dcd0 plus this PR. - Behavior changed: No - Does this need documentation: No Co-Authored-By: Claude Opus 5.5 (1M context) --- build-support/check-header-deps.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build-support/check-header-deps.py b/build-support/check-header-deps.py index 6d17945a98cd49..5be3dcab629c15 100755 --- a/build-support/check-header-deps.py +++ b/build-support/check-header-deps.py @@ -598,7 +598,13 @@ # parsed_page.h holds RleDecoder by value and constructs it in the # header, so the whole storage read stack sees the RLE machinery; a live # dependency, budgeted as-is (trimming it is a refactor, not a gate). - "util/rle_encoding.h": 823, + # Rebaselined from 823 at master 9af1840dcd0 plus the Lance reader, + # 2026-10-26 (master alone: 903). The reader's four TUs are the ones + # counted under util/threadpool.h above and add no new edge either: they + # reach it through exprs/vexpr_context.h -> storage/segment/column_reader.h + # -> storage/segment/parsed_page.h, so cutting that same edge would bring + # this down too. + "util/rle_encoding.h": 907, "gen_cpp/internal_service.pb.h": 741, "gen_cpp/FrontendService_types.h": 576, "storage/options.h": 464,

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