Published by guregu over 1 year ago
github.com/gofrs/uuid
as a dependency by @danielwhite in https://github.com/guregu/dynamo/pull/210
Full Changelog: https://github.com/guregu/dynamo/compare/v1.18.0...v1.18.1
Published by guregu almost 2 years ago
This release adds projection support for batch gets and updates the AWS dependencies.
Full Changelog: https://github.com/guregu/dynamo/compare/v1.17.0...v1.18.0
Published by guregu about 2 years ago
This release adds automatic retrying behavior to transactions. See: #203.
IsCondCheckFailed
function for working with conditional check failed errorsFull Changelog: https://github.com/guregu/dynamo/compare/v1.16.0...v1.17.0
Published by guregu about 2 years ago
Full Changelog: https://github.com/guregu/dynamo/compare/v1.15.1...v1.16.0
Published by guregu over 2 years ago
Full Changelog: https://github.com/guregu/dynamo/compare/v1.15.0...v1.15.1
Published by guregu over 2 years ago
This release adds table waiters (#52 via #193).
CreateTable.Wait()
creates the table, then blocks until the table is activeDeleteTable.Wait()
deletes the table, then blocks until the table is finished deletingTable.Wait(...)
blocks until the table's status matches one of the arguments (for custom waiting purposes)// blocks until table is ready to use
if err := db.CreateTable(name, Widget{}).Wait(); err != nil {
panic(err)
}
// blocks until table is finished deleting
if err := db.Table(name).DeleteTable().Wait(); err != nil {
panic(err)
}
Full Changelog: https://github.com/guregu/dynamo/compare/v1.14.0...v1.15.0
Published by guregu over 2 years ago
This release adds a new type, ExpressionLiteral
(#192). It represents a raw DynamoDB expression and placeholders, using the same data types as the official AWS package. You can pass this as a parameter to any method that takes an expression. Both $
and ?
will work as variables. dynamo will automatically merge your placeholders with its own, so you can use this in tandem with the rest of the library.
Some use cases include porting projects from the official SDK, and passing around search parameters in APIs.
Be careful, using this is akin to manipulating SQL queries with string concatenation. Make sure you know what you're doing if you use it. Only reach for this hammer when the regular APIs don't cut it.
lit := dynamo.ExpressionLiteral{
Expression: "#meta.#foo = :bar",
AttributeNames: aws.StringMap(map[string]string{
"#meta": "Meta",
"#foo": "foo",
}),
AttributeValues: map[string]*dynamodb.AttributeValue{
":bar": {S: aws.String("bar")},
},
}
err := table.Get("UserID", 42).
Filter("?", lit). // $ also works.
All(&result)
Full Changelog: https://github.com/guregu/dynamo/compare/v1.13.0...v1.14.0
Published by guregu over 2 years ago
CreateTable
and DescribeTable
#189 (thanks @TigerToof!)PagingIter.LastEvaluatedKey
#191
DescribeTable
depending on your usage.DescribeTable
(such as insufficient permissions) will be treated as warnings, falling back to pre-v1.12.0 behavior.
aws.Config
instead of the standard library default.Full Changelog: https://github.com/guregu/dynamo/compare/v1.12.0...v1.13.0
Published by guregu over 2 years ago
UnmarshalItem
does not work with the auxiliary typesPagingIter.LastEvaluatedKey
by @guregu in https://github.com/guregu/dynamo/pull/187
Full Changelog: https://github.com/guregu/dynamo/compare/v1.11.0...v1.12.0
Published by guregu about 3 years ago
This release integrates lots of pull requests from the community. Thanks for the PRs, everyone.
Although this PR doesn't add any shiny new functionality, it introduces a new error called ErrNoInput
that is returned if you use the batch/transaction APIs without providing it any input. See #174.
Published by guregu over 3 years ago
This is a bugfix release that resolves an issue where BatchGet would return ErrNotFound early upon encountering an empty set of 100 results (#161). Thanks @Dave-Dohmeier!
Published by guregu over 3 years ago
This is a bugfix release that fixes #158, in which expressions like (A) OR (B)
were not getting properly wrapped to ((A) OR (B))
when combined with multiple .If
calls, etc.
Also includes #157 which fixes ListTables's context methods not passing the context through to the AWS SDK.
Published by guregu almost 4 years ago
This is a bugfix release that fixes Update.Set's behavior when given an empty typed string value (#151). Instead of removing the empty value, it was encoding an invalid request resulting in a SerializationException. Thanks to @finnbear for discovering and triaging the issue.
Published by guregu almost 4 years ago
This is a minor release that fixes an issue with decoding number sets (#150). Thanks to @aoldershaw for the contribution.
Published by guregu almost 4 years ago
This release adds Update.DeleteFromSet
which can be useful for deleting values from sets not covered by the pre-existing helper methods (#146). Also, Update.OnlyUpdatedValue
and Update.OnlyUpdatedOldValue
have been added, which are the equivalents of UPDATED_NEW
and UPDATED_OLD
and encode only the values that have been changed from an update (#142).
AWSEncoding
support has been improved (#147). You can now use it with methods that operate on slices, such as:
var list []myAWSEncodedStuff
table.Get("UserID", 123).All(dynamo.AWSEncoding(&list))
This release also bumps up aws-sdk-go to the latest version.
Thanks to everyone who reported issues and sent PRs, and to everyone who uses this library.
Published by guregu about 4 years ago
This release adds support for embedding struct pointers (#139) and avoids panicking when trying to unmarshal to private fields. Thanks @gir for the contribution.
Published by guregu about 4 years ago
This release improves and extends many areas of the encoder, improving support for empty and null values and fixing some important issues.
We can now take advantage of DynamoDB's support for empty strings and binary attributes!
dynamo:",set"
struct tag option). By default, empty strings and binary values are encoded as-is, and nil pointers are set to a DynamoDB NULL type. Previously these cases were a SerializationException. Fixes #102 and #137.
dynamo:",omitemptyelem"
that omits these values instead. Note that this will mess up your array indexes.dynamo:",allowempty"
to disable auto-omit behavior for empty string or binary field values. Keep in mind that primary keys can't be empty.dynamo:",allowemptyelem"
to disable auto-omit behavior for empty string, empty binary, and nil values in maps.dynamo:",null"
that will marshal nil or empty values to DynamoDB NULL types. When allowempty
is also set, allowempty
will take precedence.Update.SetNullable
which is Update.Set
without automatic empty/nil removal.If
and Filter
.This release should have total backwards compatibility with previous versions. New support for empty/nil values was added in areas that were previously serialization errors. Auto-omit behavior was kept the same, but now you can use allowempty
and allowemptyelem
to disable it.
Example:
var widget = struct {
HashKey string
Desc string `dynamo:",allowempty"`
Words []string
Ptr *int `dynamo:",null"`
}{
HashKey: "abc",
Desc: "",
Words: []string{"hello", "world", ""},
Ptr: nil,
}
will be marshaled like so
{
HashKey: {S: "abc"},
Desc: {S: ""},
Words: {L: [{S: "hello"}, {S: "world"} {S: ""}]},
Ptr: {NULL: true},
}
Big thanks to everyone who submitted issues and PRs, and all the users of this library.
Published by guregu over 4 years ago
This release adds ItemMarshaler
and ItemUnmarshaler
, which are interfaces allowing for total control of item marshaling. This is useful for handling dynamic items whose structure depends on its content. Thanks to @luma for submitting this in PR #126!
// ItemMarshaler is the interface implemented by objects that
// can marshal themselves into an Item (a map of strings
// to AttributeValues).
type ItemMarshaler interface {
MarshalDynamoItem() (map[string]*dynamodb.AttributeValue, error)
}
// ItemUnmarshaler is the interface implemented by
// objects that can unmarshal an Item (a map of strings
//to AttributeValues) into themselves.
type ItemUnmarshaler interface {
UnmarshalDynamoItem(item map[string]*dynamodb.AttributeValue) error
}
Published by guregu over 4 years ago
This release fixes a bug where AWSEncoding items were not being (un)marshaled properly in Put, Get, etc (#125).
The module dependency on aws-sdk-go was also updated to the latest version.
Published by guregu over 4 years ago
This release fixes unmarshaling to return an error when unmarshaling a DynamoDB list into an array that is too small.
See notes for v1.7.1, which includes a similar fix for DynamoDB binary data.