@@ -306,7 +306,7 @@ TEST_F(LuminaGlobalIndexTest, TestWriteAndReadWithMixedTagPredicates) {
306306 std::map<std::string, std::string> tag_options = options_;
307307 tag_options[" lumina.extension.build.tag.tag_schema" ] =
308308 R"( [{"key_name":"color","type":"enum","value_type":"string"},)"
309- R"( {"key_name":"price","type":"range","value_type":"double "}])" ;
309+ R"( {"key_name":"price","type":"range","value_type":"float "}])" ;
310310
311311 std::shared_ptr<arrow::DataType> tag_data_type = arrow::struct_ (
312312 {arrow::field (" f0" , arrow::list (arrow::float32 ())), arrow::field (" color" , arrow::utf8 ()),
@@ -354,7 +354,7 @@ TEST_F(LuminaGlobalIndexTest, TestWriteAndReadWithIntegerListTagFilter) {
354354
355355 std::map<std::string, std::string> tag_options = options_;
356356 tag_options[" lumina.extension.build.tag.tag_schema" ] =
357- R"( [{"key_name":"category_ids","type":"enum","value_type":"int64 "}])" ;
357+ R"( [{"key_name":"category_ids","type":"enum","value_type":"int32 "}])" ;
358358
359359 std::shared_ptr<arrow::DataType> tag_data_type =
360360 arrow::struct_ ({arrow::field (" f0" , arrow::list (arrow::float32 ())),
@@ -392,22 +392,25 @@ TEST_F(LuminaGlobalIndexTest, TestWriteAndReadWithCompatibleTagArrowTypes) {
392392
393393 std::map<std::string, std::string> tag_options = options_;
394394 tag_options[" lumina.extension.build.tag.tag_schema" ] =
395- R"( [{"key_name":"tag_i8","type":"enum","value_type":"int64"},)"
396- R"( {"key_name":"tag_i16","type":"enum","value_type":"int64"},)"
397- R"( {"key_name":"tag_i32","type":"enum","value_type":"int64"},)"
398- R"( {"key_name":"tag_f32","type":"range","value_type":"double"}])" ;
395+ R"( [{"key_name":"tag_i8","type":"enum","value_type":"int32"},)"
396+ R"( {"key_name":"tag_i16","type":"enum","value_type":"int32"},)"
397+ R"( {"key_name":"tag_i32","type":"enum","value_type":"int32"},)"
398+ R"( {"key_name":"tag_i64","type":"enum","value_type":"int64"},)"
399+ R"( {"key_name":"tag_f32","type":"range","value_type":"float"},)"
400+ R"( {"key_name":"tag_f64","type":"enum","value_type":"double"}])" ;
399401
400402 std::shared_ptr<arrow::DataType> tag_data_type = arrow::struct_ (
401403 {arrow::field (" f0" , arrow::list (arrow::float32 ())), arrow::field (" tag_i8" , arrow::int8 ()),
402404 arrow::field (" tag_i16" , arrow::int16 ()), arrow::field (" tag_i32" , arrow::int32 ()),
403- arrow::field (" tag_f32" , arrow::float32 ())});
405+ arrow::field (" tag_i64" , arrow::int64 ()), arrow::field (" tag_f32" , arrow::float32 ()),
406+ arrow::field (" tag_f64" , arrow::float64 ())});
404407 std::shared_ptr<arrow::Array> tag_array =
405408 arrow::ipc::internal::json::ArrayFromJSON (tag_data_type,
406409 R"( [
407- [[0.0, 0.0, 0.0, 0.0], 1, 10, 100, 1.5],
408- [[0.0, 1.0, 0.0, 1.0], 2, 20, 200, 2.5],
409- [[1.0, 0.0, 1.0, 0.0], 3, 30, 300, 3.5],
410- [[1.0, 1.0, 1.0, 1.0], 4, 40, 400, 4.5]
410+ [[0.0, 0.0, 0.0, 0.0], 1, 10, 100, 10000000001, 1.5, 1.25 ],
411+ [[0.0, 1.0, 0.0, 1.0], 2, 20, 200, 10000000002, 2.5, 2.25 ],
412+ [[1.0, 0.0, 1.0, 0.0], 3, 30, 300, 10000000003, 3.5, 3.25 ],
413+ [[1.0, 1.0, 1.0, 1.0], 4, 40, 400, 10000000004, 4.5, 4.25 ]
411414 ])" )
412415 .ValueOrDie ();
413416
@@ -438,9 +441,24 @@ TEST_F(LuminaGlobalIndexTest, TestWriteAndReadWithCompatibleTagArrowTypes) {
438441 search_and_check (PredicateBuilder::Equal (/* field_index=*/ 3 , /* field_name=*/ " tag_i32" ,
439442 FieldType::INT , Literal (400 )),
440443 {3l }, {0 .01f });
441- search_and_check (PredicateBuilder::GreaterThan (/* field_index=*/ 4 , /* field_name=*/ " tag_f32" ,
444+ search_and_check (PredicateBuilder::Equal (
445+ /* field_index=*/ 4 , /* field_name=*/ " tag_i64" , FieldType::BIGINT ,
446+ Literal (static_cast <int64_t >(10000000003 ))),
447+ {2l }, {2 .21f });
448+ search_and_check (PredicateBuilder::In (
449+ /* field_index=*/ 4 , /* field_name=*/ " tag_i64" , FieldType::BIGINT ,
450+ {Literal (static_cast <int64_t >(10000000001 )),
451+ Literal (static_cast <int64_t >(10000000004 ))}),
452+ {3l , 0l }, {0 .01f , 4 .21f });
453+ search_and_check (PredicateBuilder::GreaterThan (/* field_index=*/ 5 , /* field_name=*/ " tag_f32" ,
442454 FieldType::FLOAT , Literal (4 .0f )),
443455 {3l }, {0 .01f });
456+ search_and_check (PredicateBuilder::Equal (/* field_index=*/ 6 , /* field_name=*/ " tag_f64" ,
457+ FieldType::DOUBLE , Literal (3.25 )),
458+ {2l }, {2 .21f });
459+ search_and_check (PredicateBuilder::In (/* field_index=*/ 6 , /* field_name=*/ " tag_f64" ,
460+ FieldType::DOUBLE , {Literal (2.25 ), Literal (4.25 )}),
461+ {3l , 1l }, {0 .01f , 2 .01f });
444462}
445463
446464TEST_F (LuminaGlobalIndexTest, TestWriteAndReadWithTagNullAndEmptyValues) {
@@ -452,10 +470,10 @@ TEST_F(LuminaGlobalIndexTest, TestWriteAndReadWithTagNullAndEmptyValues) {
452470 tag_options[" lumina.extension.build.tag.tag_schema" ] =
453471 R"( [{"key_name":"color","type":"enum","value_type":"string"},)"
454472 R"( {"key_name":"labels","type":"enum","value_type":"string"},)"
455- R"( {"key_name":"price","type":"range","value_type":"double "},)"
456- R"( {"key_name":"scores","type":"enum","value_type":"double "},)"
457- R"( {"key_name":"category","type":"enum","value_type":"int64 "},)"
458- R"( {"key_name":"category_ids","type":"enum","value_type":"int64 "}])" ;
473+ R"( {"key_name":"price","type":"range","value_type":"float "},)"
474+ R"( {"key_name":"scores","type":"enum","value_type":"float "},)"
475+ R"( {"key_name":"category","type":"enum","value_type":"int32 "},)"
476+ R"( {"key_name":"category_ids","type":"enum","value_type":"int32 "}])" ;
459477
460478 std::shared_ptr<arrow::DataType> tag_data_type = arrow::struct_ (
461479 {arrow::field (" f0" , arrow::list (arrow::float32 ())), arrow::field (" color" , arrow::utf8 ()),
@@ -599,12 +617,13 @@ TEST_F(LuminaGlobalIndexTest, TestTagSchemaValidation) {
599617 R"( [{"key_name":"color","type":"range","value_type":"string"}])" ;
600618 ASSERT_NOK_WITH_MSG (
601619 WriteGlobalIndex (index_root, tag_data_type, tag_options, array_, Range (0 , 3 )),
602- " lumina tag_schema tag[0] range type does not support string value_type" );
620+ " Option extension.build.tag.tag_schema tag[0] range type does not support value_type "
621+ " 'string'" );
603622 }
604623 {
605624 std::map<std::string, std::string> tag_options = options_;
606625 tag_options[" lumina.extension.build.tag.tag_schema" ] =
607- R"( [{"key_name":"color","type":"enum","value_type":"int64 "}])" ;
626+ R"( [{"key_name":"color","type":"enum","value_type":"int32 "}])" ;
608627 ASSERT_NOK_WITH_MSG (
609628 WriteGlobalIndex (index_root, tag_data_type, tag_options, array_, Range (0 , 3 )),
610629 " lumina tag field color type string is not compatible with tag_schema value_type" );
@@ -615,7 +634,7 @@ TEST_F(LuminaGlobalIndexTest, TestTagSchemaValidation) {
615634 arrow::field (" category" , arrow::int64 ())});
616635 std::map<std::string, std::string> tag_options = options_;
617636 tag_options[" lumina.extension.build.tag.tag_schema" ] =
618- R"( [{"key_name":"category","type":"enum","value_type":"int64 "}])" ;
637+ R"( [{"key_name":"category","type":"enum","value_type":"int32 "}])" ;
619638 ASSERT_NOK_WITH_MSG (
620639 WriteGlobalIndex (index_root, int64_tag_data_type, tag_options, array_, Range (0 , 3 )),
621640 " lumina tag field category type int64 is not compatible with tag_schema value_type" );
@@ -629,7 +648,20 @@ TEST_F(LuminaGlobalIndexTest, TestTagSchemaValidation) {
629648 R"( [{"key_name":"price","type":"range","value_type":"double"}])" ;
630649 ASSERT_NOK_WITH_MSG (
631650 WriteGlobalIndex (index_root, double_tag_data_type, tag_options, array_, Range (0 , 3 )),
632- " lumina tag field price type double is not compatible with tag_schema value_type" );
651+ " Option extension.build.tag.tag_schema tag[0] range type does not support value_type "
652+ " 'double'" );
653+ }
654+ {
655+ std::shared_ptr<arrow::DataType> int64_tag_data_type =
656+ arrow::struct_ ({arrow::field (" f0" , arrow::list (arrow::float32 ())),
657+ arrow::field (" price" , arrow::int64 ())});
658+ std::map<std::string, std::string> tag_options = options_;
659+ tag_options[" lumina.extension.build.tag.tag_schema" ] =
660+ R"( [{"key_name":"price","type":"range","value_type":"int64"}])" ;
661+ ASSERT_NOK_WITH_MSG (
662+ WriteGlobalIndex (index_root, int64_tag_data_type, tag_options, array_, Range (0 , 3 )),
663+ " Option extension.build.tag.tag_schema tag[0] range type does not support value_type "
664+ " 'int64'" );
633665 }
634666}
635667
@@ -644,8 +676,8 @@ TEST_F(LuminaGlobalIndexTest, TestGetExtraFieldNames) {
644676 std::map<std::string, std::string> tag_options = options_;
645677 tag_options[" lumina.extension.build.tag.tag_schema" ] =
646678 R"( [{"key_name":"color","type":"enum","value_type":"string"},)"
647- R"( {"key_name":"price","type":"range","value_type":"double "},)"
648- R"( {"key_name":"category_ids","type":"enum","value_type":"int64 "}])" ;
679+ R"( {"key_name":"price","type":"range","value_type":"float "},)"
680+ R"( {"key_name":"category_ids","type":"enum","value_type":"int32 "}])" ;
649681 LuminaGlobalIndex global_index (tag_options);
650682 ASSERT_OK_AND_ASSIGN (std::optional<std::vector<std::string>> field_names,
651683 global_index.GetExtraFieldNames ());
0 commit comments