/// <summary> /// Gets the pip stored based on the pip id /// </summary> /// <returns>Returns null if no such pip is found</returns> public IMessage GetPipByPipId(uint pipId, out PipType pipType) { Contract.Requires(Accessor != null, "XldbStore must be initialized via OpenDatastore first"); IMessage foundPip = null; var pipQuery = new PipQueryPipId() { PipId = pipId }; PipType outPipType = 0; var maybeFound = Accessor.Use(database => { foreach (var kvp in database.PrefixSearch(pipQuery.ToByteArray(), PipColumnFamilyName)) { var pipKey = PipQueryPipId.Parser.ParseFrom(kvp.Key); if (m_pipParserDictionary.TryGetValue(pipKey.PipType, out var parser)) { foundPip = parser.ParseFrom(kvp.Value); outPipType = pipKey.PipType; } } }); if (!maybeFound.Succeeded) { maybeFound.Failure.Throw(); } pipType = outPipType; return(foundPip); }
/// <summary> /// Gets the pip stored based on the semistable hash /// </summary> /// <returns>Returns null if no such pip is found</returns> public IMessage GetPipBySemiStableHash(long semiStableHash, out PipType pipType) { Contract.Requires(Accessor != null, "XldbStore must be initialized via OpenDatastore first"); IMessage foundPip = null; var pipQuery = new PipQuerySemiStableHash() { SemiStableHash = semiStableHash }; PipType outPipType = 0; var maybeFound = Accessor.Use(database => { if (database.TryGetValue(pipQuery.ToByteArray(), out var pipValueSemistableHash, PipColumnFamilyName)) { foundPip = GetPipByPipId(PipValueSemiStableHash.Parser.ParseFrom(pipValueSemistableHash).PipId, out outPipType); } }); if (!maybeFound.Succeeded) { maybeFound.Failure.Throw(); } pipType = outPipType; return(foundPip); }