sqlparser

package
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Jun 14, 2023 License: Apache-2.0 Imports: 17 Imported by: 7

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 (
	SessionStr = "session"
	GlobalStr  = "global"
)

Show.Scope

View Source
const (
	CreateStr     = "create"
	AlterStr      = "alter"
	AddStr        = "add"
	DropStr       = "drop"
	RenameStr     = "rename"
	ModifyStr     = "modify"
	ChangeStr     = "change"
	TruncateStr   = "truncate"
	FlushStr      = "flush"
	IndexStr      = "index"
	BeforeStr     = "before"
	AfterStr      = "after"
	InsertStr     = "insert"
	UpdateStr     = "update"
	DeleteStr     = "delete"
	FollowsStr    = "follows"
	PrecedesStr   = "precedes"
	AddAutoIncStr = "add auto_increment"
	UniqueStr     = "unique"
	SpatialStr    = "spatial"
	FulltextStr   = "fulltext"
	SetStr        = "set"
	TemporaryStr  = "temporary"
	PrimaryStr    = "primary"
)

DDL strings.

View Source
const (
	TraditionalStr = "traditional"
	TreeStr        = "tree"
	JsonStr        = "json"
)

Format strings for explain statements

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 = "->>"
)

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
)

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 "
	Utf8mb4Str = "_utf8mb4 "
)

UnaryExpr.Operator

View Source
const (
	CharacterSetStr = " character set"
	CharsetStr      = "charset"
)

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

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

View Source
const (
	// TransactionStr is the Name for a SET TRANSACTION statement
	TransactionStr = "transaction"

	IsolationLevelReadUncommitted = "isolation level read uncommitted"
	IsolationLevelReadCommitted   = "isolation level read committed"
	IsolationLevelRepeatableRead  = "isolation level repeatable read"
	IsolationLevelSerializable    = "isolation level serializable"

	TxReadOnly  = "read only"
	TxReadWrite = "read write"
)

SetVarExpr.Expr, for SET TRANSACTION ... or START TRANSACTION

