public void InsertSubFingerprints(IEnumerable <SubFingerprintData> subFingerprints) { using var tx = databaseContext.OpenReadWriteTransaction(); foreach (var subFingerprint in subFingerprints) { var subFingerprintDto = new SubFingerprintDataDTO(subFingerprint); tx.PutSubFingerprint(subFingerprintDto); } }
public void RemoveSubFingerprint(SubFingerprintDataDTO subFingerprintDataDTO) { var subFingerprintKey = BitConverter.GetBytes(subFingerprintDataDTO.SubFingerprintReference).AsMemory(); using (subFingerprintKey.Pin()) { var keyBuffer = new DirectBuffer(subFingerprintKey.Span); databasesHolder.SubFingerprintsDatabase.Delete(tx, ref keyBuffer); var trackKey = BitConverter.GetBytes(subFingerprintDataDTO.TrackReference).AsMemory(); using (trackKey.Pin()) { var trackKeyBuffer = new DirectBuffer(trackKey.Span); using var cursor = indexesHolder.TracksSubfingerprintsIndex.OpenCursor(tx); if (cursor.TryGet(ref trackKeyBuffer, ref keyBuffer, CursorGetOption.GetBoth)) { cursor.Delete(false); } } } }
public IEnumerable <SubFingerprintData> InsertHashDataForTrack(IEnumerable <HashedFingerprint> hashedFingerprints, IModelReference trackReference) { using var tx = databaseContext.OpenReadWriteTransaction(); var trackId = trackReference.Get <ulong>(); var trackData = tx.GetTrackById(trackId); if (trackData == null) { throw new TrackNotFoundException(trackId); } var newSubFingerprintId = tx.GetLastSubFingerprintId(); var result = new List <SubFingerprintData>(); foreach (var hashedFingerprint in hashedFingerprints) { newSubFingerprintId++; var subFingerprintReference = new ModelReference <ulong>(newSubFingerprintId); var subFingerprint = new SubFingerprintDataDTO(hashedFingerprint.HashBins, hashedFingerprint.SequenceNumber, hashedFingerprint.StartsAt, subFingerprintReference, trackReference); tx.PutSubFingerprint(subFingerprint); // Insert hashes to hashTable var table = 0; foreach (var hash in hashedFingerprint.HashBins) { tx.PutSubFingerprintsByHashTableAndHash(table, hash, newSubFingerprintId); table++; } result.Add(subFingerprint.ToSubFingerprintData()); } tx.Commit(); return(result); }
public void PutSubFingerprint(SubFingerprintDataDTO subFingerprintDataDTO) { var subFingerprintKey = BitConverter.GetBytes(subFingerprintDataDTO.SubFingerprintReference).AsMemory(); var subFingerprintValue = MessagePackSerializer.Serialize(subFingerprintDataDTO, options: serializerOptions).AsMemory(); using (subFingerprintKey.Pin()) { var subFingerprintKeyBuffer = new DirectBuffer(subFingerprintKey.Span); using (subFingerprintValue.Pin()) { var valueBuffer = new DirectBuffer(subFingerprintValue.Span); databasesHolder.SubFingerprintsDatabase.Put(tx, ref subFingerprintKeyBuffer, ref valueBuffer); } var trackKey = BitConverter.GetBytes(subFingerprintDataDTO.TrackReference).AsMemory(); using (trackKey.Pin()) { var trackKeyBuffer = new DirectBuffer(trackKey.Span); indexesHolder.TracksSubfingerprintsIndex.Put(tx, ref trackKeyBuffer, ref subFingerprintKeyBuffer); } } }