private CommandPool <ContentHashListWithDeterminism> CreateGetContentHashListCommandPool() { return(new CommandPool <ContentHashListWithDeterminism>( Connection, #pragma warning disable SA1118 // Parameter must not span multiple lines "SELECT Payload, Determinism, SerializedDeterminism, ContentHashList FROM ContentHashLists" + " WHERE WeakFingerprint=@weakFingerprint" + " AND SelectorContentHash=@selectorContentHash" + " AND SelectorOutput=@selectorOutput", #pragma warning restore SA1118 // Parameter must not span multiple lines async command => { await Task.Yield(); using (SQLiteDataReader reader = command.ExecuteReader()) { if (await reader.ReadAsync()) { var payloadObject = reader["Payload"]; var contentHashList = ContentHashList.Deserialize( (string)reader["ContentHashList"], payloadObject == DBNull.Value ? null : (byte[])payloadObject); var serializedDeterminismObject = reader["SerializedDeterminism"]; var determinism = ReadDeterminism( serializedDeterminismObject == DBNull.Value ? null : (byte[])serializedDeterminismObject, (byte[])reader["Determinism"]); Contract.Assert(!reader.Read()); return new ContentHashListWithDeterminism(contentHashList, determinism); } return new ContentHashListWithDeterminism(null, CacheDeterminism.None); } } )); }
/// <inheritdoc /> public ContentHashListWithDeterminism AsContentHashList(RedisValue value) { const int partCount = 5; var parts = value.ToString().Split(new[] { RedisValueSeparator }, partCount, StringSplitOptions.None); Contract.Assert(parts.Length == partCount); var determinism = CacheDeterminism.Deserialize(HexUtilities.HexToBytes(parts[0])); var payload = parts[3] == RedisValueExistsSemaphore?HexUtilities.HexToBytes(parts[4]) : null; var hashList = parts[1] == RedisValueExistsSemaphore?ContentHashList.Deserialize(parts[2], payload) : null; return(new ContentHashListWithDeterminism(hashList, determinism)); }