parser

package
v0.16.11 Latest Latest
Warning

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

Go to latest
Published: Nov 15, 2023 License: Apache-2.0, MIT, Apache-2.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DistinctStr      = "distinct "
	StraightJoinHint = "straight_join "
)

Select.Distinct

View Source
const (
	ForUpdateStr = " for update"
	ShareModeStr = " lock in share mode"
)

Select.Lock

View Source
const (
	SQLCacheStr   = "sql_cache "
	SQLNoCacheStr = "sql_no_cache "
)

Select.Cache

View Source
const (
	UnionStr         = "union"
	UnionAllStr      = "union all"
	UnionDistinctStr = "union distinct"
)

Union.Type

View Source
const (
	InsertStr  = "insert"
	ReplaceStr = "replace"
)

DDL strings.

View Source
const (
	SessionStr = "session"
	GlobalStr  = "global"
)

Set.Scope or Show.Scope

View Source
const (
	CreateStr            = "create"
	AlterStr             = "alter"
	DropStr              = "drop"
	RenameStr            = "rename"
	TruncateStr          = "truncate"
	CreateVindexStr      = "create vindex"
	AddColVindexStr      = "add vindex"
	DropColVindexStr     = "drop vindex"
	AddIndexStr          = "add index"
	CreateIndexStr       = "create index"
	AddPrimaryKeyStr     = "add primary key"
	AddForeignKeyStr     = "add foreign key"
	CreatePolicyStr      = "create policy"
	CreateViewStr        = "create view"
	CreateMatViewStr     = "create materialized view"
	CreateSqlSecurityStr = "create sql security"
	CreateTriggerStr     = "create trigger"
	CreateTypeStr        = "create type"
	CommentStr           = "comment"
	CreateExtensionStr   = "create extension"
)

DDL strings.

View Source
const (
	JoinStr             = "join"
	StraightJoinStr     = "straight_join"
	LeftJoinStr         = "left join"
	RightJoinStr        = "right join"
	NaturalJoinStr      = "natural join"
	NaturalLeftJoinStr  = "natural left join"
	NaturalRightJoinStr = "natural right join"
)

JoinTableExpr.Join

View Source
const (
	UseStr    = "use "
	IgnoreStr = "ignore "
	ForceStr  = "force "
)

Index hints.

View Source
const (
	WhereStr  = "where"
	HavingStr = "having"
)

Where.Type

View Source
const (
	EqualStr             = "="
	LessThanStr          = "<"
	GreaterThanStr       = ">"
	LessEqualStr         = "<="
	GreaterEqualStr      = ">="
	NotEqualStr          = "!="
	NullSafeEqualStr     = "<=>"
	InStr                = "in"
	NotInStr             = "not in"
	LikeStr              = "like"
	NotLikeStr           = "not like"
	RegexpStr            = "regexp"
	NotRegexpStr         = "not regexp"
	JSONExtractOp        = "->"
	JSONUnquoteExtractOp = "->>"
	PosixRegexStr        = "~"
	PosixRegexCiStr      = "~*"
	PosixNotRegexStr     = "!~"
	PosixNotRegexCiStr   = "!~*"
)

ComparisonExpr.Operator

View Source
const (
	BetweenStr    = "between"
	NotBetweenStr = "not between"
)

RangeCond.Operator

View Source
const (
	IsNullStr     = "is null"
	IsNotNullStr  = "is not null"
	IsTrueStr     = "is true"
	IsNotTrueStr  = "is not true"
	IsFalseStr    = "is false"
	IsNotFalseStr = "is not false"
)

IsExpr.Operator

View Source
const (
	StrVal = ValType(iota)
	IntVal
	FloatVal
	HexNum
	HexVal
	ValArg
	BitVal
	ValBool
	UnicodeStrVal
)

These are the possible Valtype values. HexNum represents a 0x... value. It cannot be treated as a simple value because it can be interpreted differently depending on the context.

View Source
const (
	BitAndStr     = "&"
	BitOrStr      = "|"
	BitXorStr     = "^"
	PlusStr       = "+"
	MinusStr      = "-"
	MultStr       = "*"
	DivStr        = "/"
	IntDivStr     = "div"
	ModStr        = "%"
	ShiftLeftStr  = "<<"
	ShiftRightStr = ">>"
)

BinaryExpr.Operator

View Source
const (
	UPlusStr   = "+"
	UMinusStr  = "-"
	TildaStr   = "~"
	BangStr    = "!"
	BinaryStr  = "binary "
	UBinaryStr = "_binary "
)

UnaryExpr.Operator

View Source
const (
	BooleanModeStr                           = " in boolean mode"
	NaturalLanguageModeStr                   = " in natural language mode"
	NaturalLanguageModeWithQueryExpansionStr = " in natural language mode with query expansion"
	QueryExpansionStr                        = " with query expansion"
)

MatchExpr.Option

View Source
const (
	AscScr  = "asc"
	DescScr = "desc"
)

Order.Direction and IndexColumn.Direction

View Source
const (
	OpenStr       = "open"
	CloseStr      = "close"
	DeallocateStr = "deallocate"
	FetchStr      = "fetch"
)
View Source
const (
	ParserModeMysql = ParserMode(iota)
	ParserModePostgres
	ParserModeSQLite3
	ParserModeMssql
)
View Source
const ACTION = 57496
View Source
const ADD = 57452
View Source
const AFTER = 57510
View Source
const AGAINST = 57670
View Source
const ALL = 57363
View Source
const ALLOW_PAGE_LOCKS = 57508
View Source
const ALLOW_ROW_LOCKS = 57507
View Source
const ALTER = 57448
View Source
const ALWAYS = 57682
View Source
const ANALYZE = 57451
View Source
const AND = 57416
View Source
const ANSI_DEFAULTS = 57637
View Source
const ANSI_NULLS = 57640
View Source
const ANSI_NULL_DFLT_OFF = 57638
View Source
const ANSI_NULL_DFLT_ON = 57639
View Source
const ANSI_PADDING = 57641
View Source
const ANSI_WARNINGS = 57642
View Source
const APPROXNUM = 57600
View Source
const ARITHABORT = 57632
View Source
const ARRAY = 57593
View Source
const AS = 57365
View Source
const ASC = 57367
View Source
const AUTOINCREMENT = 57605
View Source
const AUTO_INCREMENT = 57599
View Source
const BEFORE = 57509
View Source
const BEGIN = 57531
View Source
const BETWEEN = 57418
View Source
const BIGINT = 57544
View Source
const BIGSERIAL = 57545
View Source
const BINARY = 57442
View Source
const BIT = 57536
View Source
const BIT_LITERAL = 57409
View Source
const BLOB = 57577
View Source
const BOOL = 57565
View Source
const BOOLEAN = 57671
View Source
const BPCHAR = 57596
View Source
const BY = 57358
View Source
const CACHE = 57687
View Source
const CASCADE = 57494
View Source
const CASE = 57419
View Source
const CAST = 57661
View Source
const CHAR = 57562
View Source
const CHARACTER = 57566
View Source
const CHARSET = 57616
View Source
const CHECK = 57705
View Source
const CITEXT = 57576
View Source
const CLOSE = 57516
View Source
const CLUSTERED = 57691
View Source
const COLLATE = 57441
View Source
const COLUMN = 57462
View Source
const COLUMNSTORE = 57694
View Source
const COMMENT = 57407
View Source
const COMMENT_KEYWORD = 57408
View Source
const COMMIT = 57534
View Source
const COMMITTED = 57625
View Source
const CONCAT_NULL_YIELDS_NULL = 57629
View Source
const CONCURRENTLY = 57528
View Source
const CONSTRAINT = 57463
View Source
const CONVERT = 57660
View Source
const CREATE = 57447
View Source
const CROSS = 57392
View Source
const CURRENT_DATE = 57652
View Source
const CURRENT_TIME = 57653
View Source
const CURRENT_TIMESTAMP = 57650
View Source
const CURRENT_USER = 57500
View Source
const CURSOR = 57514
View Source
const CURSOR_CLOSE_ON_COMMIT = 57630
View Source
const CYCLE = 57688
View Source
const (
	CharacterSetStr = " character set"
)

this string is "character set" and this comment is required

