/*
* Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* Do not modify this file. This file is generated from the dynamodb-2012-08-10.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.DynamoDBv2.Model
{
///
/// Container for the parameters to the Scan operation.
/// The Scan
operation returns one or more items and item attributes by accessing
/// every item in a table or a secondary index. To have DynamoDB return fewer items, you
/// can provide a FilterExpression
operation.
///
///
///
/// If the total number of scanned items exceeds the maximum dataset size limit of 1 MB,
/// the scan stops and results are returned to the user as a LastEvaluatedKey
/// value to continue the scan in a subsequent operation. The results also include the
/// number of items exceeding the limit. A scan can result in no table data meeting the
/// filter criteria.
///
///
///
/// A single Scan
operation reads up to the maximum number of items set (if
/// using the Limit
parameter) or a maximum of 1 MB of data and then apply
/// any filtering to the results using FilterExpression
. If LastEvaluatedKey
/// is present in the response, you need to paginate the result set. For more information,
/// see Paginating
/// the Results in the Amazon DynamoDB Developer Guide.
///
///
///
/// Scan
operations proceed sequentially; however, for faster performance
/// on a large table or secondary index, applications can request a parallel Scan
/// operation by providing the Segment
and TotalSegments
parameters.
/// For more information, see Parallel
/// Scan in the Amazon DynamoDB Developer Guide.
///
///
///
/// Scan
uses eventually consistent reads when accessing the data in a table;
/// therefore, the result set might not include the changes to data in the table immediately
/// before the operation began. If you need a consistent copy of the data, as of the time
/// that the Scan
begins, you can set the ConsistentRead
parameter
/// to true
.
///
///
public partial class ScanRequest : AmazonDynamoDBRequest
{
private List _attributesToGet = new List();
private ConditionalOperator _conditionalOperator;
private bool? _consistentRead;
private Dictionary _exclusiveStartKey = new Dictionary();
private Dictionary _expressionAttributeNames = new Dictionary();
private Dictionary _expressionAttributeValues = new Dictionary();
private string _filterExpression;
private string _indexName;
private int? _limit;
private string _projectionExpression;
private ReturnConsumedCapacity _returnConsumedCapacity;
private Dictionary _scanFilter = new Dictionary();
private int? _segment;
private Select _select;
private string _tableName;
private int? _totalSegments;
///
/// Empty constructor used to set properties independently even when a simple constructor is available
///
public ScanRequest() { }
///
/// Instantiates ScanRequest with the parameterized properties
///
/// The name of the table containing the requested items; or, if you provide IndexName
, the name of the table to which that index belongs.
public ScanRequest(string tableName)
{
_tableName = tableName;
}
///
/// Gets and sets the property AttributesToGet.
///
/// This is a legacy parameter. Use ProjectionExpression
instead. For more
/// information, see AttributesToGet
/// in the Amazon DynamoDB Developer Guide.
///
///
[AWSProperty(Min=1)]
public List AttributesToGet
{
get { return this._attributesToGet; }
set { this._attributesToGet = value; }
}
// Check to see if AttributesToGet property is set
internal bool IsSetAttributesToGet()
{
return this._attributesToGet != null && this._attributesToGet.Count > 0;
}
///
/// Gets and sets the property ConditionalOperator.
///
/// This is a legacy parameter. Use FilterExpression
instead. For more information,
/// see ConditionalOperator
/// in the Amazon DynamoDB Developer Guide.
///
///
public ConditionalOperator ConditionalOperator
{
get { return this._conditionalOperator; }
set { this._conditionalOperator = value; }
}
// Check to see if ConditionalOperator property is set
internal bool IsSetConditionalOperator()
{
return this._conditionalOperator != null;
}
///
/// Gets and sets the property ConsistentRead.
///
/// A Boolean value that determines the read consistency model during the scan:
///
/// -
///
/// If
ConsistentRead
is false
, then the data returned from
/// Scan
might not contain the results from other recently completed write
/// operations (PutItem
, UpdateItem
, or DeleteItem
).
///
/// -
///
/// If
ConsistentRead
is true
, then all of the write operations
/// that completed before the Scan
began are guaranteed to be contained in
/// the Scan
response.
///
///
///
/// The default setting for ConsistentRead
is false
.
///
///
///
/// The ConsistentRead
parameter is not supported on global secondary indexes.
/// If you scan a global secondary index with ConsistentRead
set to true,
/// you will receive a ValidationException
.
///
///
public bool ConsistentRead
{
get { return this._consistentRead.GetValueOrDefault(); }
set { this._consistentRead = value; }
}
// Check to see if ConsistentRead property is set
internal bool IsSetConsistentRead()
{
return this._consistentRead.HasValue;
}
///
/// Gets and sets the property ExclusiveStartKey.
///
/// The primary key of the first item that this operation will evaluate. Use the value
/// that was returned for LastEvaluatedKey
in the previous operation.
///
///
///
/// The data type for ExclusiveStartKey
must be String, Number or Binary.
/// No set data types are allowed.
///
///
///
/// In a parallel scan, a Scan
request that includes ExclusiveStartKey
/// must specify the same segment whose previous Scan
returned the corresponding
/// value of LastEvaluatedKey
.
///
///
public Dictionary ExclusiveStartKey
{
get { return this._exclusiveStartKey; }
set { this._exclusiveStartKey = value; }
}
// Check to see if ExclusiveStartKey property is set
internal bool IsSetExclusiveStartKey()
{
return this._exclusiveStartKey != null && this._exclusiveStartKey.Count > 0;
}
///
/// Gets and sets the property ExpressionAttributeNames.
///
/// One or more substitution tokens for attribute names in an expression. The following
/// are some use cases for using ExpressionAttributeNames
:
///
/// -
///
/// To access an attribute whose name conflicts with a DynamoDB reserved word.
///
///
-
///
/// To create a placeholder for repeating occurrences of an attribute name in an expression.
///
///
-
///
/// To prevent special characters in an attribute name from being misinterpreted in an
/// expression.
///
///
///
/// Use the # character in an expression to dereference an attribute name. For
/// example, consider the following attribute name:
///
/// -
///
///
Percentile
///
///
///
/// The name of this attribute conflicts with a reserved word, so it cannot be used directly
/// in an expression. (For the complete list of reserved words, see Reserved
/// Words in the Amazon DynamoDB Developer Guide). To work around this, you
/// could specify the following for ExpressionAttributeNames
:
///
/// -
///
///
{"#P":"Percentile"}
///
///
///
/// You could then use this substitution in an expression, as in this example:
///
/// -
///
///
#P = :val
///
///
///
/// Tokens that begin with the : character are expression attribute values,
/// which are placeholders for the actual value at runtime.
///
///
///
/// For more information on expression attribute names, see Specifying
/// Item Attributes in the Amazon DynamoDB Developer Guide.
///
///
public Dictionary ExpressionAttributeNames
{
get { return this._expressionAttributeNames; }
set { this._expressionAttributeNames = value; }
}
// Check to see if ExpressionAttributeNames property is set
internal bool IsSetExpressionAttributeNames()
{
return this._expressionAttributeNames != null && this._expressionAttributeNames.Count > 0;
}
///
/// Gets and sets the property ExpressionAttributeValues.
///
/// One or more values that can be substituted in an expression.
///
///
///
/// Use the : (colon) character in an expression to dereference an attribute value.
/// For example, suppose that you wanted to check whether the value of the ProductStatus
/// attribute was one of the following:
///
///
///
/// Available | Backordered | Discontinued
///
///
///
/// You would first need to specify ExpressionAttributeValues
as follows:
///
///
///
/// { ":avail":{"S":"Available"}, ":back":{"S":"Backordered"}, ":disc":{"S":"Discontinued"}
/// }
///
///
///
/// You could then use these values in an expression, such as this:
///
///
///
/// ProductStatus IN (:avail, :back, :disc)
///
///
///
/// For more information on expression attribute values, see Condition
/// Expressions in the Amazon DynamoDB Developer Guide.
///
///
public Dictionary ExpressionAttributeValues
{
get { return this._expressionAttributeValues; }
set { this._expressionAttributeValues = value; }
}
// Check to see if ExpressionAttributeValues property is set
internal bool IsSetExpressionAttributeValues()
{
return this._expressionAttributeValues != null && this._expressionAttributeValues.Count > 0;
}
///
/// Gets and sets the property FilterExpression.
///
/// A string that contains conditions that DynamoDB applies after the Scan
/// operation, but before the data is returned to you. Items that do not satisfy the FilterExpression
/// criteria are not returned.
///
///
///
/// A FilterExpression
is applied after the items have already been read;
/// the process of filtering does not consume any additional read capacity units.
///
///
///
/// For more information, see Filter
/// Expressions in the Amazon DynamoDB Developer Guide.
///
///
public string FilterExpression
{
get { return this._filterExpression; }
set { this._filterExpression = value; }
}
// Check to see if FilterExpression property is set
internal bool IsSetFilterExpression()
{
return this._filterExpression != null;
}
///
/// Gets and sets the property IndexName.
///
/// The name of a secondary index to scan. This index can be any local secondary index
/// or global secondary index. Note that if you use the IndexName
parameter,
/// you must also provide TableName
.
///
///
[AWSProperty(Min=3, Max=255)]
public string IndexName
{
get { return this._indexName; }
set { this._indexName = value; }
}
// Check to see if IndexName property is set
internal bool IsSetIndexName()
{
return this._indexName != null;
}
///
/// Gets and sets the property Limit.
///
/// The maximum number of items to evaluate (not necessarily the number of matching items).
/// If DynamoDB processes the number of items up to the limit while processing the results,
/// it stops the operation and returns the matching values up to that point, and a key
/// in LastEvaluatedKey
to apply in a subsequent operation, so that you can
/// pick up where you left off. Also, if the processed dataset size exceeds 1 MB before
/// DynamoDB reaches this limit, it stops the operation and returns the matching values
/// up to the limit, and a key in LastEvaluatedKey
to apply in a subsequent
/// operation to continue the operation. For more information, see Working
/// with Queries in the Amazon DynamoDB Developer Guide.
///
///
[AWSProperty(Min=1)]
public int Limit
{
get { return this._limit.GetValueOrDefault(); }
set { this._limit = value; }
}
// Check to see if Limit property is set
internal bool IsSetLimit()
{
return this._limit.HasValue;
}
///
/// Gets and sets the property ProjectionExpression.
///
/// A string that identifies one or more attributes to retrieve from the specified table
/// or index. These attributes can include scalars, sets, or elements of a JSON document.
/// The attributes in the expression must be separated by commas.
///
///
///
/// If no attribute names are specified, then all attributes will be returned. If any
/// of the requested attributes are not found, they will not appear in the result.
///
///
///
/// For more information, see Specifying
/// Item Attributes in the Amazon DynamoDB Developer Guide.
///
///
public string ProjectionExpression
{
get { return this._projectionExpression; }
set { this._projectionExpression = value; }
}
// Check to see if ProjectionExpression property is set
internal bool IsSetProjectionExpression()
{
return this._projectionExpression != null;
}
///
/// Gets and sets the property ReturnConsumedCapacity.
///
public ReturnConsumedCapacity ReturnConsumedCapacity
{
get { return this._returnConsumedCapacity; }
set { this._returnConsumedCapacity = value; }
}
// Check to see if ReturnConsumedCapacity property is set
internal bool IsSetReturnConsumedCapacity()
{
return this._returnConsumedCapacity != null;
}
///
/// Gets and sets the property ScanFilter.
///
/// This is a legacy parameter. Use FilterExpression
instead. For more information,
/// see ScanFilter
/// in the Amazon DynamoDB Developer Guide.
///
///
public Dictionary ScanFilter
{
get { return this._scanFilter; }
set { this._scanFilter = value; }
}
// Check to see if ScanFilter property is set
internal bool IsSetScanFilter()
{
return this._scanFilter != null && this._scanFilter.Count > 0;
}
///
/// Gets and sets the property Segment.
///
/// For a parallel Scan
request, Segment
identifies an individual
/// segment to be scanned by an application worker.
///
///
///
/// Segment IDs are zero-based, so the first segment is always 0. For example, if you
/// want to use four application threads to scan a table or an index, then the first thread
/// specifies a Segment
value of 0, the second thread specifies 1, and so
/// on.
///
///
///
/// The value of LastEvaluatedKey
returned from a parallel Scan
/// request must be used as ExclusiveStartKey
with the same segment ID in
/// a subsequent Scan
operation.
///
///
///
/// The value for Segment
must be greater than or equal to 0, and less than
/// the value provided for TotalSegments
.
///
///
///
/// If you provide Segment
, you must also provide TotalSegments
.
///
///
[AWSProperty(Min=0, Max=999999)]
public int Segment
{
get { return this._segment.GetValueOrDefault(); }
set { this._segment = value; }
}
// Check to see if Segment property is set
internal bool IsSetSegment()
{
return this._segment.HasValue;
}
///
/// Gets and sets the property Select.
///
/// The attributes to be returned in the result. You can retrieve all item attributes,
/// specific item attributes, the count of matching items, or in the case of an index,
/// some or all of the attributes projected into the index.
///
/// -
///
///
ALL_ATTRIBUTES
- Returns all of the item attributes from the specified
/// table or index. If you query a local secondary index, then for each matching item
/// in the index, DynamoDB fetches the entire item from the parent table. If the index
/// is configured to project all item attributes, then all of the data can be obtained
/// from the local secondary index, and no fetching is required.
///
/// -
///
///
ALL_PROJECTED_ATTRIBUTES
- Allowed only when querying an index. Retrieves
/// all attributes that have been projected into the index. If the index is configured
/// to project all attributes, this return value is equivalent to specifying ALL_ATTRIBUTES
.
///
/// -
///
///
COUNT
- Returns the number of matching items, rather than the matching
/// items themselves.
///
/// -
///
///
SPECIFIC_ATTRIBUTES
- Returns only the attributes listed in AttributesToGet
.
/// This return value is equivalent to specifying AttributesToGet
without
/// specifying any value for Select
.
///
///
///
/// If you query or scan a local secondary index and request only attributes that are
/// projected into that index, the operation reads only the index and not the table. If
/// any of the requested attributes are not projected into the local secondary index,
/// DynamoDB fetches each of these attributes from the parent table. This extra fetching
/// incurs additional throughput cost and latency.
///
///
///
/// If you query or scan a global secondary index, you can only request attributes that
/// are projected into the index. Global secondary index queries cannot fetch attributes
/// from the parent table.
///
///
///
/// If neither Select
nor AttributesToGet
are specified, DynamoDB
/// defaults to ALL_ATTRIBUTES
when accessing a table, and ALL_PROJECTED_ATTRIBUTES
/// when accessing an index. You cannot use both Select
and AttributesToGet
/// together in a single request, unless the value for Select
is SPECIFIC_ATTRIBUTES
.
/// (This usage is equivalent to specifying AttributesToGet
without any value
/// for Select
.)
///
///
///
/// If you use the ProjectionExpression
parameter, then the value for Select
/// can only be SPECIFIC_ATTRIBUTES
. Any other value for Select
/// will return an error.
///
///
///
public Select Select
{
get { return this._select; }
set { this._select = value; }
}
// Check to see if Select property is set
internal bool IsSetSelect()
{
return this._select != null;
}
///
/// Gets and sets the property TableName.
///
/// The name of the table containing the requested items; or, if you provide IndexName
,
/// the name of the table to which that index belongs.
///
///
[AWSProperty(Required=true, Min=3, Max=255)]
public string TableName
{
get { return this._tableName; }
set { this._tableName = value; }
}
// Check to see if TableName property is set
internal bool IsSetTableName()
{
return this._tableName != null;
}
///
/// Gets and sets the property TotalSegments.
///
/// For a parallel Scan
request, TotalSegments
represents the
/// total number of segments into which the Scan
operation will be divided.
/// The value of TotalSegments
corresponds to the number of application workers
/// that will perform the parallel scan. For example, if you want to use four application
/// threads to scan a table or an index, specify a TotalSegments
value of
/// 4.
///
///
///
/// The value for TotalSegments
must be greater than or equal to 1, and less
/// than or equal to 1000000. If you specify a TotalSegments
value of 1,
/// the Scan
operation will be sequential rather than parallel.
///
///
///
/// If you specify TotalSegments
, you must also specify Segment
.
///
///
[AWSProperty(Min=1, Max=1000000)]
public int TotalSegments
{
get { return this._totalSegments.GetValueOrDefault(); }
set { this._totalSegments = value; }
}
// Check to see if TotalSegments property is set
internal bool IsSetTotalSegments()
{
return this._totalSegments.HasValue;
}
}
}