sql-stmt-list:

sql-stmt ;

sql-stmt-list
         ::= ( sql-stmt ( ';' sql-stmt )* )?

no references


sql-stmt:

EXPLAIN QUERY PLAN alter-table-stmt analyze-stmt attach-stmt begin-stmt commit-stmt create-index-stmt create-table-stmt create-trigger-stmt create-view-stmt create-virtual-table-stmt delete-stmt delete-stmt-limited detach-stmt drop-index-stmt drop-table-stmt drop-trigger-stmt drop-view-stmt insert-stmt pragma-stmt reindex-stmt release-stmt rollback-stmt savepoint-stmt select-stmt update-stmt update-stmt-limited vacuum-stmt

sql-stmt ::= ( 'EXPLAIN' ( 'QUERY' 'PLAN' )? )? ( alter-table-stmt | analyze-stmt | attach-stmt | begin-stmt | commit-stmt | create-index-stmt | create-table-stmt | create-trigger-stmt | create-view-stmt | create-virtual-table-stmt | delete-stmt | delete-stmt-limited | detach-stmt | drop-index-stmt | drop-table-stmt | drop-trigger-stmt | drop-view-stmt | insert-stmt | pragma-stmt | reindex-stmt | release-stmt | rollback-stmt | savepoint-stmt | select-stmt | update-stmt | update-stmt-limited | vacuum-stmt )

referenced by:


alter-table-stmt:

ALTER TABLE schema-name . table-name RENAME TO new-table-name COLUMN column-name TO new-column-name ADD COLUMN column-def

alter-table-stmt
         ::= 'ALTER' 'TABLE' ( schema-name '.' )? table-name ( 'RENAME' ( 'TO' new-table-name | 'COLUMN'? column-name 'TO' new-column-name ) | 'ADD' 'COLUMN'? column-def )

referenced by:


analyze-stmt:

ANALYZE schema-name . table-or-index-name table-or-index-name

analyze-stmt
         ::= 'ANALYZE' ( schema-name ( '.' table-or-index-name )? | table-or-index-name )?

referenced by:


attach-stmt:

ATTACH DATABASE expr AS schema-name

attach-stmt
         ::= 'ATTACH' 'DATABASE'? expr 'AS' schema-name

referenced by:


begin-stmt:

BEGIN DEFERRED IMMEDIATE EXCLUSIVE TRANSACTION

begin-stmt
         ::= 'BEGIN' ( 'DEFERRED' | 'IMMEDIATE' | 'EXCLUSIVE' )? 'TRANSACTION'

referenced by:


commit-stmt:

COMMIT END TRANSACTION

commit-stmt
         ::= ( 'COMMIT' | 'END' ) 'TRANSACTION'?

referenced by:


create-index-stmt:

CREATE UNIQUE INDEX IF NOT EXISTS schema-name . index-name ON table-name ( indexed-column , ) WHERE expr

create-index-stmt
         ::= 'CREATE' 'UNIQUE'? 'INDEX' ( 'IF' 'NOT' 'EXISTS' )? ( schema-name '.' )? index-name 'ON' table-name '(' indexed-column ( ',' indexed-column )* ')' ( 'WHERE' expr )?

referenced by:


create-table-stmt:

CREATE TMP TEMPORARY TABLE IF NOT EXISTS schema-name . table-name AS select-stmt ( dlumn-def , column-def , table-constraint WITHOUT ROWID )

create-table-stmt
         ::= 'CREATE' ( 'TMP' | 'TEMPORARY' )? 'TABLE' ( 'IF' 'NOT' 'EXISTS' )? ( schema-name '.' )? table-name ( 'AS' select-stmt | '(' dlumn-def ( ',' column-def )* ( ',' table-constraint )* ( 'WITHOUT' 'ROWID' )? ')' )

referenced by:


create-trigger-stmt:

CREATE TMP TEMPORARY TRIGGER IF NOT EXISTS schema-name . trigger-name BEFORE AFTER INSTEAD OF DELETE INSERT UPDATE OF column-name , ON table-name FOR EACH ROW WHEN expr BEGIN update-stmt insert-stmt delete-stmt select-stmt ; END