View Source
const DATABASE = 57651
View Source
const DATABASES = 57606
View Source
const DATE = 57476
View Source
const DATETIME = 57557
View Source
const DATETIME2 = 57560
View Source
const DATETIMEOFFSET = 57559
View Source
const DEALLOCATE = 57521
View Source
const DECIMAL = 57551
View Source
const DECLARE = 57362
View Source
const DEFAULT = 57371
View Source
const DEFERRABLE = 57524
View Source
const DEFERRED = 57527
View Source
const DEFINER = 57702
View Source
const DELETE = 57352
View Source
const DESC = 57368
View Source
const DESCRIBE = 57474
View Source
const DISTINCT = 57364
View Source
const DIV = 57438
View Source
const DOUBLE = 57548
View Source
const DROP = 57449
View Source
const DUPLICATE = 57370
View Source
const EACH = 57511
View Source
const ELSE = 57422
View Source
const END = 57423
View Source
const ENUM = 57583
View Source
const ESCAPE = 57477
View Source
const EXISTS = 57366
View Source
const EXPANSION = 57677
View Source
const EXPLAIN = 57475
View Source
const EXTENDED = 57612
View Source
const FALSE = 57412
View Source
const FETCH = 57517
View Source
const FILLFACTOR = 57503
View Source
const FIRST = 57519
View Source
const FLOAT = 57403
View Source
const FLOAT_TYPE = 57550
View Source
const FMTONLY = 57633
View Source
const FOR = 57361
View Source
const FORCE = 57395
View Source
const FORCEPLAN = 57643
View Source
const FOREIGN = 57467
View Source
const FROM = 57353
View Source
const FULL = 57613
View Source
const FULLTEXT = 57466
View Source
const GE = 57425
View Source
const GENERATED = 57681
View Source
const GEOMETRY = 57584
View Source
const GEOMETRYCOLLECTION = 57588
View Source
const GETDATE = 57595
View Source
const GLOBAL = 57617
View Source
const GROUP = 57355
View Source
const GROUP_CONCAT = 57664
View Source
const HAVING = 57356
View Source
const HEX = 57399
View Source
const HEXNUM = 57404
View Source
const HOLDLOCK = 57696
View Source
const ID = 57398
View Source
const IDENTITY = 57683
View Source
const IF = 57460
View Source
const IGNORE = 57459
View Source
const IGNORE_DUP_KEY = 57504
View Source
const IMMEDIATE = 57526
View Source
const IMPLICIT_TRANSACTIONS = 57647
View Source
const IN = 57431
View Source
const INCLUDE = 57695
View Source
const INCREMENT = 57685
View Source
const INDEX = 57455
View Source
const INHERIT = 57666
View Source
const INITIALLY = 57525
View Source
const INNER = 57390
View Source
const INSERT = 57350
View Source
const INSTEAD = 57522
View Source
const INT = 57541
View Source
const INTEGER = 57542
View Source
const INTEGRAL = 57402
View Source
const INTERVAL = 57444
View Source
const INTNUM = 57546
View Source
const INTO = 57369
View Source
const INVOKER = 57703
View Source
const IS = 57428
View Source
const ISOLATION = 57619
View Source
const JOIN = 57386
View Source
const JSON = 57581
View Source
const JSONB = 57582
View Source
const JSON_EXTRACT_OP = 57445
View Source
const JSON_UNQUOTE_EXTRACT_OP = 57446
View Source
const KEY = 57472
View Source
const KEYS = 57375
View Source
const KEY_BLOCK_SIZE = 57468
View Source
const LAG = 57668
View Source
const LANGUAGE = 57672
View Source
const LAST = 57520
View Source
const LAST_INSERT_ID = 57379
View Source
const LE = 57424
View Source
const LEAD = 57667
View Source
const LEFT = 57388
View Source
const LESS = 57484
View Source
const LEVEL = 57620
View Source
const LEX_ERROR = 57346
View Source
const LIKE = 57429
View Source
const LIMIT = 57359
View Source
const LINESTRING = 57586
View Source
const LIST_ARG = 57406
View Source
const LOCALTIME = 57654
View Source
const LOCALTIMESTAMP = 57655
View Source
const LOCK = 57374
View Source
const LONGBLOB = 57580
View Source
const LONGTEXT = 57575
View Source
const MATCH = 57669
View Source
const MATERIALIZED = 57456
View Source
const MAX = 57414
View Source
const MAXVALUE = 57481
View Source
const MEDIUMBLOB = 57579
View Source
const MEDIUMINT = 57540
View Source
const MEDIUMTEXT = 57574
View Source
const MINVALUE = 57686
View Source
const MOD = 57439
View Source
const MODE = 57383
View Source
const MONEY = 57554
View Source
const MULTILINESTRING = 57590
View Source
const MULTIPOINT = 57589
View Source
const MULTIPOLYGON = 57591
View Source
const NAMES = 57615
View Source
const NATURAL = 57393
View Source
const NCHAR = 57568
View Source
const NE = 57426
View Source
const NEW = 57628
View Source
const NEXT = 57380
View Source
const NO = 57495
View Source
const NOCOUNT = 57634
View Source
const NOEXEC = 57635
View Source
const NOLOCK = 57697
View Source
const NONCLUSTERED = 57692
View Source
const NONE = 57690
View Source
const NOT = 57417
View Source
const NOW = 57594
View Source
const NOWAIT = 57698
View Source
const NTEXT = 57570
View Source
const NULL = 57410
View Source
const NULLX = 57598
View Source
const NULL_SAFE_EQUAL = 57427
View Source
const NUMERIC = 57552
View Source
const NUMERIC_ROUNDABORT = 57636
View Source
const NVARCHAR = 57569
View Source
const OF = 57523
View Source
const OFF = 57413
View Source
const OFFSET = 57360
View Source
const ON = 57396
View Source
const ONLY = 57623
View Source
const OPEN = 57515
View Source
const OPTIMIZE = 57479
View Source
const OR = 57415
View Source
const ORDER = 57357
View Source
const OUTER = 57391
View Source
const OVER = 57706
View Source
const OWNED = 57689
View Source
const PAD_INDEX = 57502
View Source
const PAGLOCK = 57699
View Source
const PARSER = 57675
View Source
const PARTITION = 57482
View Source
const PERMISSIVE = 57497
View Source
const POINT = 57585
View Source
const POLICY = 57469
View Source
const POLYGON = 57587
View Source
const POSIX_NOT_REGEX = 57434
View Source
const POSIX_NOT_REGEX_CI = 57435
View Source
const POSIX_REGEX = 57432
View Source
const POSIX_REGEX_CI = 57433
View Source
const PRECISION = 57549
View Source
const PRIMARY = 57461
View Source
const PRIOR = 57518
View Source
const PROCEDURE = 57486
View Source
const PROCESSLIST = 57614
View Source
const PUBLIC = 57499
View Source
const QUERY = 57676
View Source
const QUOTED_IDENTIFIER = 57631
View Source
const READ = 57621
View Source
const REAL = 57547
View Source
const REFERENCES = 57464
View Source
const REGEXP = 57430
View Source
const REMOTE_PROC_TRANSACTIONS = 57648
View Source
const RENAME = 57450
View Source
const REORGANIZE = 57483
View Source
const REPAIR = 57478
View Source
const REPEATABLE = 57624
View Source
const REPLACE = 57659
View Source
const REPLICATION = 57693
View Source
const RESTRICT = 57493
View Source
const RESTRICTIVE = 57498
View Source
const RIGHT = 57389
View Source
const ROLLBACK = 57535
View Source
const ROW = 57512
View Source
const ROWID = 57376
View Source
const ROWLOCK = 57700
View Source
const (
	ReorganizeStr = "reorganize partition"
)

Partition strings

