@@ -45,6 +45,7 @@ using testutil::BsonBinaryData;
45
45
using testutil::BsonObjectId;
46
46
using testutil::BsonTimestamp;
47
47
using testutil::CollectionGroupQuery;
48
+ using testutil::Decimal128;
48
49
using testutil::DeletedDoc;
49
50
using testutil::Doc;
50
51
using testutil::Filter;
@@ -1276,6 +1277,88 @@ TEST_F(LevelDbIndexManagerTest, IndexInt32Fields) {
1276
1277
});
1277
1278
}
1278
1279
1280
+ TEST_F (LevelDbIndexManagerTest, IndexDecimal128Fields) {
1281
+ persistence_->Run (" TestIndexDecimal128Fields" , [&]() {
1282
+ index_manager_->Start ();
1283
+ index_manager_->AddFieldIndex (
1284
+ MakeFieldIndex (" coll" , " key" , model::Segment::kAscending ));
1285
+
1286
+ AddDoc (" coll/doc1" , Map (" key" , Decimal128 (" -Infinity" )));
1287
+ AddDoc (" coll/doc2" , Map (" key" , Decimal128 (" -0.0" )));
1288
+ AddDoc (" coll/doc3" , Map (" key" , Decimal128 (" 0" )));
1289
+ AddDoc (" coll/doc4" , Map (" key" , Decimal128 (" 1.3e-3" )));
1290
+ AddDoc (" coll/doc5" , Map (" key" , Decimal128 (" 1.2e3" )));
1291
+ AddDoc (" coll/doc6" , Map (" key" , Decimal128 (" Infinity" )));
1292
+ AddDoc (" coll/doc7" , Map (" key" , Decimal128 (" NaN" )));
1293
+
1294
+ auto base_query = Query (" coll" ).AddingOrderBy (OrderBy (" key" ));
1295
+
1296
+ {
1297
+ SCOPED_TRACE (" no filter" );
1298
+ VerifyResults (base_query, {
1299
+ " coll/doc7" ,
1300
+ " coll/doc1" ,
1301
+ " coll/doc2" ,
1302
+ " coll/doc3" ,
1303
+ " coll/doc4" ,
1304
+ " coll/doc5" ,
1305
+ " coll/doc6"
1306
+ });
1307
+ }
1308
+ {
1309
+ SCOPED_TRACE (" Query Decimal128 with EqualTo filter" );
1310
+ auto query = base_query.AddingFilter (Filter (" key" , " ==" , Decimal128 (" 1200" )));
1311
+ VerifyResults (query, {" coll/doc5" });
1312
+ }
1313
+ {
1314
+ SCOPED_TRACE (" Query Decimal128 with NotEqualTo filter" );
1315
+ auto query = base_query.AddingFilter (Filter (" key" , " !=" , Decimal128 (" 0" )));
1316
+ VerifyResults (query, {
1317
+ " coll/doc7" ,
1318
+ " coll/doc1" ,
1319
+ " coll/doc4" ,
1320
+ " coll/doc5" ,
1321
+ " coll/doc6"
1322
+ });
1323
+ }
1324
+ {
1325
+ SCOPED_TRACE (" Query Decimal128 with GreaterThanOrEqualTo filter" );
1326
+ auto query = base_query.AddingFilter (Filter (" key" , " >=" , Decimal128 (" 0.12e4" )));
1327
+ VerifyResults (query, {" coll/doc5" , " coll/doc6" });
1328
+ }
1329
+ {
1330
+ SCOPED_TRACE (" Query Decimal128 with LessThanOrEqualTo filter" );
1331
+ auto query = base_query.AddingFilter (Filter (" key" , " <=" , Decimal128 (" 0.0" )));
1332
+ VerifyResults (query, {
1333
+ " coll/doc7" ,
1334
+ " coll/doc1" ,
1335
+ " coll/doc2" ,
1336
+ " coll/doc3"
1337
+ });
1338
+ }
1339
+ {
1340
+ SCOPED_TRACE (" Query Decimal128 with GreaterThan filter" );
1341
+ auto query = base_query.AddingFilter (Filter (" key" , " >" , Decimal128 (" 1200" )));
1342
+ VerifyResults (query, {" coll/doc6" });
1343
+ }
1344
+ {
1345
+ SCOPED_TRACE (" Query Decimal128 with LessThan filter" );
1346
+ auto query = base_query.AddingFilter (Filter (" key" , " <" , Decimal128 (" -Infinity" )));
1347
+ VerifyResults (query, {" coll/doc7" });
1348
+ }
1349
+ {
1350
+ SCOPED_TRACE (" Query Decimal128 with GreaterThan filter and empty result set" );
1351
+ auto query = base_query.AddingFilter (Filter (" key" , " >" , Decimal128 (" Infinity" )));
1352
+ VerifyResults (query, {});
1353
+ }
1354
+ {
1355
+ SCOPED_TRACE (" Query Decimal128 with LessThan filter and empty result set" );
1356
+ auto query = base_query.AddingFilter (Filter (" key" , " <" , Decimal128 (" NaN" )));
1357
+ VerifyResults (query, {});
1358
+ }
1359
+ });
1360
+ }
1361
+
1279
1362
TEST_F (LevelDbIndexManagerTest, IndexRegexFields) {
1280
1363
persistence_->Run (" TestIndexRegexFields" , [&]() {
1281
1364
index_manager_->Start ();
@@ -1450,23 +1533,45 @@ TEST_F(LevelDbIndexManagerTest, IndexBsonTypesTogether) {
1450
1533
MakeFieldIndex (" coll" , " key" , model::Segment::kDescending ));
1451
1534
1452
1535
AddDoc (" coll/doc1" , Map (" key" , MinKey ()));
1453
- AddDoc (" coll/doc2" , Map (" key" , Int32 (2 )));
1454
- AddDoc (" coll/doc3" , Map (" key" , Int32 (1 )));
1455
- AddDoc (" coll/doc4" , Map (" key" , BsonTimestamp (1 , 2 )));
1456
- AddDoc (" coll/doc5" , Map (" key" , BsonTimestamp (1 , 1 )));
1457
- AddDoc (" coll/doc6" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 4 })));
1458
- AddDoc (" coll/doc7" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 3 })));
1459
- AddDoc (" coll/doc8" , Map (" key" , BsonObjectId (" 507f191e810c19729de860eb" )));
1460
- AddDoc (" coll/doc9" , Map (" key" , BsonObjectId (" 507f191e810c19729de860ea" )));
1461
- AddDoc (" coll/doc10" , Map (" key" , Regex (" a" , " m" )));
1462
- AddDoc (" coll/doc11" , Map (" key" , Regex (" a" , " i" )));
1463
- AddDoc (" coll/doc12" , Map (" key" , MaxKey ()));
1536
+ AddDoc (" coll/doc2" , Map (" key" , Decimal128 (" NaN" )));
1537
+ AddDoc (" coll/doc3" , Map (" key" , Decimal128 (" -Infinity" )));
1538
+ AddDoc (" coll/doc4" , Map (" key" , Decimal128 (" Infinity" )));
1539
+ AddDoc (" coll/doc5" , Map (" key" , Decimal128 (" 0" )));
1540
+ AddDoc (" coll/doc6" , Map (" key" , Decimal128 (" -1.2e3" )));
1541
+ AddDoc (" coll/doc7" , Map (" key" , Decimal128 (" 2.3e-4" )));
1542
+ AddDoc (" coll/doc8" , Map (" key" , Int32 (2 )));
1543
+ AddDoc (" coll/doc9" , Map (" key" , Int32 (1 )));
1544
+ AddDoc (" coll/doc10" , Map (" key" , BsonTimestamp (1 , 2 )));
1545
+ AddDoc (" coll/doc11" , Map (" key" , BsonTimestamp (1 , 1 )));
1546
+ AddDoc (" coll/doc12" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 4 })));
1547
+ AddDoc (" coll/doc13" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 3 })));
1548
+ AddDoc (" coll/doc14" , Map (" key" , BsonObjectId (" 507f191e810c19729de860eb" )));
1549
+ AddDoc (" coll/doc15" , Map (" key" , BsonObjectId (" 507f191e810c19729de860ea" )));
1550
+ AddDoc (" coll/doc16" , Map (" key" , Regex (" a" , " m" )));
1551
+ AddDoc (" coll/doc17" , Map (" key" , Regex (" a" , " i" )));
1552
+ AddDoc (" coll/doc18" , Map (" key" , MaxKey ()));
1464
1553
1465
1554
auto query = Query (" coll" ).AddingOrderBy (OrderBy (" key" , " desc" ));
1466
1555
1467
- VerifyResults (query, {" coll/doc12" , " coll/doc10" , " coll/doc11" , " coll/doc8" ,
1468
- " coll/doc9" , " coll/doc6" , " coll/doc7" , " coll/doc4" ,
1469
- " coll/doc5" , " coll/doc2" , " coll/doc3" , " coll/doc1" });
1556
+ VerifyResults (query, {
1557
+ " coll/doc18" ,
1558
+ " coll/doc16" ,
1559
+ " coll/doc17" ,
1560
+ " coll/doc14" ,
1561
+ " coll/doc15" ,
1562
+ " coll/doc12" ,
1563
+ " coll/doc13" ,
1564
+ " coll/doc10" ,
1565
+ " coll/doc11" ,
1566
+ " coll/doc4" ,
1567
+ " coll/doc8" ,
1568
+ " coll/doc9" ,
1569
+ " coll/doc7" ,
1570
+ " coll/doc5" ,
1571
+ " coll/doc6" ,
1572
+ " coll/doc3" ,
1573
+ " coll/doc2" ,
1574
+ " coll/doc1" });
1470
1575
});
1471
1576
}
1472
1577
@@ -1476,33 +1581,62 @@ TEST_F(LevelDbIndexManagerTest, IndexAllTypesTogether) {
1476
1581
index_manager_->AddFieldIndex (
1477
1582
MakeFieldIndex (" coll" , " key" , model::Segment::kDescending ));
1478
1583
1479
- AddDoc (" coll/a" , Map (" key" , nullptr ));
1480
- AddDoc (" coll/b" , Map (" key" , MinKey ()));
1481
- AddDoc (" coll/c" , Map (" key" , true ));
1482
- AddDoc (" coll/d" , Map (" key" , std::numeric_limits<double >::quiet_NaN ()));
1483
- AddDoc (" coll/e" , Map (" key" , Int32 (1 )));
1484
- AddDoc (" coll/f" , Map (" key" , 2.0 ));
1485
- AddDoc (" coll/g" , Map (" key" , 3 ));
1486
- AddDoc (" coll/h" , Map (" key" , Timestamp (100 , 123456000 )));
1487
- AddDoc (" coll/i" , Map (" key" , BsonTimestamp (1 , 2 )));
1488
- AddDoc (" coll/j" , Map (" key" , " string" ));
1489
- AddDoc (" coll/k" , Map (" key" , BlobValue (0 , 1 , 255 )));
1490
- AddDoc (" coll/l" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 3 })));
1491
- AddDoc (" coll/m" , Map (" key" , Ref (" project" , " coll/doc" )));
1492
- AddDoc (" coll/n" , Map (" key" , BsonObjectId (" 507f191e810c19729de860ea" )));
1493
- AddDoc (" coll/o" , Map (" key" , GeoPoint (0 , 1 )));
1494
- AddDoc (" coll/p" , Map (" key" , Regex (" ^foo" , " i" )));
1495
- AddDoc (" coll/q" , Map (" key" , Array (1 , 2 )));
1496
- AddDoc (" coll/r" , Map (" key" , VectorType (1 , 2 )));
1497
- AddDoc (" coll/s" , Map (" key" , Map (" a" , 1 )));
1498
- AddDoc (" coll/t" , Map (" key" , MaxKey ()));
1584
+ AddDoc (" coll/doc1" , Map (" key" , nullptr ));
1585
+ AddDoc (" coll/doc2" , Map (" key" , MinKey ()));
1586
+ AddDoc (" coll/doc3" , Map (" key" , true ));
1587
+ AddDoc (" coll/doc4" , Map (" key" , std::numeric_limits<double >::quiet_NaN ()));
1588
+ AddDoc (" coll/doc5" , Map (" key" , Decimal128 (" NaN" )));
1589
+ AddDoc (" coll/doc6" , Map (" key" , Decimal128 (" -Infinifty" )));
1590
+ AddDoc (" coll/doc7" , Map (" key" , Decimal128 (" -1.2e-3" )));
1591
+ AddDoc (" coll/doc8" , Map (" key" , Decimal128 (" 0" )));
1592
+ AddDoc (" coll/doc9" , Map (" key" , Int32 (1 )));
1593
+ AddDoc (" coll/doc10" , Map (" key" , 2.0 ));
1594
+ AddDoc (" coll/doc11" , Map (" key" , 3 ));
1595
+ AddDoc (" coll/doc12" , Map (" key" , Decimal128 (" 2.3e4" )));
1596
+ AddDoc (" coll/doc13" , Map (" key" , Decimal128 (" Infinifty" )));
1597
+ AddDoc (" coll/doc14" , Map (" key" , Timestamp (100 , 123456000 )));
1598
+ AddDoc (" coll/doc15" , Map (" key" , BsonTimestamp (1 , 2 )));
1599
+ AddDoc (" coll/doc16" , Map (" key" , " string" ));
1600
+ AddDoc (" coll/doc17" , Map (" key" , BlobValue (0 , 1 , 255 )));
1601
+ AddDoc (" coll/doc18" , Map (" key" , BsonBinaryData (1 , {1 , 2 , 3 })));
1602
+ AddDoc (" coll/doc19" , Map (" key" , Ref (" project" , " coll/doc" )));
1603
+ AddDoc (" coll/doc20" , Map (" key" , BsonObjectId (" 507f191e810c19729de860ea" )));
1604
+ AddDoc (" coll/doc21" , Map (" key" , GeoPoint (0 , 1 )));
1605
+ AddDoc (" coll/doc22" , Map (" key" , Regex (" ^foo" , " i" )));
1606
+ AddDoc (" coll/doc23" , Map (" key" , Array (1 , 2 )));
1607
+ AddDoc (" coll/doc24" , Map (" key" , VectorType (1 , 2 )));
1608
+ AddDoc (" coll/doc25" , Map (" key" , Map (" a" , 1 )));
1609
+ AddDoc (" coll/doc26" , Map (" key" , MaxKey ()));
1499
1610
1500
1611
auto query = Query (" coll" ).AddingOrderBy (OrderBy (" key" , " desc" ));
1501
1612
1502
- VerifyResults (query, {" coll/t" , " coll/s" , " coll/r" , " coll/q" , " coll/p" ,
1503
- " coll/o" , " coll/n" , " coll/m" , " coll/l" , " coll/k" ,
1504
- " coll/j" , " coll/i" , " coll/h" , " coll/g" , " coll/f" ,
1505
- " coll/e" , " coll/d" , " coll/c" , " coll/b" , " coll/a" });
1613
+ VerifyResults (query, {
1614
+ " coll/doc26" ,
1615
+ " coll/doc25" ,
1616
+ " coll/doc24" ,
1617
+ " coll/doc23" ,
1618
+ " coll/doc22" ,
1619
+ " coll/doc21" ,
1620
+ " coll/doc20" ,
1621
+ " coll/doc19" ,
1622
+ " coll/doc18" ,
1623
+ " coll/doc17" ,
1624
+ " coll/doc16" ,
1625
+ " coll/doc15" ,
1626
+ " coll/doc14" ,
1627
+ " coll/doc13" ,
1628
+ " coll/doc12" ,
1629
+ " coll/doc11" ,
1630
+ " coll/doc10" ,
1631
+ " coll/doc9" ,
1632
+ " coll/doc8" ,
1633
+ " coll/doc7" ,
1634
+ " coll/doc6" ,
1635
+ " coll/doc5" ,
1636
+ " coll/doc4" ,
1637
+ " coll/doc3" ,
1638
+ " coll/doc2" ,
1639
+ " coll/doc1" });
1506
1640
});
1507
1641
}
1508
1642
0 commit comments