View Source
const (
	// DirectiveMultiShardAutocommit is the query comment directive to allow
	// single round trip autocommit with a multi-shard statement.
	DirectiveMultiShardAutocommit = "MULTI_SHARD_AUTOCOMMIT"
	// DirectiveSkipQueryPlanCache skips query plan cache when set.
	DirectiveSkipQueryPlanCache = "SKIP_QUERY_PLAN_CACHE"
	// DirectiveQueryTimeout sets a query timeout in vtgate. Only supported for SELECTS.
	DirectiveQueryTimeout = "QUERY_TIMEOUT_MS"
	// DirectiveScatterErrorsAsWarnings enables partial success scatter select queries
	DirectiveScatterErrorsAsWarnings = "SCATTER_ERRORS_AS_WARNINGS"
)
View Source
const ACTION = 57478
View Source
const ACTIVE = 57704
View Source
const ADD = 57460
View Source
const ADMIN = 57705
View Source
const AFTER = 57486
View Source
const AGAINST = 57689
View Source
const ALL = 57363
View Source
const ALTER = 57456
View Source
const ANALYZE = 57459
View Source
const AND = 57426
View Source
const APPROXNUM = 57610
View Source
const ARRAY = 57696
View Source
const AS = 57365
View Source
const ASC = 57367
View Source
const AUTO_INCREMENT = 57609
View Source
const AVG = 57660
View Source
const BEFORE = 57511
View Source
const BEGIN = 57550
View Source
const BETWEEN = 57428
View Source
const BIGINT = 57564
View Source
const BINARY = 57449
View Source
const BIT = 57558
View Source
const BIT_AND = 57661
View Source
const BIT_LITERAL = 57420
View Source
const BIT_OR = 57662
View Source
const BIT_XOR = 57663
View Source
const BLOB = 57592
View Source
const BOOL = 57580
View Source
const BOOLEAN = 57690
View Source
const BUCKETS = 57706
View Source
const BY = 57358
View Source
const CALL = 57362
View Source
const CASCADE = 57479
View Source
const CASE = 57429
View Source
const CAST = 57649
View Source
const CATALOG_NAME = 57532
View Source
const CHANGE = 57463
View Source
const CHAR = 57578
View Source
const CHARACTER = 57581
View Source
const CHARSET = 57625
View Source
const CHECK = 57477
View Source
const CLASS_ORIGIN = 57525
View Source
const CLONE = 57707
View Source
const COLLATE = 57448
View Source
const COLLATION = 57614
View Source
const COLUMN = 57473
View Source
const COLUMNS = 57620
View Source
const COLUMN_NAME = 57535
View Source
const COMMENT = 57418
View Source
const COMMENT_KEYWORD = 57419
View Source
const COMMIT = 57553
View Source
const COMMITTED = 57634
View Source
const COMPONENT = 57708
View Source
const CONDITION = 57541
View Source
const CONSTRAINT = 57480
View Source
const CONSTRAINT_CATALOG = 57529
View Source
const CONSTRAINT_NAME = 57531
View Source
const CONSTRAINT_SCHEMA = 57530
View Source
const CONTAINS = 57519
View Source
const CONTINUE = 57543
View Source
const CONVERT = 57648
View Source
const COUNT = 57664
View Source
const CREATE = 57455
View Source
const CROSS = 57404
View Source
const CUME_DIST = 57677
View Source
const CURRENT_DATE = 57639
View Source
const CURRENT_TIME = 57641
View Source
const CURRENT_TIMESTAMP = 57637
View Source
const CURRENT_USER = 57640
View Source
const CURSOR = 57542
View Source
const CURSOR_NAME = 57536
View Source
const (
	CreateTriggerStr = "create trigger"
)
View Source
const DATA = 57378
View Source
const DATABASE = 57638
View Source
const DATABASES = 57615
View Source
const DATE = 57490
View Source
const DATETIME = 57576
View Source
const DEC = 57571
View Source
const DECIMAL = 57569
View Source
const DECLARE = 57540
View Source
const DEFAULT = 57371
View Source
const DEFINER = 57514
View Source
const DEFINITION = 57709
View Source
const DELETE = 57352
View Source
const DENSE_RANK = 57678
View Source
const DESC = 57368
View Source
const DESCRIBE = 57488
View Source
const DESCRIPTION = 57697
View Source
const DETERMINISTIC = 57518
View Source
const DISTINCT = 57364
View Source
const DIV = 57445
View Source
const DOUBLE = 57567
View Source
const DROP = 57457
View Source
const DUPLICATE = 57370
View Source
const EACH = 57509
View Source
const ELSE = 57432
View Source
const ELSEIF = 57433
View Source
const EMPTY = 57698
View Source
const ENCLOSED = 57383
View Source
const END = 57434
View Source
const ENFORCED = 57710
View Source
const ENGINES = 57622
View Source
const ENUM = 57597
View Source
const ESCAPE = 57491
View Source
const ESCAPED = 57382
View Source
const EXCEPT = 57699
View Source
const EXCLUDE = 57711
View Source
const EXISTS = 57366
View Source
const EXIT = 57544
View Source
const EXPANSION = 57694
View Source
const EXPLAIN = 57489
View Source
const FALSE = 57423
View Source
const FIELDS = 57621
View Source
const FIRST = 57485
View Source
const FIRST_VALUE = 57679
View Source
const FIXED = 57572
View Source
const FLOAT = 57414
View Source
const FLOAT_TYPE = 57568
View Source
const FLUSH = 57461
View Source
const FOLLOWING = 57712
View Source
const FOLLOWS = 57512
View Source
const FOR = 57361
View Source
const FORCE = 57407
View Source
const FOREIGN = 57481
View Source
const FORMAT = 57495
View Source
const FOUND = 57547
View Source
const FROM = 57353
View Source
const FULL = 57618
View Source
const FULLTEXT = 57475
View Source
const FUNCTION = 57504
View Source
const GE = 57436
View Source
const GEOMCOLLECTION = 57713
View Source
const GEOMETRY = 57598
View Source
const GEOMETRYCOLLECTION = 57602
View Source
const GET_MASTER_PUBLIC_KEY = 57714
View Source
const GLOBAL = 57626
View Source
const GROUP = 57355
View Source
const GROUPING = 57658
View Source
const GROUPS = 57659
View Source
const GROUP_CONCAT = 57652
View Source
const HANDLER = 57546
View Source
const HAVING = 57356
View Source
const HEX = 57411
View Source
const HEXNUM = 57415
View Source
const HISTOGRAM = 57715
View Source
const HISTORY = 57716
View Source
const ID = 57410
View Source
const IF = 57471
View Source
const IGNORE = 57470
View Source
const IN = 57442
View Source
const INACTIVE = 57717
View Source
const INDEX = 57466
View Source
const INDEXES = 57467
View Source
const INFILE = 57761
View Source
const INNER = 57402
View Source
const INOUT = 57516
View Source
const INSERT = 57350
View Source
const INT = 57562
View Source
const INTEGER = 57563
View Source
const INTEGRAL = 57413
View Source
const INTERVAL = 57452
View Source
const INTNUM = 57565
View Source
const INTO = 57369
View Source
const INVISIBLE = 57718
View Source
const INVOKER = 57515
View Source
const IS = 57439
View Source
const ISOLATION = 57628
View Source
const JOIN = 57398
View Source
const JSON = 57596
View Source
const JSON_ARRAYAGG = 57665
View Source
const JSON_EXTRACT_OP = 57453
View Source
const JSON_OBJECTAGG = 57666
View Source
const JSON_TABLE = 57700
View Source
const JSON_UNQUOTE_EXTRACT_OP = 57454
View Source
const KEY = 57387
View Source
const KEYS = 57375
View Source
const KEY_BLOCK_SIZE = 57476
View Source
const LAG = 57680
View Source
const LANGUAGE = 57691
View Source
const LAST_INSERT_ID = 57390
View Source
const LAST_VALUE = 57681
View Source
const LATERAL = 57701
View Source
const LE = 57435
View Source
const LEAD = 57682
View Source
const LEFT = 57400
View Source
const LESS = 57499
View Source
const LEVEL = 57629
View Source
const LEX_ERROR = 57346
View Source
const LIKE = 57440
View Source
const LIMIT = 57359
View Source
const LINES = 57380
View Source
const LINESTRING = 57600
View Source
const LIST_ARG = 57417
View Source
const LOAD = 57379
View Source
const LOCAL = 57606
View Source
const LOCALTIME = 57642
View Source
const LOCALTIMESTAMP = 57643
View Source
const LOCK = 57373
View Source
const LOCKED = 57719
View Source
const LONG = 57591
View Source
const LONGBLOB = 57595
View Source
const LONGTEXT = 57590
View Source
const LOW_PRIORITY = 57607
View Source
const MASTER_COMPRESSION_ALGORITHMS = 57720
View Source
const MASTER_PUBLIC_KEY_PATH = 57721
View Source
const MASTER_TLS_CIPHERSUITES = 57722
View Source
const MASTER_ZSTD_COMPRESSION_LEVEL = 57723
View Source
const MATCH = 57688
View Source
const MAX = 57667
View Source
const MAXVALUE = 57496
View Source
const MEDIUMBLOB = 57594
View Source
const MEDIUMINT = 57561
View Source
const MEDIUMTEXT = 57589
View Source
const MEMBER = 57702
View Source
const MESSAGE_TEXT = 57527
View Source
const MIN = 57668
View Source
const MOD = 57446
View Source
const MODE = 57395
View Source
const MODIFIES = 57521
View Source
const MODIFY = 57462
View Source
const MULTILINESTRING = 57604
View Source
const MULTIPOINT = 57603
View Source
const MULTIPOLYGON = 57605
View Source
const MYSQL_ERRNO = 57528
View Source
const NAMES = 57624
View Source
const NATIONAL = 57585
View Source
const NATURAL = 57405
View Source
const NCHAR = 57583
View Source
const NE = 57437
View Source
const NESTED = 57724
View Source
const NETWORK_NAMESPACE = 57725
View Source
const NEXT = 57392
View Source
const NO = 57482
View Source
const NOT = 57427
View Source
const NOWAIT = 57726
View Source
const NTH_VALUE = 57683
View Source
const NTILE = 57684
View Source
const NULL = 57421
View Source
const NULLS = 57727
View Source
const NULLX = 57608
View Source
const NULL_SAFE_EQUAL = 57438
View Source
const NUMERIC = 57570
View Source
const NVARCHAR = 57584
View Source
const OF = 57376
View Source
const OFF = 57424
View Source
const OFFSET = 57360
View Source
const OJ = 57728
View Source
const OLD = 57729
View Source
const ON = 57408
View Source
const ONLY = 57632
View Source
const OPTIMIZE = 57493
View Source
const OPTIONAL = 57730
View Source
const OPTIONALLY = 57384
View Source
const OR = 57425
View Source
const ORDER = 57357
View Source
const ORDINALITY = 57731
View Source
const ORGANIZATION = 57732
View Source
const OTHERS = 57733
View Source
const OUT = 57517
View Source
const OUTER = 57403
View Source
const OUTFILE = 57377
View Source
const OVER = 57656
View Source
const PARTITION = 57497
View Source
const PATH = 57734
View Source
const PERCENT_RANK = 57686
View Source
const PERSIST = 57735
View Source
const PERSIST_ONLY = 57736
View Source
const PLUGINS = 57623
View Source
const POINT = 57599
View Source
const POLYGON = 57601
View Source
const PRECEDES = 57513
View Source
const PRECEDING = 57737
View Source
const PRECISION = 57573
View Source
const PRIMARY = 57472
View Source
const PRIVILEGE_CHECKS_USER = 57738
View Source
const PROCEDURE = 57501
View Source
const PROCESS = 57739
View Source
const PROCESSLIST = 57619
View Source
const QUERY = 57693
View Source
const RANDOM = 57740
View Source
const RANK = 57687
View Source
const READ = 57630
View Source
const READS = 57520
View Source
const REAL = 57566
View Source
const RECURSIVE = 57703
View Source
const REFERENCE = 57741
View Source
const REFERENCES = 57483
View Source
const REGEXP = 57441
View Source
const RELEASE = 57557
View Source
const RENAME = 57458
View Source
const REORGANIZE = 57498
View Source
const REPAIR = 57492
View Source
const REPEATABLE = 57633
View Source
const REPLACE = 57647
View Source
const REQUIRE_ROW_FORMAT = 57742
View Source
const RESIGNAL = 57538
View Source
const RESOURCE = 57743
View Source
const RESPECT = 57744
View Source
const RESTART = 57745
View Source
const RESTRICT = 57484
View Source
const RETAIN = 57746
View Source
const REUSE = 57747
View Source
const RIGHT = 57401
View Source
const ROLE = 57748
View Source
const ROLLBACK = 57554
View Source
const ROW = 57510
View Source
const ROW_NUMBER = 57685
View Source
const (
	ReorganizeStr = "reorganize partition"
)

Partition strings