View Source
const SCHEMA = 57453
View Source
const SCROLL = 57513
View Source
const SECURITY = 57530
View Source
const SELECT = 57348
View Source
const SEPARATOR = 57665
View Source
const SEQUENCE = 57684
View Source
const SERIAL = 57543
View Source
const SERIALIZABLE = 57627
View Source
const SESSION = 57618
View Source
const SESSION_USER = 57501
View Source
const SET = 57373
View Source
const SHARE = 57382
View Source
const SHIFT_LEFT = 57436
View Source
const SHIFT_RIGHT = 57437
View Source
const SHOW = 57473
View Source
const SHOWPLAN_ALL = 57644
View Source
const SHOWPLAN_TEXT = 57645
View Source
const SHOWPLAN_XML = 57646
View Source
const SIGNED = 57601
View Source
const SMALLDATETIME = 57561
View Source
const SMALLINT = 57538
View Source
const SMALLMONEY = 57553
View Source
const SMALLSERIAL = 57539
View Source
const SPATIAL = 57465
View Source
const SQL = 57529
View Source
const SQL_CACHE = 57385
View Source
const SQL_NO_CACHE = 57384
View Source
const SRID = 57372
View Source
const START = 57532
View Source
const STATISTICS_INCREMENTAL = 57506
View Source
const STATISTICS_NORECOMPUTE = 57505
View Source
const STATUS = 57491
View Source
const STORED = 57680
View Source
const STRAIGHT_JOIN = 57387
View Source
const STREAM = 57349
View Source
const STRICT = 57377
View Source
const STRING = 57400
View Source
const SUBSTR = 57662
View Source
const SUBSTRING = 57663
View Source
const TABLE = 57454
View Source
const TABLELOCK = 57701
View Source
const TABLES = 57607
View Source
const TEXT = 57572
View Source
const TEXT_PATTERN_OPS = 57597
View Source
const THAN = 57485
View Source
const THEN = 57421
View Source
const TIME = 57555
View Source
const TIMESTAMP = 57556
View Source
const TINYBLOB = 57578
View Source
const TINYINT = 57537
View Source
const TINYTEXT = 57573
View Source
const TO = 57458
View Source
const TRANSACTION = 57533
View Source
const TRIGGER = 57487
View Source
const TRUE = 57411
View Source
const TRUNCATE = 57480
View Source
const TYPE = 57488
View Source
const TYPECAST = 57704
View Source
const UNARY = 57440
View Source
const UNCOMMITTED = 57626
View Source
const UNDERSCORE_BINARY = 57443
View Source
const UNICODE_STRING = 57401
View Source
const UNION = 57347
View Source
const UNIQUE = 57471
View Source
const UNSIGNED = 57602
View Source
const UNUSED = 57678
View Source
const UPDATE = 57351
View Source
const USE = 57394
View Source
const USING = 57397
View Source
const UTC_DATE = 57656
View Source
const UTC_TIME = 57657
View Source
const UTC_TIMESTAMP = 57658
View Source
const UUID = 57571
View Source
const VALUE = 57381
View Source
const VALUES = 57378
View Source
const VALUE_ARG = 57405
View Source
const VARBINARY = 57567
View Source
const VARCHAR = 57563
View Source
const VARIABLES = 57492
View Source
const VARIADIC = 57592
View Source
const VARYING = 57564
View Source
const VIEW = 57457
View Source
const VINDEX = 57489
View Source
const VINDEXES = 57490
View Source
const VIRTUAL = 57679
View Source
const VITESS_KEYSPACES = 57608
View Source
const VITESS_SHARDS = 57609
View Source
const VITESS_TABLETS = 57610
View Source
const VSCHEMA_TABLES = 57611
View Source
const WHEN = 57420
View Source
const WHERE = 57354
View Source
const WHILE = 57470
View Source
const WITH = 57673
View Source
const WITHOUT = 57674
View Source
const WRITE = 57622
View Source
const XACT_ABORT = 57649
View Source
const YEAR = 57558
View Source
const ZEROFILL = 57603
View Source
const ZONE = 57604

Variables

View Source
var Aggregates = map[string]bool{
	"avg":          true,
	"bit_and":      true,
	"bit_or":       true,
	"bit_xor":      true,
	"count":        true,
	"group_concat": true,
	"max":          true,
	"min":          true,
	"std":          true,
	"stddev_pop":   true,
	"stddev_samp":  true,
	"stddev":       true,
	"sum":          true,
	"var_pop":      true,
	"var_samp":     true,
	"variance":     true,
	"lead":         true,
	"lag":          true,
}

Aggregates is a map of all aggregate functions.

Functions

func ExtractMysqlComment

func ExtractMysqlComment(sql string) (version string, innerSQL string)

ExtractMysqlComment extracts the version and SQL from a comment-only query such as /*!50708 sql here */

func KeywordString

func KeywordString(id int) string

KeywordString returns the string corresponding to the given keyword

func SplitStatement

func SplitStatement(blob string) (string, string, error)

SplitStatement returns the first sql statement up to either a ; or EOF and the remainder from the given buffer

func SplitStatementToPieces

func SplitStatementToPieces(blob string) (pieces []string, err error)

SplitStatementToPieces split raw sql statement that may have multi sql pieces to sql pieces returns the sql pieces blob contains; or error if sql cannot be parsed

func String

func String(node SQLNode) string

String returns a string representation of an SQLNode.

func StripLeadingComments

func StripLeadingComments(sql string) string

StripLeadingComments trims the SQL string and removes any leading comments

Types

type AliasedExpr

type AliasedExpr struct {
	Expr Expr
	As   ColIdent
}

AliasedExpr defines an aliased SELECT expression.

func (*AliasedExpr) Format

func (node *AliasedExpr) Format(buf *TrackedBuffer)

Format formats the node.

type AliasedTableExpr

type AliasedTableExpr struct {
	Expr       SimpleTableExpr
	Partitions Partitions
	As         TableIdent
	TableHints []string
	IndexHints *IndexHints
}

AliasedTableExpr represents a table expression coupled with an optional alias or index hint. If As is empty, no alias was used.

func (*AliasedTableExpr) Format

func (node *AliasedTableExpr) Format(buf *TrackedBuffer)

Format formats the node.

func (*AliasedTableExpr) RemoveHints

func (node *AliasedTableExpr) RemoveHints() *AliasedTableExpr

RemoveHints returns a new AliasedTableExpr with the hints removed.

type AndExpr

type AndExpr struct {
	Left, Right Expr
}

AndExpr represents an AND expression.

func (*AndExpr) Format

func (node *AndExpr) Format(buf *TrackedBuffer)

Format formats the node.

type ArrayConstructor

type ArrayConstructor struct {
	Elements ArrayElements
}

func (*ArrayConstructor) Format

func (node *ArrayConstructor) Format(buf *TrackedBuffer)

type ArrayElement

type ArrayElement interface {
	SQLNode
	// contains filtered or unexported methods
}

type ArrayElements

type ArrayElements []ArrayElement

func (ArrayElements) Format

func (node ArrayElements) Format(buf *TrackedBuffer)

type Begin

type Begin struct{}

Begin represents a Begin statement.

func (*Begin) Format

func (node *Begin) Format(buf *TrackedBuffer)

Format formats the node.

type BeginEnd

type BeginEnd struct {
	Statements []Statement
}

func (*BeginEnd) Format

func (node *BeginEnd) Format(buf *TrackedBuffer)

type BinaryExpr

type BinaryExpr struct {
	Operator    string
	Left, Right Expr
}

BinaryExpr represents a binary value expression.

func (*BinaryExpr) Format

func (node *BinaryExpr) Format(buf *TrackedBuffer)

Format formats the node.

type BoolVal

type BoolVal bool

BoolVal is true or false.

func NewBoolVal

func NewBoolVal(flag bool) *BoolVal

func (BoolVal) Format

func (node BoolVal) Format(buf *TrackedBuffer)

Format formats the node.

type CaseExpr

type CaseExpr struct {
	Expr  Expr
	Whens []*When
	Else  Expr
}

CaseExpr represents a CASE expression.

func (*CaseExpr) Format

func (node *CaseExpr) Format(buf *TrackedBuffer)

Format formats the node.

type CastExpr added in v0.12.3

type CastExpr struct {
	Expr Expr
	Type *ConvertType
}

CastExpr represents expr::type

func (*CastExpr) Format added in v0.12.3

func (node *CastExpr) Format(buf *TrackedBuffer)

type CheckDefinition

type CheckDefinition struct {
	Where             Where
	ConstraintName    ColIdent
	NotForReplication bool
	NoInherit         BoolVal
}

type ColIdent

type ColIdent struct {
	// contains filtered or unexported fields
}

ColIdent is a case insensitive SQL identifier. It will be escaped with backquotes if necessary.

func NewColIdent

func NewColIdent(str string) ColIdent

NewColIdent makes a new ColIdent.

func (ColIdent) CompliantName

func (node ColIdent) CompliantName() string

CompliantName returns a compliant id name that can be used for a bind var.

func (ColIdent) Equal

func (node ColIdent) Equal(in ColIdent) bool

Equal performs a case-insensitive compare.

func (ColIdent) EqualString

func (node ColIdent) EqualString(str string) bool

