sqlparser

package
v0.0.0-...-9a5932e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 10, 2014 License: BSD-3-Clause Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NO_MATCH      = scoreValue(-1)
	PERFECT_SCORE = scoreValue(0)
)
View Source
const (
	ROUTE_BY_CONDITION = iota
	ROUTE_BY_VALUE
)
View Source
const (
	EID_NODE = iota
	VALUE_NODE
	LIST_NODE
	OTHER_NODE
)
View Source
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.

View Source
const (
	INSERT_COMMENT_OFFSET = iota
	INSERT_TABLE_OFFSET
	INSERT_COLUMN_LIST_OFFSET
	INSERT_VALUES_OFFSET
	INSERT_ON_DUP_OFFSET
)
View Source
const (
	UPDATE_COMMENT_OFFSET = iota
	UPDATE_TABLE_OFFSET
	UPDATE_LIST_OFFSET
	UPDATE_WHERE_OFFSET
	UPDATE_ORDER_OFFSET
	UPDATE_LIMIT_OFFSET
)
View Source
const (
	DELETE_COMMENT_OFFSET = iota
	DELETE_TABLE_OFFSET
	DELETE_WHERE_OFFSET
	DELETE_ORDER_OFFSET
	DELETE_LIMIT_OFFSET
)
View Source
const ALL = 57359
View Source
const ALTER = 57410
View Source
const AND = 57400
View Source
const AS = 57361
View Source
const ASC = 57368
View Source
const BETWEEN = 57366
View Source
const BY = 57355
View Source
const CASE = 57404
View Source
const CASE_WHEN = 57423
View Source
const COLUMN_LIST = 57437
View Source
const COMMENT = 57357
View Source
const COMMENT_LIST = 57436
View Source
const CREATE = 57409
View Source
const CROSS = 57395
View Source
const DEFAULT = 57374
View Source
const DELETE = 57349
View Source
const DESC = 57369
View Source
const DISTINCT = 57360
View Source
const DROP = 57411
View Source
const DUPLICATE = 57372
View Source
const ELSE = 57407
View Source
const END = 57408
View Source
const EOFCHAR = 0x100
View Source
const EXCEPT = 57387
View Source
const EXISTS = 57362
View Source
const FOR = 57358
View Source
const FORCE = 57398
View Source
const FOR_UPDATE = 57428
View Source
const FROM = 57350
View Source
const FUNCTION = 57427
View Source
const GE = 57381
View Source
const GROUP = 57352
View Source
const HAVING = 57353
View Source
const ID = 57376
View Source
const IF = 57417
View Source
const IGNORE = 57416
View Source
const IN = 57363
View Source
const INDEX = 57414
View Source
const INNER = 57393
View Source
const INSERT = 57347
View Source
const INTERSECT = 57388
View Source
const INTO = 57371
View Source
const IS = 57364
View Source
const IS_NOT_NULL = 57434
View Source
const IS_NULL = 57433
View Source
const JOIN = 57389
View Source
const KEY = 57373
View Source
const LE = 57380
View Source
const LEFT = 57391
View Source
const LEX_ERROR = 57384
View Source
const LIKE = 57365
View Source
const LIMIT = 57356
View Source
const MINUS = 57386
View Source
const NATURAL = 57396
View Source
const NE = 57382
View Source
const NODE_LIST = 57420
View Source
const NOT = 57402
View Source
const NOT_BETWEEN = 57432
View Source
const NOT_FOR_UPDATE = 57429
View Source
const NOT_IN = 57430
View Source
const NOT_LIKE = 57431
View Source
const NO_DISTINCT = 57426
View Source
const NULL = 57367
View Source
const NULL_SAFE_EQUAL = 57383
View Source
const NUMBER = 57378
View Source
const ON = 57399
View Source
const OR = 57401
View Source
const ORDER = 57354
View Source
const OUTER = 57394
View Source
const RENAME = 57412
View Source
const RIGHT = 57392
View Source
const SELECT = 57346
View Source
const SELECT_STAR = 57425
View Source
const SET = 57375
View Source
const STRAIGHT_JOIN = 57390
View Source
const STRING = 57377
View Source
const TABLE = 57413
View Source
const TABLE_EXPR = 57438
View Source
const THEN = 57406
View Source
const TO = 57415
View Source
const UMINUS = 57422
View Source
const UNARY = 57403
View Source
const UNION = 57385
View Source
const UNION_ALL = 57435
View Source
const UNIQUE = 57418
View Source
const UPDATE = 57348
View Source
const UPLUS = 57421
View Source
const USE = 57397
View Source
const USING = 57419
View Source
const VALUES = 57370
View Source
const VALUE_ARG = 57379
View Source
const WHEN = 57405
View Source
const WHEN_LIST = 57424
View Source
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 EncodeValue(buf *bytes.Buffer, value interface{}) error