View Source
const (
	ReplaceStr = "replace"
)
View Source
const SAVEPOINT = 57555
View Source
const SCHEMA = 57464
View Source
const SCHEMAS = 57616
View Source
const SCHEMA_NAME = 57533
View Source
const SECONDARY = 57749
View Source
const SECONDARY_ENGINE = 57750
View Source
const SECONDARY_LOAD = 57751
View Source
const SECONDARY_UNLOAD = 57752
View Source
const SECURITY = 57523
View Source
const SELECT = 57348
View Source
const SEPARATOR = 57653
View Source
const SEQUENCE = 57508
View Source
const SERIALIZABLE = 57636
View Source
const SESSION = 57627
View Source
const SET = 57372
View Source
const SHARE = 57394
View Source
const SHIFT_LEFT = 57443
View Source
const SHIFT_RIGHT = 57444
View Source
const SHOW = 57487
View Source
const SIGNAL = 57537
View Source
const SIGNED = 57611
View Source
const SKIP = 57753
View Source
const SMALLINT = 57560
View Source
const SPATIAL = 57474
View Source
const SQL = 57522
View Source
const SQLEXCEPTION = 57549
View Source
const SQLSTATE = 57539
View Source
const SQLWARNING = 57548
View Source
const SQL_CACHE = 57397
View Source
const SQL_CALC_FOUND_ROWS = 57391
View Source
const SQL_NO_CACHE = 57396
View Source
const SRID = 57754
View Source
const START = 57551
View Source
const STARTING = 57385
View Source
const STATUS = 57505
View Source
const STD = 57671
View Source
const STDDEV = 57670
View Source
const STDDEV_POP = 57669
View Source
const STDDEV_SAMP = 57672
View Source
const STRAIGHT_JOIN = 57399
View Source
const STREAM = 57349
View Source
const STRING = 57412
View Source
const SUBCLASS_ORIGIN = 57526
View Source
const SUBSTR = 57650
View Source
const SUBSTRING = 57651
View Source
const SUM = 57673
View Source
const SYSTEM = 57760
View Source
const SYSTEM_TIME = 57388
View Source
const TABLE = 57465
View Source
const TABLES = 57617
View Source
const TABLE_NAME = 57534
View Source
const TEMPORARY = 57524
View Source
const TERMINATED = 57381
View Source
const TEXT = 57587
View Source
const THAN = 57500
View Source
const THEN = 57431
View Source
const THREAD_PRIORITY = 57755
View Source
const TIES = 57756
View Source
const TIME = 57574
View Source
const TIMESTAMP = 57575
View Source
const TIMESTAMPADD = 57654
View Source
const TIMESTAMPDIFF = 57655
View Source
const TINYBLOB = 57593
View Source
const TINYINT = 57559
View Source
const TINYTEXT = 57588
View Source
const TO = 57469
View Source
const TRANSACTION = 57552
View Source
const TRIGGER = 57502
View Source
const TRIGGERS = 57503
View Source
const TRUE = 57422
View Source
const TRUNCATE = 57494
View Source
const UNARY = 57447
View Source
const UNBOUNDED = 57757
View Source
const UNCOMMITTED = 57635
View Source
const UNDERSCORE_BINARY = 57450
View Source
const UNDERSCORE_UTF8MB4 = 57451
View Source
const UNDO = 57545
View Source
const UNION = 57347
View Source
const UNIQUE = 57386
View Source
const UNLOCK = 57374
View Source
const UNSIGNED = 57612
View Source
const UNUSED = 57695
View Source
const UPDATE = 57351
View Source
const USE = 57406
View Source
const USING = 57409
View Source
const UTC_DATE = 57644
View Source
const UTC_TIME = 57645
View Source
const UTC_TIMESTAMP = 57646
View Source
const VALUE = 57393
View Source
const VALUES = 57389
View Source
const VALUE_ARG = 57416
View Source
const VARBINARY = 57582
View Source
const VARCHAR = 57579
View Source
const VARIABLES = 57506
View Source
const VARIANCE = 57675
View Source
const VARYING = 57586
View Source
const VAR_POP = 57674
View Source
const VAR_SAMP = 57676
View Source
const VCPU = 57758
View Source
const VIEW = 57468
View Source
const VISIBLE = 57759
View Source
const WARNINGS = 57507
View Source
const WHEN = 57430
View Source
const WHERE = 57354
View Source
const WINDOW = 57657
View Source
const WITH = 57692
View Source
const WORK = 57556
View Source
const WRITE = 57631
View Source
const YEAR = 57577
View Source
const ZEROFILL = 57613

Variables

View Source
var (
	// TruncateUILen truncate queries in debug UIs to the given length. 0 means unlimited.
	TruncateUILen = flag.Int("sql-max-length-ui", 512, "truncate queries in debug UIs to the given length (default 512)")

	// TruncateErrLen truncate queries in error logs to the given length. 0 means unlimited.
	TruncateErrLen = flag.Int("sql-max-length-errors", 0, "truncate queries in error logs to the given length (default unlimited)")
)
View Source
var Aggregates = map[string]bool{
	"avg":            true,
	"bit_and":        true,
	"bit_or":         true,
	"bit_xor":        true,
	"count":          true,
	"group_concat":   true,
	"json_arrayagg":  true,
	"json_objectagg": 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,
}

Aggregates is a map of all aggregate functions.

View Source
var ErrEmpty = errors.New("empty statement")

ErrEmpty is a sentinel error returned when parsing empty statements.

Functions

func Append

func Append(buf *strings.Builder, node SQLNode)

Append appends the SQLNode to the buffer.

func EncodeValue

func EncodeValue(buf *strings.Builder, value *querypb.BindVariable)

EncodeValue encodes one bind variable value into the query.

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 FetchBindVar

func FetchBindVar(name string, bindVariables map[string]*querypb.BindVariable) (val *querypb.BindVariable, isList bool, err error)

FetchBindVar resolves the bind variable by fetching it from bindVariables.

func FormatImpossibleQuery

func FormatImpossibleQuery(buf *TrackedBuffer, node SQLNode)

FormatImpossibleQuery creates an impossible query in a TrackedBuffer. An impossible query is a modified version of a query where all selects have where clauses that are impossible for mysql to resolve. This is used in the vtgate and vttablet:

- In the vtgate it's used for joins: if the first query returns no result, then vtgate uses the impossible query just to fetch field info from vttablet - In the vttablet, it's just an optimization: the field info is fetched once form MySQL, cached and reused for subsequent queries

func GetBindvars

func GetBindvars(stmt Statement) map[string]struct{}

GetBindvars returns a map of the bind vars referenced in the statement. TODO(sougou); This function gets called again from vtgate/planbuilder. Ideally, this should be done only once.

func KeywordString

func KeywordString(id int) string

KeywordString returns the string corresponding to the given keyword

func Normalize

func Normalize(stmt Statement, bindVars map[string]*querypb.BindVariable, prefix string)

Normalize changes the statement to use bind values, and updates the bind vars to those values. The supplied prefix is used to generate the bind var names. The function ensures that there are no collisions with existing bind vars. Within Select constructs, bind vars are deduped. This allows us to identify vindex equality. Otherwise, every value is treated as distinct.

func ParseTokenizer

func ParseTokenizer(tokenizer *Tokenizer) int

ParseTokenizer is a raw interface to parse from the given tokenizer. This does not used pooled parsers, and should not be used in general.

func RedactSQLQuery

func RedactSQLQuery(sql string) (string, error)

RedactSQLQuery returns a sql string with the params stripped out for display

func SkipQueryPlanCacheDirective

func SkipQueryPlanCacheDirective(stmt Statement) bool

SkipQueryPlanCacheDirective returns true if skip query plan cache directive is set to true in query.

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 StripComments

func StripComments(sql string) string

StripComments removes all comments from the string regardless of where they occur

func StripLeadingComments

func StripLeadingComments(sql string) string

StripLeadingComments trims the SQL string and removes any leading comments

func TruncateForLog

func TruncateForLog(query string) string

TruncateForLog is used when displaying queries as part of error logs to avoid overwhelming logging systems with potentially long queries and bind value data.

func TruncateForUI

func TruncateForUI(query string) string

TruncateForUI is used when displaying queries on various Vitess status pages to keep the pages small enough to load and render properly

func VarScopeForColName

func VarScopeForColName(colName *ColName) (*ColName, SetScope, error)

VarScopeForColName returns the SetScope of the given ColName, along with a new ColName without the scope information.

func Walk

func Walk(visit Visit, nodes ...SQLNode) error

Walk calls visit on every node. If visit returns true, the underlying nodes are also visited. If it returns an error, walking is interrupted, and the error is returned.

Types

type AccountLimitItem

type AccountLimitItem struct {
	AccountLimitItemType
	Count *SQLVal
}

AccountLimitItem represents one of the available account limitations.

type AccountLimitItemType

type AccountLimitItemType byte

AccountLimitItemType defines the type that an AccountLimitItem represents.

const (
	AccountLimitItemType_Queries_PH AccountLimitItemType = iota
	AccountLimitItemType_Updates_PH
	AccountLimitItemType_Connections_PH
	AccountLimitItemType_Connections
)

type AccountLimits

