Пример #1
0
        public override Task <AggregateMetadata> GetAggregate(string keyspaceName, string aggregateName, string signatureString)
        {
            var query = string.Format(SelectAggregates, keyspaceName, aggregateName, signatureString);

            return(Cc
                   .QueryAsync(query, true)
                   .ContinueSync(rs =>
            {
                var row = rs.FirstOrDefault();
                if (row == null)
                {
                    return null;
                }

                var emptyArray = new string[0];
                var aggregate = new AggregateMetadata
                {
                    Name = row.GetValue <string>("aggregate_name"),
                    KeyspaceName = row.GetValue <string>("keyspace_name"),
                    Signature = row.GetValue <string[]>("signature") ?? emptyArray,
                    StateFunction = row.GetValue <string>("state_func"),
                    StateType = DataTypeParser.ParseFqTypeName(row.GetValue <string>("state_type")),
                    FinalFunction = row.GetValue <string>("final_func"),
                    ReturnType = DataTypeParser.ParseFqTypeName(row.GetValue <string>("return_type")),
                    ArgumentTypes = (row.GetValue <string[]>("argument_types") ?? emptyArray).Select(s => DataTypeParser.ParseFqTypeName(s)).ToArray(),
                };
                var initConditionRaw = Deserialize(Cc, row.GetValue <byte[]>("initcond"), aggregate.StateType.TypeCode, aggregate.StateType.TypeInfo);
                if (initConditionRaw != null)
                {
                    aggregate.InitialCondition = initConditionRaw.ToString();
                }
                return aggregate;
            }));
        }
Пример #2
0
        /// <summary>
        /// Gets a CQL aggregate by name and signature
        /// </summary>
        /// <returns>The aggregate metadata or null if not found.</returns>
        public AggregateMetadata GetAggregate(string aggregateName, string[] signature)
        {
            if (signature == null)
            {
                signature = new string[0];
            }
            AggregateMetadata aggregate;
            var key = GetFunctionKey(aggregateName, signature);

            if (_aggregates.TryGetValue(key, out aggregate))
            {
                return(aggregate);
            }
            var signatureString = "[" + String.Join(",", signature.Select(s => "'" + s + "'")) + "]";
            var query           = String.Format(SelectAggregates, Name, aggregateName, signatureString);
            var row             = _cc.Query(query, true).FirstOrDefault();

            if (row == null)
            {
                return(null);
            }
            aggregate = AggregateMetadata.Build(_cc.ProtocolVersion, row);
            _aggregates.AddOrUpdate(key, aggregate, (k, v) => aggregate);
            return(aggregate);
        }
Пример #3
0
        /// <summary>
        /// Creates a new instance of function metadata based on a schema_function row.
        /// </summary>
        internal static AggregateMetadata Build(int protocolVersion, Row row)
        {
            var emptyArray = new string[0];
            var aggregate  = new AggregateMetadata
            {
                Name          = row.GetValue <string>("aggregate_name"),
                KeyspaceName  = row.GetValue <string>("keyspace_name"),
                Signature     = row.GetValue <string[]>("signature") ?? emptyArray,
                StateFunction = row.GetValue <string>("state_func"),
                StateType     = TypeCodec.ParseDataType(row.GetValue <string>("state_type")),
                FinalFunction = row.GetValue <string>("final_func"),
                ReturnType    = TypeCodec.ParseDataType(row.GetValue <string>("return_type")),
                ArgumentTypes = (row.GetValue <string[]>("argument_types") ?? emptyArray).Select(s => TypeCodec.ParseDataType(s)).ToArray(),
            };

            aggregate.InitialCondition = TypeCodec.Decode(protocolVersion, row.GetValue <byte[]>("initcond"), aggregate.StateType.TypeCode, aggregate.StateType.TypeInfo);
            return(aggregate);
        }
 /// <summary>
 /// Creates a new instance of function metadata based on a schema_function row.
 /// </summary>
 internal static AggregateMetadata Build(int protocolVersion, Row row)
 {
     var emptyArray = new string[0];
     var aggregate = new AggregateMetadata
     {
         Name = row.GetValue<string>("aggregate_name"),
         KeyspaceName = row.GetValue<string>("keyspace_name"),
         Signature = row.GetValue<string[]>("signature") ?? emptyArray,
         StateFunction = row.GetValue<string>("state_func"),
         StateType = TypeCodec.ParseDataType(row.GetValue<string>("state_type")),
         FinalFunction = row.GetValue<string>("final_func"),
         ReturnType = TypeCodec.ParseDataType(row.GetValue<string>("return_type")),
         ArgumentTypes = (row.GetValue<string[]>("argument_types") ?? emptyArray).Select(s => TypeCodec.ParseDataType(s)).ToArray(),
     };
     aggregate.InitialCondition = TypeCodec.Decode(protocolVersion, row.GetValue<byte[]>("initcond"), aggregate.StateType.TypeCode, aggregate.StateType.TypeInfo);
     return aggregate;
 }