class SQLiteParser 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 be a type word.

private MAIN

The database that unqualified persistent names belong to.

private KEY_CLAUSES

Keywords that follow an index key; COLLATE is not one, since it can be part of the key's expression.

private CONFLICT_RESOLUTIONS

The ways ON CONFLICT can resolve a constraint violation.

Methods

parse(string $sql)

Parse a SQL schema dump.

from  Parser
createLexer(string $sql)

Create the lexer for one input.

createState(string $sql)

Create the state of one parse, in which names compare as SQLite compares them.

void
parseStatement(TokenStream $tokens, ParseState $state)

Read the statement's represented facts, leaving any unread remainder to be skipped.

parseType(TokenStream $tokens, ParseState $state)

Read a column type: its words in lower case, joined by single spaces, and its signed number modifiers.

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.

from  Parser
string
parseName(TokenStream $tokens, string $description)

Read an identifier, which SQLite also accepts as a string literal.

parseQualifiedName(TokenStream $tokens, string $description)

Read an optionally schema-qualified name, spelling an explicit main database as unqualified names do.

parseRelationName(TokenStream $tokens, ParseState $state, string $description)

Read the name of a table or view, which belongs to the default schema when unqualified.

from  Parser
array
parseNameList(TokenStream $tokens, string $description)

Read a parenthesized list of identifiers.

from  Parser
string
parseCollation(TokenStream $tokens)

Read a collation name, keeping its qualification and quoting as written.

from  Parser
string
parseGroup(TokenStream $tokens)

Read a parenthesized group, returning its source text with the brackets.

from  Parser
string
parseExpression(TokenStream $tokens, array $clauses, string $description)

Read an expression that ends before a clause keyword or the end of its list entry.

from  Parser
bool
atClause(TokenStream $tokens, array $clauses)

Determine whether the current word begins one of the given clauses rather than naming a schema.

from  Parser
string|null
parseLiteral(TokenStream $tokens)

Read a string literal that forms a complete value, or return null without consuming anything.

from  Parser
bool
atEntryEnd(TokenStream $tokens)

Determine whether the current list entry, such as a column definition, has ended.

from  Parser
void
skipEntry(TokenStream $tokens)

Skip the rest of the current list entry.

from  Parser
void
parseTableBody(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read the parenthesized columns and constraints of a table.

from  Parser
bool
isTableConstraint(TokenStream $tokens)

Determine whether a table body entry is a constraint rather than a column.

from  Parser
string|null
parseConstraintName(TokenStream $tokens)

Read the name given by a CONSTRAINT keyword, if any.

from  Parser
void
parseTableConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read table constraints up to the next comma, which SQLite lets follow one another under the latest constraint name.

bool
parseConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table, string|null $column, string|null $name)

Read a table constraint, or a column constraint on the given column, returning false when it is not supported.

parseColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read a column definition, whose latest constraint name applies to every constraint after it.

bool
parseColumnConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table, ColumnDefinition $column, string|null $name)

Read one column clause, returning false when it is not supported.

parseGeneration(TokenStream $tokens)

Read a generated column's parenthesized expression and kind, which is virtual unless stored.

from  Parser
void
markPrimaryKeyColumnsNotNull(Index $index, TableDefinition $table)

Make the columns of a primary key non-null on a table.

from  Parser
findColumn(TableDefinition $table, string $name)

Find a table's column by name, which SQLite compares without ASCII case.