type AccountLimits struct {
	MaxQueriesPerHour     *SQLVal
	MaxUpdatesPerHour     *SQLVal
	MaxConnectionsPerHour *SQLVal
	MaxUserConnections    *SQLVal
}

AccountLimits represents a new user's maximum limits.

func NewAccountLimits

func NewAccountLimits(items []AccountLimitItem) (*AccountLimits, error)

NewAccountLimits returns a new AccountLimits from the given items.

func (*AccountLimits) String

func (al *AccountLimits) String() string

String returns the AccountLimits as a formatted string.

type AccountName

type AccountName struct {
	Name    string
	Host    string
	AnyHost bool
}

AccountName represents either a user or role name, which has the format `name`@`host`.

func (*AccountName) String

func (an *AccountName) String() string

String returns the AccountName as a formatted string.

type AccountRename

type AccountRename struct {
	From AccountName
	To   AccountName
}

AccountRename represents an account changing its name.

func (*AccountRename) String

func (ar *AccountRename) String() string

String returns the AccountRename as a formatted string.

type AccountWithAuth

type AccountWithAuth struct {
	AccountName
	Auth1       *Authentication
	Auth2       *Authentication
	Auth3       *Authentication
	AuthInitial *Authentication
}

AccountWithAuth represents a new account with all of its authentication information.

func (*AccountWithAuth) String

func (awa *AccountWithAuth) String() string

String returns AccountWithAuth as a formatted string.

type AliasedExpr

type AliasedExpr struct {
	Expr            Expr
	As              ColIdent
	StartParsePos   int
	EndParsePos     int
	InputExpression string
}

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
	Hints      *IndexHints
	AsOf       *AsOf
}

AliasedTableExpr represents a table expression coupled with an optional alias, AS OF expression, and index hints. 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 AsOf

type AsOf struct {
	Time Expr
}

func (*AsOf) Format

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

type AssignmentExpr

type AssignmentExpr struct {
	Name *ColName
	Expr Expr
}

AssignmentExpr represents an assignment expression.

func (*AssignmentExpr) Format

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

Format formats the node.

type AssignmentExprs

type AssignmentExprs []*AssignmentExpr

AssignmentExprs represents a list of assignment expressions.

func (AssignmentExprs) Format

func (node AssignmentExprs) Format(buf *TrackedBuffer)

Format formats the node.

type Authentication

type Authentication struct {
	RandomPassword bool
	Password       string
	Identity       string
	Plugin         string
}

Authentication represents an account's authentication.

func (*Authentication) String

func (auth *Authentication) String() string

String returns this Authentication as a formatted string.

type AutoIncSpec

type AutoIncSpec struct {
	Column   ColIdent
	Sequence TableName
	Value    Expr
}

AutoIncSpec defines an autoincrement value for a ADD AUTO_INCREMENT statement

func (*AutoIncSpec) Format

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

Format formats the node.

type Begin

type Begin struct {
	TransactionCharacteristic string
}

Begin represents a Begin statement.

func (*Begin) Format

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

Format formats the node.

type BeginEndBlock

type BeginEndBlock struct {
	Statements Statements
}

BeginEndBlock represents a BEGIN .. END block with one or more statements nested within

func (*BeginEndBlock) Format

func (b *BeginEndBlock) 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 (BoolVal) Format

func (node BoolVal) Format(buf *TrackedBuffer)

Format formats the node.

type Call

type Call struct {
	FuncName string
	Params   []Expr
}

Call represents the CALL statement

func (*Call) Format

func (c *Call) Format(buf *TrackedBuffer)

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 CaseStatement

type CaseStatement struct {
	Expr  Expr                // The case expression to switch on
	Cases []CaseStatementCase // The set of WHEN values and attached statements
	Else  Statements          // The set of statements for the ELSE clause
}

CaseStatement represents a CASE .. WHEN .. ELSE statement in a stored procedure / trigger

func (*CaseStatement) Format

func (c *CaseStatement) Format(buf *TrackedBuffer)

type CaseStatementCase

type CaseStatementCase struct {
	Case       Expr       // The expression to match for this WHEN clause to match
	Statements Statements // The list of statements to execute in the case of a match with Case
}

CaseStatementCase represents a single WHEN .. THEN clause in a CaseStatement

type Characteristic

type Characteristic struct {
	Type    CharacteristicValue
	Comment string
}

func (Characteristic) String

func (c Characteristic) String() string

type CharacteristicValue

type CharacteristicValue string
const (
	CharacteristicValue_Comment            CharacteristicValue = "comment"
	CharacteristicValue_LanguageSql        CharacteristicValue = "language sql"
	CharacteristicValue_Deterministic      CharacteristicValue = "deterministic"
	CharacteristicValue_NotDeterministic   CharacteristicValue = "not deterministic"
	CharacteristicValue_ContainsSql        CharacteristicValue = "contains sql"
	CharacteristicValue_NoSql              CharacteristicValue = "no sql"
	CharacteristicValue_ReadsSqlData       CharacteristicValue = "reads sql data"
	CharacteristicValue_ModifiesSqlData    CharacteristicValue = "modifies sql data"
	CharacteristicValue_SqlSecurityDefiner CharacteristicValue = "sql security definer"
	CharacteristicValue_SqlSecurityInvoker CharacteristicValue = "sql security invoker"
)

type CheckConstraintDefinition

type CheckConstraintDefinition struct {
	Expr     Expr
	Enforced bool
}

func (*CheckConstraintDefinition) Format

func (c *CheckConstraintDefinition) Format(buf *TrackedBuffer)

Format formats the node.

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 sqlparser.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 NewColName

func NewColName(name string) *ColName

NewColName returns a simple ColName with no table qualifier

func (*ColName) Equal

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

Equal returns true if the column names match.

func (*ColName) EqualString

func (node *ColName) EqualString(s string) bool

Equal returns true if the column name matches the string given. Only true for column names with no qualifier.

func (*ColName) Format

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

Format formats the node.

func (*ColName) String

func (node *ColName) String() string

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 ColumnOrder

type ColumnOrder struct {
	// First is true if this column should be first in the schema
	First bool
	// AfterColumn is set if this column should be after the one named
	AfterColumn ColIdent
}

ColumnOrder is used in some DDL statements to specify or change the order of a column in a schema.

type ColumnType

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

	// Generic field options.
	NotNull       BoolVal
	Autoincrement BoolVal
	Default       Expr
	OnUpdate      Expr
	Comment       *SQLVal

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

	// Text field options
	Charset string
	Collate string

	// Enum values
	EnumValues []string

	// Key specification
	KeyOpt ColumnKeyOption
	// contains filtered or unexported fields
}

ColumnType represents a sql type in a CREATE TABLE or ALTER 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

func (*ColumnType) String

func (ct *ColumnType) String() string

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

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 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 CommonTableExpr

type CommonTableExpr struct {
	*AliasedTableExpr
	Columns Columns
}

func (*CommonTableExpr) Format

func (e *CommonTableExpr) Format(buf *TrackedBuffer)

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.

func (*ComparisonExpr) IsImpossible

func (node *ComparisonExpr) IsImpossible() bool

IsImpossible returns true if the comparison in the expression can never evaluate to true. Note that this is not currently exhaustive to ALL impossible comparisons.

type ConstraintDefinition

type ConstraintDefinition struct {
	Name    string
	Details ConstraintInfo
}

ConstraintDefinition describes a constraint in a CREATE TABLE statement

func (*ConstraintDefinition) Format

func (c *ConstraintDefinition) Format(buf *TrackedBuffer)

Format formats the node.

type ConstraintInfo

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

ConstraintInfo details a constraint in a CREATE TABLE statement

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)

Format formats the node.

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)

Format formats the node.

type CreateRole

type CreateRole struct {
	IfNotExists bool
	Roles       []AccountName
}

CreateRole represents the CREATE ROLE statement.

func (*CreateRole) Format

func (c *CreateRole) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type CreateUser

type CreateUser struct {
	IfNotExists     bool
	Users           []AccountWithAuth
	DefaultRoles    []AccountName
	TLSOptions      *TLSOptions
	AccountLimits   *AccountLimits
	PasswordOptions *PasswordOptions
	Locked          bool
	Attribute       string
}