create-trigger-stmt
         ::= 'CREATE' ( 'TMP' | 'TEMPORARY' )? 'TRIGGER' ( 'IF' 'NOT' 'EXISTS' )? ( schema-name '.' )? trigger-name ( 'BEFORE' | 'AFTER' | 'INSTEAD' 'OF' )? ( 'DELETE' | 'INSERT' | 'UPDATE' ( 'OF' column-name ( ',' column-name )* )? ) 'ON' table-name ( 'FOR' 'EACH' 'ROW' )? ( 'WHEN' expr )? 'BEGIN' ( update-stmt | insert-stmt | delete-stmt | select-stmt ) ( ';' ( update-stmt | insert-stmt | delete-stmt | select-stmt ) )* 'END'

referenced by:


create-view-stmt:

CREATE TMP TEMPORARY VIEW IF NOT EXISTS schema-name . view-name column-name , AS select-stmt

create-view-stmt
         ::= 'CREATE' ( 'TMP' | 'TEMPORARY' )? 'VIEW' ( 'IF' 'NOT' 'EXISTS' )? ( schema-name '.' )? view-name ( column-name ( ',' column-name )* )? 'AS' select-stmt

referenced by:


create-virtual-table-stmt:

CREATE VIRTUAL TABLE IF NOT EXISTS schema-name . table-name USING module-name module-argument , moduke-argument

create-virtual-table-stmt
         ::= 'CREATE' 'VIRTUAL' 'TABLE' ( 'IF' 'NOT' 'EXISTS' )? ( schema-name '.' )? table-name 'USING' module-name ( module-argument ( ',' moduke-argument )* )?

referenced by:


delete-stmt:

WITH RECURSIVE common-table-expression , DELETE FROM quorified-table-name WHERE expr

delete-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* 'DELETE' 'FROM' quorified-table-name ( 'WHERE' expr )?

referenced by:


delete-stmt-limited:

WITH RECURSIVE common-table-expression , DELETE FROM quorified-table-name WHERE expr ORDER BY ordering-term , LIMIT expr OFFSET , expr

delete-stmt-limited
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* 'DELETE' 'FROM' quorified-table-name ( 'WHERE' expr )? ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? ( 'LIMIT' expr ( ( 'OFFSET' | ',' ) expr )? )?

referenced by:


detach-stmt:

DETACH DATABASE schema-name

detach-stmt
         ::= 'DETACH' 'DATABASE'? schema-name

referenced by:


drop-index-stmt:

DROP INDEX IF EXISTS schema-name . index-name

drop-index-stmt
         ::= 'DROP' 'INDEX' ( 'IF' 'EXISTS' )? ( schema-name '.' )? index-name

referenced by:


drop-table-stmt:

DROP TABLE IF EXISTS schema-name . table-name

drop-table-stmt
         ::= 'DROP' 'TABLE' ( 'IF' 'EXISTS' )? ( schema-name '.' )? table-name

referenced by:


drop-trigger-stmt:

DROP TRIGGER IF EXISTS schema-name . trigger-name

drop-trigger-stmt
         ::= 'DROP' 'TRIGGER' ( 'IF' 'EXISTS' )? ( schema-name '.' )? trigger-name

referenced by:


drop-view-stmt:

DROP VIEW IF EXISTS schema-name . view-name

drop-view-stmt
         ::= 'DROP' 'VIEW' ( 'IF' 'EXISTS' )? ( schema-name '.' )? view-name

referenced by:


insert-stmt:

WITH RECURSIVE common-table-expression , INSERT OR REPLACE ROLLBACK ABORT FAIL IGNORE REPLACE INTO schema-name . table-name AS alias ( column-name , ) VALUES ( expr , ) , select-stmt upsert-clause DEFAULT VALUES

insert-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* ( 'INSERT' ( 'OR' ( 'REPLACE' | 'ROLLBACK' | 'ABORT' | 'FAIL' | 'IGNORE' ) )? | 'REPLACE' ) 'INTO' ( schema-name '.' )? table-name ( 'AS' alias )? ( '(' column-name ( ',' column-name )* ')' )? ( ( 'VALUES' '(' expr ( ',' expr )* ')' ( ',' '(' expr ( ',' expr )* ')' )* | select-stmt ) upsert-clause? | 'DEFAULT' 'VALUES' )

referenced by:


pragma-stmt:

PRAGMA schema-name . pragma-name = pragma-value ( pragma-value )

pragma-stmt
         ::= 'PRAGMA' ( schema-name '.' )? pragma-name ( '=' pragma-value | '(' pragma-value ')' )?

referenced by:


reindex-stmt:

REINDEX collation-name schema-name . table-name index-name

