public override IDataReader ExecuteReader(ServiceCursorDef cursorDef, IDataParameterCollection parms, CommandBehavior behavior) { Initialize(); Query query = cursorDef.Query as Query; Dictionary <string, AttributeValue> valuesAux = new Dictionary <string, AttributeValue>(); Dictionary <string, AttributeValue> values = new Dictionary <string, AttributeValue>(); if (parms.Count > 0) { for (int i = 0; i < parms.Count; i++) { ServiceParameter parm = parms[i] as ServiceParameter; DynamoDBHelper.GXToDynamoQueryParameter(":", values, parm); } } List <string> filtersAux = new List <string>(); List <string> filters = new List <string>(); filters.AddRange(query.Filters); foreach (var item in query.Vars) { values.Add(item.Name, DynamoDBHelper.ToAttributeValue(item)); } try { DynamoDBDataReader dataReader; AmazonDynamoDBRequest req; CreateDynamoQuery(query, values, filters.ToArray(), out dataReader, out req); RequestWrapper reqWrapper = new RequestWrapper(mDynamoDB, req); dataReader = new DynamoDBDataReader(cursorDef, reqWrapper, parms); return(dataReader); } catch (AmazonDynamoDBException e) { throw e; } catch (AmazonServiceException e) { throw e; } catch (Exception e) { throw e; } }
private static void CreateDynamoQuery(Query query, Dictionary <string, AttributeValue> values, String[] queryFilters, out DynamoDBDataReader dataReader, out AmazonDynamoDBRequest req) { dataReader = null; req = null; if (query is Scan) { req = new ScanRequest { TableName = query.TableName, ProjectionExpression = String.Join(",", query.Projection), }; if (queryFilters.Length > 0) { ((ScanRequest)req).FilterExpression = String.Join(" AND ", queryFilters); ((ScanRequest)req).ExpressionAttributeValues = values; } } else { req = new QueryRequest { TableName = query.TableName, KeyConditionExpression = String.Join(" AND ", query.Filters), ExpressionAttributeValues = values, ProjectionExpression = String.Join(",", query.Projection), }; } }