-
Notifications
You must be signed in to change notification settings - Fork 1
/
option.go
146 lines (117 loc) · 3.98 KB
/
option.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package cuckle
// Option stores optional query parameters.
type Option map[option]interface{}
// Options with no parameters.
var (
// OptionAllowFiltering allows filtering result rows.
OptionAllowFiltering Option = Option{optionAllowFiltering: nil}
// OptionClusteringOrder is the ordering of rows on disk.
OptionClusteringOrder Option = Option{optionClusteringOrder: nil}
// OptionCompactStorage uses a more compact but less flexible layout for tables.
OptionCompactStorage Option = Option{optionCompactStorage: nil}
// OptionDistinct removes rows with duplicate partition keys from result rows.
OptionDistinct Option = Option{optionDistinct: nil}
// OptionIfExists does not execute create queries for existing primary keys.
OptionIfExists Option = Option{optionIfExists: nil}
// OptionIfNotExists does not execute drop queries for invalid primary keys.
OptionIfNotExists Option = Option{optionIfNotExists: nil}
// OptionIndexKeys creates an index on map keys.
OptionIndexKeys Option = Option{optionIndexKeys: nil}
// OptionJSON uses JSON for insert and select queries.
OptionJSON Option = Option{optionJSON: nil}
// OptionReplace replaces any existing aggregates and functions.
OptionReplace Option = Option{optionReplace: nil}
)
// OptionAliases returns an Option for column aliases.
func OptionAliases(aliases map[Identifier]Identifier) Option {
return Option{optionAliases: aliases}
}
// OptionClass returns an Option for a custom index class.
func OptionClass(class string) Option {
return Option{optionClass: class}
}
// OptionClassOptions returns an Option for custom index class options.
func OptionClassOptions(options map[Term]Term) Option {
return Option{optionClassOptions: options}
}
// OptionFinalFunc returns an Option for an aggregate final function.
func OptionFinalFunc(finalFunc Identifier) Option {
return Option{optionFinalFunc: finalFunc}
}
// OptionIf returns an Option for lightweight transaction conditions.
func OptionIf(r ...Relation) Option {
return Option{optionIf: r}
}
// OptionInitCond returns an Option for an aggregate initial condition.
func OptionInitCond(initCond Term) Option {
return Option{optionInitCond: initCond}
}
// OptionLimit returns an Option for a result row limit.
func OptionLimit(limit int) Option {
return Option{optionLimit: limit}
}
// OptionName returns an Option for a name.
func OptionName(name Identifier) Option {
return Option{optionName: name}
}
// OptionOrder returns an Option for ordering result rows by columns and
// directions. There must be the same number of columns and directions.
func OptionOrder(i []Identifier, o []Order) Option {
return Option{optionOrderByColumns: i, optionOrderByDirections: o}
}
// OptionProperties returns an Option for mapping property keys to values.
func OptionProperties(options map[Identifier]Term) Option {
return Option{optionProperties: options}
}
// OptionSelectors returns an Option for selecting column values.
func OptionSelectors(s ...Selector) Option {
return Option{optionSelectors: s}
}
// OptionTTL returns an Option for insert and update time-to-lives.
func OptionTTL(ttl int64) Option {
return Option{optionTTL: ttl}
}
// OptionTimestamp returns an Option for insert and update timestamps.
func OptionTimestamp(timestamp int64) Option {
return Option{optionTimestamp: timestamp}
}
// OptionWhere returns an Option for conditions.
func OptionWhere(r ...Relation) Option {
return Option{optionWhere: r}
}
func combine(os []Option) Option {
var combined = Option{}
for _, o := range os {
for k, v := range o {
combined[k] = v
}
}
return combined
}
type option int
const (
optionAliases option = iota
optionAllowFiltering
optionClass
optionClusteringOrder
optionCompactStorage
optionDistinct
optionFinalFunc
optionIf
optionIfExists
optionIfNotExists
optionIndexKeys
optionInitCond
optionJSON
optionLimit
optionName
optionClassOptions
optionOrderByColumns
optionOrderByDirections
optionProperties
optionReplace
optionSelectors
optionTTL
optionTimestamp
optionWhere
)