Documentation
¶
Index ¶
- Constants
- func AsSelectorError(err error, target any) bool
- func IsSelectorError(err error) bool
- func ResolveFieldsFromSchema(dest any) (map[SelectorName]*gormschema.Field, error)
- func SelectorFieldResolver(model any) (*selectorFieldResolver, error)
- type AnnotationSelector
- func NewAnnotationSelector(input string) (*AnnotationSelector, error)
- func NewAnnotationSelectorFromMap(annotations map[string]string) (*AnnotationSelector, error)
- func NewAnnotationSelectorFromMapOrDie(annotations map[string]string) *AnnotationSelector
- func NewAnnotationSelectorOrDie(input string) *AnnotationSelector
- type FieldSelector
- func NewFieldSelector(input string, opts ...FieldSelectorOption) (*FieldSelector, error)
- func NewFieldSelectorFromMap(fields map[string]string, opts ...FieldSelectorOption) (*FieldSelector, error)
- func NewFieldSelectorFromMapOrDie(fields map[string]string, opts ...FieldSelectorOption) *FieldSelector
- func NewFieldSelectorOrDie(input string, opts ...FieldSelectorOption) *FieldSelector
- type FieldSelectorOption
- type LabelSelector
- type SelectorError
- type SelectorField
- type SelectorName
- type SelectorNameMapping
- type SelectorNameSet
- type SelectorOpt
- type SelectorResolver
- type SelectorType
Constants ¶
const ( Unknown = iota Bool Int SmallInt BigInt Float String Timestamp BoolArray IntArray SmallIntArray BigIntArray FloatArray TextArray TimestampArray Jsonb )
Variables ¶
This section is empty.
Functions ¶
func AsSelectorError ¶
AsSelectorError checks if an error is of type SelectorError and assigns it to target.
func IsSelectorError ¶
IsSelectorError checks if an error is of type SelectorError.
func ResolveFieldsFromSchema ¶
func ResolveFieldsFromSchema(dest any) (map[SelectorName]*gormschema.Field, error)
ResolveFieldsFromSchema parses the schema of the given model and extracts the fields annotated with the `selector` tag. This is useful for determining which fields can be used in selector queries.
func SelectorFieldResolver ¶
SelectorFieldResolver initializes a new selectorFieldResolver. It resolves schema fields from the provided model. If the model implements SelectorNameMapping or SelectorResolver, it will be used to resolve custom selectors.
Types ¶
type AnnotationSelector ¶ added in v0.4.0
type AnnotationSelector struct {
// contains filtered or unexported fields
}
func NewAnnotationSelector ¶ added in v0.4.0
func NewAnnotationSelector(input string) (*AnnotationSelector, error)
NewAnnotationSelector creates an AnnotationSelector from a string using Kubernetes-style label selector syntax.
Parameters:
input - A string representing the annotation selector in Kubernetes syntax.
Example:
selector, err := NewAnnotationSelector("env=prod,tier=backend")
// selector represents: "env=prod,tier=backend"
func NewAnnotationSelectorFromMap ¶ added in v0.4.0
func NewAnnotationSelectorFromMap(annotations map[string]string) (*AnnotationSelector, error)
NewAnnotationSelectorFromMap creates an AnnotationSelector from a map of annotations.
Example:
annotations := map[string]string{"env": "prod", "tier": "backend"}
selector, err := NewAnnotationSelectorFromMap(annotations)
// selector represents: "env!=prod,tier!=backend"
func NewAnnotationSelectorFromMapOrDie ¶ added in v0.4.0
func NewAnnotationSelectorFromMapOrDie(annotations map[string]string) *AnnotationSelector
NewAnnotationSelectorFromMapOrDie creates an AnnotationSelector from a map of annotations. It panics if the creation fais.
Example:
annotations := map[string]string{"env": "prod", "tier": "backend"}
selector := NewAnnotationSelectorFromMapOrDie(annotations)
// selector represents: "env=prod,tier=backend"
func NewAnnotationSelectorOrDie ¶ added in v0.4.0
func NewAnnotationSelectorOrDie(input string) *AnnotationSelector
NewAnnotationSelectorOrDie creates an AnnotationSelector from a string using Kubernetes-style label selector syntax. It panics if the creation fais.
Parameters:
input - A string representing the annotation selector in Kubernetes syntax.
Example:
selector := NewAnnotationSelectorOrDie("env=prod,tier=backend")
// selector represents: "env=prod,tier=backend"
func (*AnnotationSelector) Parse ¶ added in v0.4.0
func (s *AnnotationSelector) Parse(ctx context.Context, dest any, name SelectorName) (string, []any, error)
Parse converts the AnnotationSelector into a SQL query with parameters. The method resolves the destination structure (dest) and maps it to the annotation field to generate the query.
Parameters:
ctx - The context for managing operation lifecycle. dest - The target object (e.g., database model) providing field definitions. name - The selector name to resolve the annotation field.
Returns:
string - The generated SQL query string. []any - Parameters to be used with the SQL query. error - An error if parsing or field resolution fais.
Example:
ls, _ := NewAnnotationSelector("key1=value1,key2!=value2")
query, args, err := s.Parse(ctx, &MyModel{}, "annotations")
if err != nil {
log.Fatalf("Failed to parse annotation selector: %v", err)
}
fmt.Printf("Query: %s, Args: %v\n", query, args)
func (*AnnotationSelector) Tokenize ¶ added in v0.4.0
func (s *AnnotationSelector) Tokenize(ctx context.Context, input any) (queryparser.TokenSet, error)
Tokenize converts a selector string into a set of queryparser tokens.
type FieldSelector ¶ added in v0.4.0
type FieldSelector struct {
// contains filtered or unexported fields
}
func NewFieldSelector ¶
func NewFieldSelector(input string, opts ...FieldSelectorOption) (*FieldSelector, error)
NewFieldSelector creates a FieldSelector from a given string input using Kubernetes selector syntax. This function parses the input string to generate a FieldSelector that can be used for filtering resources based on specified field conditions.
Example:
fs, err := NewFieldSelector("key1=value1,key2!=value2")
if err != nil {
log.Fatalf("Failed to create FieldSelector: %v", err)
}
// Successfully creates a FieldSelector for the given conditions.
Parameters:
input - A string containing the field selector conditions in Kubernetes selector syntax.
func NewFieldSelectorFromMap ¶ added in v0.4.0
func NewFieldSelectorFromMap(fields map[string]string, opts ...FieldSelectorOption) (*FieldSelector, error)
NewFieldSelectorFromMap creates a FieldSelector from a map of key-value pairs, where each pair represents a field selector condition.
Example:
fs, err := NewFieldSelectorFromMap(map[string]string{"key1": "value1", "key2": "value2"})
// Equivalent to creating a selector: "key1=value1,key2=value2"
func NewFieldSelectorFromMapOrDie ¶ added in v0.4.0
func NewFieldSelectorFromMapOrDie(fields map[string]string, opts ...FieldSelectorOption) *FieldSelector
NewFieldSelectorFromMapOrDie creates a FieldSelector from a map of key-value pairs, where each pair represents a field selector condition. If the operation fails, it panics.
Example:
fs := NewFieldSelectorFromMapOrDie(map[string]string{"key1": "value1", "key2": "value2"})
// Equivalent to creating a selector: "key1=value1,key2=value2"
func NewFieldSelectorOrDie ¶ added in v0.4.0
func NewFieldSelectorOrDie(input string, opts ...FieldSelectorOption) *FieldSelector
NewFieldSelectorOrDie creates a FieldSelector from a given string input using Kubernetes selector syntax. If the input is invalid or parsing fails, it panics.
This function is useful for cases where selector initialization is expected to succeed, and failure is considered a programming error.
Example:
fs := NewFieldSelectorOrDie("key1=value1,key2!=value2")
// Creates a FieldSelector for the given conditions.
Parameters:
input - A string containing the field selector conditions in Kubernetes selector syntax.
func (*FieldSelector) Add ¶ added in v0.4.0
func (fs *FieldSelector) Add(src *FieldSelector) *FieldSelector
Add merges the requirements from the given FieldSelector into the current FieldSelector.
func (*FieldSelector) Parse ¶ added in v0.4.0
Parse translates a FieldSelector into a SQL query with parameters. This method is responsible for resolving field names, operators, and values from the FieldSelector and generating a corresponding SQL query that can be executed against a database.
The method validates and processes the destination structure (dest) to map field names and types correctly, ensuring compatibility with the database schema.
Parameters:
ctx - A context.Context to manage the lifetime of the operation.
dest - The target object (e.g., a database model) that provides field definitions
for resolving selector fields.
Returns:
string - The generated SQL query as a string. []any - A slice of arguments to be used as parameters for the SQL query. error - An error if the parsing fails due to invalid input, unresolved fields, or other issues.
Example:
fs, _ := NewFieldSelector("key1=value1")
query, args, err := fs.Parse(ctx, &MyModel{})
if err != nil {
log.Fatalf("Failed to parse selector: %v", err)
}
fmt.Printf("Query: %s, Args: %v\n", query, args)
func (*FieldSelector) Tokenize ¶ added in v0.4.0
func (fs *FieldSelector) Tokenize(ctx context.Context, input any) (queryparser.TokenSet, error)
Tokenize converts a selector string into a set of queryparser tokens.
type FieldSelectorOption ¶ added in v0.4.0
type FieldSelectorOption func(*FieldSelector)
func WithPrivateSelectors ¶ added in v0.4.0
func WithPrivateSelectors() FieldSelectorOption
WithPrivateSelectors enables the use of private selectors in the FieldSelector. Private selectors are internal selectors that can be used for specific processing but are not exposed to the end-user for querying.
type LabelSelector ¶ added in v0.4.0
type LabelSelector struct {
// contains filtered or unexported fields
}
func NewLabelSelector ¶ added in v0.4.0
func NewLabelSelector(input string) (*LabelSelector, error)
NewLabelSelector creates a LabelSelector from a string using Kubernetes-style label selector syntax.
Parameters:
input - A string representing the label selector in Kubernetes syntax.
Example:
selector, err := NewLabelSelector("env=prod,tier=backend")
// selector represents: "env=prod,tier=backend"
func NewLabelSelectorFromMap ¶ added in v0.4.0
func NewLabelSelectorFromMap(labels map[string]string) (*LabelSelector, error)
NewLabelSelectorFromMap creates a LabelSelector from a map of labels.
Example:
labels := map[string]string{"env": "prod", "tier": "backend"}
selector, err := NewLabelSelectorFromMap(labels)
// selector represents: "env=prod,tier=backend"
func NewLabelSelectorFromMapOrDie ¶ added in v0.4.0
func NewLabelSelectorFromMapOrDie(labels map[string]string) *LabelSelector
NewLabelSelectorFromMapOrDie creates a LabelSelector from a map of labels. It panics if the creation fails.
Example:
labels := map[string]string{"env": "prod", "tier": "backend"}
selector := NewLabelSelectorFromMapOrDie(labels)
// selector represents: "env=prod,tier=backend"
func NewLabelSelectorOrDie ¶ added in v0.4.0
func NewLabelSelectorOrDie(input string) *LabelSelector
NewLabelSelectorOrDie creates a LabelSelector from a string using Kubernetes-style label selector syntax. It panics if the creation fails.
Parameters:
input - A string representing the label selector in Kubernetes syntax.
Example:
selector := NewLabelSelectorOrDie("env=prod,tier=backend")
// selector represents: "env=prod,tier=backend"
func (*LabelSelector) Parse ¶ added in v0.4.0
func (ls *LabelSelector) Parse(ctx context.Context, dest any, name SelectorName) (string, []any, error)
Parse converts the LabelSelector into a SQL query with parameters. The method resolves the destination structure (dest) and maps it to the label field to generate the query.
Parameters:
ctx - The context for managing operation lifecycle. dest - The target object (e.g., database model) providing field definitions. name - The selector name to resolve the label field.
Returns:
string - The generated SQL query string. []any - Parameters to be used with the SQL query. error - An error if parsing or field resolution fails.
Example:
ls, _ := NewLabelSelector("key1=value1,key2!=value2")
query, args, err := ls.Parse(ctx, &MyModel{}, "labels")
if err != nil {
log.Fatalf("Failed to parse label selector: %v", err)
}
fmt.Printf("Query: %s, Args: %v\n", query, args)
func (*LabelSelector) Tokenize ¶ added in v0.4.0
func (ls *LabelSelector) Tokenize(ctx context.Context, input any) (queryparser.TokenSet, error)
Tokenize converts a selector string into a set of queryparser tokens.
type SelectorError ¶
SelectorError represents an error related to a selector, wrapping another error.
func NewSelectorError ¶
func NewSelectorError(selectorError, originalError error) *SelectorError
NewSelectorError creates a new SelectorError.
func (*SelectorError) Error ¶
func (e *SelectorError) Error() string
Error returns the string representation of the SelectorError.
func (*SelectorError) Unwrap ¶
func (e *SelectorError) Unwrap() error
Unwrap returns the original error.
type SelectorField ¶
type SelectorField struct {
Name SelectorName
Type SelectorType
FieldName string
FieldType gormschema.DataType
Options SelectorOpt
}
func (*SelectorField) IsArrayElement ¶ added in v0.4.0
func (sf *SelectorField) IsArrayElement() bool
IsArrayElement returns true if the selector is an element within an array.
func (*SelectorField) IsJSONBCast ¶
func (sf *SelectorField) IsJSONBCast() bool
IsJSONBCast returns true if the field's data type is 'jsonb' and the expected type is not Jsonb.
type SelectorName ¶ added in v0.4.0
type SelectorName interface {
String() string // Returns the string representation of the selector name.
}
SelectorName represents the name of a selector.
func NewHiddenSelectorName ¶ added in v0.4.0
func NewHiddenSelectorName(name string) SelectorName
NewHiddenSelectorName creates a new hidden selector.
func NewSelectorName ¶ added in v0.4.0
func NewSelectorName(name string) SelectorName
NewSelectorName creates a new SelectorName instance.
type SelectorNameMapping ¶ added in v0.4.0
type SelectorNameMapping interface {
// MapSelectorName maps a custom selector to one or more selectors.
MapSelectorName(selector SelectorName) []SelectorName
// ListSelectors returns all custom selectors.
ListSelectors() SelectorNameSet
}
SelectorNameMapping defines an interface for mapping a custom selector to one or more selectors defined for the model.
type SelectorNameSet ¶ added in v0.4.0
type SelectorNameSet struct {
*queryparser.Set[SelectorName]
}
func NewSelectorFieldNameSet ¶ added in v0.4.0
func NewSelectorFieldNameSet() SelectorNameSet
NewSelectorFieldNameSet initializes a new SelectorNameSet.
func (SelectorNameSet) Add ¶ added in v0.4.0
func (s SelectorNameSet) Add(items ...SelectorName) SelectorNameSet
Add is a wrapper for the embedded Set's Add method that returns SelectorNameSet.
type SelectorOpt ¶ added in v0.4.0
type SelectorOpt = map[string]struct{}
SelectorOpt represents a set of options for a selector.
type SelectorResolver ¶ added in v0.4.0
type SelectorResolver interface {
// ResolveSelector manually resolves a selector to a SelectorField instance.
ResolveSelector(selector SelectorName) (*SelectorField, error)
// ListSelectors returns all custom selectors.
ListSelectors() SelectorNameSet
}
SelectorResolver defines an interface for manually resolving a selector to specific SelectorField instances, enabling direct use of fields.
type SelectorType ¶ added in v0.4.0
type SelectorType int
SelectorType represents the type of a selector.
func (SelectorType) ArrayType ¶ added in v0.4.0
func (t SelectorType) ArrayType() SelectorType
func (SelectorType) IsArray ¶ added in v0.4.0
func (t SelectorType) IsArray() bool
func (SelectorType) String ¶ added in v0.4.0
func (t SelectorType) String() string