Esempio n. 1
0
        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);
                }
            }
                       ));
        }
Esempio n. 2
0
        /// <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));
        }