CreateUser represents the CREATE USER statement.

func (*CreateUser) Format

func (c *CreateUser) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type CurTimeFuncExpr

type CurTimeFuncExpr struct {
	Name ColIdent
	Fsp  Expr // fractional seconds precision, integer from 0 to 6
}

CurTimeFuncExpr represents the function and arguments for CURRENT DATE/TIME functions supported functions are documented in the grammar

func (*CurTimeFuncExpr) Format

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

Format formats the node.

type DBDDL

type DBDDL struct {
	Action      string
	DBName      string
	IfNotExists bool
	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

	// Set for column alter statements
	ColumnAction string

	// Set for constraint alter statements
	ConstraintAction string

	// Set for column add / drop / rename statements
	Column ColIdent

	// Set for column add / drop / modify statements that specify a column order
	ColumnOrder *ColumnOrder

	// Set for column rename
	ToColumn ColIdent

	// FromTables is set if Action is RenameStr or DropStr.
	FromTables TableNames

	// ToTables is set if Action is RenameStr.
	ToTables TableNames

	// Table is set if Action is other than RenameStr or DropStr.
	Table TableName

	// View name.
	View     TableName
	ViewExpr SelectStatement

	// This exposes the start and end index of the string that makes up the sub statement of the query given.
	// Meaning is specific to the different kinds of statements with sub statements, e.g. views, trigger definitions.
	SubStatementPositionStart int
	SubStatementPositionEnd   int

	// FromViews is set if Action is DropStr.
	FromViews TableNames

	// The following fields are set if a DDL was fully analyzed.
	IfExists    bool
	IfNotExists bool
	OrReplace   bool

	// TableSpec contains the full table spec in case of a create, or a single column in case of an add, drop, or alter.
	TableSpec     *TableSpec
	OptLike       *OptLike
	PartitionSpec *PartitionSpec

	// AutoIncSpec is set for AddAutoIncStr.
	AutoIncSpec *AutoIncSpec

	// IndexSpec is set for all ALTER operations on an index
	IndexSpec *IndexSpec

	// DefaultSpec is set for SET / DROP DEFAULT operations
	DefaultSpec *DefaultSpec

	// TriggerSpec is set for CREATE / ALTER / DROP trigger operations
	TriggerSpec *TriggerSpec

	// ProcedureSpec is set for CREATE PROCEDURE operations
	ProcedureSpec *ProcedureSpec

	// Temporary is set for CREATE TEMPORARY TABLE operations.
	Temporary bool

	// OptSelect is set for CREATE TABLE <> AS SELECT operations.
	OptSelect *OptSelect
}

DDL represents a CREATE, ALTER, DROP, RENAME, TRUNCATE or ANALYZE statement.

func (*DDL) AffectedTables

func (node *DDL) AffectedTables() TableNames

AffectedTables returns the list table names affected by the DDL.

func (*DDL) Format

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

Format formats the node. TODO: add newly added fields here

type Declare

type Declare struct {
	Condition *DeclareCondition
	Cursor    *DeclareCursor
	Handler   *DeclareHandler
	Variables *DeclareVariables
}

Declare represents the DECLARE statement

func (*Declare) Format

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

type DeclareCondition

type DeclareCondition struct {
	Name           string
	SqlStateValue  string
	MysqlErrorCode *SQLVal
}

DeclareCondition represents the DECLARE CONDITION statement

type DeclareCursor

type DeclareCursor struct {
	Name       string
	SelectStmt SelectStatement
}

DeclareCursor represents the DECLARE CURSOR statement

type DeclareHandler

type DeclareHandler struct {
	Action          DeclareHandlerAction
	ConditionValues []DeclareHandlerCondition
	Statement       Statement
}

DeclareHandler represents the DECLARE HANDLER statement

type DeclareHandlerAction

type DeclareHandlerAction string

DeclareHandlerAction represents the action for the handler

const (
	DeclareHandlerAction_Continue DeclareHandlerAction = "continue"
	DeclareHandlerAction_Exit     DeclareHandlerAction = "exit"
	DeclareHandlerAction_Undo     DeclareHandlerAction = "undo"
)

type DeclareHandlerCondition

type DeclareHandlerCondition struct {
	ValueType      DeclareHandlerConditionValue
	MysqlErrorCode *SQLVal
	String         string // May hold either the SqlState or condition name
}

DeclareHandlerCondition represents the conditions for a handler

type DeclareHandlerConditionValue

type DeclareHandlerConditionValue string

DeclareHandlerConditionValue represents the condition values for a handler

const (
	DeclareHandlerCondition_MysqlErrorCode DeclareHandlerConditionValue = "mysql_err_code"
	DeclareHandlerCondition_SqlState       DeclareHandlerConditionValue = "sqlstate"
	DeclareHandlerCondition_ConditionName  DeclareHandlerConditionValue = "condition_name"
	DeclareHandlerCondition_SqlWarning     DeclareHandlerConditionValue = "sqlwarning"
	DeclareHandlerCondition_NotFound       DeclareHandlerConditionValue = "not_found"
	DeclareHandlerCondition_SqlException   DeclareHandlerConditionValue = "sqlexception"
)

type DeclareVariables

type DeclareVariables struct {
	Names   []ColIdent
	VarType ColumnType
}

DeclareVariables represents the DECLARE statement for declaring variables

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 DefaultSpec

type DefaultSpec struct {
	Action string
	Column ColIdent
	Value  Expr
}

DefaultSpec defines a SET / DROP on a column for its default value.

func (*DefaultSpec) Format

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

Format implements SQLNode.

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 validateUnshardedRoute.

func (*Delete) Format

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

Format formats the node.

type DropRole

type DropRole struct {
	IfExists bool
	Roles    []AccountName
}

DropRole represents the DROP ROLE statement.

func (*DropRole) Format

func (d *DropRole) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type DropUser

type DropUser struct {
	IfExists     bool
	AccountNames []AccountName
}

DropUser represents the DROP USER statement.

func (*DropUser) Format

func (d *DropUser) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type EnclosedBy

type EnclosedBy struct {
	Optionally BoolVal
	Delim      *SQLVal
	SQLNode
}

func (*EnclosedBy) Format

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

type Encodable

type Encodable interface {
	EncodeSQL(buf *strings.Builder)
}

Encodable defines the interface for types that can be custom-encoded into SQL.

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 Explain

type Explain struct {
	Statement     Statement
	Analyze       bool
	ExplainFormat string
}

Explain represents an explain statement

func (*Explain) Format

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

Format formats the node.

type Expr

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

Expr represents an expression.

func ExprFromValue

func ExprFromValue(value sqltypes.Value) (Expr, error)

ExprFromValue converts the given Value into an Expr or returns an error.

func ReplaceExpr

func ReplaceExpr(root, from, to Expr) Expr

ReplaceExpr finds the from expression from root and replaces it with to. If from matches root, then to is returned.

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 Fields

type Fields struct {
	TerminatedBy *SQLVal
	*EnclosedBy
	EscapedBy *SQLVal
	SQLNode
}

func (*Fields) Format

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

type ForeignKeyDefinition

type ForeignKeyDefinition struct {
	Source            Columns
	ReferencedTable   TableName
	ReferencedColumns Columns
	OnDelete          ReferenceAction
	OnUpdate          ReferenceAction
}

ForeignKeyDefinition describes a foreign key

func (*ForeignKeyDefinition) Format

func (f *ForeignKeyDefinition) Format(buf *TrackedBuffer)

Format formats the node.

type FuncExpr

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

FuncExpr represents a function call.

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 GrantObjectType

type GrantObjectType byte

GrantObjectType represents the object type that the GRANT or REVOKE statement will apply to.

const (
	GrantObjectType_Any GrantObjectType = iota
	GrantObjectType_Table
	GrantObjectType_Function
	GrantObjectType_Procedure
)

type GrantPrivilege

type GrantPrivilege struct {
	Privileges      []Privilege
	ObjectType      GrantObjectType
	PrivilegeLevel  PrivilegeLevel
	To              []AccountName
	WithGrantOption bool
	As              *GrantUserAssumption
}

GrantPrivilege represents the GRANT...ON...TO statement.