EqualString performs a case-insensitive compare with str.

func (ColIdent) Format

func (node ColIdent) Format(buf *TrackedBuffer)

Format formats the node.

func (ColIdent) IsEmpty

func (node ColIdent) IsEmpty() bool

IsEmpty returns true if the name is empty.

func (ColIdent) Lowered

func (node ColIdent) Lowered() string

Lowered returns a lower-cased column name. This function should generally be used only for optimizing comparisons.

func (ColIdent) MarshalJSON

func (node ColIdent) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON.

func (ColIdent) String

func (node ColIdent) String() string

String returns the unescaped column name. It must not be used for SQL generation. Use parser.String instead. The Stringer conformance is for usage in templates.

func (*ColIdent) UnmarshalJSON

func (node *ColIdent) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON.

type ColName

type ColName struct {
	// Metadata is not populated by the parser.
	// It's a placeholder for analyzers to store
	// additional data, typically info about which
	// table or column this node references.
	Metadata  interface{}
	Name      ColIdent
	Qualifier TableName
}

ColName represents a column name.

func (*ColName) Equal

func (node *ColName) Equal(c *ColName) bool

Equal returns true if the column names match.

func (*ColName) Format

func (node *ColName) Format(buf *TrackedBuffer)

Format formats the node.

type ColTuple

type ColTuple interface {
	Expr
	// contains filtered or unexported methods
}

ColTuple represents a list of column values. It can be ValTuple, Subquery, ListArg.

type CollateExpr

type CollateExpr struct {
	Expr    Expr
	Charset string
}

CollateExpr represents dynamic collate operator.

func (*CollateExpr) Format

func (node *CollateExpr) Format(buf *TrackedBuffer)

Format formats the node.

type ColumnDefinition

type ColumnDefinition struct {
	Name ColIdent
	Type ColumnType
}

ColumnDefinition describes a column in a CREATE TABLE statement

func (*ColumnDefinition) Format

func (col *ColumnDefinition) Format(buf *TrackedBuffer)

Format formats the node.

type ColumnKeyOption

type ColumnKeyOption int

ColumnKeyOption indicates whether or not the given column is defined as an index element and contains the type of the option

type ColumnType

type ColumnType struct {
	// The base type string
	Type string

	// Generic field options.
	NotNull       *BoolVal
	Autoincrement BoolVal
	Default       *DefaultDefinition
	Srid          *SridDefinition
	OnUpdate      *SQLVal
	Comment       *SQLVal
	Check         *CheckDefinition
	Array         BoolVal

	// Numeric field options
	Length       *SQLVal
	Unsigned     BoolVal
	Zerofill     BoolVal
	Scale        *SQLVal
	DisplayWidth *SQLVal

	// Text field options
	Charset string
	Collate string

	// Timestamp field options
	Timezone BoolVal

	// Enum values
	EnumValues []string

	// Key specification
	KeyOpt ColumnKeyOption

	References        string
	ReferenceNames    Columns
	ReferenceOnDelete ColIdent
	ReferenceOnUpdate ColIdent

	// MySQL: GENERATED ALWAYS AS (expr)
	Generated *GeneratedColumn

	// PostgreSQL: GENERATED AS IDENTITY
	Identity *IdentityOpt
}

ColumnType represents a sql type in a CREATE TABLE statement All optional fields are nil if not specified

func (*ColumnType) DescribeType

func (ct *ColumnType) DescribeType() string

DescribeType returns the abbreviated type information as required for describe table

func (*ColumnType) Format

func (ct *ColumnType) Format(buf *TrackedBuffer)

Format returns a canonical string representation of the type and all relevant options

func (*ColumnType) SQLType

func (ct *ColumnType) SQLType() querypb.Type

SQLType returns the sqltypes type code for the given column

type Columns

type Columns []ColIdent

Columns represents an insert column list.

func (Columns) FindColumn

func (node Columns) FindColumn(col ColIdent) int

FindColumn finds a column in the column list, returning the index if it exists or -1 otherwise

func (Columns) Format

func (node Columns) Format(buf *TrackedBuffer)

Format formats the node.

type Comment added in v0.13.2

type Comment struct {
	ObjectType string
	Object     string
	Comment    string
}

type CommentDirectives

type CommentDirectives map[string]interface{}

CommentDirectives is the parsed representation for execution directives conveyed in query comments

func ExtractCommentDirectives

func ExtractCommentDirectives(comments Comments) CommentDirectives

ExtractCommentDirectives parses the comment list for any execution directives of the form:

/*vt+ OPTION_ONE=1 OPTION_TWO OPTION_THREE=abcd */

It returns the map of the directive values or nil if there aren't any.

func (CommentDirectives) IsSet

func (d CommentDirectives) IsSet(key string) bool

IsSet checks the directive map for the named directive and returns true if the directive is set and has a true/false or 0/1 value

type Comments

type Comments [][]byte

Comments represents a list of comments.

func (Comments) Format

func (node Comments) Format(buf *TrackedBuffer)

Format formats the node.

type Commit

type Commit struct{}

Commit represents a Commit statement.

func (*Commit) Format

func (node *Commit) Format(buf *TrackedBuffer)

Format formats the node.

type ComparisonExpr

type ComparisonExpr struct {
	Operator    string
	Left, Right Expr
	Escape      Expr
}

ComparisonExpr represents a two-value comparison expression.

func (*ComparisonExpr) Format

func (node *ComparisonExpr) Format(buf *TrackedBuffer)

Format formats the node.

type ConstraintOptions

type ConstraintOptions struct {
	Deferrable        bool // for Postgres
	InitiallyDeferred bool // for Postgres
}

type ConvertExpr

type ConvertExpr struct {
	Expr Expr
	Type *ConvertType
}

ConvertExpr represents a call to CONVERT(expr, type) or it's equivalent CAST(expr AS type). Both are rewritten to the former.

func (*ConvertExpr) Format

func (node *ConvertExpr) Format(buf *TrackedBuffer)

type ConvertType

type ConvertType struct {
	Type     string
	Length   *SQLVal
	Scale    *SQLVal
	Operator string
	Charset  string
}

ConvertType represents the type in call to CONVERT(expr, type)

func (*ConvertType) Format

func (node *ConvertType) Format(buf *TrackedBuffer)

Format formats the node.

type ConvertUsingExpr

type ConvertUsingExpr struct {
	Expr Expr
	Type string
}

ConvertUsingExpr represents a call to CONVERT(expr USING charset).

func (*ConvertUsingExpr) Format

func (node *ConvertUsingExpr) Format(buf *TrackedBuffer)

type Cursor

type Cursor struct {
	Action     string
	Fetch      string
	CursorName ColIdent
	Into       ColIdent
}

func (*Cursor) Format

func (node *Cursor) Format(buf *TrackedBuffer)

type CursorDefinition

type CursorDefinition struct {
	Name   ColIdent
	Scroll bool
	Select SelectStatement
}

func (*CursorDefinition) Format

func (node *CursorDefinition) Format(buf *TrackedBuffer)

type DBDDL

type DBDDL struct {
	Action   string
	DBName   string
	IfExists bool
	Collate  string
	Charset  string
}

DBDDL represents a CREATE, DROP database statement.

func (*DBDDL) Format

func (node *DBDDL) Format(buf *TrackedBuffer)

Format formats the node.

type DDL

type DDL struct {
	Action        string
	Table         TableName
	NewName       TableName
	IfExists      bool
	TableSpec     *TableSpec
	PartitionSpec *PartitionSpec
	IndexSpec     *IndexSpec
	IndexCols     []IndexColumn
	IndexExpr     Expr
	VindexSpec    *VindexSpec
	VindexCols    []ColIdent
	ForeignKey    *ForeignKeyDefinition
	Policy        *Policy
	View          *View
	Trigger       *Trigger
	Type          *Type
	Comment       *Comment
	Extension     *Extension
}

DDL represents a CREATE, ALTER, DROP, RENAME or TRUNCATE statement. Table is set for AlterStr, DropStr, RenameStr, TruncateStr NewName is set for AlterStr, CreateStr, RenameStr. VindexSpec is set for CreateVindexStr, DropVindexStr, AddColVindexStr, DropColVindexStr VindexCols is set for AddColVindexStr

func (*DDL) Format

func (node *DDL) Format(buf *TrackedBuffer)

Format formats the node.

type Declare

