private Search SearchShards(string sessionId) { QueryFilter filter = new QueryFilter(); filter.AddCondition(ATTRIBUTE_SEQUENCE_ID, QueryOperator.GreaterThan, 0); filter.AddCondition(ATTRIBUTE_SESSION_ID, QueryOperator.Equal, GetHashKey(sessionId)); QueryOperationConfig config = new QueryOperationConfig(); config.AttributesToGet = new List<string> { ATTRIBUTE_SESSION_ID, ATTRIBUTE_SEQUENCE_ID }; config.Select = SelectValues.SpecificAttributes; config.Filter = filter; Search search = this._table.Query(config); return search; }
/// <summary> /// Initiates a Search object to Query a DynamoDB table, with the /// specified config. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="config">Configuration to use.</param> /// <returns>Resultant Search container.</returns> public Search Query(QueryOperationConfig config) { if (config == null) { throw new ArgumentNullException("config"); } Search ret = new Search(SearchType.Query) { SourceTable = this, TableName = TableName, AttributesToGet = config.AttributesToGet, Filter = config.Filter, KeyExpression = config.KeyExpression, FilterExpression = config.FilterExpression, ConditionalOperator = config.ConditionalOperator, Limit = config.Limit, IsConsistentRead = config.ConsistentRead, IsBackwardSearch = config.BackwardSearch, IndexName = config.IndexName, Select = config.Select, CollectResults = config.CollectResults, PaginationToken = config.PaginationToken }; return(ret); }
/// <summary> /// Initiates a Search object to Query a DynamoDB table, with the /// specified hash primary key and expression. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="hashKey">Value of the hash key for the query operation.</param> /// <param name="filterExpression">Expression to use.</param> /// <returns>Resultant Search container.</returns> public Search Query(Primitive hashKey, Expression filterExpression) { string hashKeyName = this.HashKeys[0]; QueryFilter hashKeyFilter = new QueryFilter(); hashKeyFilter.AddCondition(hashKeyName, QueryOperator.Equal, hashKey); QueryOperationConfig config = new QueryOperationConfig { Filter = hashKeyFilter, FilterExpression = filterExpression }; return(Query(config)); }
private bool TryExecuteQuery(TranslationResult translationResult, Type entityType, out object resultingReader) { resultingReader = null; QueryFilter queryFilter; string indexName; // if we failed to compose a query with table's keys and local secondary indexes if (!translationResult.TryGetQueryFilterForTable(this.TableDefinition, out queryFilter, out indexName)) { // then trying to find a suitable Global Secondary Index var matchingIndex = this.TableDefinition .GlobalSecondaryIndexes.Values .FirstOrDefault ( index => translationResult.TryGetQueryFilterForGlobalSeconaryIndex(index, out queryFilter) ); if (matchingIndex == null) { return false; } indexName = matchingIndex.IndexName; } var queryConfig = new QueryOperationConfig { Filter = queryFilter, CollectResults = false, ConsistentRead = this._consistentRead, IndexName = indexName }; // if a projection is specified - then getting only the required list of fields if (translationResult.AttributesToGet != null) { queryConfig.Select = SelectValues.SpecificAttributes; queryConfig.AttributesToGet = translationResult.AttributesToGet; } var searchResult = this.TableDefinition.Query(queryConfig); if (string.IsNullOrEmpty(queryConfig.IndexName)) { this.Log("DynamoDb query: " + translationResult); } else { this.Log("DynamoDb index query: " + translationResult + ". Index name: " + queryConfig.IndexName); } resultingReader = this.CreateReader(searchResult, entityType, translationResult.ProjectionFunc); return true; }
/// <summary> /// Initiates a Search object to Query a DynamoDB table, with the /// specified config. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="config">Configuration to use.</param> /// <returns>Resultant Search container.</returns> public Search Query(QueryOperationConfig config) { if (config == null) throw new ArgumentNullException("config"); Search ret = new Search(SearchType.Query) { SourceTable = this, TableName = TableName, AttributesToGet = config.AttributesToGet, Filter = config.Filter, FilterExpression = config.FilterExpression, ConditionalOperator = config.ConditionalOperator, Limit = config.Limit, IsConsistentRead = config.ConsistentRead, IsBackwardSearch = config.BackwardSearch, IndexName = config.IndexName, Select = config.Select, CollectResults = config.CollectResults }; return ret; }
/// <summary> /// Initiates a Search object to Query a DynamoDB table, with the /// specified hash primary key and expression. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="hashKey">Value of the hash key for the query operation.</param> /// <param name="filterExpression">Expression to use.</param> /// <returns>Resultant Search container.</returns> public Search Query(Primitive hashKey, Expression filterExpression) { string hashKeyName = this.HashKeys[0]; QueryFilter hashKeyFilter = new QueryFilter(); hashKeyFilter.AddCondition(hashKeyName, QueryOperator.Equal, hashKey); QueryOperationConfig config = new QueryOperationConfig { Filter = hashKeyFilter, FilterExpression = filterExpression }; return Query(config); }
public static void RunDocumentModelSample() { Console.WriteLine("Loading Businesses table"); Table table = Table.LoadTable(client, "Businesses"); Console.WriteLine("Creating and saving first item"); Document chainStore2 = new Document(); chainStore2["Name"] = "Big Sales Inc"; chainStore2["Id"] = 2; chainStore2["Owner"] = "Big Sales Corp"; chainStore2["Managers"] = new List<string> { "Samantha Jones", "Richard Frost" }; chainStore2["FoundedDate"] = new DateTime(1980, 7, 4); chainStore2["Address"] = "123 Main Street, New York, New York"; chainStore2["Employees"] = 46; chainStore2["State"] = "NY"; table.PutItem(chainStore2); Console.WriteLine("Creating and saving first item"); Document chainStore13 = new Document(); chainStore13["Name"] = "Big Sales Inc"; chainStore13["Id"] = 13; chainStore13["Owner"] = "Big Sales Corp"; chainStore13["Managers"] = new List<string> { "Anil Garg", "Alex Short" }; chainStore13["FoundedDate"] = new DateTime(1999, 3, 15); chainStore13["Address"] = "1999 West Ave, Chicago, Illinois"; chainStore13["Employees"] = 54; chainStore13["State"] = "IL"; table.PutItem(chainStore13); Console.WriteLine("Creating and saving second item"); Document tinyDiner = new Document(); tinyDiner["Name"] = "Tiny Map-themed Diner"; tinyDiner["Id"] = 0; tinyDiner["Owner"] = "John Doe"; tinyDiner["FoundedDate"] = new DateTime(1974, 12, 10); tinyDiner["Address"] = "800 Lincoln Ave, Seattle, Washington"; tinyDiner["State"] = "WA"; table.PutItem(tinyDiner); Console.WriteLine("Creating and saving third item"); Document internetStore = new Document(); internetStore["Name"] = "Best Online Store Ever"; internetStore["Id"] = 0; internetStore["Owner"] = "Jane Doe"; internetStore["FoundedDate"] = new DateTime(1994, 2, 19); internetStore["Employees"] = 5; internetStore["Url"] = "http://www.best-online-store-ever.fake"; internetStore["Phone"] = "425-555-1234"; table.PutItem(internetStore); Console.WriteLine("Loading item"); Document doc1 = table.GetItem("Big Sales Inc", 2); Console.WriteLine("Attribute counts match (should be true): " + (chainStore2.GetAttributeNames().Count == doc1.GetAttributeNames().Count)); Console.WriteLine("Loading item..."); Document doc2 = table.GetItem("Best Online Store Ever", 0); Console.WriteLine("Attribute counts match (should be true): " + (chainStore2.GetAttributeNames().Count == doc1.GetAttributeNames().Count)); Console.WriteLine("Change item: remove one attribute, add one, modify one attribute"); doc2["Phone"] = null; doc2["Twitter"] = "best-online-store-ever"; doc2["Employees"] = 4; Console.WriteLine("Updating item"); table.UpdateItem(doc2); Console.WriteLine("Reloading item"); doc2 = table.GetItem("Best Online Store Ever", 0); Console.WriteLine("Phone attribute present (should be false): " + doc2.Contains("Phone")); Console.WriteLine("Twitter attribute present (should be true): " + doc2.Contains("Twitter")); Console.WriteLine("Employees attribute equals 4: " + (object.Equals(doc2["Employees"].AsPrimitive().Value, "4"))); Console.WriteLine("Loading nonexistent item"); Document doc3 = table.GetItem("Big Sales Inc", 3); Console.WriteLine("Returned document == null (should be true): " + (doc3 == null)); Search query; Console.WriteLine(); Console.WriteLine("Querying for items (Equals)"); query = table.Query("Big Sales Inc", new QueryFilter("Id", QueryOperator.Equal, 2)); List<Document> queryItems1 = query.GetRemaining(); Console.WriteLine("Number of items returned (should be 1): " + queryItems1.Count); Console.WriteLine(); Console.WriteLine("Querying for items (Between)"); QueryFilter filter = new QueryFilter(); filter.AddCondition("Name", QueryOperator.Equal, "Big Sales Inc"); filter.AddCondition("Id", QueryOperator.Between, 0, 15); QueryOperationConfig queryConfig = new QueryOperationConfig { Filter = filter, Limit = 1 }; query = table.Query(queryConfig); int totalItems = 0; while (!query.IsDone) { Console.WriteLine("Retrieving next set (page) of items"); List<Document> querySet = query.GetNextSet(); Console.WriteLine("Number of items returned in set (should be 1, unless last set, which will be 0): " + querySet.Count); foreach (Document doc in querySet) { Console.WriteLine("Retrieving individual properties"); Primitive name = doc["Name"].AsPrimitive(); Primitive id = doc["Id"].AsPrimitive(); PrimitiveList managers = doc["Managers"].AsPrimitiveList(); Console.WriteLine("Name = {0}, Id = {1}, # of managers = {2}", name.Value, id.Value, managers.Entries.Count); totalItems++; } } Console.WriteLine("Total items found (should be 2): " + totalItems); Search scan; ScanFilter scanFilter; Console.WriteLine(); Console.WriteLine("Scanning for items (GreaterThan)"); scanFilter = new ScanFilter(); scanFilter.AddCondition("Employees", ScanOperator.GreaterThan, 50); scan = table.Scan(scanFilter); List<Document> scanItems1 = scan.GetRemaining(); Console.WriteLine("Number of items returned (should be 1): " + scanItems1.Count); Console.WriteLine(); Console.WriteLine("Scanning for items (GreaterThan and LessThan)"); scanFilter = new ScanFilter(); scanFilter.AddCondition("Employees", ScanOperator.GreaterThan, 2); scanFilter.AddCondition("FoundedDate", ScanOperator.LessThan, new DateTime(1993, 1, 1)); scan = table.Scan(scanFilter); List<Document> scanItems2 = scan.GetRemaining(); Console.WriteLine("Number of items returned (should be 1): " + scanItems2.Count); Console.WriteLine(); Console.WriteLine("Retrieving an item"); Document existingDoc = table.GetItem("Big Sales Inc", 13); Console.WriteLine("Returned document == null (should be false): " + (existingDoc == null)); Console.WriteLine("Deleting item"); table.DeleteItem("Big Sales Inc", 13); Console.WriteLine("Retrieving same item"); existingDoc = table.GetItem("Big Sales Inc", 13); Console.WriteLine("Returned document == null (should be true): " + (existingDoc == null)); Console.WriteLine(); Console.WriteLine("Scanning for items (no filter) and deleting all"); scanFilter = new ScanFilter(); scan = table.Scan(scanFilter); List<Document> scanItems3 = scan.GetRemaining(); Console.WriteLine("Number of items returned (should be 3): " + scanItems3.Count); for (int i = 0; i < scanItems3.Count; i++) { Document item = scanItems3[i]; Console.WriteLine("Deleting item {0} of {1}", i + 1, scanItems3.Count); table.DeleteItem(item); } Console.WriteLine("Scanning table again"); scan = table.Scan(scanFilter); scanItems3 = scan.GetRemaining(); Console.WriteLine("Number of items returned (should be 0): " + scanItems3.Count); }