/// <summary> /// Lookup record by address /// </summary> /// <param name="address"></param> /// <param name="type"></param> /// <param name="ct"></param> /// <returns></returns> public async Task <IEnumerable <INameRecord> > LookupAsync(Reference address, NameRecordType type, CancellationToken ct) { if (address == null || address == Reference.Null) { throw new ArgumentException(nameof(address)); } var sql = new StringBuilder("SELECT * FROM devices WHERE "); if (address != Reference.All) { sql.Append("tags.address = '"); sql.Append(address.ToString().ToLower()); sql.Append("' AND "); } sql.Append(IoTHubRecord.CreateTypeQueryString(type)); return(await LookupAsync(sql.ToString(), ct).ConfigureAwait(false)); }
/// <summary> /// Lookup record by record type /// </summary> /// <param name="name"></param> /// <param name="type"></param> /// <param name="ct"></param> /// <returns></returns> public async Task <IEnumerable <INameRecord> > LookupAsync(string name, NameRecordType type, CancellationToken ct) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException(nameof(name)); } name = name.ToLowerInvariant(); if (NameRecordType.Host == (type & NameRecordType.Host)) { // Use cache to look up a host record INameRecord record; if (_cache.TryGetValue(name, out record) && record.References.Any()) { return(new NameRecord(record).AsEnumerable()); } } var sql = new StringBuilder("SELECT * FROM devices WHERE "); sql.Append("(deviceId = '"); sql.Append(name); if (NameRecordType.Proxy == (type & NameRecordType.Proxy)) { sql.Append("' OR tags.name = '"); sql.Append(name); } Reference address; if (Reference.TryParse(name, out address)) { sql.Append("' OR tags.address = '"); sql.Append(address.ToString().ToLower()); } sql.Append("') AND "); sql.Append(IoTHubRecord.CreateTypeQueryString(type)); return(await LookupAsync(sql.ToString(), ct).ConfigureAwait(false)); }