func (*GrantPrivilege) Format

func (g *GrantPrivilege) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type GrantProxy

type GrantProxy struct {
	On              AccountName
	To              []AccountName
	WithGrantOption bool
}

GrantProxy represents the GRANT PROXY statement.

func (*GrantProxy) Format

func (g *GrantProxy) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type GrantRole

type GrantRole struct {
	Roles           []AccountName
	To              []AccountName
	WithAdminOption bool
}

GrantRole represents the GRANT...TO statement.

func (*GrantRole) Format

func (g *GrantRole) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type GrantUserAssumption

type GrantUserAssumption struct {
	Type  GrantUserAssumptionType
	User  AccountName
	Roles []AccountName
}

GrantUserAssumption represents the target user that the user executing the GRANT statement will assume the identity of.

func (*GrantUserAssumption) String

func (gau *GrantUserAssumption) String() string

String returns this GrantUserAssumption as a formatted string.

type GrantUserAssumptionType

type GrantUserAssumptionType byte

GrantUserAssumptionType is the assumption type that the user executing the GRANT statement will use.

const (
	GrantUserAssumptionType_Default GrantUserAssumptionType = iota
	GrantUserAssumptionType_None
	GrantUserAssumptionType_All
	GrantUserAssumptionType_AllExcept
	GrantUserAssumptionType_Roles
)

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 IfStatement

type IfStatement struct {
	Conditions []IfStatementCondition // The initial IF condition, followed by any ELSEIF conditions, in order.
	Else       Statements             // The statements of the ELSE clause, if any
}

IfStatement represents an IF .. THEN .. ELSE statement in a stored procedure / trigger.

func (*IfStatement) Format

func (i *IfStatement) Format(buf *TrackedBuffer)

type IfStatementCondition

type IfStatementCondition struct {
	Expr       Expr
	Statements Statements
}

IfStatementCondition represents a single IF / ELSEIF branch in an IfStatement

type IndexColumn

type IndexColumn struct {
	Column ColIdent
	Length *SQLVal
	Order  string
}

IndexColumn describes a column in an index definition with optional length and direction

type IndexDefinition

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

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
}

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
	Using string
}

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

type IndexSpec

type IndexSpec struct {
	// Action states whether it's a CREATE, DROP, or RENAME
	Action string
	// FromName states the old name when renaming
	FromName ColIdent
	// ToName states the name to set when renaming or references the target table
	ToName ColIdent
	// Using states whether you're using BTREE, HASH, or none
	Using ColIdent
	// Type specifies whether this is UNIQUE, FULLTEXT, SPATIAL, or normal (nothing)
	Type string
	// Columns contains the column names when creating an index
	Columns []*IndexColumn
	// Options contains the index options when creating an index
	Options []*IndexOption
}

IndexSpec describes an index operation in an ALTER statement

func (*IndexSpec) Format

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

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.

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 InsertValues

type InsertValues [][]sqltypes.Value

InsertValues is a custom SQL encoder for the values of an insert statement.

func (InsertValues) EncodeSQL

func (iv InsertValues) EncodeSQL(buf *strings.Builder)

EncodeSQL performs the SQL encoding for InsertValues.

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 Lines

type Lines struct {
	StartingBy   *SQLVal
	TerminatedBy *SQLVal
	SQLNode
}

func (*Lines) Format

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

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 Load

type Load struct {
	Local     BoolVal
	Infile    string
	Table     TableName
	Partition Partitions
	Charset   string
	*Fields
	*Lines
	IgnoreNum *SQLVal
	Columns
}

Load represents a LOAD statement

func (*Load) Format

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

type LoadStatement

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

LoadStatement any LOAD statement.

type LockTables

type LockTables struct {
	Tables TableAndLockTypes
	SQLNode
}

LockTables represents the lock statement

func (*LockTables) Format

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

type LockType

type LockType string

LockType is an enum for Lock Types

const (
	LockRead             LockType = "read"
	LockWrite            LockType = "write"
	LockReadLocal        LockType = "read local"
	LockLowPriorityWrite LockType = "low_priority write"
)

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 MultiAlterDDL

type MultiAlterDDL struct {
	Table      TableName
	Statements []*DDL
}

MultiAlterDDL represents multiple ALTER statements on a single table.

func (*MultiAlterDDL) Format

func (m *MultiAlterDDL) Format(buf *TrackedBuffer)

Format implements SQLNode.

type Nextval

type Nextval struct {
	Expr Expr
}

Nextval defines the NEXT VALUE expression.

func (Nextval) Format

func (node Nextval) 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 AssignmentExprs

OnDup represents an ON DUPLICATE KEY clause.

func (OnDup) Format

func (node OnDup) Format(buf *TrackedBuffer)

Format formats the node.

type OptLike

type OptLike struct {
	LikeTable TableName
}

OptLike works for create table xxx like xxx

func (*OptLike) Format

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

Format formats the node.

type OptSelect

type OptSelect struct {
	Select SelectStatement
}

func (*OptSelect) Format

func (node *OptSelect) 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 Over

type Over struct {
	PartitionBy Exprs
	OrderBy     OrderBy
	WindowName  ColIdent
}

Over defines an OVER expression in a select

func (*Over) Format

func (node *Over) 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

func (*ParenSelect) SetLock

func (node *ParenSelect) SetLock(lock string)

func (*ParenSelect) SetOrderBy

func (node *ParenSelect) SetOrderBy(orders OrderBy)

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 ParsedQuery

type ParsedQuery struct {
	Query string
	// contains filtered or unexported fields
}

ParsedQuery represents a parsed query where bind locations are precompued for fast substitutions.

func BuildParsedQuery

func BuildParsedQuery(in string, vars ...interface{}) *ParsedQuery

BuildParsedQuery builds a ParsedQuery from the input.

func NewParsedQuery

func NewParsedQuery(node SQLNode) *ParsedQuery

NewParsedQuery returns a ParsedQuery of the ast.

func (*ParsedQuery) Append

func (pq *ParsedQuery) Append(buf *strings.Builder, bindVariables map[string]*querypb.BindVariable, extras map[string]Encodable) error

Append appends the generated query to the provided buffer.

func (*ParsedQuery) GenerateQuery

func (pq *ParsedQuery) GenerateQuery(bindVariables map[string]*querypb.BindVariable, extras map[string]Encodable) (string, error)

GenerateQuery generates a query by substituting the specified bindVariables. The extras parameter specifies special parameters that can perform custom encoding.

func (*ParsedQuery) MarshalJSON

func (pq *ParsedQuery) MarshalJSON() ([]byte, error)

MarshalJSON is a custom JSON marshaler for ParsedQuery. Note that any queries longer that 512 bytes will be truncated.

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 PassLockItem

type PassLockItem struct {
	PassLockItemType
	Value *SQLVal
}

PassLockItem represents one of the available password or account options.

type PassLockItemType

type PassLockItemType byte

PassLockItemType defines the type that a PassLockItem represents.

const (
	PassLockItemType_PassExpireDefault PassLockItemType = iota
	PassLockItemType_PassExpireNever
	PassLockItemType_PassExpireInterval
	PassLockItemType_PassHistory
	PassLockItemType_PassReuseInterval
	PassLockItemType_PassReqCurrentDefault
	PassLockItemType_PassReqCurrentOptional
	PassLockItemType_PassFailedLogins
	PassLockItemType_PassLockTime
	PassLockItemType_AccountLock
	PassLockItemType_AccountUnlock
)

type PasswordOptions

type PasswordOptions struct {
	RequireCurrentOptional bool

	ExpirationTime *SQLVal // nil represents the default
	History        *SQLVal // nil represents the default
	ReuseInterval  *SQLVal // nil represents the default
	FailedAttempts *SQLVal // will always be set
	LockTime       *SQLVal // nil represents an unbounded lock time
}

PasswordOptions represents which options may be given to new user account on how to handle passwords.

func NewPasswordOptionsWithLock

func NewPasswordOptionsWithLock(items []PassLockItem) (*PasswordOptions, bool)

NewPasswordOptionsWithLock returns a new PasswordOptions, along with whether to lock the account, from the given items.

