@@ -65,7 +65,6 @@ static_assert(
65
65
);
66
66
67
67
irs::string_ref const CID_FIELD (" @_CID" );
68
- irs::string_ref const RID_FIELD (" @_REV" );
69
68
irs::string_ref const PK_COLUMN (" @_PK" );
70
69
71
70
// wrapper for use objects with the IResearch unbounded_object_pool
@@ -370,19 +369,6 @@ bool setStringValue(
370
369
return true ;
371
370
}
372
371
373
- void setIdValue (
374
- uint64_t & value,
375
- irs::token_stream& analyzer
376
- ) {
377
- #ifdef ARANGODB_ENABLE_MAINTAINER_MODE
378
- auto & sstream = dynamic_cast <irs::string_token_stream&>(analyzer);
379
- #else
380
- auto & sstream = static_cast <irs::string_token_stream&>(analyzer);
381
- #endif
382
-
383
- sstream.reset (arangodb::iresearch::DocumentPrimaryKey::encode (value));
384
- }
385
-
386
372
NS_END
387
373
388
374
NS_BEGIN (arangodb)
@@ -392,36 +378,62 @@ NS_BEGIN(iresearch)
392
378
// --SECTION-- Field implementation
393
379
// ----------------------------------------------------------------------------
394
380
395
- /* static*/ void Field::setCidValue(Field& field, TRI_voc_cid_t& cid) {
381
+ /* static*/ void Field::setCidValue(
382
+ Field& field,
383
+ TRI_voc_cid_t const & cid
384
+ ) {
385
+ TRI_ASSERT (field._analyzer );
386
+
387
+ irs::bytes_ref const cidRef (
388
+ reinterpret_cast <irs::byte_type const *>(&cid),
389
+ sizeof (TRI_voc_cid_t)
390
+ );
391
+
396
392
field._name = CID_FIELD;
397
- setIdValue (cid, *field._analyzer );
398
393
field._features = &irs::flags::empty_instance ();
394
+ #ifdef ARANGODB_ENABLE_MAINTAINER_MODE
395
+ auto & sstream = dynamic_cast <irs::string_token_stream&>(*field._analyzer );
396
+ #else
397
+ auto & sstream = static_cast <irs::string_token_stream&>(*field._analyzer );
398
+ #endif
399
+ sstream.reset (cidRef);
399
400
}
400
401
401
402
/* static*/ void Field::setCidValue (
402
403
Field& field,
403
- TRI_voc_cid_t& cid,
404
+ TRI_voc_cid_t const & cid,
404
405
Field::init_stream_t
405
406
) {
406
407
field._analyzer = StringStreamPool.emplace ().release (); // FIXME don't use shared_ptr
407
408
setCidValue (field, cid);
408
409
}
409
410
410
- /* static*/ void Field::setRidValue (Field& field, TRI_voc_rid_t& rid) {
411
- field._name = RID_FIELD;
412
- setIdValue (rid, *field._analyzer );
411
+ /* static*/ void Field::setPkValue (
412
+ Field& field,
413
+ DocumentPrimaryKey const & pk
414
+ ) {
415
+ field._name = PK_COLUMN;
413
416
field._features = &irs::flags::empty_instance ();
417
+ field._storeValues = ValueStorage::FULL;
418
+ field._value = static_cast <irs::bytes_ref>(pk);
419
+ #ifdef ARANGODB_ENABLE_MAINTAINER_MODE
420
+ auto & sstream = dynamic_cast <irs::string_token_stream&>(*field._analyzer );
421
+ #else
422
+ auto & sstream = static_cast <irs::string_token_stream&>(*field._analyzer );
423
+ #endif
424
+ sstream.reset (field._value );
414
425
}
415
426
416
- /* static*/ void Field::setRidValue (
427
+ /* static*/ void Field::setPkValue (
417
428
Field& field,
418
- TRI_voc_rid_t& rid ,
429
+ DocumentPrimaryKey const & pk ,
419
430
Field::init_stream_t
420
431
) {
421
432
field._analyzer = StringStreamPool.emplace ().release (); // FIXME don't use shared_ptr
422
- setRidValue (field, rid );
433
+ setPkValue (field, pk );
423
434
}
424
435
436
+
425
437
Field::Field (Field&& rhs)
426
438
: _features(rhs._features),
427
439
_analyzer(std::move(rhs._analyzer)),
@@ -632,10 +644,6 @@ void FieldIterator::next() {
632
644
return CID_FIELD;
633
645
}
634
646
635
- /* static */ irs::string_ref const & DocumentPrimaryKey::RID () {
636
- return RID_FIELD;
637
- }
638
-
639
647
/* static */ bool DocumentPrimaryKey::decode (
640
648
uint64_t & buf, const irs::bytes_ref& value
641
649
) {
@@ -671,6 +679,12 @@ DocumentPrimaryKey::DocumentPrimaryKey(
671
679
) noexcept
672
680
: _keys{ cid, rid } {
673
681
static_assert (sizeof (_keys) == sizeof (cid) + sizeof (rid), " Invalid size" );
682
+
683
+ // ensure little endian
684
+ if (irs::numeric_utils::is_big_endian ()) {
685
+ _keys[0 ] = Swap8Bytes (_keys[0 ]);
686
+ _keys[1 ] = Swap8Bytes (_keys[1 ]);
687
+ }
674
688
}
675
689
676
690
bool DocumentPrimaryKey::read (irs::bytes_ref const & in) noexcept {
@@ -683,15 +697,6 @@ bool DocumentPrimaryKey::read(irs::bytes_ref const& in) noexcept {
683
697
return true ;
684
698
}
685
699
686
- bool DocumentPrimaryKey::write (irs::data_output& out) const {
687
- out.write_bytes (
688
- reinterpret_cast <const irs::byte_type*>(_keys),
689
- sizeof (_keys)
690
- );
691
-
692
- return true ;
693
- }
694
-
695
700
bool appendKnownCollections (
696
701
std::unordered_set<TRI_voc_cid_t>& set,
697
702
const irs::index_reader& reader
0 commit comments