func ForceEOF

func ForceEOF(yylex interface{})

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

func GetDBName(sql string) (string, error)

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 GetShardList(sql string, bindVariables map[string]interface{}, tabletKeys []key.KeyspaceId) (shardlist []int, err error)

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 DDLPlan

type DDLPlan struct {
	Action    int
	TableName string
	NewName   string
}

func DDLParse

func DDLParse(sql string) (plan *DDLPlan)

type EncoderFunc

type EncoderFunc func(value interface{}) ([]byte, error)

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

func ExecParse

func ExecParse(sql string, getTable TableGetter, sensitiveMode bool) (plan *ExecPlan, err error)

type IndexScore

type IndexScore struct {
	Index       *schema.Index
	ColumnMatch []bool
	MatchFailed bool
}

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

type Node struct {
	Type  int
	Value []byte
	Sub   []*Node
}

func NewParseNode

func NewParseNode(Type int, value []byte) *Node

func NewSimpleParseNode

func NewSimpleParseNode(Type int, value string) *Node

func Parse

func Parse(sql string) (*Node, error)

func (*Node) At

func (node *Node) At(index int) *Node

func (*Node) GenerateAnonymizedQuery

func (node *Node) GenerateAnonymizedQuery() string

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) Len

func (node *Node) Len() int

func (*Node) NodeString

func (node *Node) NodeString(level int, buf *bytes.Buffer)

func (*Node) Pop

func (node *Node) Pop() *Node

func (*Node) Push

func (node *Node) Push(value *Node) *Node

func (*Node) PushLimit

func (node *Node) PushLimit()

func (*Node) PushTwo

func (node *Node) PushTwo(left *Node, right *Node) *Node

func (*Node) Set

func (node *Node) Set(index int, val *Node)

func (*Node) String

func (node *Node) String() (out string)

func (*Node) TreeString

func (node *Node) TreeString() string

type ParsedQuery

type ParsedQuery struct {
	Query         string
	BindLocations []BindLocation
}

func GenerateSubquery

func GenerateSubquery(columns []string, table *Node, where *Node, order *Node, limit *Node, for_update bool) *ParsedQuery

func (*ParsedQuery) GenerateQuery

func (pq *ParsedQuery) GenerateQuery(bindVariables map[string]interface{}, listVariables []sqltypes.Value) ([]byte, error)

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 PlanType

type PlanType int
const (
	PLAN_PASS_SELECT PlanType = iota
	PLAN_PASS_DML
	PLAN_PK_EQUAL
	PLAN_PK_IN
	PLAN_SELECT_SUBQUERY
	PLAN_DML_PK
	PLAN_DML_SUBQUERY
	PLAN_INSERT_PK
	PLAN_INSERT_SUBQUERY
	PLAN_SET
	PLAN_DDL
	NumPlans
)

func PlanByName

func PlanByName(s string) (pt PlanType, ok bool)

func (PlanType) IsSelect

func (pt PlanType) IsSelect() bool

func (PlanType) MarshalJSON

func (pt PlanType) MarshalJSON() ([]byte, error)

func (PlanType) String

func (pt PlanType) String() 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 TableGetter

type TableGetter func(tableName string) (*schema.Table, bool)

type Tokenizer

type Tokenizer struct {
	InStream      io.ByteReader
	AllowComments bool
	ForceEOF      bool

	LastError string
	ParseTree *Node
	// contains filtered or unexported fields
}

func NewStringTokenizer

func NewStringTokenizer(s string) *Tokenizer

func (*Tokenizer) ConsumeNext

func (tkn *Tokenizer) ConsumeNext(buffer *bytes.Buffer)

func (*Tokenizer) Error

func (tkn *Tokenizer) Error(err string)

func (*Tokenizer) Lex

func (tkn *Tokenizer) Lex(lval *yySymType) int

func (*Tokenizer) Next

func (tkn *Tokenizer) Next()

func (*Tokenizer) Scan

func (tkn *Tokenizer) Scan() (parseNode *Node)

type TrackedBuffer

type TrackedBuffer struct {
	*bytes.Buffer
	// contains filtered or unexported fields
}

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL