PureBasic
PureBasic
DynamoDB - Query
See more Amazon DynamoDB Examples
The Query operation finds items based on primary key values. You can query any table or secondary index that has a composite primary key (a partition key and a sort key).Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthAws.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkRest.pb"
Procedure ChilkatExample()
success.i = 0
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Implements the following CURL command:
; curl -X POST https://dynamodb.us-west-2.amazonaws.com/ \
; -H "Accept-Encoding: identity" \
; -H "Content-Type: application/x-amz-json-1.0" \
; -H "Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>" \
; -H "X-Amz-Date: <Date>" \
; -H "X-Amz-Target: DynamoDB_20120810.Query" \
; -d '{
; "TableName": "Reply",
; "IndexName": "PostedBy-Index",
; "Limit": 3,
; "ConsistentRead": true,
; "ProjectionExpression": "Id, PostedBy, ReplyDateTime",
; "KeyConditionExpression": "Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b",
; "ExpressionAttributeValues": {
; ":v1": {"S": "Amazon DynamoDB#DynamoDB Thread 1"},
; ":v2a": {"S": "User A"},
; ":v2b": {"S": "User C"}
; },
; "ReturnConsumedCapacity": "TOTAL"
; }'
; Use the following online tool to generate REST code from a CURL command
; Convert a cURL Command to REST Source Code
authAws.i = CkAuthAws::ckCreate()
If authAws.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
; Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
CkAuthAws::setCkRegion(authAws, "us-west-2")
CkAuthAws::setCkServiceName(authAws, "dynamodb")
; SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
CkRest::ckSetAuthAws(rest,authAws)
; URL: https://dynamodb.us-west-2.amazonaws.com/
bTls.i = 1
port.i = 443
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"dynamodb.us-west-2.amazonaws.com",port,bTls,bAutoReconnect)
If success <> 1
Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
ProcedureReturn
EndIf
; Note: The above code does not need to be repeatedly called for each REST request.
; The rest object can be setup once, and then many requests can be sent. Chilkat will automatically
; reconnect within a FullRequest* method as needed. It is only the very first connection that is explicitly
; made via the Connect method.
; Use this online tool to generate code from sample JSON:
; Generate Code to Create JSON
; The following JSON is sent in the request body.
; {
; "TableName": "Reply",
; "IndexName": "PostedBy-Index",
; "Limit": 3,
; "ConsistentRead": true,
; "ProjectionExpression": "Id, PostedBy, ReplyDateTime",
; "KeyConditionExpression": "Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b",
; "ExpressionAttributeValues": {
; ":v1": {
; "S": "Amazon DynamoDB#DynamoDB Thread 1"
; },
; ":v2a": {
; "S": "User A"
; },
; ":v2b": {
; "S": "User C"
; }
; },
; "ReturnConsumedCapacity": "TOTAL"
; }
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckUpdateString(json,"TableName","Reply")
CkJsonObject::ckUpdateString(json,"IndexName","PostedBy-Index")
CkJsonObject::ckUpdateInt(json,"Limit",3)
CkJsonObject::ckUpdateBool(json,"ConsistentRead",1)
CkJsonObject::ckUpdateString(json,"ProjectionExpression","Id, PostedBy, ReplyDateTime")
CkJsonObject::ckUpdateString(json,"KeyConditionExpression","Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b")
CkJsonObject::ckUpdateString(json,"ExpressionAttributeValues.:v1.S","Amazon DynamoDB#DynamoDB Thread 1")
CkJsonObject::ckUpdateString(json,"ExpressionAttributeValues.:v2a.S","User A")
CkJsonObject::ckUpdateString(json,"ExpressionAttributeValues.:v2b.S","User C")
CkJsonObject::ckUpdateString(json,"ReturnConsumedCapacity","TOTAL")
CkRest::ckAddHeader(rest,"Content-Type","application/x-amz-json-1.0")
CkRest::ckAddHeader(rest,"X-Amz-Target","DynamoDB_20120810.Query")
CkRest::ckAddHeader(rest,"Accept-Encoding","identity")
sbRequestBody.i = CkStringBuilder::ckCreate()
If sbRequestBody.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckEmitSb(json,sbRequestBody)
sbResponseBody.i = CkStringBuilder::ckCreate()
If sbResponseBody.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRest::ckFullRequestSb(rest,"POST","/",sbRequestBody,sbResponseBody)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbRequestBody)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndIf
respStatusCode.i = CkRest::ckResponseStatusCode(rest)
Debug "response status code = " + Str(respStatusCode)
If respStatusCode >= 400
Debug "Response Status Code = " + Str(respStatusCode)
Debug "Response Header:"
Debug CkRest::ckResponseHeader(rest)
Debug "Response Body:"
Debug CkStringBuilder::ckGetAsString(sbResponseBody)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbRequestBody)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndIf
jsonResponse.i = CkJsonObject::ckCreate()
If jsonResponse.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoadSb(jsonResponse,sbResponseBody)
CkJsonObject::setCkEmitCompact(jsonResponse, 0)
Debug CkJsonObject::ckEmit(jsonResponse)
; Sample JSON response:
; (Sample code for parsing the JSON response is shown below)
; {
; "ConsumedCapacity": {
; "CapacityUnits": 1,
; "TableName": "Reply"
; },
; "Count": 2,
; "Items": [
; {
; "ReplyDateTime": {
; "S": "2015-02-18T20:27:36.165Z"
; },
; "PostedBy": {
; "S": "User A"
; },
; "Id": {
; "S": "Amazon DynamoDB#DynamoDB Thread 1"
; }
; },
; {
; "ReplyDateTime": {
; "S": "2015-02-25T20:27:36.165Z"
; },
; "PostedBy": {
; "S": "User B"
; },
; "Id": {
; "S": "Amazon DynamoDB#DynamoDB Thread 1"
; }
; }
; ],
; "ScannedCount": 2
; }
; Sample code for parsing the JSON response...
; Use the following online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
ReplyDateTimeS.s
PostedByS.s
IdS.s
ConsumedCapacityCapacityUnits.i = CkJsonObject::ckIntOf(jsonResponse,"ConsumedCapacity.CapacityUnits")
ConsumedCapacityTableName.s = CkJsonObject::ckStringOf(jsonResponse,"ConsumedCapacity.TableName")
Count.i = CkJsonObject::ckIntOf(jsonResponse,"Count")
ScannedCount.i = CkJsonObject::ckIntOf(jsonResponse,"ScannedCount")
i.i = 0
count_i.i = CkJsonObject::ckSizeOfArray(jsonResponse,"Items")
While i < count_i
CkJsonObject::setCkI(jsonResponse, i)
ReplyDateTimeS = CkJsonObject::ckStringOf(jsonResponse,"Items[i].ReplyDateTime.S")
PostedByS = CkJsonObject::ckStringOf(jsonResponse,"Items[i].PostedBy.S")
IdS = CkJsonObject::ckStringOf(jsonResponse,"Items[i].Id.S")
i = i + 1
Wend
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbRequestBody)
CkStringBuilder::ckDispose(sbResponseBody)
CkJsonObject::ckDispose(jsonResponse)
ProcedureReturn
EndProcedure