reindex-stmt
         ::= 'REINDEX' ( collation-name | ( schema-name '.' )? ( table-name | index-name ) )?

referenced by:


release-stmt:

RELEASE SAVEPOINT savepoint-name

release-stmt
         ::= 'RELEASE' 'SAVEPOINT'? savepoint-name

referenced by:


rollback-stmt:

ROLLBACK TRANSACTION TO SAVEPOINT savepoint-name

rollback-stmt
         ::= 'ROLLBACK' 'TRANSACTION'? ( 'TO' 'SAVEPOINT'? savepoint-name )?

referenced by:


savepoint-stmt:

SAVEPOINT savepoint-name

savepoint-stmt
         ::= 'SAVEPOINT' savepoint-name

referenced by:


select-stmt:

WITH RECURSIVE common-table-expression , select-core compound-operrator ORDER BY ordering-term , LIMIT expr OFFSET , expr

select-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* select-core ( compound-operrator select-core )* ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? ( 'LIMIT' expr ( ( 'OFFSET' | ',' ) expr )? )?

referenced by:


update-stmt:

WITH RECURSIVE common-table-expression , UPDATE OR ROLLBACK ABORT REPLACE FAIL IGNORE quorified-table-name SET column-name column-name-list = expr , FROM table-or-subquery , join-clause WHERE expr

update-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* 'UPDATE' ( 'OR' ( 'ROLLBACK' | 'ABORT' | 'REPLACE' | 'FAIL' | 'IGNORE' ) )? quorified-table-name 'SET' ( column-name | column-name-list ) '=' expr ( ',' ( column-name | column-name-list ) '=' expr )* ( 'FROM' ( table-or-subquery ( ',' table-or-subquery )* | join-clause ) )? ( 'WHERE' expr )?

referenced by:


update-stmt-limited:

WITH RECURSIVE common-table-expression , UPDATE OR ROLLBACK ABORT REPLACE FAIL IGNORE quorified-table-name SET column-name column-name-list = expr , FROM table-or-subquery , join-clause WHERE expr ORDER BY ordering-term , LIMIT expr OFFSET , expr

update-stmt-limited
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* 'UPDATE' ( 'OR' ( 'ROLLBACK' | 'ABORT' | 'REPLACE' | 'FAIL' | 'IGNORE' ) )? quorified-table-name 'SET' ( column-name | column-name-list ) '=' expr ( ',' ( column-name | column-name-list ) '=' expr )* ( 'FROM' ( table-or-subquery ( ',' table-or-subquery )* | join-clause ) )? ( 'WHERE' expr )? ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? ( 'LIMIT' expr ( ( 'OFFSET' | ',' ) expr )? )?

referenced by:


vacuum-stmt:

VACUUM schema-name INTO filename

vacuum-stmt
         ::= 'VACUUM' schema-name? ( 'INTO' filename )?

referenced by:


column-def:

column-name type-name column-constraint

column-def
         ::= column-name type-name? column-constraint*

referenced by:


common-table-expression:

table-name ( column-name , ) AS ( select-stmt )

common-table-expression
         ::= table-name ( '(' column-name ( ',' column-name )* ')' )? 'AS' '(' select-stmt ')'

referenced by:


compound-operrator:

UNION ALL INTERSECT EXCEPT

compound-operrator
         ::= 'UNION' 'ALL'?
           | 'INTERSECT'
           | 'EXCEPT'

referenced by:


join-clause:

table-or-subquery join-operator table-or-subquery join-constraint

join-clause
         ::= table-or-subquery ( join-operator table-or-subquery join-constraint )*

referenced by:


join-operator:

, NATURAL LEFT OUTER INNER CROSS JOIN

join-operator
         ::= ','
           | 'NATURAL'? ( 'LEFT' 'OUTER'? | 'INNER' | 'CROSS' )? 'JOIN'

referenced by:


join-constraint:

ON expr USING ( column-name , )

join-constraint
         ::= ( 'ON' expr | 'USING' '(' column-name ( ',' column-name )* ')' )?

referenced by:


ordering-term:

expr COLLATE collation-name ASC DESC NULLS FIRST LAST

ordering-term
         ::= expr ( 'COLLATE' collation-name )? ( 'ASC' | 'DESC' )? ( 'NULLS' ( 'FIRST' | 'LAST' ) )?

referenced by:


result-column:

expr AS column-alias table-name . *

result-column
         ::= expr ( 'AS'? column-alias )?
           | ( table-name '.' )? '*'