func (*PasswordOptions) String

func (po *PasswordOptions) String() string

String returns PasswordOptions as a formatted string.

type Privilege

type Privilege struct {
	Type        PrivilegeType
	DynamicName string
	Columns     []string
}

Privilege specifies a privilege to be used in a GRANT or REVOKE statement.

func (*Privilege) String

func (p *Privilege) String() string

String returns the Privilege as a formatted string.

type PrivilegeLevel

type PrivilegeLevel struct {
	Database     string
	TableRoutine string
}

PrivilegeLevel defines the level that a privilege applies to.

func (*PrivilegeLevel) String

func (p *PrivilegeLevel) String() string

String returns the PrivilegeLevel as a formatted string.

type PrivilegeType

type PrivilegeType byte

PrivilegeType is the type of privilege that is being granted or revoked.

const (
	PrivilegeType_All PrivilegeType = iota
	PrivilegeType_Alter
	PrivilegeType_AlterRoutine
	PrivilegeType_Create
	PrivilegeType_CreateRole
	PrivilegeType_CreateRoutine
	PrivilegeType_CreateTablespace
	PrivilegeType_CreateTemporaryTables
	PrivilegeType_CreateUser
	PrivilegeType_CreateView
	PrivilegeType_Delete
	PrivilegeType_Drop
	PrivilegeType_DropRole
	PrivilegeType_Event
	PrivilegeType_Execute
	PrivilegeType_File
	PrivilegeType_GrantOption
	PrivilegeType_Index
	PrivilegeType_Insert
	PrivilegeType_LockTables
	PrivilegeType_Process
	PrivilegeType_References
	PrivilegeType_Reload
	PrivilegeType_ReplicationClient
	PrivilegeType_ReplicationSlave
	PrivilegeType_Select
	PrivilegeType_ShowDatabases
	PrivilegeType_ShowView
	PrivilegeType_Shutdown
	PrivilegeType_Super
	PrivilegeType_Trigger
	PrivilegeType_Update
	PrivilegeType_Usage
	PrivilegeType_Dynamic // Dynamic privileges are defined at runtime, rather than enforced at the parser

)

type ProcedureParam

type ProcedureParam struct {
	Direction ProcedureParamDirection
	Name      string
	Type      ColumnType
}

type ProcedureParamDirection

type ProcedureParamDirection string
const (
	ProcedureParamDirection_In    ProcedureParamDirection = "in"
	ProcedureParamDirection_Inout ProcedureParamDirection = "inout"
	ProcedureParamDirection_Out   ProcedureParamDirection = "out"
)

type ProcedureSpec

type ProcedureSpec struct {
	Name            string
	Definer         string
	Params          []ProcedureParam
	Characteristics []Characteristic
	Body            Statement
}

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 ReferenceAction

type ReferenceAction int

ReferenceAction indicates the action takes by a referential constraint e.g. the `CASCADE` in a `FOREIGN KEY .. ON DELETE CASCADE` table definition.

const (
	// DefaultAction indicates no action was explicitly specified.
	DefaultAction ReferenceAction = iota
	Restrict
	Cascade
	NoAction
	SetNull
	SetDefault
)

These map to the SQL-defined reference actions. See https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html#foreign-keys-referential-actions

func (ReferenceAction) Format

func (a ReferenceAction) Format(buf *TrackedBuffer)

Format formats the node.

type ReleaseSavepoint

type ReleaseSavepoint struct {
	Identifier string
}

ReleaseSavepoint represents a RELEASE SAVEPOINT statement.

func (*ReleaseSavepoint) Format

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

Format implements the SQLNode interface.

type RenameUser

type RenameUser struct {
	Accounts []AccountRename
}

RenameUser represents the RENAME USER statement.

func (*RenameUser) Format

func (r *RenameUser) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type Resignal

type Resignal struct {
	Signal
}

Resignal represents the RESIGNAL statement

func (*Resignal) Format

func (s *Resignal) Format(buf *TrackedBuffer)

type RevokeAllPrivileges

type RevokeAllPrivileges struct {
	From []AccountName
}

RevokeAllPrivileges represents the REVOKE ALL statement.

func (*RevokeAllPrivileges) Format

func (r *RevokeAllPrivileges) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type RevokePrivilege

type RevokePrivilege struct {
	Privileges     []Privilege
	ObjectType     GrantObjectType
	PrivilegeLevel PrivilegeLevel
	From           []AccountName
}

RevokePrivilege represents the REVOKE...ON...FROM statement.

func (*RevokePrivilege) Format

func (r *RevokePrivilege) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type RevokeProxy

type RevokeProxy struct {
	On   AccountName
	From []AccountName
}

RevokeProxy represents the REVOKE PROXY statement.

func (*RevokeProxy) Format

func (r *RevokeProxy) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type RevokeRole

type RevokeRole struct {
	Roles []AccountName
	From  []AccountName
}

RevokeRole represents the REVOKE...FROM statement.

func (*RevokeRole) Format

func (r *RevokeRole) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type Rollback

type Rollback struct{}

Rollback represents a Rollback statement.

func (*Rollback) Format

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

Format formats the node.

type RollbackSavepoint

type RollbackSavepoint struct {
	Identifier string
}

RollbackSavepoint represents a ROLLBACK TO statement.

func (*RollbackSavepoint) Format

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

Format implements the SQLNode interface.

type SQLNode

type SQLNode interface {
	Format(buf *TrackedBuffer)
	// contains filtered or unexported methods
}

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 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 NewValArg

func NewValArg(in []byte) *SQLVal

NewValArg builds a new ValArg.

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.

func (*SQLVal) String

func (node *SQLVal) String() string

String returns the node as a string, similar to Format.

type Savepoint

type Savepoint struct {
	Identifier string
}

Savepoint represents a SAVEPOINT statement.

func (*Savepoint) Format

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

Format implements the SQLNode interface.

type Select

type Select struct {
	Cache            string
	CalcFoundRows    bool
	Comments         Comments
	Distinct         string
	Hints            string
	CommonTableExprs TableExprs
	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

func (*Select) SetLock

func (node *Select) SetLock(lock string)

func (*Select) SetOrderBy

func (node *Select) SetOrderBy(orderBy OrderBy)

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)
	SetLock(string)
	SetOrderBy(OrderBy)
	SQLNode
	// contains filtered or unexported methods
}

SelectStatement any SELECT statement.

type Set

type Set struct {
	Comments Comments
	Exprs    SetVarExprs
}

Set represents a SET statement.

func (*Set) Format

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

Format formats the node.

type SetScope

type SetScope string

SetScope represents the scope of the set expression.

const (
	SetScope_None        SetScope = ""
	SetScope_Global      SetScope = "global"
	SetScope_Persist     SetScope = "persist"
	SetScope_PersistOnly SetScope = "persist_only"
	SetScope_Session     SetScope = "session"
	SetScope_User        SetScope = "user"
)

func VarScope

func VarScope(nameParts ...string) (string, SetScope, error)

VarScope returns the SetScope of the given name, broken into parts. For example, `@@GLOBAL.sys_var` would become `[]string{"@@GLOBAL", "sys_var"}`. Returns the variable name without any scope specifiers, so the aforementioned variable would simply return "sys_var". `[]string{"@@other_var"}` would return "other_var". If the name parts do not specify a variable (returns SetScope_None), then it is recommended to use the original non-broken string, as this will always only return the last part. `[]string{"my_db", "my_tbl", "my_col"}` will return "my_col" with SetScope_None.

type SetVarExpr

type SetVarExpr struct {
	Scope SetScope
	Name  *ColName
	Expr  Expr
}

SetVarExpr represents a set expression.

func (*SetVarExpr) Format

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

Format formats the node.

type SetVarExprs

type SetVarExprs []*SetVarExpr

SetVarExprs represents a list of set expressions.

func (SetVarExprs) Format

func (node SetVarExprs) Format(buf *TrackedBuffer)

Format formats the node.

type Show

type Show struct {
	Type                   string
	OnTable                TableName
	Table                  TableName
	Database               string
	IfNotExists            bool
	ShowTablesOpt          *ShowTablesOpt
	Scope                  string
	ShowCollationFilterOpt *Expr
	ShowIndexFilterOpt     Expr
	Filter                 *ShowFilter
}

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

