Documentation ¶
Index ¶
- Variables
- func FormatImpossible(buf *sqlparser.TrackedBuffer, node sqlparser.SQLNode)
- func GenerateDeleteOuterQuery(del *sqlparser.Delete) *sqlparser.ParsedQuery
- func GenerateDeleteSubquery(del *sqlparser.Delete, tableInfo *schema.Table) *sqlparser.ParsedQuery
- func GenerateFieldQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery
- func GenerateFullQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery
- func GenerateInsertOuterQuery(ins *sqlparser.Insert) *sqlparser.ParsedQuery
- func GenerateSelectLimitQuery(selStmt sqlparser.SelectStatement) *sqlparser.ParsedQuery
- func GenerateSelectOuterQuery(sel *sqlparser.Select, tableInfo *schema.Table) *sqlparser.ParsedQuery
- func GenerateSelectSubquery(sel *sqlparser.Select, tableInfo *schema.Table, index string) *sqlparser.ParsedQuery
- func GenerateSubquery(columns []string, table *sqlparser.AliasedTableExpr, where *sqlparser.Where, ...) *sqlparser.ParsedQuery
- func GenerateUpdateOuterQuery(upd *sqlparser.Update) *sqlparser.ParsedQuery
- func GenerateUpdateSubquery(upd *sqlparser.Update, tableInfo *schema.Table) *sqlparser.ParsedQuery
- type DDLPlan
- type ExecPlan
- type PlanType
- type ReasonType
- type TableGetter
Constants ¶
This section is empty.
Variables ¶
var ( // ErrTooComplex indicates given sql query is too complex. ErrTooComplex = errors.New("Complex") )
Functions ¶
func FormatImpossible ¶
func FormatImpossible(buf *sqlparser.TrackedBuffer, node sqlparser.SQLNode)
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 GenerateDeleteOuterQuery ¶
func GenerateDeleteOuterQuery(del *sqlparser.Delete) *sqlparser.ParsedQuery
GenerateDeleteOuterQuery generates the outer query for deletes.
func GenerateDeleteSubquery ¶
GenerateDeleteSubquery generates the subquery for deletes.
func GenerateFieldQuery ¶
func GenerateFieldQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery
GenerateFieldQuery generates a query to just fetch the field info by adding impossible where clauses as needed.
func GenerateFullQuery ¶
func GenerateFullQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery
GenerateFullQuery generates the full query from the ast.
func GenerateInsertOuterQuery ¶
func GenerateInsertOuterQuery(ins *sqlparser.Insert) *sqlparser.ParsedQuery
GenerateInsertOuterQuery generates the outer query for inserts.
func GenerateSelectLimitQuery ¶
func GenerateSelectLimitQuery(selStmt sqlparser.SelectStatement) *sqlparser.ParsedQuery
GenerateSelectLimitQuery generates a select query with a limit clause.
func GenerateSelectOuterQuery ¶
func GenerateSelectOuterQuery(sel *sqlparser.Select, tableInfo *schema.Table) *sqlparser.ParsedQuery
GenerateSelectOuterQuery generates the outer query for dmls.
func GenerateSelectSubquery ¶
func GenerateSelectSubquery(sel *sqlparser.Select, tableInfo *schema.Table, index string) *sqlparser.ParsedQuery
GenerateSelectSubquery generates the subquery for selects.
func GenerateSubquery ¶
func GenerateSubquery(columns []string, table *sqlparser.AliasedTableExpr, where *sqlparser.Where, order sqlparser.OrderBy, limit *sqlparser.Limit, forUpdate bool) *sqlparser.ParsedQuery
GenerateSubquery generates a subquery based on the input parameters.
func GenerateUpdateOuterQuery ¶
func GenerateUpdateOuterQuery(upd *sqlparser.Update) *sqlparser.ParsedQuery
GenerateUpdateOuterQuery generates the outer query for updates.
func GenerateUpdateSubquery ¶
GenerateUpdateSubquery generates the subquery for updats.
Types ¶
type ExecPlan ¶
type ExecPlan struct { PlanID PlanType Reason ReasonType `json:",omitempty"` TableName string `json:",omitempty"` // FieldQuery is used to fetch field info FieldQuery *sqlparser.ParsedQuery `json:",omitempty"` // FullQuery will be set for all plans. FullQuery *sqlparser.ParsedQuery `json:",omitempty"` // For PK plans, only OuterQuery is set. // For SUBQUERY plans, Subquery is also set. // IndexUsed is set only for PlanSelectSubquery OuterQuery *sqlparser.ParsedQuery `json:",omitempty"` Subquery *sqlparser.ParsedQuery `json:",omitempty"` UpsertQuery *sqlparser.ParsedQuery `json:",omitempty"` IndexUsed string `json:",omitempty"` // For selects, columns to be returned // For PlanInsertSubquery, columns to be inserted ColumnNumbers []int `json:",omitempty"` // PlanPKIn, PlanDMLPK: where clause values // PlanInsertPK: values clause PKValues []interface{} `json:",omitempty"` // PK_IN. Limit clause value. Limit interface{} `json:",omitempty"` // For update: set clause if pk is changing SecondaryPKValues []interface{} `json:",omitempty"` // For PlanInsertSubquery: pk columns in the subquery result SubqueryPKColumns []int `json:",omitempty"` // PlanSet SetKey string `json:",omitempty"` SetValue interface{} `json:",omitempty"` }
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 GetExecPlan ¶
func GetExecPlan(sql string, getTable TableGetter) (plan *ExecPlan, err error)
GetExecPlan generates a ExecPlan given a sql query and a TableGetter.
func GetStreamExecPlan ¶
func GetStreamExecPlan(sql string, getTable TableGetter) (plan *ExecPlan, err error)
GetStreamExecPlan generates a ExecPlan given a sql query and a TableGetter.
type PlanType ¶
type PlanType int
PlanType indicates a query plan type.
const ( // PlanPassSelect is pass through select statements. This is the // default plan for select statements. PlanPassSelect PlanType = iota // PlanPassDML is pass through update & delete statements. This is // the default plan for update and delete statements. PlanPassDML // PlanPKEqual is deprecated. Use PlanPKIn instead. PlanPKEqual // PlanPKIn is select statement with a single IN clause on primary key PlanPKIn // PlanSelectSubquery is select statement with a subselect statement PlanSelectSubquery // PlanDMLPK is an update or delete with an equality where clause(s) // on primary key(s) PlanDMLPK // PlanDMLSubquery is an update or delete with a subselect statement PlanDMLSubquery // PlanInsertPK is insert statement where the PK value is // supplied with the query PlanInsertPK // PlanInsertSubquery is same as PlanDMLSubquery but for inserts PlanInsertSubquery // PlanSet is for SET statements PlanSet // PlanDDL is for DDL statements PlanDDL // PlanSelectStream is used for streaming queries PlanSelectStream // PlanOther is for SHOW, DESCRIBE & EXPLAIN statements PlanOther // PlanUpsertPK is for insert ... on duplicate key constructs PlanUpsertPK // NumPlans stores the total number of plans NumPlans )
func PlanByName ¶
PlanByName find a PlanType by its string name.
func (PlanType) MarshalJSON ¶
MarshalJSON returns a json string for PlanType.
type ReasonType ¶
type ReasonType int
ReasonType indicates why a query plan fails to build
const ( ReasonDefault ReasonType = iota ReasonSelect ReasonTable ReasonNocache ReasonSelectList ReasonLock ReasonWhere ReasonOrder ReasonLimit ReasonPKIndex ReasonCovering ReasonNoIndexMatch ReasonTableNoIndex ReasonPKChange ReasonHasHints ReasonComplexExpr ReasonUpsert )
Reason codes give a hint about why a certain plan was chosen.
func (ReasonType) MarshalJSON ¶
func (rt ReasonType) MarshalJSON() ([]byte, error)
MarshalJSON returns a json string for ReasonType.
func (ReasonType) String ¶
func (rt ReasonType) String() string
String returns a string representation of a ReasonType.