func ExampleDynamoDB_ListTables() { svc := dynamodb.New(nil) params := &dynamodb.ListTablesInput{ ExclusiveStartTableName: aws.String("TableName"), Limit: aws.Long(1), } resp, err := svc.ListTables(params) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { // This case should never be hit, The SDK should alwsy return an // error which satisfies the awserr.Error interface. fmt.Println(err.Error()) } } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) }
func TestEachPagePanics(t *testing.T) { db := dynamodb.New(nil) db.Handlers.Send.Clear() // mock sending req, _ := db.ListTablesRequest(nil) assert.Panics(t, func() { req.EachPage(0) }) // must be a function assert.Panics(t, func() { // must return bool req.EachPage(func(p *dynamodb.ListTablesOutput, last bool) string { return "" }) }) }
// Use DynamoDB methods for simplicity func TestPaginationEachPage(t *testing.T) { db := dynamodb.New(nil) tokens, pages, numPages, gotToEnd := []string{}, []string{}, 0, false reqNum := 0 resps := []*dynamodb.ListTablesOutput{ &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table1"), aws.String("Table2")}, LastEvaluatedTableName: aws.String("Table2")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table3"), aws.String("Table4")}, LastEvaluatedTableName: aws.String("Table4")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table5")}}, } db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() db.Handlers.Build.PushBack(func(r *aws.Request) { in := r.Params.(*dynamodb.ListTablesInput) if in == nil { tokens = append(tokens, "") } else if in.ExclusiveStartTableName != nil { tokens = append(tokens, *in.ExclusiveStartTableName) } }) db.Handlers.Unmarshal.PushBack(func(r *aws.Request) { r.Data = resps[reqNum] reqNum++ }) params := &dynamodb.ListTablesInput{Limit: aws.Long(2)} req, _ := db.ListTablesRequest(params) err := req.EachPage(func(p *dynamodb.ListTablesOutput, last bool) bool { numPages++ for _, t := range p.TableNames { pages = append(pages, *t) } if last { if gotToEnd { assert.Fail(t, "last=true happened twice") } gotToEnd = true } return true }) assert.Equal(t, []string{"Table2", "Table4"}, tokens) assert.Equal(t, []string{"Table1", "Table2", "Table3", "Table4", "Table5"}, pages) assert.Equal(t, 3, numPages) assert.True(t, gotToEnd) assert.Nil(t, err) }
// Use DynamoDB methods for simplicity func TestPaginationEarlyExit(t *testing.T) { db := dynamodb.New(nil) numPages, gotToEnd := 0, false reqNum := 0 resps := []*dynamodb.ListTablesOutput{ &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table1"), aws.String("Table2")}, LastEvaluatedTableName: aws.String("Table2")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table3"), aws.String("Table4")}, LastEvaluatedTableName: aws.String("Table4")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("Table5")}}, } db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() db.Handlers.Unmarshal.PushBack(func(r *aws.Request) { r.Data = resps[reqNum] reqNum++ }) params := &dynamodb.ListTablesInput{Limit: aws.Long(2)} err := db.ListTablesPages(params, func(p *dynamodb.ListTablesOutput, last bool) bool { numPages++ if numPages == 2 { return false } if last { if gotToEnd { assert.Fail(t, "last=true happened twice") } gotToEnd = true } return true }) assert.Equal(t, 2, numPages) assert.False(t, gotToEnd) assert.Nil(t, err) }
func TestInterface(t *testing.T) { assert.Implements(t, (*dynamodbiface.DynamoDBAPI)(nil), dynamodb.New(nil)) }
&dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE"), aws.String("NXT")}, LastEvaluatedTableName: aws.String("NXT")}, &dynamodb.ListTablesOutput{TableNames: []*string{aws.String("TABLE")}}, } var benchDb = func() *dynamodb.DynamoDB { db := dynamodb.New(nil) db.Handlers.Send.Clear() // mock sending db.Handlers.Unmarshal.Clear() db.Handlers.UnmarshalMeta.Clear() db.Handlers.ValidateResponse.Clear() return db } func BenchmarkCodegenIterator(b *testing.B) { reqNum := 0 db := benchDb() db.Handlers.Unmarshal.PushBack(func(r *aws.Request) { r.Data = benchResps[reqNum] reqNum++ })
func ExampleDynamoDB_Scan() { svc := dynamodb.New(nil) params := &dynamodb.ScanInput{ TableName: aws.String("TableName"), // Required AttributesToGet: []*string{ aws.String("AttributeName"), // Required // More values... }, ConditionalOperator: aws.String("ConditionalOperator"), ExclusiveStartKey: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ExpressionAttributeNames: &map[string]*string{ "Key": aws.String("AttributeName"), // Required // More values... }, ExpressionAttributeValues: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, FilterExpression: aws.String("ConditionExpression"), IndexName: aws.String("IndexName"), Limit: aws.Long(1), ProjectionExpression: aws.String("ProjectionExpression"), ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ScanFilter: &map[string]*dynamodb.Condition{ "Key": &dynamodb.Condition{ // Required ComparisonOperator: aws.String("ComparisonOperator"), // Required AttributeValueList: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, // More values... }, Segment: aws.Long(1), Select: aws.String("Select"), TotalSegments: aws.Long(1), } resp, err := svc.Scan(params) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { // This case should never be hit, The SDK should alwsy return an // error which satisfies the awserr.Error interface. fmt.Println(err.Error()) } } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) }
func ExampleDynamoDB_BatchWriteItem() { svc := dynamodb.New(nil) params := &dynamodb.BatchWriteItemInput{ RequestItems: &map[string][]*dynamodb.WriteRequest{ // Required "Key": []*dynamodb.WriteRequest{ // Required &dynamodb.WriteRequest{ // Required DeleteRequest: &dynamodb.DeleteRequest{ Key: &map[string]*dynamodb.AttributeValue{ // Required "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, PutRequest: &dynamodb.PutRequest{ Item: &map[string]*dynamodb.AttributeValue{ // Required "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, }, }, // More values... }, // More values... }, ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ReturnItemCollectionMetrics: aws.String("ReturnItemCollectionMetrics"), } resp, err := svc.BatchWriteItem(params) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { // This case should never be hit, The SDK should alwsy return an // error which satisfies the awserr.Error interface. fmt.Println(err.Error()) } } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) }
func ExampleDynamoDB_CreateTable() { svc := dynamodb.New(nil) params := &dynamodb.CreateTableInput{ AttributeDefinitions: []*dynamodb.AttributeDefinition{ // Required &dynamodb.AttributeDefinition{ // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required AttributeType: aws.String("ScalarAttributeType"), // Required }, // More values... }, KeySchema: []*dynamodb.KeySchemaElement{ // Required &dynamodb.KeySchemaElement{ // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ // Required ReadCapacityUnits: aws.Long(1), // Required WriteCapacityUnits: aws.Long(1), // Required }, TableName: aws.String("TableName"), // Required GlobalSecondaryIndexes: []*dynamodb.GlobalSecondaryIndex{ &dynamodb.GlobalSecondaryIndex{ // Required IndexName: aws.String("IndexName"), // Required KeySchema: []*dynamodb.KeySchemaElement{ // Required &dynamodb.KeySchemaElement{ // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, Projection: &dynamodb.Projection{ // Required NonKeyAttributes: []*string{ aws.String("NonKeyAttributeName"), // Required // More values... }, ProjectionType: aws.String("ProjectionType"), }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ // Required ReadCapacityUnits: aws.Long(1), // Required WriteCapacityUnits: aws.Long(1), // Required }, }, // More values... }, LocalSecondaryIndexes: []*dynamodb.LocalSecondaryIndex{ &dynamodb.LocalSecondaryIndex{ // Required IndexName: aws.String("IndexName"), // Required KeySchema: []*dynamodb.KeySchemaElement{ // Required &dynamodb.KeySchemaElement{ // Required AttributeName: aws.String("KeySchemaAttributeName"), // Required KeyType: aws.String("KeyType"), // Required }, // More values... }, Projection: &dynamodb.Projection{ // Required NonKeyAttributes: []*string{ aws.String("NonKeyAttributeName"), // Required // More values... }, ProjectionType: aws.String("ProjectionType"), }, }, // More values... }, } resp, err := svc.CreateTable(params) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { // This case should never be hit, The SDK should alwsy return an // error which satisfies the awserr.Error interface. fmt.Println(err.Error()) } } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) }
func ExampleDynamoDB_UpdateItem() { svc := dynamodb.New(nil) params := &dynamodb.UpdateItemInput{ Key: &map[string]*dynamodb.AttributeValue{ // Required "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, TableName: aws.String("TableName"), // Required AttributeUpdates: &map[string]*dynamodb.AttributeValueUpdate{ "Key": &dynamodb.AttributeValueUpdate{ // Required Action: aws.String("AttributeAction"), Value: &dynamodb.AttributeValue{ B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, }, // More values... }, ConditionExpression: aws.String("ConditionExpression"), ConditionalOperator: aws.String("ConditionalOperator"), Expected: &map[string]*dynamodb.ExpectedAttributeValue{ "Key": &dynamodb.ExpectedAttributeValue{ // Required AttributeValueList: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ComparisonOperator: aws.String("ComparisonOperator"), Exists: aws.Boolean(true), Value: &dynamodb.AttributeValue{ B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, }, // More values... }, ExpressionAttributeNames: &map[string]*string{ "Key": aws.String("AttributeName"), // Required // More values... }, ExpressionAttributeValues: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required B: []byte("PAYLOAD"), BOOL: aws.Boolean(true), BS: [][]byte{ []byte("PAYLOAD"), // Required // More values... }, L: []*dynamodb.AttributeValue{ &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, M: &map[string]*dynamodb.AttributeValue{ "Key": &dynamodb.AttributeValue{ // Required // Recursive values... }, // More values... }, N: aws.String("NumberAttributeValue"), NS: []*string{ aws.String("NumberAttributeValue"), // Required // More values... }, NULL: aws.Boolean(true), S: aws.String("StringAttributeValue"), SS: []*string{ aws.String("StringAttributeValue"), // Required // More values... }, }, // More values... }, ReturnConsumedCapacity: aws.String("ReturnConsumedCapacity"), ReturnItemCollectionMetrics: aws.String("ReturnItemCollectionMetrics"), ReturnValues: aws.String("ReturnValue"), UpdateExpression: aws.String("UpdateExpression"), } resp, err := svc.UpdateItem(params) if err != nil { if awsErr, ok := err.(awserr.Error); ok { // Generic AWS Error with Code, Message, and original error (if any) fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr()) if reqErr, ok := err.(awserr.RequestFailure); ok { // A service error occurred fmt.Println(reqErr.Code(), reqErr.Message(), reqErr.StatusCode(), reqErr.RequestID()) } } else { // This case should never be hit, The SDK should alwsy return an // error which satisfies the awserr.Error interface. fmt.Println(err.Error()) } } // Pretty-print the response data. fmt.Println(awsutil.StringValue(resp)) }
func DynamoDB() *dynamodb.DynamoDB { return dynamodb.New(&aws.Config{ Credentials: credentials.NewCredentials(&AwsCredentials{}), Region: os.Getenv("AWS_REGION"), }) }