diff options
Diffstat (limited to 'vendor/github.com/goamz/goamz/dynamodb/attribute.go')
-rwxr-xr-x | vendor/github.com/goamz/goamz/dynamodb/attribute.go | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/vendor/github.com/goamz/goamz/dynamodb/attribute.go b/vendor/github.com/goamz/goamz/dynamodb/attribute.go new file mode 100755 index 000000000..38389ada2 --- /dev/null +++ b/vendor/github.com/goamz/goamz/dynamodb/attribute.go @@ -0,0 +1,185 @@ +package dynamodb + +import ( + "strconv" +) + +const ( + TYPE_STRING = "S" + TYPE_NUMBER = "N" + TYPE_BINARY = "B" + + TYPE_STRING_SET = "SS" + TYPE_NUMBER_SET = "NS" + TYPE_BINARY_SET = "BS" + + COMPARISON_EQUAL = "EQ" + COMPARISON_NOT_EQUAL = "NE" + COMPARISON_LESS_THAN_OR_EQUAL = "LE" + COMPARISON_LESS_THAN = "LT" + COMPARISON_GREATER_THAN_OR_EQUAL = "GE" + COMPARISON_GREATER_THAN = "GT" + COMPARISON_ATTRIBUTE_EXISTS = "NOT_NULL" + COMPARISON_ATTRIBUTE_DOES_NOT_EXIST = "NULL" + COMPARISON_CONTAINS = "CONTAINS" + COMPARISON_DOES_NOT_CONTAIN = "NOT_CONTAINS" + COMPARISON_BEGINS_WITH = "BEGINS_WITH" + COMPARISON_IN = "IN" + COMPARISON_BETWEEN = "BETWEEN" +) + +type Key struct { + HashKey string + RangeKey string +} + +type PrimaryKey struct { + KeyAttribute *Attribute + RangeAttribute *Attribute +} + +type Attribute struct { + Type string + Name string + Value string + SetValues []string + Exists string // exists on dynamodb? Values: "true", "false", or "" +} + +type AttributeComparison struct { + AttributeName string + ComparisonOperator string + AttributeValueList []Attribute // contains attributes with only types and names (value ignored) +} + +func NewEqualInt64AttributeComparison(attributeName string, equalToValue int64) *AttributeComparison { + numeric := NewNumericAttribute(attributeName, strconv.FormatInt(equalToValue, 10)) + return &AttributeComparison{attributeName, + COMPARISON_EQUAL, + []Attribute{*numeric}, + } +} + +func NewEqualStringAttributeComparison(attributeName string, equalToValue string) *AttributeComparison { + str := NewStringAttribute(attributeName, equalToValue) + return &AttributeComparison{attributeName, + COMPARISON_EQUAL, + []Attribute{*str}, + } +} + +func NewStringAttributeComparison(attributeName string, comparisonOperator string, value string) *AttributeComparison { + valueToCompare := NewStringAttribute(attributeName, value) + return &AttributeComparison{attributeName, + comparisonOperator, + []Attribute{*valueToCompare}, + } +} + +func NewNumericAttributeComparison(attributeName string, comparisonOperator string, value int64) *AttributeComparison { + valueToCompare := NewNumericAttribute(attributeName, strconv.FormatInt(value, 10)) + return &AttributeComparison{attributeName, + comparisonOperator, + []Attribute{*valueToCompare}, + } +} + +func NewBinaryAttributeComparison(attributeName string, comparisonOperator string, value bool) *AttributeComparison { + valueToCompare := NewBinaryAttribute(attributeName, strconv.FormatBool(value)) + return &AttributeComparison{attributeName, + comparisonOperator, + []Attribute{*valueToCompare}, + } +} + +func NewStringAttribute(name string, value string) *Attribute { + return &Attribute{ + Type: TYPE_STRING, + Name: name, + Value: value, + } +} + +func NewNumericAttribute(name string, value string) *Attribute { + return &Attribute{ + Type: TYPE_NUMBER, + Name: name, + Value: value, + } +} + +func NewBinaryAttribute(name string, value string) *Attribute { + return &Attribute{ + Type: TYPE_BINARY, + Name: name, + Value: value, + } +} + +func NewStringSetAttribute(name string, values []string) *Attribute { + return &Attribute{ + Type: TYPE_STRING_SET, + Name: name, + SetValues: values, + } +} + +func NewNumericSetAttribute(name string, values []string) *Attribute { + return &Attribute{ + Type: TYPE_NUMBER_SET, + Name: name, + SetValues: values, + } +} + +func NewBinarySetAttribute(name string, values []string) *Attribute { + return &Attribute{ + Type: TYPE_BINARY_SET, + Name: name, + SetValues: values, + } +} + +func (a *Attribute) SetType() bool { + switch a.Type { + case TYPE_BINARY_SET, TYPE_NUMBER_SET, TYPE_STRING_SET: + return true + } + return false +} + +func (a *Attribute) SetExists(exists bool) *Attribute { + if exists { + a.Exists = "true" + } else { + a.Exists = "false" + } + return a +} + +func (k *PrimaryKey) HasRange() bool { + return k.RangeAttribute != nil +} + +// Useful when you may have many goroutines using a primary key, so they don't fuxor up your values. +func (k *PrimaryKey) Clone(h string, r string) []Attribute { + pk := &Attribute{ + Type: k.KeyAttribute.Type, + Name: k.KeyAttribute.Name, + Value: h, + } + + result := []Attribute{*pk} + + if k.HasRange() { + rk := &Attribute{ + Type: k.RangeAttribute.Type, + Name: k.RangeAttribute.Name, + Value: r, + } + + result = append(result, *rk) + } + + return result +} |