2021-01-03 18:15:44 +05:30

133 lines
2.7 KiB
Go

package godruid
// Defines some small spec like structs here.
// ---------------------------------
// LimitSpec
// ---------------------------------
type Limit struct {
Type string `json:"type"`
Limit int `json:"limit"`
Columns []Column `json:"columns,omitempty"`
}
const (
DirectionASC = "ASCENDING"
DirectionDESC = "DESCENDING"
)
type Column struct {
AsNumber bool `json:"asNumber"`
Dimension string `json:"dimension"`
Direction string `json:"direction"`
}
func LimitDefault(limit int, columns ...[]Column) *Limit {
var realColums []Column
if len(columns) > 0 {
realColums = columns[0]
}
return &Limit{
Type: "default",
Limit: limit,
Columns: realColums,
}
}
// ---------------------------------
// SearchQuerySpec
// ---------------------------------
type SearchQuery struct {
Type string `json:"type"`
Value interface{} `json:"value,omitempty"`
Values []interface{} `json:"values,omitempty"`
}
func SearchQueryInsensitiveContains(value interface{}) *SearchQuery {
return &SearchQuery{
Type: "insensitive_contains",
Value: value,
}
}
func SearchQueryFragmentSearch(values []interface{}) *SearchQuery {
return &SearchQuery{
Type: "fragment",
Values: values,
}
}
// ---------------------------------
// ToInclude
// ---------------------------------
type ToInclude struct {
Type string `json:"type"`
Columns []string `json:"columns,omitempty"`
}
var (
ToIncludeAll = &ToInclude{Type: "All"}
ToIncludeNone = &ToInclude{Type: "None"}
)
func ToIncludeList(columns []string) *ToInclude {
return &ToInclude{
Type: "list",
Columns: columns,
}
}
// ---------------------------------
// TopNMetricSpec
// ---------------------------------
type TopNMetric struct {
Type string `json:"type"`
Metric interface{} `json:"metric,omitempty"`
PreviousStop string `json:"previousStop"`
}
func TopNMetricNumeric(metric string) *TopNMetric {
return &TopNMetric{
Type: "numeric",
Metric: metric,
}
}
func TopNMetricLexicographic(previousStop string) *TopNMetric {
return &TopNMetric{
Type: "lexicographic",
PreviousStop: previousStop,
}
}
func TopNMetricAlphaNumeric(previousStop string) *TopNMetric {
return &TopNMetric{
Type: "alphaNumeric",
PreviousStop: previousStop,
}
}
func TopNMetricInverted(metric *TopNMetric) *TopNMetric {
return &TopNMetric{
Type: "inverted",
Metric: metric,
}
}
// ---------------------------------
// SearchSortSpec
// ---------------------------------
type SearchSort struct {
Type string `json:"type"`
}
var (
SearchSortLexicographic = &SearchSort{Type: "lexicographic"}
SearchSortStrlen = &SearchSort{Type: "strlen"}
)