type Declare struct {
	Type      DeclareType
	Variables []*LocalVariable
	Cursor    *CursorDefinition
}

func (*Declare) Format

func (node *Declare) Format(buf *TrackedBuffer)

type DeclareType

type DeclareType int

type Default

type Default struct {
	ColName string
}

Default represents a DEFAULT expression.

func (*Default) Format

func (node *Default) Format(buf *TrackedBuffer)

Format formats the node.

type DefaultDefinition

type DefaultDefinition struct {
	ValueOrExpression DefaultValueOrExpression
	ConstraintName    ColIdent // only for MSSQL
}

type DefaultValueOrExpression added in v0.16.5

type DefaultValueOrExpression struct {
	Value *SQLVal
	Expr  Expr
}

type Delete

type Delete struct {
	Comments   Comments
	Targets    TableNames
	TableExprs TableExprs
	Partitions Partitions
	Where      *Where
	OrderBy    OrderBy
	Limit      *Limit
}

Delete represents a DELETE statement. If you add fields here, consider adding them to calls to validateSubquerySamePlan.

func (*Delete) Format

func (node *Delete) Format(buf *TrackedBuffer)

Format formats the node.

type ExistsExpr

type ExistsExpr struct {
	Subquery *Subquery
}

ExistsExpr represents an EXISTS expression.

func (*ExistsExpr) Format

func (node *ExistsExpr) Format(buf *TrackedBuffer)

Format formats the node.

type Expr

type Expr interface {
	SQLNode
	// contains filtered or unexported methods
}

Expr represents an expression.

type Exprs

type Exprs []Expr

Exprs represents a list of value expressions. It's not a valid expression because it's not parenthesized.

func (Exprs) Format

func (node Exprs) Format(buf *TrackedBuffer)

Format formats the node.

type Extension added in v0.13.12

type Extension struct {
	Name string
}

type ForeignKeyDefinition

type ForeignKeyDefinition struct {
	ConstraintName    ColIdent
	IndexName         ColIdent
	IndexColumns      []ColIdent
	ReferenceName     TableName
	ReferenceColumns  []ColIdent
	OnDelete          ColIdent
	OnUpdate          ColIdent
	NotForReplication bool
}

type FuncCallExpr

type FuncCallExpr struct {
	Name  ColIdent
	Exprs Exprs
}

FuncCallExpr represents a function call that takes Exprs.

func (*FuncCallExpr) Format

func (node *FuncCallExpr) Format(buf *TrackedBuffer)

type FuncExpr

type FuncExpr struct {
	Qualifier TableIdent
	Name      ColIdent
	Distinct  bool
	Exprs     SelectExprs
	Over      *OverExpr
}

FuncExpr represents a function call that takes SelectExprs.

func (*FuncExpr) Format

func (node *FuncExpr) Format(buf *TrackedBuffer)

Format formats the node.

func (*FuncExpr) IsAggregate

func (node *FuncExpr) IsAggregate() bool

IsAggregate returns true if the function is an aggregate.

type GeneratedColumn

type GeneratedColumn struct {
	Expr          Expr
	GeneratedType string
}

type GroupBy

type GroupBy []Expr

GroupBy represents a GROUP BY clause.

func (GroupBy) Format

func (node GroupBy) Format(buf *TrackedBuffer)

Format formats the node.

type GroupConcatExpr

type GroupConcatExpr struct {
	Distinct  string
	Exprs     SelectExprs
	OrderBy   OrderBy
	Separator string
}

GroupConcatExpr represents a call to GROUP_CONCAT

func (*GroupConcatExpr) Format

func (node *GroupConcatExpr) Format(buf *TrackedBuffer)

Format formats the node

type IdentityOpt

type IdentityOpt struct {
	Behavior          string
	Sequence          *Sequence
	NotForReplication bool
}

type If

type If struct {
	Condition      Expr
	IfStatements   []Statement
	ElseStatements []Statement
	Keyword        string
}

func (*If) Format

func (node *If) Format(buf *TrackedBuffer)

type IndexColumn

type IndexColumn struct {
	Column        ColIdent
	Length        *SQLVal
	Direction     string
	OperatorClass string
}

IndexColumn describes a column in an index definition with optional length

type IndexColumnsOrExpression

type IndexColumnsOrExpression struct {
	IndexCols []IndexColumn
	IndexExpr Expr
}

type IndexDefinition

type IndexDefinition struct {
	Info      *IndexInfo
	Columns   []IndexColumn
	Options   []*IndexOption
	Partition *IndexPartition
}

IndexDefinition describes an index in a CREATE TABLE statement

func (*IndexDefinition) Format

func (idx *IndexDefinition) Format(buf *TrackedBuffer)

Format formats the node.

type IndexHints

type IndexHints struct {
	Type    string
	Indexes []ColIdent
}

IndexHints represents a list of index hints.

func (*IndexHints) Format

func (node *IndexHints) Format(buf *TrackedBuffer)

Format formats the node.

type IndexInfo

type IndexInfo struct {
	Type      string
	Name      ColIdent
	Primary   bool
	Spatial   bool
	Unique    bool
	Fulltext  bool
	Clustered BoolVal
}

IndexInfo describes the name and type of an index in a CREATE TABLE statement

func (*IndexInfo) Format

func (ii *IndexInfo) Format(buf *TrackedBuffer)

Format formats the node.

type IndexOption

type IndexOption struct {
	Name  string
	Value *SQLVal
}

IndexOption is used for trailing options for indexes: COMMENT, KEY_BLOCK_SIZE, USING

type IndexPartition

type IndexPartition struct {
	Name   string
	Column string
}

type IndexSpec

type IndexSpec struct {
	Name              ColIdent
	Type              ColIdent
	Unique            bool
	Primary           bool
	Constraint        bool
	Clustered         bool // for MSSQL
	ColumnStore       bool // for MSSQL
	Included          []ColIdent
	Where             *Where
	Options           []*IndexOption
	Partition         *IndexPartition // for MSSQL
	ConstraintOptions *ConstraintOptions
}

type Insert

type Insert struct {
	Action     string
	Comments   Comments
	Ignore     string
	Table      TableName
	Partitions Partitions
	Columns    Columns
	Rows       InsertRows
	OnDup      OnDup
}

Insert represents an INSERT or REPLACE statement. Per the MySQL docs, http://dev.mysql.com/doc/refman/5.7/en/replace.html Replace is the counterpart to `INSERT IGNORE`, and works exactly like a normal INSERT except if the row exists. In that case it first deletes the row and re-inserts with new values. For that reason we keep it as an Insert struct. Replaces are currently disallowed in sharded schemas because of the implications the deletion part may have on vindexes. If you add fields here, consider adding them to calls to validateSubquerySamePlan.

func (*Insert) Format

func (node *Insert) Format(buf *TrackedBuffer)

Format formats the node.

type InsertRows

type InsertRows interface {
	SQLNode
	// contains filtered or unexported methods
}

InsertRows represents the rows for an INSERT statement.

type IntervalExpr

type IntervalExpr struct {
	Expr Expr
	Unit string
}

IntervalExpr represents a date-time INTERVAL expression.

func (*IntervalExpr) Format

func (node *IntervalExpr) Format(buf *TrackedBuffer)

Format formats the node.

type IsExpr

type IsExpr struct {
	Operator string
	Expr     Expr
}

IsExpr represents an IS ... or an IS NOT ... expression.

func (*IsExpr) Format

func (node *IsExpr) Format(buf *TrackedBuffer)

Format formats the node.

type JoinCondition

type JoinCondition struct {
	On    Expr
	Using Columns
}

JoinCondition represents the join conditions (either a ON or USING clause) of a JoinTableExpr.

func (JoinCondition) Format

func (node JoinCondition) Format(buf *TrackedBuffer)

Format formats the node.

type JoinTableExpr

type JoinTableExpr struct {
	LeftExpr  TableExpr
	Join      string
	RightExpr TableExpr
	Condition JoinCondition
}

JoinTableExpr represents a TableExpr that's a JOIN operation.

func (*JoinTableExpr) Format

func (node *JoinTableExpr) Format(buf *TrackedBuffer)

Format formats the node.

type LengthScaleOption

type LengthScaleOption struct {
	Length *SQLVal
	Scale  *SQLVal
}

LengthScaleOption is used for types that have an optional length and scale

type Limit

type Limit struct {
	Offset, Rowcount Expr
}

Limit represents a LIMIT clause.

func (*Limit) Format