referenced by:


table-or-subquery:

qualified-table-name schema-name . table-function-name ( expr , ) AS table-ailas ( table-or-subquery , join-clause ) select-stmt ) AS table-ailas

table-or-subquery
         ::= qualified-table-name
           | ( schema-name '.' )? table-function-name '(' expr ( ',' expr )* ')' ( 'AS'? table-ailas )?
           | '(' ( ( table-or-subquery ( ',' table-or-subquery )* | join-clause ) ')' | select-stmt ')' ( 'AS'? table-ailas )? )

referenced by:


qualified-table-name:

schema-name . table-name AS table-name INDEXED BY index-name NOT INDEXED

qualified-table-name
         ::= ( schema-name '.' )? table-name ( 'AS'? table-name )? ( 'INDEXED' 'BY' index-name | 'NOT' 'INDEXED' )?

referenced by:


window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

window-defn
         ::= '(' base-window-name ( 'PARTITION' 'BY' expr ( ',' expr )* )? ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? frame-spec? ')'

referenced by:


frame-spec:

RANGE ROWS GROUPS BETWEEN UNBOUNDEFD expr PRECEDING CURRENT ROW expr FOLLOWING AND UNBOUNDEFD expr FOLLOWING CURRENT ROW expr PRECEDING UNBOUNDEFD expr PRECEDING CURRENT ROW EXCLUDE NO OTHERS CURRENT ROW GROUP TIES

frame-spec
         ::= ( 'RANGE' | 'ROWS' | 'GROUPS' ) ( 'BETWEEN' ( ( 'UNBOUNDEFD' | expr ) 'PRECEDING' | 'CURRENT' 'ROW' | expr 'FOLLOWING' ) 'AND' ( ( 'UNBOUNDEFD' | expr ) 'FOLLOWING' | 'CURRENT' 'ROW' | expr 'PRECEDING' ) | ( 'UNBOUNDEFD' | expr ) 'PRECEDING' | 'CURRENT' 'ROW' ) ( 'EXCLUDE' ( 'NO' 'OTHERS' | 'CURRENT' 'ROW' | 'GROUP' | 'TIES' ) )?

referenced by:


expr:

