Documentation ¶
Index ¶
- Constants
- type Action
- type BindVarCond
- type Map
- func (qri *Map) FilterByPlan(query string, planid planbuilder.PlanType, tableNames ...string) (newqrs *Rules)
- func (qri *Map) Get(ruleSource string) (*Rules, error)
- func (qri *Map) MarshalJSON() ([]byte, error)
- func (qri *Map) RegisterSource(ruleSource string)
- func (qri *Map) SetRules(ruleSource string, newRules *Rules) error
- func (qri *Map) UnRegisterSource(ruleSource string)
- type Operator
- type Rule
- func (qr *Rule) AddBindVarCond(name string, onAbsent, onMismatch bool, op Operator, value any) error
- func (qr *Rule) AddPlanCond(planType planbuilder.PlanType)
- func (qr *Rule) AddTableCond(tableName string)
- func (cached *Rule) CachedSize(alloc bool) int64
- func (qr *Rule) Copy() (newqr *Rule)
- func (qr *Rule) Equal(other *Rule) bool
- func (qr *Rule) FilterByPlan(query string, planid planbuilder.PlanType, tableNames []string) (newqr *Rule)
- func (qr *Rule) GetAction(ip, user string, bindVars map[string]*querypb.BindVariable, ...) Action
- func (qr *Rule) MarshalJSON() ([]byte, error)
- func (qr *Rule) SetIPCond(pattern string) (err error)
- func (qr *Rule) SetLeadingCommentCond(pattern string) (err error)
- func (qr *Rule) SetQueryCond(pattern string) (err error)
- func (qr *Rule) SetTrailingCommentCond(pattern string) (err error)
- func (qr *Rule) SetUserCond(pattern string) (err error)
- type Rules
- func (qrs *Rules) Add(qr *Rule)
- func (qrs *Rules) Append(otherqrs *Rules)
- func (cached *Rules) CachedSize(alloc bool) int64
- func (qrs *Rules) Copy() (newqrs *Rules)
- func (qrs *Rules) CopyUnderlying() []*Rule
- func (qrs *Rules) Delete(name string) (qr *Rule)
- func (qrs *Rules) Equal(other *Rules) bool
- func (qrs *Rules) FilterByPlan(query string, planid planbuilder.PlanType, tableNames ...string) (newqrs *Rules)
- func (qrs *Rules) Find(name string) (qr *Rule)
- func (qrs *Rules) GetAction(ip, user string, bindVars map[string]*querypb.BindVariable, ...) (action Action, cancelCtx context.Context, timeout time.Duration, desc string)
- func (qrs *Rules) MarshalJSON() ([]byte, error)
- func (qrs *Rules) UnmarshalJSON(data []byte) (err error)
Constants ¶
const ( QRContinue = Action(iota) QRFail QRFailRetry QRBuffer )
These are actions.
const ( QRNoOp = Operator(iota) QREqual QRNotEqual QRLessThan QRGreaterEqual QRGreaterThan QRLessEqual QRMatch QRNoMatch QRNumOp )
These are comparison operators.
const ( QROK = iota QRMismatch QROutOfRange )
These are return states.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Action ¶
type Action int
Action specifies the list of actions to perform when a Rule is triggered.
func (Action) MarshalJSON ¶
MarshalJSON marshals to JSON.
type BindVarCond ¶
type BindVarCond struct {
// contains filtered or unexported fields
}
BindVarCond represents a bind var condition.
func (*BindVarCond) CachedSize ¶ added in v0.10.0
func (cached *BindVarCond) CachedSize(alloc bool) int64
func (BindVarCond) MarshalJSON ¶
func (bvc BindVarCond) MarshalJSON() ([]byte, error)
MarshalJSON marshals to JSON.
type Map ¶
type Map struct {
// contains filtered or unexported fields
}
Map is the maintainer of Rules from multiple sources
func (*Map) FilterByPlan ¶
func (qri *Map) FilterByPlan(query string, planid planbuilder.PlanType, tableNames ...string) (newqrs *Rules)
FilterByPlan creates a new Rules by prefiltering on all query rules that are contained in internal Rules structures, in other words, query rules from all predefined sources will be applied.
func (*Map) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Map) RegisterSource ¶
RegisterSource registers a query rule source name with Map.
func (*Map) SetRules ¶
SetRules takes an external Rules structure and overwrite one of the internal Rules as designated by ruleSource parameter.
func (*Map) UnRegisterSource ¶
UnRegisterSource removes a registered query rule source name.
type Operator ¶
type Operator int
Operator represents the list of operators.
func MapStrOperator ¶
MapStrOperator maps a string representation to an Operator.
func (Operator) MarshalJSON ¶
MarshalJSON marshals to JSON.
type Rule ¶
Rule represents one rule (conditions-action). Name is meant to uniquely identify a rule. Description is a human readable comment that describes the rule. For a Rule to fire, all conditions of the Rule have to match. For example, an empty Rule will match all requests. Every Rule has an associated Action. If all the conditions of the Rule are met, then the Action is triggerred.
func BuildQueryRule ¶
BuildQueryRule builds a query rule from a ruleInfo.
func NewBufferedTableQueryRule ¶ added in v0.14.0
func NewBufferedTableQueryRule(cancelCtx context.Context, tableName string, bufferTimeout time.Duration, description string) (qr *Rule)
NewBufferedTableQueryRule creates a new buffer Rule.
func NewQueryRule ¶
NewQueryRule creates a new Rule.
func (*Rule) AddBindVarCond ¶
func (qr *Rule) AddBindVarCond(name string, onAbsent, onMismatch bool, op Operator, value any) error
AddBindVarCond adds a bind variable restriction to the Rule. All bind var conditions have to be satisfied for the Rule to be a match. name represents the name (not regexp) of the bind variable. onAbsent specifies the value of the condition if the bind variable is absent. onMismatch specifies the value of the condition if there's a type mismatch on the condition. For inequalities, the bindvar is the left operand and the value in the condition is the right operand: bindVar Operator value. Value & operator rules Type Operators Bindvar nil "" any type uint64 ==, !=, <, >=, >, <= whole numbers int64 ==, !=, <, >=, >, <= whole numbers string ==, !=, <, >=, >, <=, MATCH, NOMATCH []byte, string whole numbers can be: int, int8, int16, int32, int64, uint64
func (*Rule) AddPlanCond ¶
func (qr *Rule) AddPlanCond(planType planbuilder.PlanType)
AddPlanCond adds to the list of plans that can be matched for the rule to fire. This function acts as an OR: Any plan id match is considered a match.
func (*Rule) AddTableCond ¶
AddTableCond adds to the list of tableNames that can be matched for the rule to fire. This function acts as an OR: Any tableName match is considered a match.
func (*Rule) CachedSize ¶ added in v0.10.0
func (*Rule) FilterByPlan ¶
func (qr *Rule) FilterByPlan(query string, planid planbuilder.PlanType, tableNames []string) (newqr *Rule)
FilterByPlan returns a new Rule if the query and planid match. The new Rule will contain all the original constraints other than the plan and query. If the plan and query don't match the Rule, then it returns nil.
func (*Rule) GetAction ¶
func (qr *Rule) GetAction( ip, user string, bindVars map[string]*querypb.BindVariable, marginComments sqlparser.MarginComments, ) Action
GetAction returns the action for a single rule.
func (*Rule) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Rule) SetIPCond ¶
SetIPCond adds a regular expression condition for the client IP. It has to be a full match (not substring).
func (*Rule) SetLeadingCommentCond ¶ added in v0.12.0
SetLeadingCommentCond adds a regular expression condition for a leading query comment.
func (*Rule) SetQueryCond ¶
SetQueryCond adds a regular expression condition for the query.
func (*Rule) SetTrailingCommentCond ¶ added in v0.12.0
SetTrailingCommentCond adds a regular expression condition for a trailing query comment.
func (*Rule) SetUserCond ¶
SetUserCond adds a regular expression condition for the user name used by the client.
type Rules ¶
type Rules struct {
// contains filtered or unexported fields
}
Rules is used to store and execute rules for the tabletserver.
func (*Rules) CachedSize ¶ added in v0.10.0
func (*Rules) CopyUnderlying ¶ added in v0.10.0
CopyUnderlying makes a copy of the underlying rule array and returns it to the caller.
func (*Rules) Delete ¶
Delete deletes a Rule by name and returns the rule that was deleted. It returns nil if the rule was not found.
func (*Rules) FilterByPlan ¶
func (qrs *Rules) FilterByPlan(query string, planid planbuilder.PlanType, tableNames ...string) (newqrs *Rules)
FilterByPlan creates a new Rules by prefiltering on the query and planId. This allows us to create query plan specific Rules out of the original Rules. In the new rules, query, plans and tableNames predicates are empty.
func (*Rules) Find ¶
Find finds the first occurrence of a Rule by matching the Name field. It returns nil if the rule was not found.
func (*Rules) GetAction ¶
func (qrs *Rules) GetAction( ip, user string, bindVars map[string]*querypb.BindVariable, marginComments sqlparser.MarginComments, ) ( action Action, cancelCtx context.Context, timeout time.Duration, desc string)
GetAction runs the input against the rules engine and returns the action to be performed.
func (*Rules) MarshalJSON ¶
MarshalJSON marshals to JSON.
func (*Rules) UnmarshalJSON ¶
UnmarshalJSON unmarshals Rules.