func (node *Limit) Format(buf *TrackedBuffer)

Format formats the node.

type ListArg

type ListArg []byte

ListArg represents a named list argument.

func (ListArg) Format

func (node ListArg) Format(buf *TrackedBuffer)

Format formats the node.

type LocalVariable

type LocalVariable struct {
	Name     ColIdent
	DataType ColumnType
}

func (*LocalVariable) Format

func (node *LocalVariable) Format(buf *TrackedBuffer)

type MarginComments

type MarginComments struct {
	Leading  string
	Trailing string
}

MarginComments holds the leading and trailing comments that surround a query.

func SplitMarginComments

func SplitMarginComments(sql string) (query string, comments MarginComments)

SplitMarginComments pulls out any leading or trailing comments from a raw sql query. This function also trims leading (if there's a comment) and trailing whitespace.

type MatchExpr

type MatchExpr struct {
	Columns SelectExprs
	Expr    Expr
	Option  string
}

MatchExpr represents a call to the MATCH function

func (*MatchExpr) Format

func (node *MatchExpr) Format(buf *TrackedBuffer)

Format formats the node

type NewQualifierColName

type NewQualifierColName struct {
	Name ColIdent
}

NewQualifierColName represents a column name with NEW qualifier.

func (*NewQualifierColName) Equal

func (node *NewQualifierColName) Equal(c *ColName) bool

Equal returns true if the column names match.

func (*NewQualifierColName) Format

func (node *NewQualifierColName) Format(buf *TrackedBuffer)

Format formats the node.

type NextSeqValExpr added in v0.15.21

type NextSeqValExpr struct {
	SequenceName TableIdent
}

NextSeqVal represents a NEXT VALUE FOR expression in SQL Server.

func (*NextSeqValExpr) Format added in v0.15.21

func (node *NextSeqValExpr) Format(buf *TrackedBuffer)

Format formats the node.

type NodeFormatter

type NodeFormatter func(buf *TrackedBuffer, node SQLNode)

NodeFormatter defines the signature of a custom node formatter function that can be given to TrackedBuffer for code generation.

type NotExpr

type NotExpr struct {
	Expr Expr
}

NotExpr represents a NOT expression.

func (*NotExpr) Format

func (node *NotExpr) Format(buf *TrackedBuffer)

Format formats the node.

type NullVal

type NullVal struct{}

NullVal represents a NULL value.

func (*NullVal) Format

func (node *NullVal) Format(buf *TrackedBuffer)

Format formats the node.

type OnDup

type OnDup UpdateExprs

OnDup represents an ON DUPLICATE KEY clause.

func (OnDup) Format

func (node OnDup) Format(buf *TrackedBuffer)

Format formats the node.

type OrExpr

type OrExpr struct {
	Left, Right Expr
}

OrExpr represents an OR expression.

func (*OrExpr) Format

func (node *OrExpr) Format(buf *TrackedBuffer)

Format formats the node.

type Order

type Order struct {
	Expr      Expr
	Direction string
}

Order represents an ordering expression.

func (*Order) Format

func (node *Order) Format(buf *TrackedBuffer)

Format formats the node.

type OrderBy

type OrderBy []*Order

OrderBy represents an ORDER By clause.

func (OrderBy) Format

func (node OrderBy) Format(buf *TrackedBuffer)

Format formats the node.

type OtherAdmin

type OtherAdmin struct{}

OtherAdmin represents a misc statement that relies on ADMIN privileges, such as REPAIR, OPTIMIZE, or TRUNCATE statement. It should be used only as an indicator. It does not contain the full AST for the statement.

func (*OtherAdmin) Format

func (node *OtherAdmin) Format(buf *TrackedBuffer)

Format formats the node.

type OtherRead

type OtherRead struct{}

OtherRead represents a DESCRIBE, or EXPLAIN statement. It should be used only as an indicator. It does not contain the full AST for the statement.

func (*OtherRead) Format

func (node *OtherRead) Format(buf *TrackedBuffer)

Format formats the node.

type OverExpr added in v0.15.8

type OverExpr struct {
	PartitionBy PartitionBy
	OrderBy     OrderBy
}

OverExpr represents a call to OVER

func (*OverExpr) Format added in v0.15.8

func (node *OverExpr) Format(buf *TrackedBuffer)

Format formats the node

type ParenExpr

type ParenExpr struct {
	Expr Expr
}

ParenExpr represents a parenthesized boolean expression.

func (*ParenExpr) Format

func (node *ParenExpr) Format(buf *TrackedBuffer)

Format formats the node.

type ParenSelect

type ParenSelect struct {
	Select SelectStatement
}

ParenSelect is a parenthesized SELECT statement.

func (*ParenSelect) AddOrder

func (node *ParenSelect) AddOrder(order *Order)

AddOrder adds an order by element

func (*ParenSelect) Format

func (node *ParenSelect) Format(buf *TrackedBuffer)

Format formats the node.

func (*ParenSelect) SetLimit

func (node *ParenSelect) SetLimit(limit *Limit)

SetLimit sets the limit clause

type ParenTableExpr

type ParenTableExpr struct {
	Exprs TableExprs
}

ParenTableExpr represents a parenthesized list of TableExpr.

func (*ParenTableExpr) Format

func (node *ParenTableExpr) Format(buf *TrackedBuffer)

Format formats the node.

type ParserMode

type ParserMode int

type Partition added in v0.15.10

type Partition struct {
	Expr Expr
}

Partition represents an partitions expression.

func (*Partition) Format added in v0.15.10

func (node *Partition) Format(buf *TrackedBuffer)

Format formats the node.

type PartitionBy added in v0.15.8

type PartitionBy []*Partition

PartitionBy represents a PARTITON BY clause.

func (PartitionBy) Format added in v0.15.8

func (node PartitionBy) Format(buf *TrackedBuffer)

Format formats the node.

type PartitionDefinition

type PartitionDefinition struct {
	Name     ColIdent
	Limit    Expr
	Maxvalue bool
}

PartitionDefinition describes a very minimal partition definition

func (*PartitionDefinition) Format

func (node *PartitionDefinition) Format(buf *TrackedBuffer)

Format formats the node

type PartitionSpec

type PartitionSpec struct {
	Action      string
	Name        ColIdent
	Definitions []*PartitionDefinition
}

PartitionSpec describe partition actions (for alter and create)

func (*PartitionSpec) Format

func (node *PartitionSpec) Format(buf *TrackedBuffer)

Format formats the node.

type Partitions

type Partitions Columns

Partitions is a type alias for Columns so we can handle printing efficiently

func (Partitions) Format

func (node Partitions) Format(buf *TrackedBuffer)

Format formats the node

type Permissive

type Permissive string

func (Permissive) Raw

func (p Permissive) Raw() string

type Policy

type Policy struct {
	Name       ColIdent
	Permissive Permissive
	Scope      []byte
	To         []ColIdent
	Using      *Where
	WithCheck  *Where
}

type RangeCond

type RangeCond struct {
	Operator string
	Left     Expr
	From, To Expr
}

RangeCond represents a BETWEEN or a NOT BETWEEN expression.

func (*RangeCond) Format

func (node *RangeCond) Format(buf *TrackedBuffer)

Format formats the node.

type Rollback

type Rollback struct{}

Rollback represents a Rollback statement.

func (*Rollback) Format

func (node *Rollback) Format(buf *TrackedBuffer)

Format formats the node.

type SQLNode

type SQLNode interface {
	Format(buf *TrackedBuffer)
}

SQLNode defines the interface for all nodes generated by the parser.

type SQLVal

type SQLVal struct {
	Type ValType
	Val  []byte
}

SQLVal represents a single value.

func NewBitVal

func NewBitVal(in []byte) *SQLVal

NewBitVal builds a new BitVal containing a bit literal.

func NewBoolSQLVal

func NewBoolSQLVal(in bool) *SQLVal

func NewFloatVal

func NewFloatVal(in []byte) *SQLVal

NewFloatVal builds a new FloatVal.

func NewHexNum

func NewHexNum(in []byte) *SQLVal

NewHexNum builds a new HexNum.

func NewHexVal

func NewHexVal(in []byte) *SQLVal

NewHexVal builds a new HexVal.

func NewIntVal

func NewIntVal(in []byte) *SQLVal

NewIntVal builds a new IntVal.

func NewStrVal

func NewStrVal(in []byte) *SQLVal

NewStrVal builds a new StrVal.

func NewUnicodeStrVal added in v0.15.15

func NewUnicodeStrVal(in []byte) *SQLVal

NewUnicode bulds a new UniodeStrVal.

func NewValArg

func NewValArg(in []byte) *SQLVal

NewValArg builds a new ValArg.

func NewValArgWithOpt

func NewValArgWithOpt(in []byte, opt *SQLVal) *SQLVal

func (*SQLVal) Format

func (node *SQLVal) Format(buf *TrackedBuffer)

Format formats the node.

func (*SQLVal) HexDecode

func (node *SQLVal) HexDecode() ([]byte, error)

HexDecode decodes the hexval into bytes.

type Select

type Select struct {
	Cache       string
	Comments    Comments
	Distinct    string
	Hints       string
	SelectExprs SelectExprs
	From        TableExprs
	Where       *Where
	GroupBy     GroupBy
	Having      *Where
	OrderBy     OrderBy
	Limit       *Limit
	Lock        string
}

Select represents a SELECT statement.

func (*Select) AddHaving

func (node *Select) AddHaving(expr Expr)

AddHaving adds the boolean expression to the HAVING clause as an AND condition. If the expression is an OR clause, it parenthesizes it. Currently, the OR operator is the only one that's lower precedence than AND.

func (*Select) AddOrder

func (node *Select) AddOrder(order *Order)

AddOrder adds an order by element

func (*Select) AddWhere

func (node *Select) AddWhere(expr Expr)

AddWhere adds the boolean expression to the WHERE clause as an AND condition. If the expression is an OR clause, it parenthesizes it. Currently, the OR operator is the only one that's lower precedence than AND.

func (*Select) Format

func (node *Select) Format(buf *TrackedBuffer)

Format formats the node.

func (*Select) SetLimit

func (node *Select) SetLimit(limit *Limit)

SetLimit sets the limit clause

type SelectExpr

type SelectExpr interface {
	SQLNode
	// contains filtered or unexported methods
}

SelectExpr represents a SELECT expression.

type SelectExprs

type SelectExprs []SelectExpr

SelectExprs represents SELECT expressions.

func (SelectExprs) Format

func (node SelectExprs) Format(buf *TrackedBuffer)

Format formats the node.

type SelectStatement

type SelectStatement interface {
	AddOrder(*Order)
	SetLimit(*Limit)
	SQLNode
	// contains filtered or unexported methods
}

SelectStatement any SELECT statement.

type Sequence

type Sequence struct {
	Name        string
	IfNotExists bool
	Type        string

	IncrementBy *SQLVal
	MinValue    *SQLVal
	NoMinValue  *BoolVal
	MaxValue    *SQLVal
	NoMaxValue  *BoolVal
	StartWith   *SQLVal
	Cache       *SQLVal
	Cycle       *BoolVal
	NoCycle     *BoolVal
	OwnedBy     string
}

type Set

type Set struct {
	Comments Comments
	Exprs    SetExprs
	Scope    string
}

Set represents a SET statement.

func (*Set) Format

func (node *Set) Format(buf *TrackedBuffer)

Format formats the node.

type SetBoolOption added in v0.15.19

type SetBoolOption struct {
	OptionNames []string
	Value       *SQLVal
}

SetOption represents a SET statement that specifies option in SQL Server.

func (*SetBoolOption) Format added in v0.15.19

func (node *SetBoolOption) Format(buf *TrackedBuffer)

Format formats the node.

type SetExpr

type SetExpr struct {
	Name ColIdent
	Expr Expr
}

SetExpr represents a set expression.

func (*SetExpr) Format

func (node *SetExpr) Format(buf *TrackedBuffer)

Format formats the node.

type SetExprs

type SetExprs []*SetExpr

SetExprs represents a list of set expressions.

func (SetExprs) Format

func (node SetExprs) Format(buf *TrackedBuffer)

Format formats the node.

type Show

type Show struct {
	Type          string
	OnTable       TableName
	ShowTablesOpt *ShowTablesOpt
	Scope         string
}

Show represents a show statement.

func (*Show) Format

func (node *Show) Format(buf *TrackedBuffer)

Format formats the node.

func (*Show) HasOnTable

func (node *Show) HasOnTable() bool

HasOnTable returns true if the show statement has an "on" clause

type ShowFilter

type ShowFilter struct {
	Like   string
	Filter Expr
}

ShowFilter is show tables filter

func (*ShowFilter) Format

func (node *ShowFilter) Format(buf *TrackedBuffer)

Format formats the node.

type ShowTablesOpt

type ShowTablesOpt struct {
	Extended string
	Full     string
	DbName   string
	Filter   *ShowFilter
}

ShowTablesOpt is show tables option

type SimpleTableExpr

type SimpleTableExpr interface {
	SQLNode
	// contains filtered or unexported methods
}

SimpleTableExpr represents a simple table expression.

type SridDefinition added in v0.14.2

type SridDefinition struct {
	Value *SQLVal
}

type StarExpr

type StarExpr struct {
	TableName TableName
}

StarExpr defines a '*' or 'table.*' expression.

func (*StarExpr) Format

func (node *StarExpr) Format(buf *TrackedBuffer)

Format formats the node.

type Statement

type Statement interface {
	SQLNode
	// contains filtered or unexported methods
}

Statement represents a statement.

func ParseNext

func ParseNext(tokenizer *Tokenizer) (Statement, error)

ParseNext parses a single SQL statement from the tokenizer returning a Statement which is the AST representation of the query. The tokenizer will always read up to the end of the statement, allowing for the next call to ParseNext to parse any subsequent SQL statements. When there are no more statements to parse, a error of io.EOF is returned.

func ParseStrictDDLWithMode

func ParseStrictDDLWithMode(sql string, mode ParserMode) (Statement, error)

type Stream

type Stream struct {
	Comments   Comments
	SelectExpr SelectExpr
	Table      TableName
}

Stream represents a SELECT statement.

func (*Stream) Format

func (node *Stream) Format(buf *TrackedBuffer)

Format formats the node.

type Subquery

type Subquery struct {
	Select SelectStatement
}

Subquery represents a subquery.

func (*Subquery) Format

func (node *Subquery) Format(buf *TrackedBuffer)

Format formats the node.

type SubstrExpr

type SubstrExpr struct {
	Name Expr
	From Expr
	To   Expr
}

SubstrExpr represents a call to SubstrExpr(column, value_expression) or SubstrExpr(column, value_expression,value_expression) also supported syntax SubstrExpr(column from value_expression for value_expression)

func (*SubstrExpr) Format

func (node *SubstrExpr) Format(buf *TrackedBuffer)

Format formats the node.

type TableExpr

type TableExpr interface {
	SQLNode
	// contains filtered or unexported methods
}

TableExpr represents a table expression.

type TableExprs

type TableExprs []TableExpr

TableExprs represents a list of table expressions.

func (TableExprs) Format

func (node TableExprs) Format(buf *TrackedBuffer)

Format formats the node.

type TableIdent

type TableIdent struct {
	// contains filtered or unexported fields
}

TableIdent is a case sensitive SQL identifier. It will be escaped with backquotes if necessary.

func NewTableIdent

func NewTableIdent(str string) TableIdent

NewTableIdent creates a new TableIdent.

func (TableIdent) CompliantName

func (node TableIdent) CompliantName() string

CompliantName returns a compliant id name that can be used for a bind var.

func (TableIdent) Format

func (node TableIdent) Format(buf *TrackedBuffer)

Format formats the node.

func (TableIdent) IsEmpty

func (node TableIdent) IsEmpty() bool

IsEmpty returns true if TabIdent is empty.

func (TableIdent) MarshalJSON

func (node TableIdent) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON.

func (TableIdent) String

func (node TableIdent) String() string

String returns the unescaped table name. It must not be used for SQL generation. Use parser.String instead. The Stringer conformance is for usage in templates.

func (*TableIdent) UnmarshalJSON

func (node *TableIdent) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON.

type TableName

type TableName struct {
	Name, Qualifier TableIdent
}

TableName represents a table name. Qualifier, if specified, represents a database or keyspace. TableName is a value struct whose fields are case sensitive. This means two TableName vars can be compared for equality and a TableName can also be used as key in a map.

func (TableName) Format

func (node TableName) Format(buf *TrackedBuffer)

Format formats the node.

func (TableName) IsEmpty

func (node TableName) IsEmpty() bool

IsEmpty returns true if TableName is nil or empty.

func (TableName) ToViewName

func (node TableName) ToViewName() TableName

ToViewName returns a TableName acceptable for use as a VIEW. VIEW names are always lowercase, so ToViewName lowercasese the name. Databases are case-sensitive so Qualifier is left untouched.

type TableNames

type TableNames []TableName

TableNames is a list of TableName.

func (TableNames) Format

func (node TableNames) Format(buf *TrackedBuffer)

Format formats the node.

type TableSpec

type TableSpec struct {
	Columns     []*ColumnDefinition
	Indexes     []*IndexDefinition
	ForeignKeys []*ForeignKeyDefinition
	Checks      []*CheckDefinition
	Options     map[string]string
}

TableSpec describes the structure of a table from a CREATE TABLE statement

func (*TableSpec) AddCheck

func (ts *TableSpec) AddCheck(check *CheckDefinition)

func (*TableSpec) AddColumn

func (ts *TableSpec) AddColumn(cd *ColumnDefinition)

AddColumn appends the given column to the list in the spec

func (*TableSpec) AddForeignKey

func (ts *TableSpec) AddForeignKey(foreignKey *ForeignKeyDefinition)

func (*TableSpec) AddIndex

func (ts *TableSpec) AddIndex(id *IndexDefinition)

AddIndex appends the given index to the list in the spec

func (*TableSpec) Format

func (ts *TableSpec) Format(buf *TrackedBuffer)

Format formats the node.

type Tokenizer

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

	Position int

	LastError error

	ParseTree Statement
	// contains filtered or unexported fields
}

