MySqlParser
class MySqlParser extends Parser
Constants
| private ENTRY_ENDS |
The texts of the punctuation and terminator that end a list entry. |
| private DATA_STATEMENTS |
Statements that change rows rather than relations. |
| protected NON_RELATION_OBJECTS |
Kinds of objects that are not relations, which a relation only depends on in ways that stop a drop without CASCADE. |
| protected COLUMN_CLAUSES |
Keywords that begin a column clause, so none of them can name a column type. |
| protected INDEX_KINDS |
The kinds of index that CREATE INDEX can name before its INDEX keyword. |
| private TABLE_ENTRY_STARTS |
The first keywords of the constraints and indexes in a table definition. |
| private UNNAMED_CONSTRAINTS |
The constraints that can directly follow CONSTRAINT, which then has no name. |
| private TABLE_OPTIONS |
Physical table options with a scalar value. |
| private COLUMN_OPTIONS |
Physical column options with a scalar value. |
| private INDEX_OPTIONS |
Physical index options with a scalar value. |
Methods
Create the lexer for one input.
Read the statement's represented facts, leaving any unread remainder to be skipped.
Read a column type with its modifiers, enum or set labels and attributes.
Record that a statement the dialect does not read may change relations without naming them, unless it only changes rows.
Read an optionally schema-qualified name.
Read the name of a table or view, which belongs to the default schema when unqualified.
Read a collation name, keeping its qualification and quoting as written.
Read a parenthesized group, returning its source text with the brackets.
Read an expression that ends before a clause keyword or the end of its list entry.
Determine whether the current word begins one of the given clauses rather than naming a schema.
Read a string literal that forms a complete value, or return null without consuming anything.
Determine whether the current list entry, such as a column definition, has ended.
Read the parenthesized columns and constraints of a table.
Determine whether a table body entry is a constraint or index rather than a column.
Read the name given by a CONSTRAINT keyword, which MySQL lets a constraint omit.
Read a table constraint, keeping an unsupported one as a table issue.
Read a table constraint or index, or a column constraint on the given column, returning false when it is not supported.
Read a column definition into the table, expanding SERIAL into the facts it stands for.
Read one column clause, returning false when it is not supported.
Read a generated column's parenthesized expression and kind, which is virtual unless stored.
Make the columns of a primary key non-null on a table.
Find a table's column by name, which MySQL compares case-insensitively.
Read a parenthesized list of index keys.
Read an index key: a parenthesized expression, or a column with an optional prefix length.
Read a foreign key's match mode and referential actions, which can come in any order.
Read a view from its name, without inferring the types its query produces, and return its name.
Determine whether a name belongs to the session's temporary schema.
Determine whether a known relation already has the given name.
Determine whether a WITH clause is the view's trailing check option.
Freeze a table after resolving foreign keys that omit their referenced columns.
Get the columns a foreign key references, which default to the referenced table's primary key, or null when they cannot be resolved.
Read what follows a table's options, reporting clauses that can hide its columns or other facts.
Read a table index after its kind keywords, starting from its optional name.
Read a foreign key's referenced table, columns and rules after its REFERENCES keyword.
Name a foreign key by its constraint name, the only name it has on every MySQL version.
Details
at line 103
protected Lexer
createLexer(string $sql)
Create the lexer for one input.
in
Parser at line 86
protected ParseState
createState(string $sql)
Create the state of one parse.
at line 111
protected void
parseStatement(TokenStream $tokens, ParseState $state)
Read the statement's represented facts, leaving any unread remainder to be skipped.
at line 432
protected ColumnType
parseType(TokenStream $tokens, ParseState $state)
Read a column type with its modifiers, enum or set labels and attributes.
in
Parser at line 108
protected void
recordUnreadStatement(TokenStream $tokens, ParseState $state)
Record that a statement the dialect does not read may change relations without naming them, unless it only changes rows.
Row changes can still run server-side code, such as triggers, whose effects are outside the impact.
in
Parser at line 118
protected string
parseName(TokenStream $tokens, string $description)
Read an identifier.
in
Parser at line 126
protected TableReference
parseQualifiedName(TokenStream $tokens, string $description)
Read an optionally schema-qualified name.
in
Parser at line 138
protected TableReference
parseRelationName(TokenStream $tokens, ParseState $state, string $description)
Read the name of a table or view, which belongs to the default schema when unqualified.
in
Parser at line 152
protected array
parseNameList(TokenStream $tokens, string $description)
Read a parenthesized list of identifiers.
in
Parser at line 169
protected string
parseCollation(TokenStream $tokens)
Read a collation name, keeping its qualification and quoting as written.
in
Parser at line 180
protected string
parseGroup(TokenStream $tokens)
Read a parenthesized group, returning its source text with the brackets.
in
Parser at line 198
protected string
parseExpression(TokenStream $tokens, array $clauses, string $description)
Read an expression that ends before a clause keyword or the end of its list entry.
in
Parser at line 214
protected bool
atClause(TokenStream $tokens, array $clauses)
Determine whether the current word begins one of the given clauses rather than naming a schema.
in
Parser at line 222
protected string|null
parseLiteral(TokenStream $tokens)
Read a string literal that forms a complete value, or return null without consuming anything.
in
Parser at line 245
protected bool
atEntryEnd(TokenStream $tokens)
Determine whether the current list entry, such as a column definition, has ended.
in
Parser at line 253
protected void
skipEntry(TokenStream $tokens)
Skip the rest of the current list entry.
in
Parser at line 267
protected void
parseTableBody(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read the parenthesized columns and constraints of a table.
at line 383
protected bool
isTableConstraint(TokenStream $tokens)
Determine whether a table body entry is a constraint or index rather than a column.
at line 391
protected string|null
parseConstraintName(TokenStream $tokens)
Read the name given by a CONSTRAINT keyword, which MySQL lets a constraint omit.
in
Parser at line 309
protected void
parseTableConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read a table constraint, keeping an unsupported one as a table issue.
at line 618
protected bool
parseConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table, string|null $column, string|null $name)
Read a table constraint or index, or a column constraint on the given column, returning false when it is not supported.
at line 401
protected ColumnDefinition
parseColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read a column definition into the table, expanding SERIAL into the facts it stands for.
at line 516
protected bool
parseColumnConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table, ColumnDefinition $column, string|null $name)
Read one column clause, returning false when it is not supported.
in
Parser at line 394
protected Generation
parseGeneration(TokenStream $tokens)
Read a generated column's parenthesized expression and kind, which is virtual unless stored.
in
Parser at line 410
protected void
markPrimaryKeyColumnsNotNull(Index $index, TableDefinition $table)
Make the columns of a primary key non-null on a table.
at line 418
protected ColumnDefinition|null
findColumn(TableDefinition $table, string $name)
Find a table's column by name, which MySQL compares case-insensitively.
in
Parser at line 434
protected array
parseIndexColumns(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read a parenthesized list of index keys.
at line 740
protected IndexColumn
parseIndexColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read an index key: a parenthesized expression, or a column with an optional prefix length.
in
Parser at line 458
protected array
parseForeignKeyRules(TokenStream $tokens, ParseState $state, TableDefinition $table)
Read a foreign key's match mode and referential actions, which can come in any order.
in
Parser at line 491
protected ReferentialAction
parseReferentialAction(TokenStream $tokens)
Read a referential action.
in
Parser at line 506
protected TableReference
parseCreateView(TokenStream $tokens, ParseState $state, bool $materialized = false)
Read a view from its name, without inferring the types its query produces, and return its name.
in
Parser at line 536
protected bool
isTemporary(TableReference $reference)
Determine whether a name belongs to the session's temporary schema.
in
Parser at line 544
protected bool
relationExists(ParseState $state, string|null $schema, string $name)
Determine whether a known relation already has the given name.
in
Parser at line 554
protected string
parseViewQuery(TokenStream $tokens)
Read a view query, excluding a trailing view option.
in
Parser at line 576
protected bool
isViewOption(TokenStream $tokens)
Determine whether a WITH clause is the view's trailing check option.
in
Parser at line 588
protected Schema
freeze(ParseState $state)
Freeze the parsed definitions into a schema.
in
Parser at line 609
protected Table
freezeTable(TableDefinition $table, ParseState $state)
Freeze a table after resolving foreign keys that omit their referenced columns.
in
Parser at line 667
protected array|null
referencedColumns(ForeignKey $foreignKey, ParseState $state)
Get the columns a foreign key references, which default to the referenced table's primary key, or null when they cannot be resolved.
in
Parser at line 687
protected Column
freezeColumn(ColumnDefinition $column, TableDefinition $table, ParseState $state)
Freeze a column.
at line 354
protected void
parseTableTail(TokenStream $tokens, ParseState $state, TableDefinition $table, bool $columns)
Read what follows a table's options, reporting clauses that can hide its columns or other facts.
at line 689
protected void
parseTableIndex(TokenStream $tokens, ParseState $state, TableDefinition $table, string|null $name, string|null $type = null, bool $unique = false)
Read a table index after its kind keywords, starting from its optional name.
at line 789
protected void
parseReferences(TokenStream $tokens, ParseState $state, TableDefinition $table, string|null $name, array $columns)
Read a foreign key's referenced table, columns and rules after its REFERENCES keyword.
at line 812
protected string|null
foreignKeyName(string|null $constraintName, string|null $indexName)
Name a foreign key by its constraint name, the only name it has on every MySQL version.
Without one, MySQL 8.0.16 and later generate a name, while earlier versions used the index name.