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; })); }
/// <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); }
/// <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; }