Tokenizer is the struct used to generate SQL tokens for the parser.

func NewStringTokenizer

func NewStringTokenizer(sql string, mode ParserMode) *Tokenizer

NewStringTokenizer creates a new Tokenizer for the sql string.

func NewTokenizer

func NewTokenizer(r io.Reader) *Tokenizer

NewTokenizer creates a new Tokenizer reading a sql string from the io.Reader.

func (*Tokenizer) Error

func (tkn *Tokenizer) Error(err string)

Error is called by go yacc if there's a parsing error.

func (*Tokenizer) Lex

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

Lex returns the next token form the Tokenizer. This function is used by go yacc.

func (*Tokenizer) Scan

func (tkn *Tokenizer) Scan() (int, []byte)

Scan scans the tokenizer for the next token and returns the token type and an optional value.

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 NodeFormatter) *TrackedBuffer

NewTrackedBuffer creates a new TrackedBuffer.

func (*TrackedBuffer) HasBindVars

func (buf *TrackedBuffer) HasBindVars() bool

HasBindVars returns true if the parsed query uses bind vars.

func (*TrackedBuffer) Myprintf

func (buf *TrackedBuffer) Myprintf(format string, values ...interface{})

Myprintf mimics fmt.Fprintf(buf, ...), 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.

The name must be something other than the usual Printf() to avoid "go vet" warnings due to our custom format specifiers.

