Exemplo n.º 1
0
        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; }
        }
Exemplo n.º 2
0
 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),
         };
     }
 }