func (*Show) HasTable

func (node *Show) HasTable() bool

HasTable returns true if the show statement has a parsed table name. Not all show statements parse table names.

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 ShowGrants

type ShowGrants struct {
	CurrentUser bool
	For         *AccountName
	Using       []AccountName
}

ShowGrants represents the SHOW GRANTS statement.

func (*ShowGrants) Format

func (s *ShowGrants) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type ShowPrivileges

type ShowPrivileges struct{}

ShowPrivileges represents the SHOW PRIVILEGES statement.

func (*ShowPrivileges) Format

func (s *ShowPrivileges) Format(buf *TrackedBuffer)

Format implements the interface Statement.

type ShowTablesOpt

type ShowTablesOpt struct {
	Full   string
	DbName string
	Filter *ShowFilter
	AsOf   Expr
}

ShowTablesOpt is show tables option

type Signal

type Signal struct {
	ConditionName string       // Previously declared condition name
	SqlStateValue string       // Always a 5-character string
	Info          []SignalInfo // The list of name-value pairs of signal information provided
}

Signal represents the SIGNAL statement

func (*Signal) Format

func (s *Signal) Format(buf *TrackedBuffer)

type SignalConditionItemName

type SignalConditionItemName string

SignalConditionItemName represents the item name for the set conditions of a SIGNAL statement.

const (
	SignalConditionItemName_ClassOrigin       SignalConditionItemName = "class_origin"
	SignalConditionItemName_SubclassOrigin    SignalConditionItemName = "subclass_origin"
	SignalConditionItemName_MessageText       SignalConditionItemName = "message_text"
	SignalConditionItemName_MysqlErrno        SignalConditionItemName = "mysql_errno"
	SignalConditionItemName_ConstraintCatalog SignalConditionItemName = "constraint_catalog"
	SignalConditionItemName_ConstraintSchema  SignalConditionItemName = "constraint_schema"
	SignalConditionItemName_ConstraintName    SignalConditionItemName = "constraint_name"
	SignalConditionItemName_CatalogName       SignalConditionItemName = "catalog_name"
	SignalConditionItemName_SchemaName        SignalConditionItemName = "schema_name"
	SignalConditionItemName_TableName         SignalConditionItemName = "table_name"
	SignalConditionItemName_ColumnName        SignalConditionItemName = "column_name"
	SignalConditionItemName_CursorName        SignalConditionItemName = "cursor_name"
)

type SignalInfo

type SignalInfo struct {
	ConditionItemName SignalConditionItemName
	Value             *SQLVal
}

SignalInfo represents a piece of information for a SIGNAL statement

type SimpleTableExpr

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

SimpleTableExpr represents a simple table expression.

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 Parse

func Parse(sql string) (Statement, error)

Parse parses the SQL in full and returns a Statement, which is the AST representation of the query. If a DDL statement is partially parsed but still contains a syntax error, the error is ignored and the DDL is returned anyway.

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 ParseNextStrictDDL

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

ParseNextStrictDDL is the same as ParseNext except it errors on partially parsed DDL statements.

func ParseStrictDDL

func ParseStrictDDL(sql string) (Statement, error)

ParseStrictDDL is the same as Parse except it errors on partially parsed DDL statements.

type Statements

type Statements []Statement

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
	Columns Columns
}

Subquery represents a subquery.

func (*Subquery) Format

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

Format formats the node.

type SubstrExpr

type SubstrExpr struct {
	Name   *ColName
	StrVal *SQLVal
	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). Additionally to column names, SubstrExpr is also supported for string values, e.g.: SubstrExpr('static string value', value_expression, value_expression) In this case StrVal will be set instead of Name.

func (*SubstrExpr) Format

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

Format formats the node.

type TLSOptionItem

type TLSOptionItem struct {
	TLSOptionItemType
	ItemData string
}

TLSOptionItem represents one of the available TLS options.

type TLSOptionItemType

type TLSOptionItemType byte

TLSOptionItemType defines the type that a TLSOptionItem represents.

const (
	TLSOptionItemType_SSL TLSOptionItemType = iota
	TLSOptionItemType_X509
	TLSOptionItemType_Cipher
	TLSOptionItemType_Issuer
	TLSOptionItemType_Subject
)

type TLSOptions

type TLSOptions struct {
	SSL     bool
	X509    bool
	Cipher  string
	Issuer  string
	Subject string
}

TLSOptions represents a new user's TLS options.

func NewTLSOptions

func NewTLSOptions(items []TLSOptionItem) (*TLSOptions, error)

NewTLSOptions returns a new TLSOptions from the given items.

func (*TLSOptions) String

func (tls *TLSOptions) String() string

String returns the TLSOptions as a formatted string.

type TableAndLockType

type TableAndLockType struct {
	Table TableExpr
	Lock  LockType
	SQLNode
}

TableAndLockType contains table and lock association

func (*TableAndLockType) Format

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

type TableAndLockTypes

type TableAndLockTypes []*TableAndLockType

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 sqlparser.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) String

func (node TableName) String() string

Format formats the node.

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
	Constraints []*ConstraintDefinition
	Options     string
}

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

func (*TableSpec) AddColumn

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

AddColumn appends the given column to the list in the spec

func (*TableSpec) AddConstraint

func (ts *TableSpec) AddConstraint(cd *ConstraintDefinition)

AddConstraint appends the given index to the list in the spec

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 TimestampFuncExpr

type TimestampFuncExpr struct {
	Name  string
	Expr1 Expr
	Expr2 Expr
	Unit  string
}

TimestampFuncExpr represents the function and arguments for TIMESTAMP{ADD,DIFF} functions.

func (*TimestampFuncExpr) Format

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

Format formats the node.

type Tokenizer

type Tokenizer struct {
	InStream            io.Reader
	AllowComments       bool
	SkipSpecialComments bool
	SkipToEnd           bool

	Position    int
	OldPosition 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) *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 from 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 {
	*strings.Builder
	// 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) ParsedQuery

func (buf *TrackedBuffer) ParsedQuery() *ParsedQuery

ParsedQuery returns a ParsedQuery that contains bind locations for easy substitution.

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 TriggerOrder

type TriggerOrder struct {
	PrecedesOrFollows string // PrecedesStr, FollowsStr
	OtherTriggerName  string
}

type TriggerSpec

type TriggerSpec struct {
	Name  string
	Time  string // BeforeStr, AfterStr
	Event string // UpdateStr, InsertStr, DeleteStr
	Order *TriggerOrder
	Body  Statement
}

type TupleEqualityList

type TupleEqualityList struct {
	Columns []ColIdent
	Rows    [][]sqltypes.Value
}

TupleEqualityList is for generating equality constraints for tables that have composite primary keys.

func (*TupleEqualityList) EncodeSQL

func (tpl *TupleEqualityList) EncodeSQL(buf *strings.Builder)

EncodeSQL generates the where clause constraints for the tuple equality.

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

func (*Union) SetLock

func (node *Union) SetLock(lock string)

func (*Union) SetOrderBy

func (node *Union) SetOrderBy(orderBy OrderBy)

type UnlockTables

type UnlockTables struct{}

UnlockTables represents the unlock statement

func (*UnlockTables) Format

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

type Update

type Update struct {
	Comments   Comments
	Ignore     string
	TableExprs TableExprs
	Exprs      AssignmentExprs
	Where      *Where
	OrderBy    OrderBy
	Limit      *Limit
}

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

func (*Update) Format

func (node *Update) 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 ValuesStatement

type ValuesStatement struct {
	Rows    Values
	Columns Columns
}

ValuesStatement is a VALUES ROW('1', '2'), ROW(3, 4) expression, which can be a table factor or a stand-alone statement

func (*ValuesStatement) Format

func (s *ValuesStatement) Format(buf *TrackedBuffer)

type Visit

type Visit func(node SQLNode) (kontinue bool, err error)

Visit defines the signature of a function that can be used to visit all nodes of a parse tree.

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.

Jump to

Keyboard shortcuts

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