Documentation ¶
Index ¶
- Constants
- func AnonymizedFormatNode(buf *TrackedBuffer, node *Node)
- func EncodeValue(buf *bytes.Buffer, value interface{}) error
- func ForceEOF(yylex interface{})
- func FormatImpossible(buf *TrackedBuffer, node *Node)
- func FormatNode(buf *TrackedBuffer, node *Node)
- func GetDBName(sql string) (string, error)
- func GetShardList(sql string, bindVariables map[string]interface{}, tabletKeys []key.KeyspaceId) (shardlist []int, err error)
- func SetAllowComments(yylex interface{}, allow bool)
- func SetParseTree(yylex interface{}, root *Node)
- type BindLocation
- type DDLPlan
- type EncoderFunc
- type ExecPlan
- type IndexScore
- type Node
- func (node *Node) At(index int) *Node
- func (node *Node) GenerateAnonymizedQuery() string
- func (node *Node) GenerateDefaultQuery(tableInfo *schema.Table) *ParsedQuery
- func (node *Node) GenerateDeleteOuterQuery(pkIndex *schema.Index) *ParsedQuery
- func (node *Node) GenerateDeleteSubquery(tableInfo *schema.Table) *ParsedQuery
- func (node *Node) GenerateEqualOuterQuery(tableInfo *schema.Table) *ParsedQuery
- func (node *Node) GenerateFieldQuery() *ParsedQuery
- func (node *Node) GenerateFullQuery() *ParsedQuery
- func (node *Node) GenerateInOuterQuery(tableInfo *schema.Table) *ParsedQuery
- func (node *Node) GenerateInsertOuterQuery() *ParsedQuery
- func (node *Node) GenerateSelectLimitQuery() *ParsedQuery
- func (node *Node) GenerateSelectSubquery(tableInfo *schema.Table, index string) *ParsedQuery
- func (node *Node) GenerateUpdateOuterQuery(pkIndex *schema.Index) *ParsedQuery
- func (node *Node) GenerateUpdateSubquery(tableInfo *schema.Table) *ParsedQuery
- func (node *Node) Len() int
- func (node *Node) NodeString(level int, buf *bytes.Buffer)
- func (node *Node) Pop() *Node
- func (node *Node) Push(value *Node) *Node
- func (node *Node) PushLimit()
- func (node *Node) PushTwo(left *Node, right *Node) *Node
- func (node *Node) Set(index int, val *Node)
- func (node *Node) String() (out string)
- func (node *Node) TreeString() string
- type ParsedQuery
- type ParserError
- type PlanType
- type ReasonType
- type RoutingPlan
- type StreamExecPlan
- type TableGetter
- type Tokenizer
- type TrackedBuffer
Constants ¶
const ( NO_MATCH = scoreValue(-1) PERFECT_SCORE = scoreValue(0) )
const ( ROUTE_BY_CONDITION = iota ROUTE_BY_VALUE )
const ( EID_NODE = iota VALUE_NODE LIST_NODE OTHER_NODE )
const ( SELECT_COMMENT_OFFSET = iota SELECT_DISTINCT_OFFSET SELECT_EXPR_OFFSET SELECT_FROM_OFFSET SELECT_WHERE_OFFSET SELECT_GROUP_OFFSET SELECT_HAVING_OFFSET SELECT_ORDER_OFFSET SELECT_LIMIT_OFFSET SELECT_FOR_UPDATE_OFFSET )
Offsets for select parse tree. These need to match the Push order in the select_statement rule.
const ( INSERT_COMMENT_OFFSET = iota INSERT_TABLE_OFFSET INSERT_COLUMN_LIST_OFFSET INSERT_VALUES_OFFSET INSERT_ON_DUP_OFFSET )
const ( UPDATE_COMMENT_OFFSET = iota UPDATE_TABLE_OFFSET UPDATE_LIST_OFFSET UPDATE_WHERE_OFFSET UPDATE_ORDER_OFFSET UPDATE_LIMIT_OFFSET )
const ( DELETE_COMMENT_OFFSET = iota DELETE_TABLE_OFFSET DELETE_WHERE_OFFSET DELETE_ORDER_OFFSET DELETE_LIMIT_OFFSET )
const ALL = 57359
const ALTER = 57410
const AND = 57400
const AS = 57361
const ASC = 57368
const BETWEEN = 57366
const BY = 57355
const CASE = 57404
const CASE_WHEN = 57423
const COLUMN_LIST = 57437
const COMMENT = 57357
const COMMENT_LIST = 57436
const CREATE = 57409
const CROSS = 57395
const DEFAULT = 57374
const DELETE = 57349
const DESC = 57369
const DISTINCT = 57360
const DROP = 57411
const DUPLICATE = 57372
const ELSE = 57407
const END = 57408
const EOFCHAR = 0x100
const EXCEPT = 57387
const EXISTS = 57362
const FOR = 57358
const FORCE = 57398
const FOR_UPDATE = 57428
const FROM = 57350
const FUNCTION = 57427
const GE = 57381
const GROUP = 57352
const HAVING = 57353
const ID = 57376
const IF = 57417
const IGNORE = 57416
const IN = 57363
const INDEX = 57414
const INNER = 57393
const INSERT = 57347
const INTERSECT = 57388
const INTO = 57371
const IS = 57364
const IS_NOT_NULL = 57434
const IS_NULL = 57433
const JOIN = 57389
const KEY = 57373
const LE = 57380
const LEFT = 57391
const LEX_ERROR = 57384
const LIKE = 57365
const LIMIT = 57356
const MINUS = 57386
const NATURAL = 57396
const NE = 57382
const NODE_LIST = 57420
const NOT = 57402
const NOT_BETWEEN = 57432
const NOT_FOR_UPDATE = 57429
const NOT_IN = 57430
const NOT_LIKE = 57431
const NO_DISTINCT = 57426
const NULL = 57367
const NULL_SAFE_EQUAL = 57383
const NUMBER = 57378
const ON = 57399
const OR = 57401
const ORDER = 57354
const OUTER = 57394
const RENAME = 57412
const RIGHT = 57392
const SELECT = 57346
const SELECT_STAR = 57425
const SET = 57375
const STRAIGHT_JOIN = 57390
const STRING = 57377
const TABLE = 57413
const TABLE_EXPR = 57438
const THEN = 57406
const TO = 57415
const UMINUS = 57422
const UNARY = 57403
const UNION = 57385
const UNION_ALL = 57435
const UNIQUE = 57418
const UPDATE = 57348
const UPLUS = 57421
const USE = 57397
const USING = 57419
const VALUES = 57370
const VALUE_ARG = 57379
const WHEN = 57405
const WHEN_LIST = 57424
const WHERE = 57351
Variables ¶
This section is empty.
Functions ¶
func AnonymizedFormatNode ¶
func AnonymizedFormatNode(buf *TrackedBuffer, node *Node)
AnonymizedFormatNode is just like FormatNode except that it anonymizes all values in the SQL.
func EncodeValue ¶
func FormatImpossible ¶
func FormatImpossible(buf *TrackedBuffer, node *Node)
FormatImpossible is a callback function used by TrackedBuffer to generate a modified version of the query where all selects have impossible where clauses. It overrides a few node types and passes the rest down to the default FormatNode.
func FormatNode ¶
func FormatNode(buf *TrackedBuffer, node *Node)
FormatNode is the standard node formatter that generates the SQL statement from the AST.
func GetDBName ¶
GetDBName parses the specified DML and returns the db name if it was used to qualify the table name. It returns an error if parsing fails or if the statement is not a DML.
func GetShardList ¶
func SetAllowComments ¶
func SetAllowComments(yylex interface{}, allow bool)
func SetParseTree ¶
func SetParseTree(yylex interface{}, root *Node)
Types ¶
type BindLocation ¶
type BindLocation struct {
Offset, Length int
}
type EncoderFunc ¶
type ExecPlan ¶
type ExecPlan struct { PlanId PlanType Reason ReasonType TableName string // DisplayQuery is the displayable version of the // original query. Depending on the mode, it may be // the original query, or an anonymized version. DisplayQuery string // FieldQuery is used to fetch field info FieldQuery *ParsedQuery // FullQuery will be set for all plans. FullQuery *ParsedQuery // For PK plans, only OuterQuery is set. // For SUBQUERY plans, Subquery is also set. // IndexUsed is set only for PLAN_SELECT_SUBQUERY OuterQuery *ParsedQuery Subquery *ParsedQuery IndexUsed string // For selects, columns to be returned // For PLAN_INSERT_SUBQUERY, columns to be inserted ColumnNumbers []int // PLAN_PK_EQUAL, PLAN_DML_PK: where clause values // PLAN_PK_IN: IN clause values // PLAN_INSERT_PK: values clause PKValues []interface{} // For update: set clause if pk is changing SecondaryPKValues []interface{} // For PLAN_INSERT_SUBQUERY: pk columns in the subquery result SubqueryPKColumns []int // PLAN_SET SetKey string SetValue interface{} }
ExecPlan is built for selects and DMLs. PK Values values within ExecPlan can be: sqltypes.Value: sourced form the query, or string: bind variable name starting with ':', or nil if no value was specified
type IndexScore ¶
func NewIndexScore ¶
func NewIndexScore(index *schema.Index) *IndexScore
func NewIndexScoreList ¶
func NewIndexScoreList(indexes []*schema.Index) []*IndexScore
func (*IndexScore) FindMatch ¶
func (is *IndexScore) FindMatch(columnName string) int
func (*IndexScore) GetScore ¶
func (is *IndexScore) GetScore() scoreValue
type Node ¶
func NewParseNode ¶
func NewSimpleParseNode ¶
func (*Node) GenerateAnonymizedQuery ¶
func (*Node) GenerateDefaultQuery ¶
func (node *Node) GenerateDefaultQuery(tableInfo *schema.Table) *ParsedQuery
func (*Node) GenerateDeleteOuterQuery ¶
func (node *Node) GenerateDeleteOuterQuery(pkIndex *schema.Index) *ParsedQuery
func (*Node) GenerateDeleteSubquery ¶
func (node *Node) GenerateDeleteSubquery(tableInfo *schema.Table) *ParsedQuery
func (*Node) GenerateEqualOuterQuery ¶
func (node *Node) GenerateEqualOuterQuery(tableInfo *schema.Table) *ParsedQuery
func (*Node) GenerateFieldQuery ¶
func (node *Node) GenerateFieldQuery() *ParsedQuery
func (*Node) GenerateFullQuery ¶
func (node *Node) GenerateFullQuery() *ParsedQuery
----------------------------------------------- Query Generation
func (*Node) GenerateInOuterQuery ¶
func (node *Node) GenerateInOuterQuery(tableInfo *schema.Table) *ParsedQuery
func (*Node) GenerateInsertOuterQuery ¶
func (node *Node) GenerateInsertOuterQuery() *ParsedQuery
func (*Node) GenerateSelectLimitQuery ¶
func (node *Node) GenerateSelectLimitQuery() *ParsedQuery
func (*Node) GenerateSelectSubquery ¶
func (node *Node) GenerateSelectSubquery(tableInfo *schema.Table, index string) *ParsedQuery
func (*Node) GenerateUpdateOuterQuery ¶
func (node *Node) GenerateUpdateOuterQuery(pkIndex *schema.Index) *ParsedQuery
func (*Node) GenerateUpdateSubquery ¶
func (node *Node) GenerateUpdateSubquery(tableInfo *schema.Table) *ParsedQuery
func (*Node) TreeString ¶
type ParsedQuery ¶
type ParsedQuery struct { Query string BindLocations []BindLocation }
func GenerateSubquery ¶
func (*ParsedQuery) GenerateQuery ¶
func (*ParsedQuery) MarshalJSON ¶
func (pq *ParsedQuery) MarshalJSON() ([]byte, error)
type ParserError ¶
type ParserError struct {
Message string
}
func NewParserError ¶
func NewParserError(format string, args ...interface{}) ParserError
func (ParserError) Error ¶
func (err ParserError) Error() string
type ReasonType ¶
type ReasonType int
const ( REASON_DEFAULT ReasonType = iota REASON_SELECT REASON_TABLE REASON_NOCACHE REASON_SELECT_LIST REASON_FOR_UPDATE REASON_WHERE REASON_ORDER REASON_PKINDEX REASON_NOINDEX_MATCH REASON_TABLE_NOINDEX REASON_PK_CHANGE REASON_COMPOSITE_PK REASON_HAS_HINTS REASON_UPSERT )
func (ReasonType) MarshalJSON ¶
func (rt ReasonType) MarshalJSON() ([]byte, error)
func (ReasonType) String ¶
func (rt ReasonType) String() string
type RoutingPlan ¶
type RoutingPlan struct {
// contains filtered or unexported fields
}
type StreamExecPlan ¶
type StreamExecPlan struct { DisplayQuery string FullQuery *ParsedQuery }
func StreamExecParse ¶
func StreamExecParse(sql string, sensitiveMode bool) (plan *StreamExecPlan, err error)
type Tokenizer ¶
type Tokenizer struct { InStream io.ByteReader AllowComments bool ForceEOF bool LastError string ParseTree *Node // contains filtered or unexported fields }
func NewStringTokenizer ¶
func (*Tokenizer) ConsumeNext ¶
type TrackedBuffer ¶
TrackedBuffer is used to rebuild a query from the ast. bindLocations keeps track of locations in the buffer that use bind variables for efficient future substitutions. nodeFormatter is the formatting function the buffer will use to format a node. By default(nil), it's FormatNode. But you can supply a different formatting function if you want to generate a query that's different from the default.
func NewTrackedBuffer ¶
func NewTrackedBuffer(nodeFormatter func(buf *TrackedBuffer, node *Node)) *TrackedBuffer
func (*TrackedBuffer) Fprintf ¶
func (buf *TrackedBuffer) Fprintf(format string, values ...interface{})
Fprintf mimics fmt.Fprintf, but limited to Node(%v), Node.Value(%s) and string(%s). It also allows a %a for a value argument, in which case it adds tracking info for future substitutions.
func (*TrackedBuffer) ParsedQuery ¶
func (buf *TrackedBuffer) ParsedQuery() *ParsedQuery
func (*TrackedBuffer) WriteArg ¶
func (buf *TrackedBuffer) WriteArg(arg string)
WriteArg writes a value argument into the buffer. arg should not contain the ':' prefix. It also adds tracking info for future substitutions.