Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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));
        }