func (*TrackedBuffer) WriteArg

func (buf *TrackedBuffer) WriteArg(arg string)

WriteArg writes a value argument into the buffer along with tracking information for future substitutions. arg must contain the ":" or "::" prefix.

func (*TrackedBuffer) WriteNode

func (buf *TrackedBuffer) WriteNode(node SQLNode) *TrackedBuffer

WriteNode function, initiates the writing of a single SQLNode tree by passing through to Myprintf with a default format string

type Trigger

type Trigger struct {
	Name      ColIdent
	TableName TableName
	Time      string
	Event     []string
	Body      []Statement
}

type Type

type Type struct {
	Name TableName // workaround: using TableName to handle schema
	Type ColumnType
}

type UnaryExpr

type UnaryExpr struct {
	Operator string
	Expr     Expr
}

UnaryExpr represents a unary value expression.

func (*UnaryExpr) Format

func (node *UnaryExpr) Format(buf *TrackedBuffer)

Format formats the node.

type Union

type Union struct {
	Type        string
	Left, Right SelectStatement
	OrderBy     OrderBy
	Limit       *Limit
	Lock        string
}

Union represents a UNION statement.

func (*Union) AddOrder

func (node *Union) AddOrder(order *Order)

AddOrder adds an order by element

func (*Union) Format

func (node *Union) Format(buf *TrackedBuffer)

Format formats the node.

func (*Union) SetLimit

func (node *Union) SetLimit(limit *Limit)

SetLimit sets the limit clause

type Update

type Update struct {
	Comments   Comments
	TableExprs TableExprs
	Exprs      UpdateExprs
	Where      *Where
	OrderBy    OrderBy
	Limit      *Limit
}

Update represents an UPDATE statement. If you add fields here, consider adding them to calls to validateSubquerySamePlan.

func (*Update) Format

func (node *Update) Format(buf *TrackedBuffer)

Format formats the node.

type UpdateExpr

type UpdateExpr struct {
	Name *ColName
	Expr Expr
}

UpdateExpr represents an update expression.

func (*UpdateExpr) Format

func (node *UpdateExpr) Format(buf *TrackedBuffer)

Format formats the node.

type UpdateExprs

type UpdateExprs []*UpdateExpr

UpdateExprs represents a list of update expressions.

func (UpdateExprs) Format

func (node UpdateExprs) Format(buf *TrackedBuffer)

Format formats the node.

type Use

type Use struct {
	DBName TableIdent
}

Use represents a use statement.

func (*Use) Format

func (node *Use) Format(buf *TrackedBuffer)

Format formats the node.

type ValTuple

type ValTuple Exprs

ValTuple represents a tuple of actual values.

func (ValTuple) Format

func (node ValTuple) Format(buf *TrackedBuffer)

Format formats the node.

type ValType

type ValType int

ValType specifies the type for SQLVal.

type Values

type Values []ValTuple

Values represents a VALUES clause.

func (Values) Format

func (node Values) Format(buf *TrackedBuffer)

Format formats the node.

type ValuesFuncExpr

type ValuesFuncExpr struct {
	Name *ColName
}

ValuesFuncExpr represents a function call.

func (*ValuesFuncExpr) Format

func (node *ValuesFuncExpr) Format(buf *TrackedBuffer)

Format formats the node.

type View

type View struct {
	Action       string
	SecurityType string
	Name         TableName
	Definition   SelectStatement
}

type VindexParam

type VindexParam struct {
	Key ColIdent
	Val string
}

VindexParam defines a key/value parameter for a CREATE VINDEX statement

func (VindexParam) Format

func (node VindexParam) Format(buf *TrackedBuffer)

Format formats the node.

type VindexSpec

type VindexSpec struct {
	Name   ColIdent
	Type   ColIdent
	Params []VindexParam
}

VindexSpec defines a vindex for a CREATE VINDEX or DROP VINDEX statement

func (*VindexSpec) Format

func (node *VindexSpec) Format(buf *TrackedBuffer)

Format formats the node. The "CREATE VINDEX" preamble was formatted in the containing DDL node Format, so this just prints the type, any parameters, and optionally the owner

func (*VindexSpec) ParseParams

func (node *VindexSpec) ParseParams() (string, map[string]string)

ParseParams parses the vindex parameter list, pulling out the special-case "owner" parameter

type When

type When struct {
	Cond Expr
	Val  Expr
}

When represents a WHEN sub-expression.

func (*When) Format

func (node *When) Format(buf *TrackedBuffer)

Format formats the node.

type Where

type Where struct {
	Type string
	Expr Expr
}

Where represents a WHERE or HAVING clause.

func NewWhere

func NewWhere(typ string, expr Expr) *Where

NewWhere creates a WHERE or HAVING clause out of a Expr. If the expression is nil, it returns nil.

func (*Where) Format

func (node *Where) Format(buf *TrackedBuffer)

Format formats the node.

type While

type While struct {
	Condition  Expr
	Statements []Statement
	Keyword    string
}

func (*While) Format

func (node *While) Format(buf *TrackedBuffer)

Directories

Path Synopsis
dependency
hack
Package hack gives you some efficient functionality at the cost of breaking some Go rules.
Package hack gives you some efficient functionality at the cost of breaking some Go rules.
querypb
Package query is a generated protocol buffer package.
Package query is a generated protocol buffer package.
sqltypes
Package sqltypes implements interfaces and types that represent SQL values.
Package sqltypes implements interfaces and types that represent SQL values.

Jump to

Keyboard shortcuts

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