mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2020-11-18 19:53:40 -08:00
* use dep for vendoring * lets encrypt * moved web to transfer.sh-web repo * single command install * added first tests
186 lines
4.4 KiB
Go
Executable File
186 lines
4.4 KiB
Go
Executable File
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
|
|
}
|