Documentation ¶
Index ¶
- Variables
- func GenerateDeleteOuterQuery(del *sqlparser.Delete, aliased *sqlparser.AliasedTableExpr) *sqlparser.ParsedQuery
- func GenerateDeleteSubquery(del *sqlparser.Delete, table *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 GenerateLimitQuery(selStmt sqlparser.SelectStatement) *sqlparser.ParsedQuery
- func GenerateSubquery(columns []sqlparser.ColIdent, table *sqlparser.AliasedTableExpr, ...) *sqlparser.ParsedQuery
- func GenerateUpdateOuterQuery(upd *sqlparser.Update, aliased *sqlparser.AliasedTableExpr, ...) *sqlparser.ParsedQuery
- func GenerateUpdateSubquery(upd *sqlparser.Update, table *schema.Table, ...) *sqlparser.ParsedQuery
- type DDLPlan
- type Permission
- type Plan
- type PlanType
- type ReasonType
Constants ¶
This section is empty.
Variables ¶
var ( // ErrTooComplex indicates given sql query is too complex. ErrTooComplex = vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "Complex") // PassthroughDMLs will return PlanPassDML for all update or delete statements PassthroughDMLs = false )
Functions ¶
func GenerateDeleteOuterQuery ¶
func GenerateDeleteOuterQuery(del *sqlparser.Delete, aliased *sqlparser.AliasedTableExpr) *sqlparser.ParsedQuery
GenerateDeleteOuterQuery generates the outer query for deletes.
func GenerateDeleteSubquery ¶
func GenerateDeleteSubquery(del *sqlparser.Delete, table *schema.Table, aliased *sqlparser.AliasedTableExpr) *sqlparser.ParsedQuery
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 GenerateLimitQuery ¶
func GenerateLimitQuery(selStmt sqlparser.SelectStatement) *sqlparser.ParsedQuery
GenerateLimitQuery generates a select query with a limit clause.
func GenerateSubquery ¶
func GenerateSubquery(columns []sqlparser.ColIdent, 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, aliased *sqlparser.AliasedTableExpr, formatter sqlparser.NodeFormatter) *sqlparser.ParsedQuery
GenerateUpdateOuterQuery generates the outer query for updates. If there is no custom formatting needed, formatter can be nil.
func GenerateUpdateSubquery ¶
func GenerateUpdateSubquery(upd *sqlparser.Update, table *schema.Table, aliased *sqlparser.AliasedTableExpr) *sqlparser.ParsedQuery
GenerateUpdateSubquery generates the subquery for updates.
Types ¶
type Permission ¶
Permission associates the required access permission for each table.
func BuildPermissions ¶
func BuildPermissions(stmt sqlparser.Statement) []Permission
BuildPermissions builds the list of required permissions for all the tables referenced in a query.
type Plan ¶
type Plan struct { PlanID PlanType Reason ReasonType Table *schema.Table // NewName is the new name of the table. Set for DDLs which create or change the table. NewName sqlparser.TableIdent // Permissions stores the permissions for the tables accessed in the query. Permissions []Permission // FieldQuery is used to fetch field info FieldQuery *sqlparser.ParsedQuery // FullQuery will be set for all plans. FullQuery *sqlparser.ParsedQuery // For PK plans, only OuterQuery is set. // For SUBQUERY plans, Subquery is also set. OuterQuery *sqlparser.ParsedQuery Subquery *sqlparser.ParsedQuery UpsertQuery *sqlparser.ParsedQuery // PlanInsertSubquery: columns to be inserted. ColumnNumbers []int // PKValues is an sqltypes.Value if it's sourced // from the query. If it's a bind var then it's // a string including the ':' prefix(es). // PlanDMLPK: where clause values. // PlanInsertPK: values clause. // PlanNextVal: increment. PKValues []sqltypes.PlanValue // For update: set clause if pk is changing. SecondaryPKValues []sqltypes.PlanValue // WhereClause is set for DMLs. It is used by the hot row protection // to serialize e.g. UPDATEs going to the same row. WhereClause *sqlparser.ParsedQuery // For PlanInsertSubquery: pk columns in the subquery result. SubqueryPKColumns []int }
Plan is built for selects and DMLs.
func BuildMessageStreaming ¶
BuildMessageStreaming builds a plan for message streaming.
func BuildStreaming ¶
BuildStreaming builds a streaming plan based on the schema.
func (*Plan) TableName ¶
func (plan *Plan) TableName() sqlparser.TableIdent
TableName returns the table name for the plan.
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 // PlanSelectLock is for a select that locks. PlanSelectLock // PlanNextval is for NEXTVAL. PlanNextval // PlanPassDML is pass through update & delete statements. This is // the default plan for update and delete statements. // If PassthroughDMLs is true, then it is used for all DML statements // and is valid in all replication modes. // Otherwise is only allowed in row based replication mode PlanPassDML // 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 // PlanUpsertPK is for insert ... on duplicate key constructs. PlanUpsertPK // PlanInsertMessage is for inserting into message tables. PlanInsertMessage // PlanSet is for SET statements. PlanSet // PlanDDL is for DDL statements. PlanDDL // PlanSelectStream is used for streaming queries. PlanSelectStream // PlanOtherRead is for SHOW, DESCRIBE & EXPLAIN statements. PlanOtherRead // PlanOtherAdmin is for REPAIR, OPTIMIZE and TRUNCATE statements. PlanOtherAdmin // PlanMessageStream is used for streaming messages. PlanMessageStream // 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 ReasonTable ReasonTableNoIndex ReasonPKChange ReasonComplexExpr ReasonUpsertSubquery ReasonUpsertMultiRow ReasonReplace ReasonMultiTable NumReasons )
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.