literal-value bind-parameter schema-name . table-name . column-name unary-operator expr expr binary-operator IS NOT expr COLLATE collation-name NOT LIKE GLOB REGEXP MATCH expr ESCAPE BETWEEN expr AND expr IN ( select-stmt expr , ) schema-name . table-name table-function ( expr , ) ISNULL NOTNULL NOT NULL function-name ( DISTINCT expr , * ) filter-clause over-clause ( expr , CAST ( expr AS type-name NOT EXISTS ( select-stmt ) CASE expr WHEN expr THEN expr ELSE expr END raise-function

expr     ::= literal-value
           | bind-parameter
           | ( ( schema-name '.' )? table-name '.' )? column-name
           | unary-operator expr
           | expr ( ( binary-operator | 'IS' 'NOT'? ) expr | 'COLLATE' collation-name | 'NOT'? ( ( ( 'LIKE' | 'GLOB' | 'REGEXP' | 'MATCH' ) ( expr 'ESCAPE' )? | 'BETWEEN' expr 'AND' ) expr | 'IN' ( '(' ( select-stmt | expr ( ',' expr )* ) ')' | ( schema-name '.' )? ( table-name | table-function '(' ( expr ( ',' expr )* )? ')' ) ) ) | 'ISNULL' | 'NOTNULL' | 'NOT' 'NULL' )
           | function-name '(' ( 'DISTINCT'? expr ( ',' expr )* | '*' )? ')' filter-clause? over-clause?
           | ( '(' expr ( ',' expr )* | 'CAST' '(' expr 'AS' type-name | ( 'NOT'? 'EXISTS' )? '(' select-stmt ) ')'
           | 'CASE' expr? ( 'WHEN' expr 'THEN' expr )+ ( 'ELSE' expr )? 'END'
           | raise-function

referenced by:


raise-function:

RAISE ( IGNORE ROLLBACK ABORT FAIL , error-message )

raise-function
         ::= 'RAISE' '(' ( 'IGNORE' | ( 'ROLLBACK' | 'ABORT' | 'FAIL' ) ',' error-message ) ')'

referenced by:


literal-value:

numeric-literal string-literal blob-literal NULL TRUE FALSE CURRENT_TIME CURRENT_DATE CURRENT_TIMESTAMP

literal-value
         ::= numeric-literal
           | string-literal
           | blob-literal
           | 'NULL'
           | 'TRUE'
           | 'FALSE'
           | 'CURRENT_TIME'
           | 'CURRENT_DATE'
           | 'CURRENT_TIMESTAMP'

referenced by:


numeric-literal:

digit decimal-point digit decimal-point digit E + - digit 0x hexdigit

numeric-literal
         ::= ( digit+ ( decimal-point digit* )? | decimal-point digit+ ) ( 'E' ( '+' | '-' )? digit+ )?
           | '0x' hexdigit+

referenced by:


upsert-clause:

ON CONFLICT ( indexed-column , indexed-column WHERE expr ) DO NOTHING UPDATE SET column-name column-name-list = expr , WHERE expr

upsert-clause
         ::= 'ON' 'CONFLICT' ( '(' indexed-column ',' indexed-column ( 'WHERE' expr )? ')' )? 'DO' ( 'NOTHING' | 'UPDATE' 'SET' ( column-name | column-name-list ) '=' expr ( ',' ( column-name | column-name-list ) '=' expr )* ( 'WHERE' expr )? )

referenced by:


pragma-value:

signed-number name string-literal

pragma-value
         ::= signed-number
           | name
           | string-literal

referenced by:


select-core:

SELECT DISTINCT ALL result-column , FROM table-or-subquery , join-clause WHERE expr GROUP BY expr , HAVING expr WINDOW window-name AS window-defn , VALUES ( expr , ) ,

select-core
         ::= 'SELECT' ( 'DISTINCT' | 'ALL' )? result-column ( ',' result-column )* ( 'FROM' ( table-or-subquery ( ',' table-or-subquery )* | join-clause ) )? ( 'WHERE' expr )? ( 'GROUP' 'BY' expr ( ',' expr )* ( 'HAVING' expr )? )? ( 'WINDOW' window-name 'AS' window-defn ( ',' window-name 'AS' window-defn )* )?
           | 'VALUES' '(' expr ( ',' expr )* ')' ( ',' '(' expr ( ',' expr )* ')' )*

referenced by:


simple-select-stmt:

WITH RECURSIVE common-table-expression , select-core ORDER BY ordering-term , LIMIT expr OFFSET , expr

simple-select-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* select-core ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? ( 'LIMIT' expr ( ( 'OFFSET' | ',' ) expr )? )?

no references


compound-select-stmt:

WITH RECURSIVE common-table-expression , select-core compound-operrator select-core ORDER BY ordering-term , LIMIT expr OFFSET , expr

compound-select-stmt
         ::= 'WITH' 'RECURSIVE'? common-table-expression ( ',' common-table-expression )* select-core ( compound-operrator select-core )+ ( 'ORDER' 'BY' ordering-term ( ',' ordering-term )* )? ( 'LIMIT' expr ( ( 'OFFSET' | ',' ) expr )? )?

no references


column-name-list:

( column-name , )

column-name-list
         ::= '(' column-name ( ',' column-name )* ')'

referenced by:


comment-syntax:

-- anything-except-newline newline end-of-input /* anything-except-asterisk_slash */ end-of-input

comment-syntax
         ::= '--' anything-except-newline* ( newline | end-of-input )
           | '/*' anything-except-asterisk_slash ( '*/' | end-of-input )

no references


filter-clause:

FILTER ( WHERE expr )

filter-clause
         ::= 'FILTER' '(' 'WHERE' expr ')'

referenced by:


over-clause:

OVER window-name window-defn

over-clause
         ::= 'OVER' ( window-name | window-defn )

referenced by:


simple-function-invocation:

simple-function-name ( DISINCT expr , * )

simple-function-invocation
         ::= simple-function-name '(' ( 'DISINCT'? expr ( ',' expr )* | '*' )? ')'

no references


aggregate-function-invocation:

aggregate-function-name ( DISINCT expr , * ) filter-clause

aggregate-function-invocation
         ::= aggregate-function-name '(' ( 'DISINCT'? expr ( ',' expr )* | '*' )? ')' filter-clause?

no references


window-function-invocation:

window-function-name ( DISINCT expr , * ) filter-clause over-clause

window-function-invocation
         ::= window-function-name '(' ( 'DISINCT'? expr ( ',' expr )* | '*' )? ')' filter-clause? over-clause?

no references



  ... generated by RR - Railroad Diagram Generator R R