planbuilder

package
v0.0.0-...-3712671 Latest Latest
Warning

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

Go to latest
Published: Jul 28, 2014 License: BSD-3-Clause Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NO_MATCH      = scoreValue(-1)
	PERFECT_SCORE = scoreValue(0)
)

Variables

View Source
var (
	TooComplex = 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, pkIndex *schema.Index) *sqlparser.ParsedQuery

func GenerateDeleteSubquery

func GenerateDeleteSubquery(del *sqlparser.Delete, tableInfo *schema.Table) *sqlparser.ParsedQuery

func GenerateEqualOuterQuery

func GenerateEqualOuterQuery(sel *sqlparser.Select, tableInfo *schema.Table) *sqlparser.ParsedQuery

func GenerateFieldQuery

func GenerateFieldQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery

func GenerateFullQuery

func GenerateFullQuery(statement sqlparser.Statement) *sqlparser.ParsedQuery

func GenerateInOuterQuery

func GenerateInOuterQuery(sel *sqlparser.Select, tableInfo *schema.Table) *sqlparser.ParsedQuery

func GenerateInsertOuterQuery

func GenerateInsertOuterQuery(ins *sqlparser.Insert) *sqlparser.ParsedQuery

func GenerateSelectLimitQuery

func GenerateSelectLimitQuery(selStmt sqlparser.SelectStatement) *sqlparser.ParsedQuery

func GenerateSelectSubquery

func GenerateSelectSubquery(sel *sqlparser.Select, tableInfo *schema.Table, index string) *sqlparser.ParsedQuery

func GenerateSubquery

func GenerateSubquery(columns []string, table *sqlparser.AliasedTableExpr, where *sqlparser.Where, order sqlparser.OrderBy, limit *sqlparser.Limit, for_update bool) *sqlparser.ParsedQuery

func GenerateUpdateOuterQuery

func GenerateUpdateOuterQuery(upd *sqlparser.Update, pkIndex *schema.Index) *sqlparser.ParsedQuery

func GenerateUpdateSubquery

func GenerateUpdateSubquery(upd *sqlparser.Update, tableInfo *schema.Table) *sqlparser.ParsedQuery

Types

type DDLPlan

type DDLPlan struct {
	Action    string
	TableName string
	NewName   string
}

func DDLParse

func DDLParse(sql string) (plan *DDLPlan)

type ExecPlan

type ExecPlan struct {
	PlanId    PlanType
	Reason    ReasonType
	TableName string

	// 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.
	// IndexUsed is set only for PLAN_SELECT_SUBQUERY
	OuterQuery *sqlparser.ParsedQuery
	Subquery   *sqlparser.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 GetExecPlan

func GetExecPlan(sql string, getTable TableGetter) (plan *ExecPlan, err error)

func GetStreamExecPlan

func GetStreamExecPlan(sql string, getTable TableGetter) (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 PlanType

type PlanType int
const (
	// PLAN_PASS_SELECT is pass through select statements. This is the
	// default plan for select statements.
	PLAN_PASS_SELECT PlanType = iota
	// PLAN_PASS_DML is pass through update & delete statements. This is
	// the default plan for update and delete statements.
	PLAN_PASS_DML
	// PLAN_PK_EQUAL is select statement which has an equality where clause
	// on primary key
	PLAN_PK_EQUAL
	// PLAN_PK_IN is select statement with a single IN clause on primary key
	PLAN_PK_IN
	// PLAN_SELECT_SUBQUERY is select statement with a subselect statement
	PLAN_SELECT_SUBQUERY
	// PLAN_DML_PK is an update or delete with an equality where clause(s)
	// on primary key(s)
	PLAN_DML_PK
	// PLAN_DML_SUBQUERY is an update or delete with a subselect statement
	PLAN_DML_SUBQUERY
	// PLAN_INSERT_PK is insert statement where the PK value is
	// supplied with the query
	PLAN_INSERT_PK
	// PLAN_INSERT_SUBQUERY is same as PLAN_DML_SUBQUERY but for inserts
	PLAN_INSERT_SUBQUERY
	// PLAN_SET is for SET statements
	PLAN_SET
	// PLAN_DDL is for DDL statements
	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) MinRole

func (pt PlanType) MinRole() tableacl.Role

MinRole is the minimum Role required to execute this PlanType

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_LOCK
	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 TableGetter

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

Jump to

Keyboard shortcuts

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