/// <summary> /// Builds a cell or row query URI. /// </summary> /// <param name="query"></param> public string BuildCellOrRowQuery(CellQuery query) { if (!query.CanDescribeTable()) { throw new ArgumentException(Resources.ResourceBuilder_MinimumForCellOrRowQueryNotMet); } return BuildFromCellQuery(query).ToString(); }
private static StringBuilder BuildFromCellQuery(CellQuery query) { bool hasTimestamp = query.EndTimestamp.HasValue && (!query.BeginTimestamp.HasValue || query.BeginTimestamp.Value < query.EndTimestamp.Value); StringBuilder uriBuilder = BuildFromDescriptor(query); bool columnsMissing = query.Cells == null || query.Cells.All(cell => string.IsNullOrEmpty(cell.Column)); if (columnsMissing && !hasTimestamp) { return SetMaxVersions(query.MaxVersions, uriBuilder); } if (!columnsMissing) { HBaseCellDescriptor[] validCells = query.Cells.Where(cell => !string.IsNullOrEmpty(cell.Column)).ToArray(); HBaseCellDescriptor firstCell = validCells.First(); uriBuilder.AppendFormat(_appendSegmentFormat, firstCell.Column); if (!string.IsNullOrEmpty(firstCell.Qualifier)) { uriBuilder.AppendFormat(_appendQualifierFormat, firstCell.Qualifier); } foreach (HBaseCellDescriptor cell in validCells.Skip(1)) { uriBuilder.AppendFormat(_appendRangeFormat, cell.Column); if (!string.IsNullOrEmpty(cell.Qualifier)) { uriBuilder.AppendFormat(_appendQualifierFormat, cell.Qualifier); } } } else { uriBuilder.AppendFormat(_appendSegmentFormat, _wildCard); } if (hasTimestamp) { if (query.BeginTimestamp.HasValue) { uriBuilder.AppendFormat(_appendSegmentFormat, query.BeginTimestamp); uriBuilder.AppendFormat(_appendRangeFormat, query.EndTimestamp); } else { uriBuilder.AppendFormat(_appendSegmentFormat, query.EndTimestamp); } } return SetMaxVersions(query.MaxVersions, uriBuilder); }
/// <summary> /// Finds the cells matching the query. /// </summary> /// <param name="query"></param> public CellSet FindCells(CellQuery query) { string resource = _resourceBuilder.BuildCellOrRowQuery(query); IRestResponse response = SendRequest(Method.GET, resource, Options.ContentType); _errorProvider.ThrowIfStatusMismatch(response, HttpStatusCode.OK, HttpStatusCode.NotFound); var set = new CellSet { Table = query.Table }; if (response.StatusCode == HttpStatusCode.OK) set.AddRange(_converter.ConvertCells(response.Content, query.Table)); return set; }