array
parseIndexColumns(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read a parenthesized list of index keys.

from  Parser
parseIndexColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read an index key: one of the table's columns, possibly in brackets and collations, or an expression.

array
parseForeignKeyRules(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read a foreign key's match mode and referential actions, which can come in any order.

ReferentialAction
parseReferentialAction(TokenStream $tokens)

Read a referential action.

from  Parser
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.

from  Parser
bool
isTemporary(TableReference $reference)

Determine whether a name belongs to the session's temporary database.

bool
relationExists(ParseState $state, string|null $schema, string $name)

Determine whether a known relation already has the given name.

from  Parser
string
parseViewQuery(TokenStream $tokens)

Read a view query, excluding a trailing view option.

from  Parser
bool
isViewOption(TokenStream $tokens)

Determine whether a WITH clause is the view's trailing check option.

from  Parser
freeze(ParseState $state)

Freeze the parsed definitions into a schema.

from  Parser
freezeTable(TableDefinition $table, ParseState $state)

Freeze a table after resolving foreign keys that omit their referenced columns.

from  Parser
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.

from  Parser
freezeColumn(ColumnDefinition $column, TableDefinition $table, ParseState $state)

Freeze a column.

from  Parser

Details

in Parser at line 62
Schema parse(string $sql)

Parse a SQL schema dump.

Parameters

string $sql

Return Value

Schema

at line 56
protected Lexer createLexer(string $sql)

Create the lexer for one input.

Parameters

string $sql

Return Value

Lexer

at line 64
protected ParseState createState(string $sql)

Create the state of one parse, in which names compare as SQLite compares them.

Parameters

string $sql

Return Value

ParseState

at line 75
protected void parseStatement(TokenStream $tokens, ParseState $state)

Read the statement's represented facts, leaving any unread remainder to be skipped.

Parameters

TokenStream $tokens
ParseState $state

Return Value

void

at line 294
protected ColumnType parseType(TokenStream $tokens, ParseState $state)

Read a column type: its words in lower case, joined by single spaces, and its signed number modifiers.

A column can have no type, which gives an empty name.

Parameters

TokenStream $tokens
ParseState $state

Return Value

ColumnType

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.

Parameters

TokenStream $tokens
ParseState $state

Return Value

void

at line 118
protected string parseName(TokenStream $tokens, string $description)

Read an identifier, which SQLite also accepts as a string literal.

Parameters

TokenStream $tokens
string $description

Return Value

string

at line 142
protected TableReference parseQualifiedName(TokenStream $tokens, string $description)

Read an optionally schema-qualified name, spelling an explicit main database as unqualified names do.

Parameters

TokenStream $tokens
string $description

Return Value

TableReference

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.

Parameters

TokenStream $tokens
ParseState $state
string $description

Return Value

TableReference

in Parser at line 152
protected array parseNameList(TokenStream $tokens, string $description)

Read a parenthesized list of identifiers.

Parameters

TokenStream $tokens
string $description

Return Value

array

in Parser at line 169
protected string parseCollation(TokenStream $tokens)

Read a collation name, keeping its qualification and quoting as written.

Parameters

TokenStream $tokens

Return Value

string

in Parser at line 180
protected string parseGroup(TokenStream $tokens)

Read a parenthesized group, returning its source text with the brackets.

Parameters

TokenStream $tokens

Return Value

string

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.

Parameters

TokenStream $tokens
array $clauses
string $description

Return Value

string

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.

Parameters

TokenStream $tokens
array $clauses

Return Value

bool

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.

Parameters

TokenStream $tokens

Return Value

string|null

in Parser at line 245
protected bool atEntryEnd(TokenStream $tokens)

Determine whether the current list entry, such as a column definition, has ended.

Parameters

TokenStream $tokens

Return Value

bool

in Parser at line 253
protected void skipEntry(TokenStream $tokens)

Skip the rest of the current list entry.

Parameters

TokenStream $tokens

Return Value

void

in Parser at line 267
protected void parseTableBody(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read the parenthesized columns and constraints of a table.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

void

in Parser at line 293
protected bool isTableConstraint(TokenStream $tokens)

Determine whether a table body entry is a constraint rather than a column.

Parameters

TokenStream $tokens

Return Value

bool

in Parser at line 301
protected string|null parseConstraintName(TokenStream $tokens)

Read the name given by a CONSTRAINT keyword, if any.

Parameters

TokenStream $tokens

Return Value

string|null

at line 266
protected void parseTableConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read table constraints up to the next comma, which SQLite lets follow one another under the latest constraint name.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

void

at line 419
protected bool parseConstraint(TokenStream $tokens, ParseState $state, TableDefinition $table, string|null $column, string|null $name)

Read a table constraint, or a column constraint on the given column, returning false when it is not supported.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table
string|null $column
string|null $name

Return Value

bool

at line 244
protected ColumnDefinition parseColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read a column definition, whose latest constraint name applies to every constraint after it.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

ColumnDefinition

at line 355
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.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table
ColumnDefinition $column
string|null $name

Return Value

bool

in Parser at line 394
protected Generation parseGeneration(TokenStream $tokens)

Read a generated column's parenthesized expression and kind, which is virtual unless stored.

Parameters

TokenStream $tokens

Return Value

Generation

in Parser at line 410
protected void markPrimaryKeyColumnsNotNull(Index $index, TableDefinition $table)

Make the columns of a primary key non-null on a table.

Parameters

Index $index
TableDefinition $table

Return Value

void

at line 283
protected ColumnDefinition|null findColumn(TableDefinition $table, string $name)

Find a table's column by name, which SQLite compares without ASCII case.

Parameters

TableDefinition $table
string $name

Return Value

ColumnDefinition|null

in Parser at line 434
protected array parseIndexColumns(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read a parenthesized list of index keys.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

array

at line 513
protected IndexColumn parseIndexColumn(TokenStream $tokens, ParseState $state, TableDefinition $table)

Read an index key: one of the table's columns, possibly in brackets and collations, or an expression.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

IndexColumn

at line 692
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.

SQLite accepts any match name and an ON INSERT action, and enforces neither.

Parameters

TokenStream $tokens
ParseState $state
TableDefinition $table

Return Value

array

the match mode, then the update and delete actions

in Parser at line 491
protected ReferentialAction parseReferentialAction(TokenStream $tokens)

Read a referential action.

Parameters

TokenStream $tokens

Return Value

ReferentialAction

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.

Parameters

TokenStream $tokens
ParseState $state
bool $materialized

Return Value

TableReference

at line 154
protected bool isTemporary(TableReference $reference)

Determine whether a name belongs to the session's temporary database.

Parameters

TableReference $reference

Return Value

bool

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.

Parameters

ParseState $state
string|null $schema
string $name

Return Value

bool

in Parser at line 554
protected string parseViewQuery(TokenStream $tokens)

Read a view query, excluding a trailing view option.

Parameters

TokenStream $tokens

Return Value

string

in Parser at line 576
protected bool isViewOption(TokenStream $tokens)

Determine whether a WITH clause is the view's trailing check option.

Parameters

TokenStream $tokens

Return Value

bool

in Parser at line 588
protected Schema freeze(ParseState $state)

Freeze the parsed definitions into a schema.

Parameters

ParseState $state

Return Value

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.

Parameters

TableDefinition $table
ParseState $state

Return Value

Table

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.

Parameters

ForeignKey $foreignKey
ParseState $state

Return Value

array|null

in Parser at line 687
protected Column freezeColumn(ColumnDefinition $column, TableDefinition $table, ParseState $state)

Freeze a column.

Parameters

ColumnDefinition $column
TableDefinition $table
ParseState $state

Return Value

Column