SQLite Forum

Whole grammar railroad diagram
Login

Whole grammar railroad diagram

(1) By Domingo (mingodad) on 2021-06-29 16:13:46 [link]

After doing several grammar conversions to the kind of EBNF understood by https://www.bottlecaps.de/rr/ui to generate railroad diagrams see bellow the converted src/parser.y with some hand made changes to allow view it at https://www.bottlecaps.de/rr/ui the order of the rules could be changed to a better view of the railroad diagram. Copy and paste the EBNF bellow on https://www.bottlecaps.de/rr/ui tab Edit Grammar then switch to the tab View Diagram.

This script that uses Lua pattern matching to process src/parser.y:
====
auto fname = "sqlite3/src/parse.y";
auto txt = readfile(fname);

txt = txt.gsub("%%include%s*%b{}", "");
txt = txt.gsub("%%syntax_error%s*%b{}", "");
txt = txt.gsub("%%stack_overflow%s*%b{}", "");
txt = txt.gsub("%%default_type%s*%b{}", "");
txt = txt.gsub("%%extra_context%s*%b{}", "");
txt = txt.gsub("//[^\n]*", "");
txt = txt.gsub("/%*.-%*/", "");
txt = txt.gsub("%%token[^\n]+", "");
txt = txt.gsub("%%name[^\n]+", "");
txt = txt.gsub("%%left[^\n]+", "");
txt = txt.gsub("%%right[^\n]+", "");
txt = txt.gsub("%%nonassoc[^\n]+", "");
txt = txt.gsub("%%wildcard[^\n]+", "");
txt = txt.gsub("%%type%s+.-%b{}", "");
txt = txt.gsub("%%destructor%s+.-%b{}", "");
txt = txt.gsub("%.%s*%b{}", ".");
txt = txt.gsub("%b{}", " ");
txt = txt.gsub("%b()", " ");

print(txt);

auto rules = {};
auto rule_order = [];

txt.gmatch(
	"([%w_]+)%s*::=([^.]+)%.",
	function(k, v)
	{
		v = v.trim();
		if(v.len() == 0) v = "/* empty */";
		v = v.gsub("%s+", " ");
		if(v.indexOf("|") >= 0) v = "(" + v + ")";
		auto ev = table_rawget(rules, k, null);
		if(!ev) {
			rules[k] <- v;
			rule_order.append(k);
		}
		else
		{
			rules[k] = ev + "\n\t| " + v;
		}
		return true;
	}
);

foreach(idx, k in rule_order) print(/*idx,*/ k, "::=", rules[k]);

====

EBNF for https://www.bottlecaps.de/rr/ui :
====
/*
From src/parser.y
*/

input	::=	cmdlist
cmdlist	::=	cmdlist ecmd
	| ecmd
ecmd	::=	SEMI
	| cmdx SEMI
	| explain cmdx SEMI
explain	::=	EXPLAIN
	| EXPLAIN QUERY PLAN
cmdx	::=	cmd
cmd	::=	BEGIN transtype trans_opt
	| (COMMIT|END trans_opt)
	| ROLLBACK trans_opt
	| SAVEPOINT nm
	| RELEASE savepoint_opt nm
	| ROLLBACK trans_opt TO savepoint_opt nm
	| create_table create_table_args
	| DROP TABLE ifexists fullname
	| createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select
	| DROP VIEW ifexists fullname
	| select
	| with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt
	| with DELETE FROM xfullname indexed_opt where_opt_ret
	| with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt
	| with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret
	| with insert_cmd INTO xfullname idlist_opt select upsert
	| with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning
	| createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt
	| DROP INDEX ifexists fullname
	| VACUUM vinto
	| VACUUM nm vinto
	| PRAGMA nm dbnm
	| PRAGMA nm dbnm EQ nmnum
	| PRAGMA nm dbnm LP nmnum RP
	| PRAGMA nm dbnm EQ minus_num
	| PRAGMA nm dbnm LP minus_num RP
	| createkw trigger_decl BEGIN trigger_cmd_list END
	| DROP TRIGGER ifexists fullname
	| ATTACH database_kw_opt expr AS expr key_opt
	| DETACH database_kw_opt expr
	| REINDEX
	| REINDEX nm dbnm
	| ANALYZE
	| ANALYZE nm dbnm
	| ALTER TABLE fullname RENAME TO nm
	| ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist
	| ALTER TABLE fullname DROP kwcolumn_opt nm
	| ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm
	| create_vtab
	| create_vtab LP vtabarglist RP
trans_opt	::=	/* empty */
	| TRANSACTION
	| TRANSACTION nm
transtype	::=	/* empty */
	| DEFERRED
	| IMMEDIATE
	| EXCLUSIVE
savepoint_opt	::=	SAVEPOINT
	| /* empty */
create_table	::=	createkw temp TABLE ifnotexists nm dbnm
createkw	::=	CREATE
ifnotexists	::=	/* empty */
	| IF NOT EXISTS
temp	::=	TEMP
	| /* empty */
create_table_args	::=	LP columnlist conslist_opt RP table_options
	| AS select
table_options	::=	/* empty */
	| WITHOUT nm
columnlist	::=	columnlist COMMA columnname carglist
	| columnname carglist
columnname	::=	nm typetoken
nm	::=	id
	| STRING
	| JOIN_KW
typetoken	::=	/* empty */
	| typename
	| typename LP signed RP
	| typename LP signed COMMA signed RP
typename	::=	ids
	| typename ids
signed	::=	plus_num
	| minus_num
scanpt	::=	/* empty */
scantok	::=	/* empty */
carglist	::=	carglist ccons
	| /* empty */
ccons	::=	CONSTRAINT nm
	| DEFAULT scantok term
	| DEFAULT LP expr RP
	| DEFAULT PLUS scantok term
	| DEFAULT MINUS scantok term
	| DEFAULT scantok id
	| NULL onconf
	| NOT NULL onconf
	| PRIMARY KEY sortorder onconf autoinc
	| UNIQUE onconf
	| CHECK LP expr RP
	| REFERENCES nm eidlist_opt refargs
	| defer_subclause
	| COLLATE ids
	| GENERATED ALWAYS AS generated
	| AS generated
generated	::=	LP expr RP
	| LP expr RP ID
autoinc	::=	/* empty */
	| AUTOINCR
refargs	::=	/* empty */
	| refargs refarg
refarg	::=	MATCH nm
	| ON INSERT refact
	| ON DELETE refact
	| ON UPDATE refact
refact	::=	SET NULL
	| SET DEFAULT
	| CASCADE
	| RESTRICT
	| NO ACTION
defer_subclause	::=	NOT DEFERRABLE init_deferred_pred_opt
	| DEFERRABLE init_deferred_pred_opt
init_deferred_pred_opt	::=	/* empty */
	| INITIALLY DEFERRED
	| INITIALLY IMMEDIATE
conslist_opt	::=	/* empty */
	| COMMA conslist
conslist	::=	conslist tconscomma tcons
	| tcons
tconscomma	::=	COMMA
	| /* empty */
tcons	::=	CONSTRAINT nm
	| PRIMARY KEY LP sortlist autoinc RP onconf
	| UNIQUE LP sortlist RP onconf
	| CHECK LP expr RP onconf
	| FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt
defer_subclause_opt	::=	/* empty */
	| defer_subclause
onconf	::=	/* empty */
	| ON CONFLICT resolvetype
orconf	::=	/* empty */
	| OR resolvetype
resolvetype	::=	raisetype
	| IGNORE
	| REPLACE
ifexists	::=	IF EXISTS
	| /* empty */
select	::=	WITH wqlist selectnowith
	| WITH RECURSIVE wqlist selectnowith
	| selectnowith
selectnowith	::=	oneselect
	| selectnowith multiselect_op oneselect
multiselect_op	::=	UNION
	| UNION ALL
	| (EXCEPT|INTERSECT)
oneselect	::=	SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt
	| SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt
	| values
values	::=	VALUES LP nexprlist RP
	| values COMMA LP nexprlist RP
distinct	::=	DISTINCT
	| ALL
	| /* empty */
sclp	::=	selcollist COMMA
	| /* empty */
selcollist	::=	sclp scanpt expr scanpt as
	| sclp scanpt STAR
	| sclp scanpt nm DOT STAR
as	::=	AS nm
	| ids
	| /* empty */
from	::=	/* empty */
	| FROM seltablist
stl_prefix	::=	seltablist joinop
	| /* empty */
seltablist	::=	stl_prefix nm dbnm as indexed_opt on_opt using_opt
	| stl_prefix nm dbnm LP exprlist RP as on_opt using_opt
	| stl_prefix LP select RP as on_opt using_opt
	| stl_prefix LP seltablist RP as on_opt using_opt
dbnm	::=	/* empty */
	| DOT nm
fullname	::=	nm
	| nm DOT nm
xfullname	::=	nm
	| nm DOT nm
	| nm DOT nm AS nm
	| nm AS nm
joinop	::=	(COMMA|JOIN)
	| JOIN_KW JOIN
	| JOIN_KW nm JOIN
	| JOIN_KW nm nm JOIN
on_opt	::=	ON expr
	| /* empty */
indexed_opt	::=	/* empty */
	| INDEXED BY nm
	| NOT INDEXED
using_opt	::=	USING LP idlist RP
	| /* empty */
orderby_opt	::=	/* empty */
	| ORDER BY sortlist
sortlist	::=	sortlist COMMA expr sortorder nulls
	| expr sortorder nulls
sortorder	::=	ASC
	| DESC
	| /* empty */
nulls	::=	NULLS FIRST
	| NULLS LAST
	| /* empty */
groupby_opt	::=	/* empty */
	| GROUP BY nexprlist
having_opt	::=	/* empty */
	| HAVING expr
limit_opt	::=	/* empty */
	| LIMIT expr
	| LIMIT expr OFFSET expr
	| LIMIT expr COMMA expr
where_opt	::=	/* empty */
	| WHERE expr
where_opt_ret	::=	/* empty */
	| WHERE expr
	| RETURNING selcollist
	| WHERE expr RETURNING selcollist
setlist	::=	setlist COMMA nm EQ expr
	| setlist COMMA LP idlist RP EQ expr
	| nm EQ expr
	| LP idlist RP EQ expr
upsert	::=	/* empty */
	| RETURNING selcollist
	| ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert
	| ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert
	| ON CONFLICT DO NOTHING returning
	| ON CONFLICT DO UPDATE SET setlist where_opt returning
returning	::=	RETURNING selcollist
	| /* empty */
insert_cmd	::=	INSERT orconf
	| REPLACE
idlist_opt	::=	/* empty */
	| LP idlist RP
idlist	::=	idlist COMMA nm
	| nm
expr	::=	term
	| LP expr RP
	| id
	| JOIN_KW
	| nm DOT nm
	| nm DOT nm DOT nm
	| VARIABLE
	| expr COLLATE ids
	| CAST LP expr AS typetoken RP
	| id LP distinct exprlist RP
	| id LP STAR RP
	| id LP distinct exprlist RP filter_over
	| id LP STAR RP filter_over
	| LP nexprlist COMMA expr RP
	| expr AND expr
	| expr OR expr
	| (expr LT|GT|GE|LE expr)
	| (expr EQ|NE expr)
	| (expr BITAND|BITOR|LSHIFT|RSHIFT expr)
	| (expr PLUS|MINUS expr)
	| (expr STAR|SLASH|REM expr)
	| expr CONCAT expr
	| expr likeop expr
	| expr likeop expr ESCAPE expr
	| (expr ISNULL|NOTNULL)
	| expr NOT NULL
	| expr IS expr
	| expr IS NOT expr
	| NOT expr
	| BITNOT expr
	| (PLUS|MINUS expr)
	| expr between_op expr AND expr
	| expr in_op LP exprlist RP
	| LP select RP
	| expr in_op LP select RP
	| expr in_op nm dbnm paren_exprlist
	| EXISTS LP select RP
	| CASE case_operand case_exprlist case_else END
	| RAISE LP IGNORE RP
	| RAISE LP raisetype COMMA nm RP
term	::=	(NULL|FLOAT|BLOB)
	| STRING
	| INTEGER
	| CTIME_KW
likeop	::=	(LIKE_KW|MATCH)
	| (NOT LIKE_KW|MATCH)
between_op	::=	BETWEEN
	| NOT BETWEEN
in_op	::=	IN
	| NOT IN
case_exprlist	::=	case_exprlist WHEN expr THEN expr
	| WHEN expr THEN expr
case_else	::=	ELSE expr
	| /* empty */
case_operand	::=	expr
	| /* empty */
exprlist	::=	nexprlist
	| /* empty */
nexprlist	::=	nexprlist COMMA expr
	| expr
paren_exprlist	::=	/* empty */
	| LP exprlist RP
uniqueflag	::=	UNIQUE
	| /* empty */
eidlist_opt	::=	/* empty */
	| LP eidlist RP
eidlist	::=	eidlist COMMA nm collate sortorder
	| nm collate sortorder
collate	::=	/* empty */
	| COLLATE ids
vinto	::=	INTO expr
	| /* empty */
nmnum	::=	plus_num
	| nm
	| ON
	| DELETE
	| DEFAULT
plus_num	::=	PLUS number
	| number
minus_num	::=	MINUS number
trigger_decl	::=	temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause
trigger_time	::=	(BEFORE|AFTER)
	| INSTEAD OF
	| /* empty */
trigger_event	::=	(DELETE|INSERT)
	| UPDATE
	| UPDATE OF idlist
foreach_clause	::=	/* empty */
	| FOR EACH ROW
when_clause	::=	/* empty */
	| WHEN expr
trigger_cmd_list	::=	trigger_cmd_list trigger_cmd SEMI
	| trigger_cmd SEMI
trnm	::=	nm
	| nm DOT nm
tridxby	::=	/* empty */
	| INDEXED BY nm
	| NOT INDEXED
trigger_cmd	::=	UPDATE orconf trnm tridxby SET setlist from where_opt scanpt
	| scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt
	| DELETE FROM trnm tridxby where_opt scanpt
	| scanpt select scanpt
raisetype	::=	ROLLBACK
	| ABORT
	| FAIL
key_opt	::=	/* empty */
	| KEY expr
database_kw_opt	::=	DATABASE
	| /* empty */
add_column_fullname	::=	fullname
kwcolumn_opt	::=	/* empty */
	| COLUMNKW
create_vtab	::=	createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm
vtabarglist	::=	vtabarg
	| vtabarglist COMMA vtabarg
vtabarg	::=	/* empty */
	| vtabarg vtabargtoken
vtabargtoken	::=	ANY
	| lp anylist RP
lp	::=	LP
anylist	::=	/* empty */
	| anylist LP anylist RP
	| anylist ANY
with	::=	/* empty */
	| WITH wqlist
	| WITH RECURSIVE wqlist
wqas	::=	AS
	| AS MATERIALIZED
	| AS NOT MATERIALIZED
wqitem	::=	nm eidlist_opt wqas LP select RP
wqlist	::=	wqitem
	| wqlist COMMA wqitem
windowdefn_list	::=	windowdefn
	| windowdefn_list COMMA windowdefn
windowdefn	::=	nm AS LP window RP
window	::=	PARTITION BY nexprlist orderby_opt frame_opt
	| nm PARTITION BY nexprlist orderby_opt frame_opt
	| ORDER BY sortlist frame_opt
	| nm ORDER BY sortlist frame_opt
	| frame_opt
	| nm frame_opt
frame_opt	::=	/* empty */
	| range_or_rows frame_bound_s frame_exclude_opt
	| range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt
range_or_rows	::=	(RANGE|ROWS|GROUPS)
frame_bound_s	::=	frame_bound
	| UNBOUNDED PRECEDING
frame_bound_e	::=	frame_bound
	| UNBOUNDED FOLLOWING
frame_bound	::=	(expr PRECEDING|FOLLOWING)
	| CURRENT ROW
frame_exclude_opt	::=	/* empty */
	| EXCLUDE frame_exclude
frame_exclude	::=	NO OTHERS
	| CURRENT ROW
	| (GROUP|TIES)
window_clause	::=	WINDOW windowdefn_list
filter_over	::=	filter_clause over_clause
	| over_clause
	| filter_clause
over_clause	::=	OVER LP window RP
	| OVER nm
filter_clause	::=	FILTER LP WHERE expr RP

// Tokens

ABORT ::= "ABORT"
ACTION ::= "ACTION"
ADD ::= "ADD"
AFTER ::= "AFTER"
ALL ::= "ALL"
ALTER ::= "ALTER"
ALWAYS ::= "ALWAYS"
ANALYZE ::= "ANALYZE"
AND ::= "AND"
AS ::= "AS"
ASC ::= "ASC"
ATTACH ::= "ATTACH"
AUTOINCREMENT ::= "AUTOINCREMENT"
BEFORE ::= "BEFORE"
BEGIN ::= "BEGIN"
BETWEEN ::= "BETWEEN"
BY ::= "BY"
CASCADE ::= "CASCADE"
CASE ::= "CASE"
CAST ::= "CAST"
CHECK ::= "CHECK"
COLLATE ::= "COLLATE"
COLUMN ::= "COLUMN"
COMMIT ::= "COMMIT"
CONFLICT ::= "CONFLICT"
CONSTRAINT ::= "CONSTRAINT"
CREATE ::= "CREATE"
CROSS ::= "CROSS"
CURRENT ::= "CURRENT"
CURRENT_DATE ::= "CURRENT_DATE"
CURRENT_TIME ::= "CURRENT_TIME"
CURRENT_TIMESTAMP ::= "CURRENT_TIMESTAMP"
DATABASE ::= "DATABASE"
DEFAULT ::= "DEFAULT"
DEFERRED ::= "DEFERRED"
DEFERRABLE ::= "DEFERRABLE"
DELETE ::= "DELETE"
DESC ::= "DESC"
DETACH ::= "DETACH"
DISTINCT ::= "DISTINCT"
DO ::= "DO"
DROP ::= "DROP"
END ::= "END"
EACH ::= "EACH"
ELSE ::= "ELSE"
ESCAPE ::= "ESCAPE"
EXCEPT ::= "EXCEPT"
EXCLUSIVE ::= "EXCLUSIVE"
EXCLUDE ::= "EXCLUDE"
EXISTS ::= "EXISTS"
EXPLAIN ::= "EXPLAIN"
FAIL ::= "FAIL"
FILTER ::= "FILTER"
FIRST ::= "FIRST"
FOLLOWING ::= "FOLLOWING"
FOR ::= "FOR"
FOREIGN ::= "FOREIGN"
FROM ::= "FROM"
FULL ::= "FULL"
GENERATED ::= "GENERATED"
GLOB ::= "GLOB"
GROUP ::= "GROUP"
GROUPS ::= "GROUPS"
HAVING ::= "HAVING"
IF ::= "IF"
IGNORE ::= "IGNORE"
IMMEDIATE ::= "IMMEDIATE"
IN ::= "IN"
INDEX ::= "INDEX"
INDEXED ::= "INDEXED"
INITIALLY ::= "INITIALLY"
INNER ::= "INNER"
INSERT ::= "INSERT"
INSTEAD ::= "INSTEAD"
INTERSECT ::= "INTERSECT"
INTO ::= "INTO"
IS ::= "IS"
ISNULL ::= "ISNULL"
JOIN ::= "JOIN"
KEY ::= "KEY"
LAST ::= "LAST"
LEFT ::= "LEFT"
LIKE ::= "LIKE"
LIMIT ::= "LIMIT"
MATCH ::= "MATCH"
MATERIALIZED ::= "MATERIALIZED"
NATURAL ::= "NATURAL"
NO ::= "NO"
NOT ::= "NOT"
NOTHING ::= "NOTHING"
NOTNULL ::= "NOTNULL"
NULL ::= "NULL"
NULLS ::= "NULLS"
OF ::= "OF"
OFFSET ::= "OFFSET"
ON ::= "ON"
OR ::= "OR"
ORDER ::= "ORDER"
OTHERS ::= "OTHERS"
OUTER ::= "OUTER"
OVER ::= "OVER"
PARTITION ::= "PARTITION"
PLAN ::= "PLAN"
PRAGMA ::= "PRAGMA"
PRECEDING ::= "PRECEDING"
PRIMARY ::= "PRIMARY"
QUERY ::= "QUERY"
RAISE ::= "RAISE"
RANGE ::= "RANGE"
RECURSIVE ::= "RECURSIVE"
REFERENCES ::= "REFERENCES"
REGEXP ::= "REGEXP"
REINDEX ::= "REINDEX"
RELEASE ::= "RELEASE"
RENAME ::= "RENAME"
REPLACE ::= "REPLACE"
RESTRICT ::= "RESTRICT"
RETURNING ::= "RETURNING"
RIGHT ::= "RIGHT"
ROLLBACK ::= "ROLLBACK"
ROW ::= "ROW"
ROWS ::= "ROWS"
SAVEPOINT ::= "SAVEPOINT"
SELECT ::= "SELECT"
SET ::= "SET"
TABLE ::= "TABLE"
TEMP ::= "TEMP"
TEMPORARY ::= "TEMPORARY"
THEN ::= "THEN"
TIES ::= "TIES"
TO ::= "TO"
TRANSACTION ::= "TRANSACTION"
TRIGGER ::= "TRIGGER"
UNBOUNDED ::= "UNBOUNDED"
UNION ::= "UNION"
UNIQUE ::= "UNIQUE"
UPDATE ::= "UPDATE"
USING ::= "USING"
VACUUM ::= "VACUUM"
VALUES ::= "VALUES"
VIEW ::= "VIEW"
VIRTUAL ::= "VIRTUAL"
WHEN ::= "WHEN"
WHERE ::= "WHERE"
WINDOW ::= "WINDOW"
WITH ::= "WITH"
WITHOUT ::= "WITHOUT"

PIPE ::= '|'
MINUS ::= '-'
LT ::= '<'
GT ::= '>'
EQ ::= '='
BANG ::= '!'
SLASH ::= '/'
LP ::= '('
RP ::= ')'
SEMI ::= ';'
PLUS ::= '+'
STAR ::= '*'
PERCENT ::= '%'
COMMA ::= ','
AND ::= '&'
TILDA ::= '~'
DOT ::= '.'
====

(2) By anonymous on 2021-06-29 19:30:20 in reply to 1 [link]

Very cool :)

Similar to the existing <https://sqlite.org/syntaxdiagrams.html>

Looks nice:

![](data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjE3IiBoZWlnaHQ9IjE2MTEiPg0KICAgICAgICAgPGRlZnM+DQogICAgICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIEBuYW1lc3BhY2UgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsNCiAgICAubGluZSAgICAgICAgICAgICAgICAge2ZpbGw6IG5vbmU7IHN0cm9rZTogIzMzMjkwMDsgc3Ryb2tlLXdpZHRoOiAxO30NCiAgICAuYm9sZC1saW5lICAgICAgICAgICAge3N0cm9rZTogIzE0MTAwMDsgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOyBzdHJva2Utd2lkdGg6IDI7fQ0KICAgIC50aGluLWxpbmUgICAgICAgICAgICB7c3Ryb2tlOiAjMUYxODAwOyBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXN9DQogICAgLmZpbGxlZCAgICAgICAgICAgICAgIHtmaWxsOiAjMzMyOTAwOyBzdHJva2U6IG5vbmU7fQ0KICAgIHRleHQudGVybWluYWwgICAgICAgICB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMtc2VyaWY7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICMxNDEwMDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICB0ZXh0Lm5vbnRlcm1pbmFsICAgICAge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLXNlcmlmOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAjMUExNDAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICB0ZXh0LnJlZ2V4cCAgICAgICAgICAge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLXNlcmlmOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAjMUYxODAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICByZWN0LCBjaXJjbGUsIHBvbHlnb24ge2ZpbGw6ICMzMzI5MDA7IHN0cm9rZTogIzMzMjkwMDt9DQogICAgcmVjdC50ZXJtaW5hbCAgICAgICAgIHtmaWxsOiAjRkZEQjREOyBzdHJva2U6ICMzMzI5MDA7IHN0cm9rZS13aWR0aDogMTt9DQogICAgcmVjdC5ub250ZXJtaW5hbCAgICAgIHtmaWxsOiAjRkZFQzlFOyBzdHJva2U6ICMzMzI5MDA7IHN0cm9rZS13aWR0aDogMTt9DQogICAgcmVjdC50ZXh0ICAgICAgICAgICAgIHtmaWxsOiBub25lOyBzdHJva2U6IG5vbmU7fQ0KICAgIHBvbHlnb24ucmVnZXhwICAgICAgICB7ZmlsbDogI0ZGRjRDNzsgc3Ryb2tlOiAjMzMyOTAwOyBzdHJva2Utd2lkdGg6IDE7fQ0KICA8L3N0eWxlPg0KICAgICAgICAgPC9kZWZzPg0KICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI5IDE3IDEgMTMgMSAyMSIvPg0KICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNyAxNyA5IDEzIDkgMjEiLz4NCiAgICAgICAgIDxyZWN0IHg9IjcxIiB5PSIzIiB3aWR0aD0iNjQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNjkiIHk9IjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNzkiIHk9IjIxIj5CRUdJTjwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3RyYW5zdHlwZSIgeGxpbms6dGl0bGU9InRyYW5zdHlwZSI+DQogICAgICAgICAgICA8cmVjdCB4PSIxNTUiIHk9IjMiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTUzIiB5PSIxIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIxNjMiIHk9IjIxIj50cmFuc3R5cGU8L3RleHQ+PC9hPjxyZWN0IHg9IjcxIiB5PSI0NyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjY5IiB5PSI0NSIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI3OSIgeT0iNjUiPkVORDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3RyYW5zX29wdCIgeGxpbms6dGl0bGU9InRyYW5zX29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSIyNzUiIHk9IjMiIHdpZHRoPSI4MiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjczIiB5PSIxIiB3aWR0aD0iODIiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIyODMiIHk9IjIxIj50cmFuc19vcHQ8L3RleHQ+PC9hPjxyZWN0IHg9IjUxIiB5PSI5MSIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjQ5IiB5PSI4OSIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1OSIgeT0iMTA5Ij5DT01NSVQ8L3RleHQ+DQogICAgICAgICA8cmVjdCB4PSI1MSIgeT0iMTM1IiB3aWR0aD0iOTIiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjEzMyIgd2lkdGg9IjkyIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1OSIgeT0iMTUzIj5ST0xMQkFDSzwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3RyYW5zX29wdCIgeGxpbms6dGl0bGU9InRyYW5zX29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSIxNjMiIHk9IjEzNSIgd2lkdGg9IjgyIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIxNjEiIHk9IjEzMyIgd2lkdGg9IjgyIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMTcxIiB5PSIxNTMiPnRyYW5zX29wdDwvdGV4dD48L2E+PHJlY3QgeD0iMjg1IiB5PSIxNjciIHdpZHRoPSIzOCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIyODMiIHk9IjE2NSIgd2lkdGg9IjM4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIyOTMiIHk9IjE4NSI+VE88L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNzYXZlcG9pbnRfb3B0IiB4bGluazp0aXRsZT0ic2F2ZXBvaW50X29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSIzNDMiIHk9IjE2NyIgd2lkdGg9IjExMCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzQxIiB5PSIxNjUiIHdpZHRoPSIxMTAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIzNTEiIHk9IjE4NSI+c2F2ZXBvaW50X29wdDwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQ3MyIgeT0iMTY3IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQ3MSIgeT0iMTY1IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0ODEiIHk9IjE4NSI+bm08L3RleHQ+PC9hPjxyZWN0IHg9IjcxIiB5PSIyMTEiIHdpZHRoPSIxMDAiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNjkiIHk9IjIwOSIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNzkiIHk9IjIyOSI+U0FWRVBPSU5UPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iNzEiIHk9IjI1NSIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjY5IiB5PSIyNTMiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNzkiIHk9IjI3MyI+UkVMRUFTRTwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3NhdmVwb2ludF9vcHQiIHhsaW5rOnRpdGxlPSJzYXZlcG9pbnRfb3B0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE3MSIgeT0iMjU1IiB3aWR0aD0iMTEwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIxNjkiIHk9IjI1MyIgd2lkdGg9IjExMCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE3OSIgeT0iMjczIj5zYXZlcG9pbnRfb3B0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI25tIiB4bGluazp0aXRsZT0ibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzIxIiB5PSIyMTEiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzE5IiB5PSIyMDkiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjMyOSIgeT0iMjI5Ij5ubTwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNjcmVhdGVfdGFibGUiIHhsaW5rOnRpdGxlPSJjcmVhdGVfdGFibGUiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTEiIHk9IjI5OSIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjI5NyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjU5IiB5PSIzMTciPmNyZWF0ZV90YWJsZTwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNjcmVhdGVfdGFibGVfYXJncyIgeGxpbms6dGl0bGU9ImNyZWF0ZV90YWJsZV9hcmdzIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE3MSIgeT0iMjk5IiB3aWR0aD0iMTM2IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIxNjkiIHk9IjI5NyIgd2lkdGg9IjEzNiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE3OSIgeT0iMzE3Ij5jcmVhdGVfdGFibGVfYXJnczwvdGV4dD48L2E+PHJlY3QgeD0iNTEiIHk9IjM0MyIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjQ5IiB5PSIzNDEiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNTkiIHk9IjM2MSI+RFJPUDwvdGV4dD4NCiAgICAgICAgIDxyZWN0IHg9IjE0OSIgeT0iMzQzIiB3aWR0aD0iNjIiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMTQ3IiB5PSIzNDEiIHdpZHRoPSI2MiIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMTU3IiB5PSIzNjEiPlRBQkxFPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iMTQ5IiB5PSIzODciIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIxNDciIHk9IjM4NSIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIxNTciIHk9IjQwNSI+VklFVzwvdGV4dD4NCiAgICAgICAgIDxyZWN0IHg9IjE0OSIgeT0iNDMxIiB3aWR0aD0iNjQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMTQ3IiB5PSI0MjkiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMTU3IiB5PSI0NDkiPklOREVYPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iMTQ5IiB5PSI0NzUiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIxNDciIHk9IjQ3MyIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIxNTciIHk9IjQ5MyI+VFJJR0dFUjwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2lmZXhpc3RzIiB4bGluazp0aXRsZT0iaWZleGlzdHMiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjY5IiB5PSIzNDMiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjY3IiB5PSIzNDEiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjI3NyIgeT0iMzYxIj5pZmV4aXN0czwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNmdWxsbmFtZSIgeGxpbms6dGl0bGU9ImZ1bGxuYW1lIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM1MyIgeT0iMzQzIiB3aWR0aD0iNzQiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM1MSIgeT0iMzQxIiB3aWR0aD0iNzQiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIzNjEiIHk9IjM2MSI+ZnVsbG5hbWU8L3RleHQ+PC9hPjxyZWN0IHg9IjUxIiB5PSI1MTkiIHdpZHRoPSI3MiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI0OSIgeT0iNTE3IiB3aWR0aD0iNzIiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjU5IiB5PSI1MzciPkNSRUFURTwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3RlbXAiIHhsaW5rOnRpdGxlPSJ0ZW1wIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE2MyIgeT0iNTE5IiB3aWR0aD0iNTIiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE2MSIgeT0iNTE3IiB3aWR0aD0iNTIiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIxNzEiIHk9IjUzNyI+dGVtcDwvdGV4dD48L2E+PHJlY3QgeD0iMjM1IiB5PSI1MTkiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIyMzMiIHk9IjUxNyIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIyNDMiIHk9IjUzNyI+VklFVzwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2lmbm90ZXhpc3RzIiB4bGluazp0aXRsZT0iaWZub3RleGlzdHMiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzEzIiB5PSI1MTkiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzExIiB5PSI1MTciIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjMyMSIgeT0iNTM3Ij5pZm5vdGV4aXN0czwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQxOSIgeT0iNTE5IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQxNyIgeT0iNTE3IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0MjciIHk9IjUzNyI+bm08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZGJubSIgeGxpbms6dGl0bGU9ImRibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDc5IiB5PSI1MTkiIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDc3IiB5PSI1MTciIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjQ4NyIgeT0iNTM3Ij5kYm5tPC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2VpZGxpc3Rfb3B0IiB4bGluazp0aXRsZT0iZWlkbGlzdF9vcHQiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTU1IiB5PSI1MTkiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTUzIiB5PSI1MTciIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjU2MyIgeT0iNTM3Ij5laWRsaXN0X29wdDwvdGV4dD48L2E+PHJlY3QgeD0iNjYxIiB5PSI1MTkiIHdpZHRoPSIzOCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI2NTkiIHk9IjUxNyIgd2lkdGg9IjM4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI2NjkiIHk9IjUzNyI+QVM8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNzZWxlY3QiIHhsaW5rOnRpdGxlPSJzZWxlY3QiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzE5IiB5PSI1MTkiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzE3IiB5PSI1MTciIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjcyNyIgeT0iNTM3Ij5zZWxlY3Q8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjdW5pcXVlZmxhZyIgeGxpbms6dGl0bGU9InVuaXF1ZWZsYWciPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTYzIiB5PSI1NjMiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTYxIiB5PSI1NjEiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE3MSIgeT0iNTgxIj51bmlxdWVmbGFnPC90ZXh0PjwvYT48cmVjdCB4PSIyNjkiIHk9IjU2MyIgd2lkdGg9IjY0IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjI2NyIgeT0iNTYxIiB3aWR0aD0iNjQiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjI3NyIgeT0iNTgxIj5JTkRFWDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2lmbm90ZXhpc3RzIiB4bGluazp0aXRsZT0iaWZub3RleGlzdHMiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzUzIiB5PSI1NjMiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzUxIiB5PSI1NjEiIHdpZHRoPSI4NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjM2MSIgeT0iNTgxIj5pZm5vdGV4aXN0czwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQ1OSIgeT0iNTYzIiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQ1NyIgeT0iNTYxIiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0NjciIHk9IjU4MSI+bm08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZGJubSIgeGxpbms6dGl0bGU9ImRibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTE5IiB5PSI1NjMiIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTE3IiB5PSI1NjEiIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjUyNyIgeT0iNTgxIj5kYm5tPC90ZXh0PjwvYT48cmVjdCB4PSI1OTUiIHk9IjU2MyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjU5MyIgeT0iNTYxIiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjYwMyIgeT0iNTgxIj5PTjwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI25tIiB4bGluazp0aXRsZT0ibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iNjU1IiB5PSI1NjMiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNjUzIiB5PSI1NjEiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjY2MyIgeT0iNTgxIj5ubTwvdGV4dD48L2E+PHJlY3QgeD0iNzE1IiB5PSI1NjMiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI3MTMiIHk9IjU2MSIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI3MjMiIHk9IjU4MSI+KDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3NvcnRsaXN0IiB4bGluazp0aXRsZT0ic29ydGxpc3QiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzYxIiB5PSI1NjMiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzU5IiB5PSI1NjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9Ijc2OSIgeT0iNTgxIj5zb3J0bGlzdDwvdGV4dD48L2E+PHJlY3QgeD0iODQ1IiB5PSI1NjMiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI4NDMiIHk9IjU2MSIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI4NTMiIHk9IjU4MSI+KTwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3doZXJlX29wdCIgeGxpbms6dGl0bGU9IndoZXJlX29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI4OTEiIHk9IjU2MyIgd2lkdGg9Ijg4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI4ODkiIHk9IjU2MSIgd2lkdGg9Ijg4IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iODk5IiB5PSI1ODEiPndoZXJlX29wdDwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiN0cmlnZ2VyX2RlY2wiIHhsaW5rOnRpdGxlPSJ0cmlnZ2VyX2RlY2wiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTYzIiB5PSI2MjkiIHdpZHRoPSI5NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTYxIiB5PSI2MjciIHdpZHRoPSI5NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE3MSIgeT0iNjQ3Ij50cmlnZ2VyX2RlY2w8L3RleHQ+PC9hPjxyZWN0IHg9IjI3OSIgeT0iNjI5IiB3aWR0aD0iNjQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMjc3IiB5PSI2MjciIHdpZHRoPSI2NCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMjg3IiB5PSI2NDciPkJFR0lOPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjdHJpZ2dlcl9jbWQiIHhsaW5rOnRpdGxlPSJ0cmlnZ2VyX2NtZCI+DQogICAgICAgICAgICA8cmVjdCB4PSIzODMiIHk9IjYyOSIgd2lkdGg9Ijk2IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIzODEiIHk9IjYyNyIgd2lkdGg9Ijk2IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMzkxIiB5PSI2NDciPnRyaWdnZXJfY21kPC90ZXh0PjwvYT48cmVjdCB4PSI0OTkiIHk9IjYyOSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjQ5NyIgeT0iNjI3IiB3aWR0aD0iMjQiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjUwNyIgeT0iNjQ3Ij47PC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iNTYzIiB5PSI2MjkiIHdpZHRoPSI0OCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI1NjEiIHk9IjYyNyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1NzEiIHk9IjY0NyI+RU5EPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjc2VsZWN0IiB4bGluazp0aXRsZT0ic2VsZWN0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjUxIiB5PSI2NzMiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjY3MSIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNTkiIHk9IjY5MSI+c2VsZWN0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3dpdGgiIHhsaW5rOnRpdGxlPSJ3aXRoIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjUxIiB5PSI3MTciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjcxNSIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNTkiIHk9IjczNSI+d2l0aDwvdGV4dD48L2E+PHJlY3QgeD0iMTU3IiB5PSI3MTciIHdpZHRoPSI3MCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIxNTUiIHk9IjcxNSIgd2lkdGg9IjcwIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIxNjUiIHk9IjczNSI+REVMRVRFPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iMjQ3IiB5PSI3MTciIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIyNDUiIHk9IjcxNSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIyNTUiIHk9IjczNSI+RlJPTTwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3hmdWxsbmFtZSIgeGxpbms6dGl0bGU9InhmdWxsbmFtZSI+DQogICAgICAgICAgICA8cmVjdCB4PSIzMjciIHk9IjcxNyIgd2lkdGg9IjgyIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIzMjUiIHk9IjcxNSIgd2lkdGg9IjgyIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMzM1IiB5PSI3MzUiPnhmdWxsbmFtZTwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNpbmRleGVkX29wdCIgeGxpbms6dGl0bGU9ImluZGV4ZWRfb3B0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyOSIgeT0iNzE3IiB3aWR0aD0iOTgiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyNyIgeT0iNzE1IiB3aWR0aD0iOTgiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0MzciIHk9IjczNSI+aW5kZXhlZF9vcHQ8L3RleHQ+PC9hPjxyZWN0IHg9IjE1NyIgeT0iNzYxIiB3aWR0aD0iNzQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMTU1IiB5PSI3NTkiIHdpZHRoPSI3NCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMTY1IiB5PSI3NzkiPlVQREFURTwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29yY29uZiIgeGxpbms6dGl0bGU9Im9yY29uZiI+DQogICAgICAgICAgICA8cmVjdCB4PSIyNTEiIHk9Ijc2MSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIyNDkiIHk9Ijc1OSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMjU5IiB5PSI3NzkiPm9yY29uZjwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiN4ZnVsbG5hbWUiIHhsaW5rOnRpdGxlPSJ4ZnVsbG5hbWUiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzMxIiB5PSI3NjEiIHdpZHRoPSI4MiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzI5IiB5PSI3NTkiIHdpZHRoPSI4MiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjMzOSIgeT0iNzc5Ij54ZnVsbG5hbWU8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjaW5kZXhlZF9vcHQiIHhsaW5rOnRpdGxlPSJpbmRleGVkX29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI0MzMiIHk9Ijc2MSIgd2lkdGg9Ijk4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI0MzEiIHk9Ijc1OSIgd2lkdGg9Ijk4IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNDQxIiB5PSI3NzkiPmluZGV4ZWRfb3B0PC90ZXh0PjwvYT48cmVjdCB4PSI1NTEiIHk9Ijc2MSIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjU0OSIgeT0iNzU5IiB3aWR0aD0iNDQiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjU1OSIgeT0iNzc5Ij5TRVQ8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNzZXRsaXN0IiB4bGluazp0aXRsZT0ic2V0bGlzdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI2MTUiIHk9Ijc2MSIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI2MTMiIHk9Ijc1OSIgd2lkdGg9IjU4IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNjIzIiB5PSI3NzkiPnNldGxpc3Q8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZnJvbSIgeGxpbms6dGl0bGU9ImZyb20iPg0KICAgICAgICAgICAgPHJlY3QgeD0iNjkzIiB5PSI3NjEiIHdpZHRoPSI0OCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNjkxIiB5PSI3NTkiIHdpZHRoPSI0OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjcwMSIgeT0iNzc5Ij5mcm9tPC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3doZXJlX29wdF9yZXQiIHhsaW5rOnRpdGxlPSJ3aGVyZV9vcHRfcmV0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9Ijc4MSIgeT0iNzE3IiB3aWR0aD0iMTE0IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI3NzkiIHk9IjcxNSIgd2lkdGg9IjExNCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9Ijc4OSIgeT0iNzM1Ij53aGVyZV9vcHRfcmV0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29yZGVyYnlfb3B0IiB4bGluazp0aXRsZT0ib3JkZXJieV9vcHQiPg0KICAgICAgICAgICAgPHJlY3QgeD0iOTM1IiB5PSI3NDkiIHdpZHRoPSI5OCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iOTMzIiB5PSI3NDciIHdpZHRoPSI5OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9Ijk0MyIgeT0iNzY3Ij5vcmRlcmJ5X29wdDwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNsaW1pdF9vcHQiIHhsaW5rOnRpdGxlPSJsaW1pdF9vcHQiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTA1MyIgeT0iNzQ5IiB3aWR0aD0iNzYiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjEwNTEiIHk9Ijc0NyIgd2lkdGg9Ijc2IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMTA2MSIgeT0iNzY3Ij5saW1pdF9vcHQ8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjaW5zZXJ0X2NtZCIgeGxpbms6dGl0bGU9Imluc2VydF9jbWQiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTM3IiB5PSI4MDUiIHdpZHRoPSI5MCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTM1IiB5PSI4MDMiIHdpZHRoPSI5MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE0NSIgeT0iODIzIj5pbnNlcnRfY21kPC90ZXh0PjwvYT48cmVjdCB4PSIyNDciIHk9IjgwNSIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjI0NSIgeT0iODAzIiB3aWR0aD0iNTYiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjI1NSIgeT0iODIzIj5JTlRPPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjeGZ1bGxuYW1lIiB4bGluazp0aXRsZT0ieGZ1bGxuYW1lIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjMyMyIgeT0iODA1IiB3aWR0aD0iODIiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjMyMSIgeT0iODAzIiB3aWR0aD0iODIiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIzMzEiIHk9IjgyMyI+eGZ1bGxuYW1lPC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2lkbGlzdF9vcHQiIHhsaW5rOnRpdGxlPSJpZGxpc3Rfb3B0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyNSIgeT0iODA1IiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyMyIgeT0iODAzIiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0MzMiIHk9IjgyMyI+aWRsaXN0X29wdDwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNzZWxlY3QiIHhsaW5rOnRpdGxlPSJzZWxlY3QiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTQzIiB5PSI4MDUiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTQxIiB5PSI4MDMiIHdpZHRoPSI1OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjU1MSIgeT0iODIzIj5zZWxlY3Q8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjdXBzZXJ0IiB4bGluazp0aXRsZT0idXBzZXJ0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjYyMSIgeT0iODA1IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjYxOSIgeT0iODAzIiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI2MjkiIHk9IjgyMyI+dXBzZXJ0PC90ZXh0PjwvYT48cmVjdCB4PSI1NDMiIHk9Ijg0OSIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjU0MSIgeT0iODQ3IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjU1MSIgeT0iODY3Ij5ERUZBVUxUPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iNjQzIiB5PSI4NDkiIHdpZHRoPSI3MiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI2NDEiIHk9Ijg0NyIgd2lkdGg9IjcyIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI2NTEiIHk9Ijg2NyI+VkFMVUVTPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjcmV0dXJuaW5nIiB4bGluazp0aXRsZT0icmV0dXJuaW5nIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjczNSIgeT0iODQ5IiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjczMyIgeT0iODQ3IiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI3NDMiIHk9Ijg2NyI+cmV0dXJuaW5nPC90ZXh0PjwvYT48cmVjdCB4PSI1MSIgeT0iODkzIiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNDkiIHk9Ijg5MSIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1OSIgeT0iOTExIj5WQUNVVU08L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE2OSIgeT0iOTI1IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE2NyIgeT0iOTIzIiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIxNzciIHk9Ijk0MyI+bm08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjdmludG8iIHhsaW5rOnRpdGxlPSJ2aW50byI+DQogICAgICAgICAgICA8cmVjdCB4PSIyNDkiIHk9Ijg5MyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIyNDciIHk9Ijg5MSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMjU3IiB5PSI5MTEiPnZpbnRvPC90ZXh0PjwvYT48cmVjdCB4PSI1MSIgeT0iOTY5IiB3aWR0aD0iNzgiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNDkiIHk9Ijk2NyIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1OSIgeT0iOTg3Ij5QUkFHTUE8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE0OSIgeT0iOTY5IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE0NyIgeT0iOTY3IiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIxNTciIHk9Ijk4NyI+bm08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZGJubSIgeGxpbms6dGl0bGU9ImRibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjA5IiB5PSI5NjkiIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjA3IiB5PSI5NjciIHdpZHRoPSI1NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjIxNyIgeT0iOTg3Ij5kYm5tPC90ZXh0PjwvYT48cmVjdCB4PSIzMDUiIHk9IjEwMDEiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIzMDMiIHk9Ijk5OSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIzMTMiIHk9IjEwMTkiPj08L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubW51bSIgeGxpbms6dGl0bGU9Im5tbnVtIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM3NSIgeT0iMTAwMSIgd2lkdGg9IjY2IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIzNzMiIHk9Ijk5OSIgd2lkdGg9IjY2IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMzgzIiB5PSIxMDE5Ij5ubW51bTwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNtaW51c19udW0iIHhsaW5rOnRpdGxlPSJtaW51c19udW0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iMzc1IiB5PSIxMDQ1IiB3aWR0aD0iOTQiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM3MyIgeT0iMTA0MyIgd2lkdGg9Ijk0IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMzgzIiB5PSIxMDYzIj5taW51c19udW08L3RleHQ+PC9hPjxyZWN0IHg9IjMwNSIgeT0iMTA4OSIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjMwMyIgeT0iMTA4NyIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIzMTMiIHk9IjExMDciPig8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubW51bSIgeGxpbms6dGl0bGU9Im5tbnVtIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM3MSIgeT0iMTA4OSIgd2lkdGg9IjY2IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIzNjkiIHk9IjEwODciIHdpZHRoPSI2NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjM3OSIgeT0iMTEwNyI+bm1udW08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjbWludXNfbnVtIiB4bGluazp0aXRsZT0ibWludXNfbnVtIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjM3MSIgeT0iMTEzMyIgd2lkdGg9Ijk0IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIzNjkiIHk9IjExMzEiIHdpZHRoPSI5NCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjM3OSIgeT0iMTE1MSI+bWludXNfbnVtPC90ZXh0PjwvYT48cmVjdCB4PSI1MDUiIHk9IjEwODkiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI1MDMiIHk9IjEwODciIHdpZHRoPSIyNiIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNTEzIiB5PSIxMTA3Ij4pPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iNTEiIHk9IjExNzciIHdpZHRoPSI3NCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI0OSIgeT0iMTE3NSIgd2lkdGg9Ijc0IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI1OSIgeT0iMTE5NSI+QVRUQUNIPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZGF0YWJhc2Vfa3dfb3B0IiB4bGluazp0aXRsZT0iZGF0YWJhc2Vfa3dfb3B0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE0NSIgeT0iMTE3NyIgd2lkdGg9IjEzNCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMTQzIiB5PSIxMTc1IiB3aWR0aD0iMTM0IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMTUzIiB5PSIxMTk1Ij5kYXRhYmFzZV9rd19vcHQ8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZXhwciIgeGxpbms6dGl0bGU9ImV4cHIiPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjk5IiB5PSIxMTc3IiB3aWR0aD0iNDgiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjI5NyIgeT0iMTE3NSIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMzA3IiB5PSIxMTk1Ij5leHByPC90ZXh0PjwvYT48cmVjdCB4PSIzNjciIHk9IjExNzciIHdpZHRoPSIzOCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIzNjUiIHk9IjExNzUiIHdpZHRoPSIzOCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMzc1IiB5PSIxMTk1Ij5BUzwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2V4cHIiIHhsaW5rOnRpdGxlPSJleHByIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyNSIgeT0iMTE3NyIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI0MjMiIHk9IjExNzUiIHdpZHRoPSI0OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjQzMyIgeT0iMTE5NSI+ZXhwcjwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNrZXlfb3B0IiB4bGluazp0aXRsZT0ia2V5X29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI0OTMiIHk9IjExNzciIHdpZHRoPSI3MCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDkxIiB5PSIxMTc1IiB3aWR0aD0iNzAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI1MDEiIHk9IjExOTUiPmtleV9vcHQ8L3RleHQ+PC9hPjxyZWN0IHg9IjUxIiB5PSIxMjIxIiB3aWR0aD0iNzQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjEyMTkiIHdpZHRoPSI3NCIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNTkiIHk9IjEyMzkiPkRFVEFDSDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2RhdGFiYXNlX2t3X29wdCIgeGxpbms6dGl0bGU9ImRhdGFiYXNlX2t3X29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSIxNDUiIHk9IjEyMjEiIHdpZHRoPSIxMzQiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjE0MyIgeT0iMTIxOSIgd2lkdGg9IjEzNCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjE1MyIgeT0iMTIzOSI+ZGF0YWJhc2Vfa3dfb3B0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2V4cHIiIHhsaW5rOnRpdGxlPSJleHByIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjI5OSIgeT0iMTIyMSIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIyOTciIHk9IjEyMTkiIHdpZHRoPSI0OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjMwNyIgeT0iMTIzOSI+ZXhwcjwvdGV4dD48L2E+PHJlY3QgeD0iNzEiIHk9IjEyNjUiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSI2OSIgeT0iMTI2MyIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI3OSIgeT0iMTI4MyI+UkVJTkRFWDwvdGV4dD4NCiAgICAgICAgIDxyZWN0IHg9IjcxIiB5PSIxMzA5IiB3aWR0aD0iODIiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNjkiIHk9IjEzMDciIHdpZHRoPSI4MiIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iNzkiIHk9IjEzMjciPkFOQUxZWkU8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjIxMyIgeT0iMTI5NyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIyMTEiIHk9IjEyOTUiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjIyMSIgeT0iMTMxNSI+bm08L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZGJubSIgeGxpbms6dGl0bGU9ImRibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjczIiB5PSIxMjk3IiB3aWR0aD0iNTYiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjI3MSIgeT0iMTI5NSIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iMjgxIiB5PSIxMzE1Ij5kYm5tPC90ZXh0PjwvYT48cmVjdCB4PSI1MSIgeT0iMTM1MyIgd2lkdGg9IjYyIiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjQ5IiB5PSIxMzUxIiB3aWR0aD0iNjIiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjU5IiB5PSIxMzcxIj5BTFRFUjwvdGV4dD4NCiAgICAgICAgIDxyZWN0IHg9IjEzMyIgeT0iMTM1MyIgd2lkdGg9IjYyIiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjEzMSIgeT0iMTM1MSIgd2lkdGg9IjYyIiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIxNDEiIHk9IjEzNzEiPlRBQkxFPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZnVsbG5hbWUiIHhsaW5rOnRpdGxlPSJmdWxsbmFtZSI+DQogICAgICAgICAgICA8cmVjdCB4PSIyMzUiIHk9IjEzNTMiIHdpZHRoPSI3NCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iMjMzIiB5PSIxMzUxIiB3aWR0aD0iNzQiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSIyNDMiIHk9IjEzNzEiPmZ1bGxuYW1lPC90ZXh0PjwvYT48cmVjdCB4PSIzNDkiIHk9IjEzNTMiIHdpZHRoPSI3NiIgaGVpZ2h0PSIzMiIgcng9IjEwIi8+DQogICAgICAgICA8cmVjdCB4PSIzNDciIHk9IjEzNTEiIHdpZHRoPSI3NiIgaGVpZ2h0PSIzMiIgY2xhc3M9InRlcm1pbmFsIiByeD0iMTAiLz4NCiAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXJtaW5hbCIgeD0iMzU3IiB5PSIxMzcxIj5SRU5BTUU8L3RleHQ+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNrd2NvbHVtbl9vcHQiIHhsaW5rOnRpdGxlPSJrd2NvbHVtbl9vcHQiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDY1IiB5PSIxMzg1IiB3aWR0aD0iMTEwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI0NjMiIHk9IjEzODMiIHdpZHRoPSIxMTAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI0NzMiIHk9IjE0MDMiPmt3Y29sdW1uX29wdDwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNubSIgeGxpbms6dGl0bGU9Im5tIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjU5NSIgeT0iMTM4NSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI1OTMiIHk9IjEzODMiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjYwMyIgeT0iMTQwMyI+bm08L3RleHQ+PC9hPjxyZWN0IHg9IjY3NSIgeT0iMTM1MyIgd2lkdGg9IjM4IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjY3MyIgeT0iMTM1MSIgd2lkdGg9IjM4IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSI2ODMiIHk9IjEzNzEiPlRPPC90ZXh0Pg0KICAgICAgICAgPHJlY3QgeD0iMzQ5IiB5PSIxNDI5IiB3aWR0aD0iNTgiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMzQ3IiB5PSIxNDI3IiB3aWR0aD0iNTgiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjM1NyIgeT0iMTQ0NyI+RFJPUDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2t3Y29sdW1uX29wdCIgeGxpbms6dGl0bGU9Imt3Y29sdW1uX29wdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI0MjciIHk9IjE0MjkiIHdpZHRoPSIxMTAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQyNSIgeT0iMTQyNyIgd2lkdGg9IjExMCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjQzNSIgeT0iMTQ0NyI+a3djb2x1bW5fb3B0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI25tIiB4bGluazp0aXRsZT0ibm0iPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzUzIiB5PSIxMzUzIiB3aWR0aD0iNDAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9Ijc1MSIgeT0iMTM1MSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNzYxIiB5PSIxMzcxIj5ubTwvdGV4dD48L2E+PGEgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNhZGRfY29sdW1uX2Z1bGxuYW1lIiB4bGluazp0aXRsZT0iYWRkX2NvbHVtbl9mdWxsbmFtZSI+DQogICAgICAgICAgICA8cmVjdCB4PSIyMzUiIHk9IjE0NzMiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzIiLz4NCiAgICAgICAgICAgIDxyZWN0IHg9IjIzMyIgeT0iMTQ3MSIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjI0MyIgeT0iMTQ5MSI+YWRkX2NvbHVtbl9mdWxsbmFtZTwvdGV4dD48L2E+PHJlY3QgeD0iNDE1IiB5PSIxNDczIiB3aWR0aD0iNDgiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iNDEzIiB5PSIxNDcxIiB3aWR0aD0iNDgiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjQyMyIgeT0iMTQ5MSI+QUREPC90ZXh0PjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIja3djb2x1bW5fb3B0IiB4bGluazp0aXRsZT0ia3djb2x1bW5fb3B0Ij4NCiAgICAgICAgICAgIDxyZWN0IHg9IjQ4MyIgeT0iMTQ3MyIgd2lkdGg9IjExMCIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDgxIiB5PSIxNDcxIiB3aWR0aD0iMTEwIiBoZWlnaHQ9IjMyIiBjbGFzcz0ibm9udGVybWluYWwiLz4NCiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJub250ZXJtaW5hbCIgeD0iNDkxIiB5PSIxNDkxIj5rd2NvbHVtbl9vcHQ8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjY29sdW1ubmFtZSIgeGxpbms6dGl0bGU9ImNvbHVtbm5hbWUiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNjEzIiB5PSIxNDczIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSI2MTEiIHk9IjE0NzEiIHdpZHRoPSIxMDAiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI2MjEiIHk9IjE0OTEiPmNvbHVtbm5hbWU8L3RleHQ+PC9hPjxhIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjY2FyZ2xpc3QiIHhsaW5rOnRpdGxlPSJjYXJnbGlzdCI+DQogICAgICAgICAgICA8cmVjdCB4PSI3MzMiIHk9IjE0NzMiIHdpZHRoPSI2NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNzMxIiB5PSIxNDcxIiB3aWR0aD0iNjYiIGhlaWdodD0iMzIiIGNsYXNzPSJub250ZXJtaW5hbCIvPg0KICAgICAgICAgICAgPHRleHQgY2xhc3M9Im5vbnRlcm1pbmFsIiB4PSI3NDEiIHk9IjE0OTEiPmNhcmdsaXN0PC90ZXh0PjwvYT48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI2NyZWF0ZV92dGFiIiB4bGluazp0aXRsZT0iY3JlYXRlX3Z0YWIiPg0KICAgICAgICAgICAgPHJlY3QgeD0iNTEiIHk9IjE1NjEiIHdpZHRoPSI5NiIgaGVpZ2h0PSIzMiIvPg0KICAgICAgICAgICAgPHJlY3QgeD0iNDkiIHk9IjE1NTkiIHdpZHRoPSI5NiIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjU5IiB5PSIxNTc5Ij5jcmVhdGVfdnRhYjwvdGV4dD48L2E+PHJlY3QgeD0iMTg3IiB5PSIxNTYxIiB3aWR0aD0iMjYiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMTg1IiB5PSIxNTU5IiB3aWR0aD0iMjYiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjE5NSIgeT0iMTU3OSI+KDwvdGV4dD48YSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI3Z0YWJhcmciIHhsaW5rOnRpdGxlPSJ2dGFiYXJnIj4NCiAgICAgICAgICAgIDxyZWN0IHg9IjI1MyIgeT0iMTU2MSIgd2lkdGg9IjY4IiBoZWlnaHQ9IjMyIi8+DQogICAgICAgICAgICA8cmVjdCB4PSIyNTEiIHk9IjE1NTkiIHdpZHRoPSI2OCIgaGVpZ2h0PSIzMiIgY2xhc3M9Im5vbnRlcm1pbmFsIi8+DQogICAgICAgICAgICA8dGV4dCBjbGFzcz0ibm9udGVybWluYWwiIHg9IjI2MSIgeT0iMTU3OSI+dnRhYmFyZzwvdGV4dD48L2E+PHJlY3QgeD0iMjUzIiB5PSIxNTE3IiB3aWR0aD0iMjQiIGhlaWdodD0iMzIiIHJ4PSIxMCIvPg0KICAgICAgICAgPHJlY3QgeD0iMjUxIiB5PSIxNTE1IiB3aWR0aD0iMjQiIGhlaWdodD0iMzIiIGNsYXNzPSJ0ZXJtaW5hbCIgcng9IjEwIi8+DQogICAgICAgICA8dGV4dCBjbGFzcz0idGVybWluYWwiIHg9IjI2MSIgeT0iMTUzNSI+LDwvdGV4dD4NCiAgICAgICAgIDxyZWN0IHg9IjM2MSIgeT0iMTU2MSIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiByeD0iMTAiLz4NCiAgICAgICAgIDxyZWN0IHg9IjM1OSIgeT0iMTU1OSIgd2lkdGg9IjI2IiBoZWlnaHQ9IjMyIiBjbGFzcz0idGVybWluYWwiIHJ4PSIxMCIvPg0KICAgICAgICAgPHRleHQgY2xhc3M9InRlcm1pbmFsIiB4PSIzNjkiIHk9IjE1NzkiPik8L3RleHQ+DQogICAgICAgICA8c3ZnOnBhdGggeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImxpbmUiIGQ9Im0xNyAxNyBoMiBtNDAgMCBoMTAgbTY0IDAgaDEwIG0wIDAgaDEwIG04MCAwIGgxMCBtLTIwNCAwIGgyMCBtMTg0IDAgaDIwIG0tMjI0IDAgcTEwIDAgMTAgMTAgbTIwNCAwIHEwIC0xMCAxMCAtMTAgbS0yMTQgMTAgdjI0IG0yMDQgMCB2LTI0IG0tMjA0IDI0IHEwIDEwIDEwIDEwIG0xODQgMCBxMTAgMCAxMCAtMTAgbS0xOTQgMTAgaDEwIG00OCAwIGgxMCBtMCAwIGgxMTYgbTIwIC00NCBoMTAgbTgyIDAgaDEwIG0wIDAgaDgxMiBtLTExNTggMCBoMjAgbTExMzggMCBoMjAgbS0xMTc4IDAgcTEwIDAgMTAgMTAgbTExNTggMCBxMCAtMTAgMTAgLTEwIG0tMTE2OCAxMCB2NjggbTExNTggMCB2LTY4IG0tMTE1OCA2OCBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG03OCAwIGgxMCBtMCAwIGgxMDQwIG0tMTE0OCAtMTAgdjIwIG0xMTU4IDAgdi0yMCBtLTExNTggMjAgdjI0IG0xMTU4IDAgdi0yNCBtLTExNTggMjQgcTAgMTAgMTAgMTAgbTExMzggMCBxMTAgMCAxMCAtMTAgbS0xMTQ4IDEwIGgxMCBtOTIgMCBoMTAgbTAgMCBoMTAgbTgyIDAgaDEwIG0yMCAwIGgxMCBtMCAwIGgyMzggbS0yNjggMCBoMjAgbTI0OCAwIGgyMCBtLTI4OCAwIHExMCAwIDEwIDEwIG0yNjggMCBxMCAtMTAgMTAgLTEwIG0tMjc4IDEwIHYxMiBtMjY4IDAgdi0xMiBtLTI2OCAxMiBxMCAxMCAxMCAxMCBtMjQ4IDAgcTEwIDAgMTAgLTEwIG0tMjU4IDEwIGgxMCBtMzggMCBoMTAgbTAgMCBoMTAgbTExMCAwIGgxMCBtMCAwIGgxMCBtNDAgMCBoMTAgbTIwIC0zMiBoNjM2IG0tMTE0OCAtMTAgdjIwIG0xMTU4IDAgdi0yMCBtLTExNTggMjAgdjU2IG0xMTU4IDAgdi01NiBtLTExNTggNTYgcTAgMTAgMTAgMTAgbTExMzggMCBxMTAgMCAxMCAtMTAgbS0xMTI4IDEwIGgxMCBtMTAwIDAgaDEwIG0wIDAgaDExMCBtLTI1MCAwIGgyMCBtMjMwIDAgaDIwIG0tMjcwIDAgcTEwIDAgMTAgMTAgbTI1MCAwIHEwIC0xMCAxMCAtMTAgbS0yNjAgMTAgdjI0IG0yNTAgMCB2LTI0IG0tMjUwIDI0IHEwIDEwIDEwIDEwIG0yMzAgMCBxMTAgMCAxMCAtMTAgbS0yNDAgMTAgaDEwIG04MCAwIGgxMCBtMCAwIGgxMCBtMTEwIDAgaDEwIG0yMCAtNDQgaDEwIG00MCAwIGgxMCBtMCAwIGg4MDggbS0xMTQ4IC0xMCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2NjggbTExNTggMCB2LTY4IG0tMTE1OCA2OCBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG0xMDAgMCBoMTAgbTAgMCBoMTAgbTEzNiAwIGgxMCBtMCAwIGg4NjIgbS0xMTQ4IC0xMCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2MjQgbTExNTggMCB2LTI0IG0tMTE1OCAyNCBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG01OCAwIGgxMCBtMjAgMCBoMTAgbTYyIDAgaDEwIG0wIDAgaDE4IG0tMTIwIDAgaDIwIG0xMDAgMCBoMjAgbS0xNDAgMCBxMTAgMCAxMCAxMCBtMTIwIDAgcTAgLTEwIDEwIC0xMCBtLTEzMCAxMCB2MjQgbTEyMCAwIHYtMjQgbS0xMjAgMjQgcTAgMTAgMTAgMTAgbTEwMCAwIHExMCAwIDEwIC0xMCBtLTExMCAxMCBoMTAgbTU4IDAgaDEwIG0wIDAgaDIyIG0tMTEwIC0xMCB2MjAgbTEyMCAwIHYtMjAgbS0xMjAgMjAgdjI0IG0xMjAgMCB2LTI0IG0tMTIwIDI0IHEwIDEwIDEwIDEwIG0xMDAgMCBxMTAgMCAxMCAtMTAgbS0xMTAgMTAgaDEwIG02NCAwIGgxMCBtMCAwIGgxNiBtLTExMCAtMTAgdjIwIG0xMjAgMCB2LTIwIG0tMTIwIDIwIHYyNCBtMTIwIDAgdi0yNCBtLTEyMCAyNCBxMCAxMCAxMCAxMCBtMTAwIDAgcTEwIDAgMTAgLTEwIG0tMTEwIDEwIGgxMCBtODAgMCBoMTAgbTIwIC0xMzIgaDEwIG02NCAwIGgxMCBtMCAwIGgxMCBtNzQgMCBoMTAgbTAgMCBoNzQyIG0tMTE0OCAtMTAgdjIwIG0xMTU4IDAgdi0yMCBtLTExNTggMjAgdjE1NiBtMTE1OCAwIHYtMTU2IG0tMTE1OCAxNTYgcTAgMTAgMTAgMTAgbTExMzggMCBxMTAgMCAxMCAtMTAgbS0xMTQ4IDEwIGgxMCBtNzIgMCBoMTAgbTIwIDAgaDEwIG01MiAwIGgxMCBtMCAwIGgxMCBtNTggMCBoMTAgbTAgMCBoMTAgbTg2IDAgaDEwIG0wIDAgaDEwIG00MCAwIGgxMCBtMCAwIGgxMCBtNTYgMCBoMTAgbTAgMCBoMTAgbTg2IDAgaDEwIG0wIDAgaDEwIG0zOCAwIGgxMCBtMCAwIGgxMCBtNTggMCBoMTAgbTAgMCBoMjAyIG0tODU2IDAgaDIwIG04MzYgMCBoMjAgbS04NzYgMCBxMTAgMCAxMCAxMCBtODU2IDAgcTAgLTEwIDEwIC0xMCBtLTg2NiAxMCB2MjQgbTg1NiAwIHYtMjQgbS04NTYgMjQgcTAgMTAgMTAgMTAgbTgzNiAwIHExMCAwIDEwIC0xMCBtLTg0NiAxMCBoMTAgbTg2IDAgaDEwIG0wIDAgaDEwIG02NCAwIGgxMCBtMCAwIGgxMCBtODYgMCBoMTAgbTAgMCBoMTAgbTQwIDAgaDEwIG0wIDAgaDEwIG01NiAwIGgxMCBtMCAwIGgxMCBtNDAgMCBoMTAgbTAgMCBoMTAgbTQwIDAgaDEwIG0wIDAgaDEwIG0yNiAwIGgxMCBtMCAwIGgxMCBtNjQgMCBoMTAgbTAgMCBoMTAgbTI2IDAgaDEwIG0wIDAgaDEwIG04OCAwIGgxMCBtLTg0NiAtMTAgdjIwIG04NTYgMCB2LTIwIG0tODU2IDIwIHY0NiBtODU2IDAgdi00NiBtLTg1NiA0NiBxMCAxMCAxMCAxMCBtODM2IDAgcTEwIDAgMTAgLTEwIG0tODQ2IDEwIGgxMCBtOTYgMCBoMTAgbTAgMCBoMTAgbTY0IDAgaDEwIG0yMCAwIGgxMCBtOTYgMCBoMTAgbTAgMCBoMTAgbTI0IDAgaDEwIG0tMTgwIDAgbDIwIDAgbS0xIDAgcS05IDAgLTkgLTEwIGwwIC0xMiBxMCAtMTAgMTAgLTEwIG0xNjAgMzIgbDIwIDAgbS0yMCAwIHExMCAwIDEwIC0xMCBsMCAtMTIgcTAgLTEwIC0xMCAtMTAgbS0xNjAgMCBoMTAgbTAgMCBoMTUwIG0yMCAzMiBoMTAgbTQ4IDAgaDEwIG0wIDAgaDM2OCBtMjAgLTExMCBoMTcwIG0tMTE0OCAtMTAgdjIwIG0xMTU4IDAgdi0yMCBtLTExNTggMjAgdjEzNCBtMTE1OCAwIHYtMTM0IG0tMTE1OCAxMzQgcTAgMTAgMTAgMTAgbTExMzggMCBxMTAgMCAxMCAtMTAgbS0xMTQ4IDEwIGgxMCBtNTggMCBoMTAgbTAgMCBoMTA2MCBtLTExNDggLTEwIHYyMCBtMTE1OCAwIHYtMjAgbS0xMTU4IDIwIHYyNCBtMTE1OCAwIHYtMjQgbS0xMTU4IDI0IHEwIDEwIDEwIDEwIG0xMTM4IDAgcTEwIDAgMTAgLTEwIG0tMTE0OCAxMCBoMTAgbTQ2IDAgaDEwIG00MCAwIGgxMCBtNzAgMCBoMTAgbTAgMCBoMTAgbTYwIDAgaDEwIG0wIDAgaDEwIG04MiAwIGgxMCBtMCAwIGgxMCBtOTggMCBoMTAgbTAgMCBoMjE0IG0tNjI0IDAgaDIwIG02MDQgMCBoMjAgbS02NDQgMCBxMTAgMCAxMCAxMCBtNjI0IDAgcTAgLTEwIDEwIC0xMCBtLTYzNCAxMCB2MjQgbTYyNCAwIHYtMjQgbS02MjQgMjQgcTAgMTAgMTAgMTAgbTYwNCAwIHExMCAwIDEwIC0xMCBtLTYxNCAxMCBoMTAgbTc0IDAgaDEwIG0wIDAgaDEwIG02MCAwIGgxMCBtMCAwIGgxMCBtODIgMCBoMTAgbTAgMCBoMTAgbTk4IDAgaDEwIG0wIDAgaDEwIG00NCAwIGgxMCBtMCAwIGgxMCBtNTggMCBoMTAgbTAgMCBoMTAgbTQ4IDAgaDEwIG0yMCAtNDQgaDEwIG0xMTQgMCBoMTAgbTIwIDAgaDEwIG0wIDAgaDIwNCBtLTIzNCAwIGgyMCBtMjE0IDAgaDIwIG0tMjU0IDAgcTEwIDAgMTAgMTAgbTIzNCAwIHEwIC0xMCAxMCAtMTAgbS0yNDQgMTAgdjEyIG0yMzQgMCB2LTEyIG0tMjM0IDEyIHEwIDEwIDEwIDEwIG0yMTQgMCBxMTAgMCAxMCAtMTAgbS0yMjQgMTAgaDEwIG05OCAwIGgxMCBtMCAwIGgxMCBtNzYgMCBoMTAgbS0xMDMyIC0zMiBoMjAgbTEwMzIgMCBoMjAgbS0xMDcyIDAgcTEwIDAgMTAgMTAgbTEwNTIgMCBxMCAtMTAgMTAgLTEwIG0tMTA2MiAxMCB2NjggbTEwNTIgMCB2LTY4IG0tMTA1MiA2OCBxMCAxMCAxMCAxMCBtMTAzMiAwIHExMCAwIDEwIC0xMCBtLTEwNDIgMTAgaDEwIG05MCAwIGgxMCBtMCAwIGgxMCBtNTYgMCBoMTAgbTAgMCBoMTAgbTgyIDAgaDEwIG0wIDAgaDEwIG03OCAwIGgxMCBtMjAgMCBoMTAgbTU4IDAgaDEwIG0wIDAgaDEwIG02MCAwIGgxMCBtMCAwIGgxMzIgbS0zMTAgMCBoMjAgbTI5MCAwIGgyMCBtLTMzMCAwIHExMCAwIDEwIDEwIG0zMTAgMCBxMCAtMTAgMTAgLTEwIG0tMzIwIDEwIHYyNCBtMzEwIDAgdi0yNCBtLTMxMCAyNCBxMCAxMCAxMCAxMCBtMjkwIDAgcTEwIDAgMTAgLTEwIG0tMzAwIDEwIGgxMCBtODAgMCBoMTAgbTAgMCBoMTAgbTcyIDAgaDEwIG0wIDAgaDEwIG03OCAwIGgxMCBtMjAgLTQ0IGgzMTYgbS0xMTI4IC05OCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2MTU2IG0xMTU4IDAgdi0xNTYgbS0xMTU4IDE1NiBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG03OCAwIGgxMCBtMjAgMCBoMTAgbTAgMCBoNTAgbS04MCAwIGgyMCBtNjAgMCBoMjAgbS0xMDAgMCBxMTAgMCAxMCAxMCBtODAgMCBxMCAtMTAgMTAgLTEwIG0tOTAgMTAgdjEyIG04MCAwIHYtMTIgbS04MCAxMiBxMCAxMCAxMCAxMCBtNjAgMCBxMTAgMCAxMCAtMTAgbS03MCAxMCBoMTAgbTQwIDAgaDEwIG0yMCAtMzIgaDEwIG01MCAwIGgxMCBtMCAwIGg4NzAgbS0xMTQ4IC0xMCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2NTYgbTExNTggMCB2LTU2IG0tMTE1OCA1NiBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG03OCAwIGgxMCBtMCAwIGgxMCBtNDAgMCBoMTAgbTAgMCBoMTAgbTU2IDAgaDEwIG0yMCAwIGgxMCBtMCAwIGgyMzYgbS0yNjYgMCBoMjAgbTI0NiAwIGgyMCBtLTI4NiAwIHExMCAwIDEwIDEwIG0yNjYgMCBxMCAtMTAgMTAgLTEwIG0tMjc2IDEwIHYxMiBtMjY2IDAgdi0xMiBtLTI2NiAxMiBxMCAxMCAxMCAxMCBtMjQ2IDAgcTEwIDAgMTAgLTEwIG0tMjU2IDEwIGgxMCBtMzAgMCBoMTAgbTIwIDAgaDEwIG02NiAwIGgxMCBtMCAwIGgyOCBtLTEzNCAwIGgyMCBtMTE0IDAgaDIwIG0tMTU0IDAgcTEwIDAgMTAgMTAgbTEzNCAwIHEwIC0xMCAxMCAtMTAgbS0xNDQgMTAgdjI0IG0xMzQgMCB2LTI0IG0tMTM0IDI0IHEwIDEwIDEwIDEwIG0xMTQgMCBxMTAgMCAxMCAtMTAgbS0xMjQgMTAgaDEwIG05NCAwIGgxMCBtMjAgLTQ0IGg0MiBtLTI1NiAtMTAgdjIwIG0yNjYgMCB2LTIwIG0tMjY2IDIwIHY2OCBtMjY2IDAgdi02OCBtLTI2NiA2OCBxMCAxMCAxMCAxMCBtMjQ2IDAgcTEwIDAgMTAgLTEwIG0tMjU2IDEwIGgxMCBtMjYgMCBoMTAgbTIwIDAgaDEwIG02NiAwIGgxMCBtMCAwIGgyOCBtLTEzNCAwIGgyMCBtMTE0IDAgaDIwIG0tMTU0IDAgcTEwIDAgMTAgMTAgbTEzNCAwIHEwIC0xMCAxMCAtMTAgbS0xNDQgMTAgdjI0IG0xMzQgMCB2LTI0IG0tMTM0IDI0IHEwIDEwIDEwIDEwIG0xMTQgMCBxMTAgMCAxMCAtMTAgbS0xMjQgMTAgaDEwIG05NCAwIGgxMCBtMjAgLTQ0IGgxMCBtMjYgMCBoMTAgbTIwIC0xMjAgaDYxOCBtLTExNDggLTEwIHYyMCBtMTE1OCAwIHYtMjAgbS0xMTU4IDIwIHYxODggbTExNTggMCB2LTE4OCBtLTExNTggMTg4IHEwIDEwIDEwIDEwIG0xMTM4IDAgcTEwIDAgMTAgLTEwIG0tMTE0OCAxMCBoMTAgbTc0IDAgaDEwIG0wIDAgaDEwIG0xMzQgMCBoMTAgbTAgMCBoMTAgbTQ4IDAgaDEwIG0wIDAgaDEwIG0zOCAwIGgxMCBtMCAwIGgxMCBtNDggMCBoMTAgbTAgMCBoMTAgbTcwIDAgaDEwIG0wIDAgaDYwNiBtLTExNDggLTEwIHYyMCBtMTE1OCAwIHYtMjAgbS0xMTU4IDIwIHYyNCBtMTE1OCAwIHYtMjQgbS0xMTU4IDI0IHEwIDEwIDEwIDEwIG0xMTM4IDAgcTEwIDAgMTAgLTEwIG0tMTE0OCAxMCBoMTAgbTc0IDAgaDEwIG0wIDAgaDEwIG0xMzQgMCBoMTAgbTAgMCBoMTAgbTQ4IDAgaDEwIG0wIDAgaDgyMiBtLTExNDggLTEwIHYyMCBtMTE1OCAwIHYtMjAgbS0xMTU4IDIwIHYyNCBtMTE1OCAwIHYtMjQgbS0xMTU4IDI0IHEwIDEwIDEwIDEwIG0xMTM4IDAgcTEwIDAgMTAgLTEwIG0tMTEyOCAxMCBoMTAgbTgwIDAgaDEwIG0wIDAgaDIgbS0xMjIgMCBoMjAgbTEwMiAwIGgyMCBtLTE0MiAwIHExMCAwIDEwIDEwIG0xMjIgMCBxMCAtMTAgMTAgLTEwIG0tMTMyIDEwIHYyNCBtMTIyIDAgdi0yNCBtLTEyMiAyNCBxMCAxMCAxMCAxMCBtMTAyIDAgcTEwIDAgMTAgLTEwIG0tMTEyIDEwIGgxMCBtODIgMCBoMTAgbTQwIC00NCBoMTAgbTAgMCBoMTI2IG0tMTU2IDAgaDIwIG0xMzYgMCBoMjAgbS0xNzYgMCBxMTAgMCAxMCAxMCBtMTU2IDAgcTAgLTEwIDEwIC0xMCBtLTE2NiAxMCB2MTIgbTE1NiAwIHYtMTIgbS0xNTYgMTIgcTAgMTAgMTAgMTAgbTEzNiAwIHExMCAwIDEwIC0xMCBtLTE0NiAxMCBoMTAgbTQwIDAgaDEwIG0wIDAgaDEwIG01NiAwIGgxMCBtMjAgLTMyIGg4MjAgbS0xMTQ4IC0xMCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2NjggbTExNTggMCB2LTY4IG0tMTE1OCA2OCBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG02MiAwIGgxMCBtMCAwIGgxMCBtNjIgMCBoMTAgbTIwIDAgaDEwIG03NCAwIGgxMCBtMjAgMCBoMTAgbTc2IDAgaDEwIG0yMCAwIGgxMCBtMCAwIGgxODAgbS0yMTAgMCBoMjAgbTE5MCAwIGgyMCBtLTIzMCAwIHExMCAwIDEwIDEwIG0yMTAgMCBxMCAtMTAgMTAgLTEwIG0tMjIwIDEwIHYxMiBtMjEwIDAgdi0xMiBtLTIxMCAxMiBxMCAxMCAxMCAxMCBtMTkwIDAgcTEwIDAgMTAgLTEwIG0tMjAwIDEwIGgxMCBtMTEwIDAgaDEwIG0wIDAgaDEwIG00MCAwIGgxMCBtMjAgLTMyIGgxMCBtMzggMCBoMTAgbS00MDQgMCBoMjAgbTM4NCAwIGgyMCBtLTQyNCAwIHExMCAwIDEwIDEwIG00MDQgMCBxMCAtMTAgMTAgLTEwIG0tNDE0IDEwIHY1NiBtNDA0IDAgdi01NiBtLTQwNCA1NiBxMCAxMCAxMCAxMCBtMzg0IDAgcTEwIDAgMTAgLTEwIG0tMzk0IDEwIGgxMCBtNTggMCBoMTAgbTAgMCBoMTAgbTExMCAwIGgxMCBtMCAwIGgxNzYgbTIwIC03NiBoMTAgbTQwIDAgaDEwIG0wIDAgaDYgbS02MDQgMCBoMjAgbTU4NCAwIGgyMCBtLTYyNCAwIHExMCAwIDEwIDEwIG02MDQgMCBxMCAtMTAgMTAgLTEwIG0tNjE0IDEwIHYxMDAgbTYwNCAwIHYtMTAwIG0tNjA0IDEwMCBxMCAxMCAxMCAxMCBtNTg0IDAgcTEwIDAgMTAgLTEwIG0tNTk0IDEwIGgxMCBtMTYwIDAgaDEwIG0wIDAgaDEwIG00OCAwIGgxMCBtMCAwIGgxMCBtMTEwIDAgaDEwIG0wIDAgaDEwIG0xMDAgMCBoMTAgbTAgMCBoMTAgbTY2IDAgaDEwIG0yMCAtMTIwIGgzNTAgbS0xMTQ4IC0xMCB2MjAgbTExNTggMCB2LTIwIG0tMTE1OCAyMCB2MTg4IG0xMTU4IDAgdi0xODggbS0xMTU4IDE4OCBxMCAxMCAxMCAxMCBtMTEzOCAwIHExMCAwIDEwIC0xMCBtLTExNDggMTAgaDEwIG05NiAwIGgxMCBtMjAgMCBoMTAgbTI2IDAgaDEwIG0yMCAwIGgxMCBtNjggMCBoMTAgbS0xMDggMCBsMjAgMCBtLTEgMCBxLTkgMCAtOSAtMTAgbDAgLTI0IHEwIC0xMCAxMCAtMTAgbTg4IDQ0IGwyMCAwIG0tMjAgMCBxMTAgMCAxMCAtMTAgbDAgLTI0IHEwIC0xMCAtMTAgLTEwIG0tODggMCBoMTAgbTI0IDAgaDEwIG0wIDAgaDQ0IG0yMCA0NCBoMTAgbTI2IDAgaDEwIG0tMjQwIDAgaDIwIG0yMjAgMCBoMjAgbS0yNjAgMCBxMTAgMCAxMCAxMCBtMjQwIDAgcTAgLTEwIDEwIC0xMCBtLTI1MCAxMCB2MTQgbTI0MCAwIHYtMTQgbS0yNDAgMTQgcTAgMTAgMTAgMTAgbTIyMCAwIHExMCAwIDEwIC0xMCBtLTIzMCAxMCBoMTAgbTAgMCBoMjEwIG0yMCAtMzQgaDc2MiBtMjMgLTE1NTggaC0zIi8+DQogICAgICAgICA8cG9seWdvbiBwb2ludHM9IjEyMDcgMTcgMTIxNSAxMyAxMjE1IDIxIi8+DQogICAgICAgICA8cG9seWdvbiBwb2ludHM9IjEyMDcgMTcgMTE5OSAxMyAxMTk5IDIxIi8+PC9zdmc+)

(3) By Domingo (mingodad) on 2021-07-02 09:27:15 in reply to 1 [link]

I'm having trouble to login to postgresql mailing list and because sqlite follow somehow postgresql footsteps I'm posting here the postgresql 13.3 whole grammar EBNF to help comparisons.

EBNF for https://www.bottlecaps.de/rr/ui :
====
/*
From postgresql-13.3/src/backend/parser/gram.y
*/

stmtblock ::= stmtmulti
stmtmulti ::= stmtmulti ';' stmt | stmt
stmt ::= AlterEventTrigStmt | AlterCollationStmt | AlterDatabaseStmt | AlterDatabaseSetStmt | AlterDefaultPrivilegesStmt | AlterDomainStmt | AlterEnumStmt | AlterExtensionStmt | AlterExtensionContentsStmt | AlterFdwStmt | AlterForeignServerStmt | AlterForeignTableStmt | AlterFunctionStmt | AlterGroupStmt | AlterObjectDependsStmt | AlterObjectSchemaStmt | AlterOwnerStmt | AlterOperatorStmt | AlterTypeStmt | AlterPolicyStmt | AlterSeqStmt | AlterSystemStmt | AlterTableStmt | AlterTblSpcStmt | AlterCompositeTypeStmt | AlterPublicationStmt | AlterRoleSetStmt | AlterRoleStmt | AlterSubscriptionStmt | AlterStatsStmt | AlterTSConfigurationStmt | AlterTSDictionaryStmt | AlterUserMappingStmt | AnalyzeStmt | CallStmt | CheckPointStmt | ClosePortalStmt | ClusterStmt | CommentStmt | ConstraintsSetStmt | CopyStmt | CreateAmStmt | CreateAsStmt | CreateAssertionStmt | CreateCastStmt | CreateConversionStmt | CreateDomainStmt | CreateExtensionStmt | CreateFdwStmt | CreateForeignServerStmt | CreateForeignTableStmt | CreateFunctionStmt | CreateGroupStmt | CreateMatViewStmt | CreateOpClassStmt | CreateOpFamilyStmt | CreatePublicationStmt | AlterOpFamilyStmt | CreatePolicyStmt | CreatePLangStmt | CreateSchemaStmt | CreateSeqStmt | CreateStmt | CreateSubscriptionStmt | CreateStatsStmt | CreateTableSpaceStmt | CreateTransformStmt | CreateTrigStmt | CreateEventTrigStmt | CreateRoleStmt | CreateUserStmt | CreateUserMappingStmt | CreatedbStmt | DeallocateStmt | DeclareCursorStmt | DefineStmt | DeleteStmt | DiscardStmt | DoStmt | DropCastStmt | DropOpClassStmt | DropOpFamilyStmt | DropOwnedStmt | DropPLangStmt | DropStmt | DropSubscriptionStmt | DropTableSpaceStmt | DropTransformStmt | DropRoleStmt | DropUserMappingStmt | DropdbStmt | ExecuteStmt | ExplainStmt | FetchStmt | GrantStmt | GrantRoleStmt | ImportForeignSchemaStmt | IndexStmt | InsertStmt | ListenStmt | RefreshMatViewStmt | LoadStmt | LockStmt | NotifyStmt | PrepareStmt | ReassignOwnedStmt | ReindexStmt | RemoveAggrStmt | RemoveFuncStmt | RemoveOperStmt | RenameStmt | RevokeStmt | RevokeRoleStmt | RuleStmt | SecLabelStmt | SelectStmt | TransactionStmt | TruncateStmt | UnlistenStmt | UpdateStmt | VacuumStmt | VariableResetStmt | VariableSetStmt | VariableShowStmt | ViewStmt |
CallStmt ::= CALL func_application
CreateRoleStmt ::= CREATE ROLE RoleId opt_with OptRoleList
opt_with ::= WITH | WITH_LA |
OptRoleList ::= OptRoleList CreateOptRoleElem |
AlterOptRoleList ::= AlterOptRoleList AlterOptRoleElem |
AlterOptRoleElem ::= PASSWORD Sconst | PASSWORD NULL_P | ENCRYPTED PASSWORD Sconst | UNENCRYPTED PASSWORD Sconst | INHERIT | CONNECTION LIMIT SignedIconst | VALID UNTIL Sconst | USER role_list | IDENT
CreateOptRoleElem ::= AlterOptRoleElem | SYSID Iconst | ADMIN role_list | ROLE role_list | IN_P ROLE role_list | IN_P GROUP_P role_list
CreateUserStmt ::= CREATE USER RoleId opt_with OptRoleList
AlterRoleStmt ::= ALTER ROLE RoleSpec opt_with AlterOptRoleList | ALTER USER RoleSpec opt_with AlterOptRoleList
opt_in_database ::= | IN_P DATABASE database_name
AlterRoleSetStmt ::= ALTER ROLE RoleSpec opt_in_database SetResetClause | ALTER ROLE ALL opt_in_database SetResetClause | ALTER USER RoleSpec opt_in_database SetResetClause | ALTER USER ALL opt_in_database SetResetClause
DropRoleStmt ::= DROP ROLE role_list | DROP ROLE IF_P EXISTS role_list | DROP USER role_list | DROP USER IF_P EXISTS role_list | DROP GROUP_P role_list | DROP GROUP_P IF_P EXISTS role_list
CreateGroupStmt ::= CREATE GROUP_P RoleId opt_with OptRoleList
AlterGroupStmt ::= ALTER GROUP_P RoleSpec add_drop USER role_list
add_drop ::= ADD_P | DROP
CreateSchemaStmt ::= CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList | CREATE SCHEMA ColId OptSchemaEltList | CREATE SCHEMA IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList | CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList
OptSchemaName ::= ColId |
OptSchemaEltList ::= OptSchemaEltList schema_stmt |
schema_stmt ::= CreateStmt | IndexStmt | CreateSeqStmt | CreateTrigStmt | GrantStmt | ViewStmt
VariableSetStmt ::= SET set_rest | SET LOCAL set_rest | SET SESSION set_rest
set_rest ::= TRANSACTION transaction_mode_list | SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list | set_rest_more
generic_set ::= var_name TO var_list | var_name '=' var_list | var_name TO DEFAULT | var_name '=' DEFAULT
set_rest_more ::= generic_set | var_name FROM CURRENT_P | TIME ZONE zone_value | CATALOG_P Sconst | SCHEMA Sconst | NAMES opt_encoding | ROLE NonReservedWord_or_Sconst | SESSION AUTHORIZATION NonReservedWord_or_Sconst | SESSION AUTHORIZATION DEFAULT | XML_P OPTION document_or_content | TRANSACTION SNAPSHOT Sconst
var_name ::= ColId | var_name '.' ColId
var_list ::= var_value | var_list ',' var_value
var_value ::= opt_boolean_or_string | NumericOnly
iso_level ::= READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE
opt_boolean_or_string ::= TRUE_P | FALSE_P | ON | NonReservedWord_or_Sconst
zone_value ::= Sconst | IDENT | ConstInterval Sconst opt_interval | ConstInterval '(' Iconst ')' Sconst | NumericOnly | DEFAULT | LOCAL
opt_encoding ::= Sconst | DEFAULT |
NonReservedWord_or_Sconst ::= NonReservedWord | Sconst
VariableResetStmt ::= RESET reset_rest
reset_rest ::= generic_reset | TIME ZONE | TRANSACTION ISOLATION LEVEL | SESSION AUTHORIZATION
generic_reset ::= var_name | ALL
SetResetClause ::= SET set_rest | VariableResetStmt
FunctionSetResetClause ::= SET set_rest_more | VariableResetStmt
VariableShowStmt ::= SHOW var_name | SHOW TIME ZONE | SHOW TRANSACTION ISOLATION LEVEL | SHOW SESSION AUTHORIZATION | SHOW ALL
ConstraintsSetStmt ::= SET CONSTRAINTS constraints_set_list constraints_set_mode
constraints_set_list ::= ALL | qualified_name_list
constraints_set_mode ::= DEFERRED | IMMEDIATE
CheckPointStmt ::= CHECKPOINT
DiscardStmt ::= DISCARD ALL | DISCARD TEMP | DISCARD TEMPORARY | DISCARD PLANS | DISCARD SEQUENCES
AlterTableStmt ::= ALTER TABLE relation_expr alter_table_cmds | ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds | ALTER TABLE relation_expr partition_cmd | ALTER TABLE IF_P EXISTS relation_expr partition_cmd | ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait | ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait | ALTER INDEX qualified_name alter_table_cmds | ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds | ALTER INDEX qualified_name index_partition_cmd | ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait | ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait | ALTER SEQUENCE qualified_name alter_table_cmds | ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds | ALTER VIEW qualified_name alter_table_cmds | ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds | ALTER MATERIALIZED VIEW qualified_name alter_table_cmds | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait
alter_table_cmds ::= alter_table_cmd | alter_table_cmds ',' alter_table_cmd
partition_cmd ::= ATTACH PARTITION qualified_name PartitionBoundSpec | DETACH PARTITION qualified_name
index_partition_cmd ::= ATTACH PARTITION qualified_name
alter_table_cmd ::= ADD_P columnDef | ADD_P IF_P NOT EXISTS columnDef | ADD_P COLUMN columnDef | ADD_P COLUMN IF_P NOT EXISTS columnDef | ALTER opt_column ColId alter_column_default | ALTER opt_column ColId DROP NOT NULL_P | ALTER opt_column ColId SET NOT NULL_P | ALTER opt_column ColId DROP EXPRESSION | ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS | ALTER opt_column ColId SET STATISTICS SignedIconst | ALTER opt_column Iconst SET STATISTICS SignedIconst | ALTER opt_column ColId SET reloptions | ALTER opt_column ColId RESET reloptions | ALTER opt_column ColId SET STORAGE ColId | ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList | ALTER opt_column ColId alter_identity_column_option_list | ALTER opt_column ColId DROP IDENTITY_P | ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS | DROP opt_column IF_P EXISTS ColId opt_drop_behavior | DROP opt_column ColId opt_drop_behavior | ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using | ALTER opt_column ColId alter_generic_options | ADD_P TableConstraint | ALTER CONSTRAINT name ConstraintAttributeSpec | VALIDATE CONSTRAINT name | DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior | DROP CONSTRAINT name opt_drop_behavior | SET WITHOUT OIDS | CLUSTER ON name | SET WITHOUT CLUSTER | SET LOGGED | SET UNLOGGED | ENABLE_P TRIGGER name | ENABLE_P ALWAYS TRIGGER name | ENABLE_P REPLICA TRIGGER name | ENABLE_P TRIGGER ALL | ENABLE_P TRIGGER USER | DISABLE_P TRIGGER name | DISABLE_P TRIGGER ALL | DISABLE_P TRIGGER USER | ENABLE_P RULE name | ENABLE_P ALWAYS RULE name | ENABLE_P REPLICA RULE name | DISABLE_P RULE name | INHERIT qualified_name | NO INHERIT qualified_name | OF any_name | NOT OF | OWNER TO RoleSpec | SET TABLESPACE name | SET reloptions | RESET reloptions | REPLICA IDENTITY_P replica_identity | ENABLE_P ROW LEVEL SECURITY | DISABLE_P ROW LEVEL SECURITY | FORCE ROW LEVEL SECURITY | NO FORCE ROW LEVEL SECURITY | alter_generic_options
alter_column_default ::= SET DEFAULT a_expr | DROP DEFAULT
opt_drop_behavior ::= CASCADE | RESTRICT |
opt_collate_clause ::= COLLATE any_name |
alter_using ::= USING a_expr |
replica_identity ::= NOTHING | FULL | DEFAULT | USING INDEX name
reloptions ::= '(' reloption_list ')'
opt_reloptions ::= WITH reloptions |
reloption_list ::= reloption_elem | reloption_list ',' reloption_elem
reloption_elem ::= ColLabel '=' def_arg | ColLabel | ColLabel '.' ColLabel '=' def_arg | ColLabel '.' ColLabel
alter_identity_column_option_list ::= alter_identity_column_option | alter_identity_column_option_list alter_identity_column_option
alter_identity_column_option ::= RESTART | RESTART opt_with NumericOnly | SET SeqOptElem | SET GENERATED generated_when
PartitionBoundSpec ::= FOR VALUES WITH '(' hash_partbound ')' | FOR VALUES IN_P '(' expr_list ')' | FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')' | DEFAULT
hash_partbound_elem ::= NonReservedWord Iconst
hash_partbound ::= hash_partbound_elem | hash_partbound ',' hash_partbound_elem
AlterCompositeTypeStmt ::= ALTER TYPE_P any_name alter_type_cmds
alter_type_cmds ::= alter_type_cmd | alter_type_cmds ',' alter_type_cmd
alter_type_cmd ::= ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior | DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior | DROP ATTRIBUTE ColId opt_drop_behavior | ALTER ATTRIBUTE ColId opt_set_data TYPE_P Typename opt_collate_clause opt_drop_behavior
ClosePortalStmt ::= CLOSE cursor_name | CLOSE ALL
CopyStmt ::= COPY opt_binary qualified_name opt_column_list copy_from opt_program copy_file_name copy_delimiter opt_with copy_options where_clause | COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options
copy_from ::= FROM | TO
opt_program ::= PROGRAM |
copy_file_name ::= Sconst | STDIN | STDOUT
copy_options ::= copy_opt_list | '(' copy_generic_opt_list ')'
copy_opt_list ::= copy_opt_list copy_opt_item |
copy_opt_item ::= BINARY | FREEZE | DELIMITER opt_as Sconst | NULL_P opt_as Sconst | CSV | HEADER_P | QUOTE opt_as Sconst | ESCAPE opt_as Sconst | FORCE QUOTE columnList | FORCE QUOTE '*' | FORCE NOT NULL_P columnList | FORCE NULL_P columnList | ENCODING Sconst
opt_binary ::= BINARY |
copy_delimiter ::= opt_using DELIMITERS Sconst |
opt_using ::= USING |
copy_generic_opt_list ::= copy_generic_opt_elem | copy_generic_opt_list ',' copy_generic_opt_elem
copy_generic_opt_elem ::= ColLabel copy_generic_opt_arg
copy_generic_opt_arg ::= opt_boolean_or_string | NumericOnly | '*' | '(' copy_generic_opt_arg_list ')' |
copy_generic_opt_arg_list ::= copy_generic_opt_arg_list_item | copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item
copy_generic_opt_arg_list_item ::= opt_boolean_or_string
CreateStmt ::= CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace
OptTemp ::= TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP | GLOBAL TEMPORARY | GLOBAL TEMP | UNLOGGED |
OptTableElementList ::= TableElementList |
OptTypedTableElementList ::= '(' TypedTableElementList ')' |
TableElementList ::= TableElement | TableElementList ',' TableElement
TypedTableElementList ::= TypedTableElement | TypedTableElementList ',' TypedTableElement
TableElement ::= columnDef | TableLikeClause | TableConstraint
TypedTableElement ::= columnOptions | TableConstraint
columnDef ::= ColId Typename create_generic_options ColQualList
columnOptions ::= ColId ColQualList | ColId WITH OPTIONS ColQualList
ColQualList ::= ColQualList ColConstraint |
ColConstraint ::= CONSTRAINT name ColConstraintElem | ColConstraintElem | ConstraintAttr | COLLATE any_name
ColConstraintElem ::= NOT NULL_P | NULL_P | UNIQUE opt_definition OptConsTableSpace | PRIMARY KEY opt_definition OptConsTableSpace | CHECK '(' a_expr ')' opt_no_inherit | DEFAULT b_expr | GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList | GENERATED generated_when AS '(' a_expr ')' STORED | REFERENCES qualified_name opt_column_list key_match key_actions
generated_when ::= ALWAYS | BY DEFAULT
ConstraintAttr ::= DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE
TableLikeClause ::= LIKE qualified_name TableLikeOptionList
TableLikeOptionList ::= TableLikeOptionList INCLUDING TableLikeOption | TableLikeOptionList EXCLUDING TableLikeOption |
TableLikeOption ::= COMMENTS | CONSTRAINTS | DEFAULTS | IDENTITY_P | GENERATED | INDEXES | STATISTICS | STORAGE | ALL
TableConstraint ::= CONSTRAINT name ConstraintElem | ConstraintElem
ConstraintElem ::= CHECK '(' a_expr ')' ConstraintAttributeSpec | UNIQUE '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec | UNIQUE ExistingIndex ConstraintAttributeSpec | PRIMARY KEY '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec | PRIMARY KEY ExistingIndex ConstraintAttributeSpec | EXCLUDE access_method_clause '(' ExclusionConstraintList ')' opt_c_include opt_definition OptConsTableSpace ExclusionWhereClause ConstraintAttributeSpec | FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec
opt_no_inherit ::= NO INHERIT |
opt_column_list ::= '(' columnList ')' |
columnList ::= columnElem | columnList ',' columnElem
columnElem ::= ColId
opt_c_include ::= INCLUDE '(' columnList ')' |
key_match ::= MATCH FULL | MATCH PARTIAL | MATCH SIMPLE |
ExclusionConstraintList ::= ExclusionConstraintElem | ExclusionConstraintList ',' ExclusionConstraintElem
ExclusionConstraintElem ::= index_elem WITH any_operator | index_elem WITH OPERATOR '(' any_operator ')'
ExclusionWhereClause ::= WHERE '(' a_expr ')' |
key_actions ::= key_update | key_delete | key_update key_delete | key_delete key_update |
key_update ::= ON UPDATE key_action
key_delete ::= ON DELETE_P key_action
key_action ::= NO ACTION | RESTRICT | CASCADE | SET NULL_P | SET DEFAULT
OptInherit ::= INHERITS '(' qualified_name_list ')' |
OptPartitionSpec ::= PartitionSpec |
PartitionSpec ::= PARTITION BY ColId '(' part_params ')'
part_params ::= part_elem | part_params ',' part_elem
part_elem ::= ColId opt_collate opt_class | func_expr_windowless opt_collate opt_class | '(' a_expr ')' opt_collate opt_class
table_access_method_clause ::= USING access_method |
OptWith ::= WITH reloptions | WITHOUT OIDS |
OnCommitOption ::= ON COMMIT DROP | ON COMMIT DELETE_P ROWS | ON COMMIT PRESERVE ROWS |
OptTableSpace ::= TABLESPACE name |
OptConsTableSpace ::= USING INDEX TABLESPACE name |
ExistingIndex ::= USING INDEX index_name
CreateStatsStmt ::= CREATE STATISTICS any_name opt_name_list ON expr_list FROM from_list | CREATE STATISTICS IF_P NOT EXISTS any_name opt_name_list ON expr_list FROM from_list
AlterStatsStmt ::= ALTER STATISTICS any_name SET STATISTICS SignedIconst | ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst
CreateAsStmt ::= CREATE OptTemp TABLE create_as_target AS SelectStmt opt_with_data | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS SelectStmt opt_with_data
create_as_target ::= qualified_name opt_column_list table_access_method_clause OptWith OnCommitOption OptTableSpace
opt_with_data ::= WITH DATA_P | WITH NO DATA_P |
CreateMatViewStmt ::= CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data | CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data
create_mv_target ::= qualified_name opt_column_list table_access_method_clause opt_reloptions OptTableSpace
OptNoLog ::= UNLOGGED |
RefreshMatViewStmt ::= REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data
CreateSeqStmt ::= CREATE OptTemp SEQUENCE qualified_name OptSeqOptList | CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList
AlterSeqStmt ::= ALTER SEQUENCE qualified_name SeqOptList | ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList
OptSeqOptList ::= SeqOptList |
OptParenthesizedSeqOptList ::= '(' SeqOptList ')' |
SeqOptList ::= SeqOptElem | SeqOptList SeqOptElem
SeqOptElem ::= AS SimpleTypename | CACHE NumericOnly | CYCLE | NO CYCLE | INCREMENT opt_by NumericOnly | MAXVALUE NumericOnly | MINVALUE NumericOnly | NO MAXVALUE | NO MINVALUE | OWNED BY any_name | SEQUENCE NAME_P any_name | START opt_with NumericOnly | RESTART | RESTART opt_with NumericOnly
opt_by ::= BY |
NumericOnly ::= FCONST | '+' FCONST | '-' FCONST | SignedIconst
NumericOnly_list ::= NumericOnly | NumericOnly_list ',' NumericOnly
CreatePLangStmt ::= CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE NonReservedWord_or_Sconst | CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE NonReservedWord_or_Sconst HANDLER handler_name opt_inline_handler opt_validator
opt_trusted ::= TRUSTED |
handler_name ::= name | name attrs
opt_inline_handler ::= INLINE_P handler_name |
validator_clause ::= VALIDATOR handler_name | NO VALIDATOR
opt_validator ::= validator_clause |
DropPLangStmt ::= DROP opt_procedural LANGUAGE NonReservedWord_or_Sconst opt_drop_behavior | DROP opt_procedural LANGUAGE IF_P EXISTS NonReservedWord_or_Sconst opt_drop_behavior
opt_procedural ::= PROCEDURAL |
CreateTableSpaceStmt ::= CREATE TABLESPACE name OptTableSpaceOwner LOCATION Sconst opt_reloptions
OptTableSpaceOwner ::= OWNER RoleSpec |
DropTableSpaceStmt ::= DROP TABLESPACE name | DROP TABLESPACE IF_P EXISTS name
CreateExtensionStmt ::= CREATE EXTENSION name opt_with create_extension_opt_list | CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list
create_extension_opt_list ::= create_extension_opt_list create_extension_opt_item |
create_extension_opt_item ::= SCHEMA name | VERSION_P NonReservedWord_or_Sconst | FROM NonReservedWord_or_Sconst | CASCADE
AlterExtensionStmt ::= ALTER EXTENSION name UPDATE alter_extension_opt_list
alter_extension_opt_list ::= alter_extension_opt_list alter_extension_opt_item |
alter_extension_opt_item ::= TO NonReservedWord_or_Sconst
AlterExtensionContentsStmt ::= ALTER EXTENSION name add_drop ACCESS METHOD name | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' | ALTER EXTENSION name add_drop COLLATION any_name | ALTER EXTENSION name add_drop CONVERSION_P any_name | ALTER EXTENSION name add_drop DOMAIN_P Typename | ALTER EXTENSION name add_drop FUNCTION function_with_argtypes | ALTER EXTENSION name add_drop opt_procedural LANGUAGE name | ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes | ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING access_method | ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING access_method | ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes | ALTER EXTENSION name add_drop ROUTINE function_with_argtypes | ALTER EXTENSION name add_drop SCHEMA name | ALTER EXTENSION name add_drop EVENT TRIGGER name | ALTER EXTENSION name add_drop TABLE any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name | ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name | ALTER EXTENSION name add_drop SEQUENCE any_name | ALTER EXTENSION name add_drop VIEW any_name | ALTER EXTENSION name add_drop MATERIALIZED VIEW any_name | ALTER EXTENSION name add_drop FOREIGN TABLE any_name | ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name | ALTER EXTENSION name add_drop SERVER name | ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name | ALTER EXTENSION name add_drop TYPE_P Typename
CreateFdwStmt ::= CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options
fdw_option ::= HANDLER handler_name | NO HANDLER | VALIDATOR handler_name | NO VALIDATOR
fdw_options ::= fdw_option | fdw_options fdw_option
opt_fdw_options ::= fdw_options |
AlterFdwStmt ::= ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options | ALTER FOREIGN DATA_P WRAPPER name fdw_options
create_generic_options ::= OPTIONS '(' generic_option_list ')' |
generic_option_list ::= generic_option_elem | generic_option_list ',' generic_option_elem
alter_generic_options ::= OPTIONS '(' alter_generic_option_list ')'
alter_generic_option_list ::= alter_generic_option_elem | alter_generic_option_list ',' alter_generic_option_elem
alter_generic_option_elem ::= generic_option_elem | SET generic_option_elem | ADD_P generic_option_elem | DROP generic_option_name
generic_option_elem ::= generic_option_name generic_option_arg
generic_option_name ::= ColLabel
generic_option_arg ::= Sconst
CreateForeignServerStmt ::= CREATE SERVER name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options | CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options
opt_type ::= TYPE_P Sconst |
foreign_server_version ::= VERSION_P Sconst | VERSION_P NULL_P
opt_foreign_server_version ::= foreign_server_version |
AlterForeignServerStmt ::= ALTER SERVER name foreign_server_version alter_generic_options | ALTER SERVER name foreign_server_version | ALTER SERVER name alter_generic_options
CreateForeignTableStmt ::= CREATE FOREIGN TABLE qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options | CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options | CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options | CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options
AlterForeignTableStmt ::= ALTER FOREIGN TABLE relation_expr alter_table_cmds | ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds
ImportForeignSchemaStmt ::= IMPORT_P FOREIGN SCHEMA name import_qualification FROM SERVER name INTO name create_generic_options
import_qualification_type ::= LIMIT TO | EXCEPT
import_qualification ::= import_qualification_type '(' relation_expr_list ')' |
CreateUserMappingStmt ::= CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options | CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options
auth_ident ::= RoleSpec | USER
DropUserMappingStmt ::= DROP USER MAPPING FOR auth_ident SERVER name | DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name
AlterUserMappingStmt ::= ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options
CreatePolicyStmt ::= CREATE POLICY name ON qualified_name RowSecurityDefaultPermissive RowSecurityDefaultForCmd RowSecurityDefaultToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck
AlterPolicyStmt ::= ALTER POLICY name ON qualified_name RowSecurityOptionalToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck
RowSecurityOptionalExpr ::= USING '(' a_expr ')' |
RowSecurityOptionalWithCheck ::= WITH CHECK '(' a_expr ')' |
RowSecurityDefaultToRole ::= TO role_list |
RowSecurityOptionalToRole ::= TO role_list |
RowSecurityDefaultPermissive ::= AS IDENT |
RowSecurityDefaultForCmd ::= FOR row_security_cmd |
row_security_cmd ::= ALL | SELECT | INSERT | UPDATE | DELETE_P
CreateAmStmt ::= CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name
am_type ::= INDEX | TABLE
CreateTrigStmt ::= CREATE TRIGGER name TriggerActionTime TriggerEvents ON qualified_name TriggerReferencing TriggerForSpec TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' | CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')'
TriggerActionTime ::= BEFORE | AFTER | INSTEAD OF
TriggerEvents ::= TriggerOneEvent | TriggerEvents OR TriggerOneEvent
TriggerOneEvent ::= INSERT | DELETE_P | UPDATE | UPDATE OF columnList | TRUNCATE
TriggerReferencing ::= REFERENCING TriggerTransitions |
TriggerTransitions ::= TriggerTransition | TriggerTransitions TriggerTransition
TriggerTransition ::= TransitionOldOrNew TransitionRowOrTable opt_as TransitionRelName
TransitionOldOrNew ::= NEW | OLD
TransitionRowOrTable ::= TABLE | ROW
TransitionRelName ::= ColId
TriggerForSpec ::= FOR TriggerForOptEach TriggerForType |
TriggerForOptEach ::= EACH |
TriggerForType ::= ROW | STATEMENT
TriggerWhen ::= WHEN '(' a_expr ')' |
FUNCTION_or_PROCEDURE ::= FUNCTION | PROCEDURE
TriggerFuncArgs ::= TriggerFuncArg | TriggerFuncArgs ',' TriggerFuncArg |
TriggerFuncArg ::= Iconst | FCONST | Sconst | ColLabel
OptConstrFromTable ::= FROM qualified_name |
ConstraintAttributeSpec ::= | ConstraintAttributeSpec ConstraintAttributeElem
ConstraintAttributeElem ::= NOT DEFERRABLE | DEFERRABLE | INITIALLY IMMEDIATE | INITIALLY DEFERRED | NOT VALID | NO INHERIT
CreateEventTrigStmt ::= CREATE EVENT TRIGGER name ON ColLabel EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' | CREATE EVENT TRIGGER name ON ColLabel WHEN event_trigger_when_list EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')'
event_trigger_when_list ::= event_trigger_when_item | event_trigger_when_list AND event_trigger_when_item
event_trigger_when_item ::= ColId IN_P '(' event_trigger_value_list ')'
event_trigger_value_list ::= SCONST | event_trigger_value_list ',' SCONST
AlterEventTrigStmt ::= ALTER EVENT TRIGGER name enable_trigger
enable_trigger ::= ENABLE_P | ENABLE_P REPLICA | ENABLE_P ALWAYS | DISABLE_P
CreateAssertionStmt ::= CREATE ASSERTION any_name CHECK '(' a_expr ')' ConstraintAttributeSpec
DefineStmt ::= CREATE opt_or_replace AGGREGATE func_name aggr_args definition | CREATE opt_or_replace AGGREGATE func_name old_aggr_definition | CREATE OPERATOR any_operator definition | CREATE TYPE_P any_name definition | CREATE TYPE_P any_name | CREATE TYPE_P any_name AS '(' OptTableFuncElementList ')' | CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')' | CREATE TYPE_P any_name AS RANGE definition | CREATE TEXT_P SEARCH PARSER any_name definition | CREATE TEXT_P SEARCH DICTIONARY any_name definition | CREATE TEXT_P SEARCH TEMPLATE any_name definition | CREATE TEXT_P SEARCH CONFIGURATION any_name definition | CREATE COLLATION any_name definition | CREATE COLLATION IF_P NOT EXISTS any_name definition | CREATE COLLATION any_name FROM any_name | CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name
definition ::= '(' def_list ')'
def_list ::= def_elem | def_list ',' def_elem
def_elem ::= ColLabel '=' def_arg | ColLabel
def_arg ::= func_type | reserved_keyword | qual_all_Op | NumericOnly | Sconst | NONE
old_aggr_definition ::= '(' old_aggr_list ')'
old_aggr_list ::= old_aggr_elem | old_aggr_list ',' old_aggr_elem
old_aggr_elem ::= IDENT '=' def_arg
opt_enum_val_list ::= enum_val_list |
enum_val_list ::= Sconst | enum_val_list ',' Sconst
AlterEnumStmt ::= ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst BEFORE Sconst | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst AFTER Sconst | ALTER TYPE_P any_name RENAME VALUE_P Sconst TO Sconst
opt_if_not_exists ::= IF_P NOT EXISTS |
CreateOpClassStmt ::= CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename USING access_method opt_opfamily AS opclass_item_list
opclass_item_list ::= opclass_item | opclass_item_list ',' opclass_item
opclass_item ::= OPERATOR Iconst any_operator opclass_purpose opt_recheck | OPERATOR Iconst operator_with_argtypes opclass_purpose opt_recheck | FUNCTION Iconst function_with_argtypes | FUNCTION Iconst '(' type_list ')' function_with_argtypes | STORAGE Typename
opt_default ::= DEFAULT |
opt_opfamily ::= FAMILY any_name |
opclass_purpose ::= FOR SEARCH | FOR ORDER BY any_name |
opt_recheck ::= RECHECK |
CreateOpFamilyStmt ::= CREATE OPERATOR FAMILY any_name USING access_method
AlterOpFamilyStmt ::= ALTER OPERATOR FAMILY any_name USING access_method ADD_P opclass_item_list | ALTER OPERATOR FAMILY any_name USING access_method DROP opclass_drop_list
opclass_drop_list ::= opclass_drop | opclass_drop_list ',' opclass_drop
opclass_drop ::= OPERATOR Iconst '(' type_list ')' | FUNCTION Iconst '(' type_list ')'
DropOpClassStmt ::= DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior | DROP OPERATOR CLASS IF_P EXISTS any_name USING access_method opt_drop_behavior
DropOpFamilyStmt ::= DROP OPERATOR FAMILY any_name USING access_method opt_drop_behavior | DROP OPERATOR FAMILY IF_P EXISTS any_name USING access_method opt_drop_behavior
DropOwnedStmt ::= DROP OWNED BY role_list opt_drop_behavior
ReassignOwnedStmt ::= REASSIGN OWNED BY role_list TO RoleSpec
DropStmt ::= DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior | DROP drop_type_any_name any_name_list opt_drop_behavior | DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior | DROP drop_type_name name_list opt_drop_behavior | DROP drop_type_name_on_any_name name ON any_name opt_drop_behavior | DROP drop_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior | DROP TYPE_P type_name_list opt_drop_behavior | DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior | DROP DOMAIN_P type_name_list opt_drop_behavior | DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior | DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior | DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior
drop_type_any_name ::= TABLE | SEQUENCE | VIEW | MATERIALIZED VIEW | INDEX | FOREIGN TABLE | COLLATION | CONVERSION_P | STATISTICS | TEXT_P SEARCH PARSER | TEXT_P SEARCH DICTIONARY | TEXT_P SEARCH TEMPLATE | TEXT_P SEARCH CONFIGURATION
drop_type_name ::= ACCESS METHOD | EVENT TRIGGER | EXTENSION | FOREIGN DATA_P WRAPPER | PUBLICATION | SCHEMA | SERVER
drop_type_name_on_any_name ::= POLICY | RULE | TRIGGER
any_name_list ::= any_name | any_name_list ',' any_name
any_name ::= ColId | ColId attrs
attrs ::= '.' attr_name | attrs '.' attr_name
type_name_list ::= Typename | type_name_list ',' Typename
TruncateStmt ::= TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior
opt_restart_seqs ::= CONTINUE_P IDENTITY_P | RESTART IDENTITY_P |
CommentStmt ::= COMMENT ON comment_type_any_name any_name IS comment_text | COMMENT ON comment_type_name name IS comment_text | COMMENT ON TYPE_P Typename IS comment_text | COMMENT ON DOMAIN_P Typename IS comment_text | COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text | COMMENT ON FUNCTION function_with_argtypes IS comment_text | COMMENT ON OPERATOR operator_with_argtypes IS comment_text | COMMENT ON CONSTRAINT name ON any_name IS comment_text | COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text | COMMENT ON POLICY name ON any_name IS comment_text | COMMENT ON PROCEDURE function_with_argtypes IS comment_text | COMMENT ON ROUTINE function_with_argtypes IS comment_text | COMMENT ON RULE name ON any_name IS comment_text | COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text | COMMENT ON TRIGGER name ON any_name IS comment_text | COMMENT ON OPERATOR CLASS any_name USING access_method IS comment_text | COMMENT ON OPERATOR FAMILY any_name USING access_method IS comment_text | COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text | COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text
comment_type_any_name ::= COLUMN | INDEX | SEQUENCE | STATISTICS | TABLE | VIEW | MATERIALIZED VIEW | COLLATION | CONVERSION_P | FOREIGN TABLE | TEXT_P SEARCH CONFIGURATION | TEXT_P SEARCH DICTIONARY | TEXT_P SEARCH PARSER | TEXT_P SEARCH TEMPLATE
comment_type_name ::= ACCESS METHOD | DATABASE | EVENT TRIGGER | EXTENSION | FOREIGN DATA_P WRAPPER | opt_procedural LANGUAGE | PUBLICATION | ROLE | SCHEMA | SERVER | SUBSCRIPTION | TABLESPACE
comment_text ::= Sconst | NULL_P
SecLabelStmt ::= SECURITY LABEL opt_provider ON security_label_type_any_name any_name IS security_label | SECURITY LABEL opt_provider ON security_label_type_name name IS security_label | SECURITY LABEL opt_provider ON TYPE_P Typename IS security_label | SECURITY LABEL opt_provider ON DOMAIN_P Typename IS security_label | SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS security_label | SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes IS security_label | SECURITY LABEL opt_provider ON LARGE_P OBJECT_P NumericOnly IS security_label | SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label | SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS security_label
opt_provider ::= FOR NonReservedWord_or_Sconst |
security_label_type_any_name ::= COLUMN | FOREIGN TABLE | SEQUENCE | TABLE | VIEW | MATERIALIZED VIEW
security_label_type_name ::= DATABASE | EVENT TRIGGER | opt_procedural LANGUAGE | PUBLICATION | ROLE | SCHEMA | SUBSCRIPTION | TABLESPACE
security_label ::= Sconst | NULL_P
FetchStmt ::= FETCH fetch_args | MOVE fetch_args
fetch_args ::= cursor_name | from_in cursor_name | NEXT opt_from_in cursor_name | PRIOR opt_from_in cursor_name | FIRST_P opt_from_in cursor_name | LAST_P opt_from_in cursor_name | ABSOLUTE_P SignedIconst opt_from_in cursor_name | RELATIVE_P SignedIconst opt_from_in cursor_name | SignedIconst opt_from_in cursor_name | ALL opt_from_in cursor_name | FORWARD opt_from_in cursor_name | FORWARD SignedIconst opt_from_in cursor_name | FORWARD ALL opt_from_in cursor_name | BACKWARD opt_from_in cursor_name | BACKWARD SignedIconst opt_from_in cursor_name | BACKWARD ALL opt_from_in cursor_name
from_in ::= FROM | IN_P
opt_from_in ::= from_in |
GrantStmt ::= GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
RevokeStmt ::= REVOKE privileges ON privilege_target FROM grantee_list opt_drop_behavior | REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_drop_behavior
privileges ::= privilege_list | ALL | ALL PRIVILEGES | ALL '(' columnList ')' | ALL PRIVILEGES '(' columnList ')'
privilege_list ::= privilege | privilege_list ',' privilege
privilege ::= SELECT opt_column_list | REFERENCES opt_column_list | CREATE opt_column_list | ColId opt_column_list
privilege_target ::= qualified_name_list | TABLE qualified_name_list | SEQUENCE qualified_name_list | FOREIGN DATA_P WRAPPER name_list | FOREIGN SERVER name_list | FUNCTION function_with_argtypes_list | PROCEDURE function_with_argtypes_list | ROUTINE function_with_argtypes_list | DATABASE name_list | DOMAIN_P any_name_list | LANGUAGE name_list | LARGE_P OBJECT_P NumericOnly_list | SCHEMA name_list | TABLESPACE name_list | TYPE_P any_name_list | ALL TABLES IN_P SCHEMA name_list | ALL SEQUENCES IN_P SCHEMA name_list | ALL FUNCTIONS IN_P SCHEMA name_list | ALL PROCEDURES IN_P SCHEMA name_list | ALL ROUTINES IN_P SCHEMA name_list
grantee_list ::= grantee | grantee_list ',' grantee
grantee ::= RoleSpec | GROUP_P RoleSpec
opt_grant_grant_option ::= WITH GRANT OPTION |
GrantRoleStmt ::= GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by
RevokeRoleStmt ::= REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior | REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior
opt_grant_admin_option ::= WITH ADMIN OPTION |
opt_granted_by ::= GRANTED BY RoleSpec |
AlterDefaultPrivilegesStmt ::= ALTER DEFAULT PRIVILEGES DefACLOptionList DefACLAction
DefACLOptionList ::= DefACLOptionList DefACLOption |
DefACLOption ::= IN_P SCHEMA name_list | FOR ROLE role_list | FOR USER role_list
DefACLAction ::= GRANT privileges ON defacl_privilege_target TO grantee_list opt_grant_grant_option | REVOKE privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior | REVOKE GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior
defacl_privilege_target ::= TABLES | FUNCTIONS | ROUTINES | SEQUENCES | TYPES_P | SCHEMAS
IndexStmt ::= CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause | CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause
opt_unique ::= UNIQUE |
opt_concurrently ::= CONCURRENTLY |
opt_index_name ::= index_name |
access_method_clause ::= USING access_method |
index_params ::= index_elem | index_params ',' index_elem
index_elem_options ::= opt_collate opt_class opt_asc_desc opt_nulls_order | opt_collate any_name reloptions opt_asc_desc opt_nulls_order
index_elem ::= ColId index_elem_options | func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options
opt_include ::= INCLUDE '(' index_including_params ')' |
index_including_params ::= index_elem | index_including_params ',' index_elem
opt_collate ::= COLLATE any_name |
opt_class ::= any_name |
opt_asc_desc ::= ASC | DESC |
opt_nulls_order ::= NULLS_LA FIRST_P | NULLS_LA LAST_P |
CreateFunctionStmt ::= CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS func_return createfunc_opt_list | CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE '(' table_func_column_list ')' createfunc_opt_list | CREATE opt_or_replace FUNCTION func_name func_args_with_defaults createfunc_opt_list | CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults createfunc_opt_list
opt_or_replace ::= OR REPLACE |
func_args ::= '(' func_args_list ')' | '(' ')'
func_args_list ::= func_arg | func_args_list ',' func_arg
function_with_argtypes_list ::= function_with_argtypes | function_with_argtypes_list ',' function_with_argtypes
function_with_argtypes ::= func_name func_args | type_func_name_keyword | ColId | ColId indirection
func_args_with_defaults ::= '(' func_args_with_defaults_list ')' | '(' ')'
func_args_with_defaults_list ::= func_arg_with_default | func_args_with_defaults_list ',' func_arg_with_default
func_arg ::= arg_class param_name func_type | param_name arg_class func_type | param_name func_type | arg_class func_type | func_type
arg_class ::= IN_P | OUT_P | INOUT | IN_P OUT_P | VARIADIC
param_name ::= type_function_name
func_return ::= func_type
func_type ::= Typename | type_function_name attrs '%' TYPE_P | SETOF type_function_name attrs '%' TYPE_P
func_arg_with_default ::= func_arg | func_arg DEFAULT a_expr | func_arg '=' a_expr
aggr_arg ::= func_arg
aggr_args ::= '(' '*' ')' | '(' aggr_args_list ')' | '(' ORDER BY aggr_args_list ')' | '(' aggr_args_list ORDER BY aggr_args_list ')'
aggr_args_list ::= aggr_arg | aggr_args_list ',' aggr_arg
aggregate_with_argtypes ::= func_name aggr_args
aggregate_with_argtypes_list ::= aggregate_with_argtypes | aggregate_with_argtypes_list ',' aggregate_with_argtypes
createfunc_opt_list ::= createfunc_opt_item | createfunc_opt_list createfunc_opt_item
common_func_opt_item ::= CALLED ON NULL_P INPUT_P | RETURNS NULL_P ON NULL_P INPUT_P | STRICT_P | IMMUTABLE | STABLE | VOLATILE | EXTERNAL SECURITY DEFINER | EXTERNAL SECURITY INVOKER | SECURITY DEFINER | SECURITY INVOKER | LEAKPROOF | NOT LEAKPROOF | COST NumericOnly | ROWS NumericOnly | SUPPORT any_name | FunctionSetResetClause | PARALLEL ColId
createfunc_opt_item ::= AS func_as | LANGUAGE NonReservedWord_or_Sconst | TRANSFORM transform_type_list | WINDOW | common_func_opt_item
func_as ::= Sconst | Sconst ',' Sconst
transform_type_list ::= FOR TYPE_P Typename | transform_type_list ',' FOR TYPE_P Typename
opt_definition ::= WITH definition |
table_func_column ::= param_name func_type
table_func_column_list ::= table_func_column | table_func_column_list ',' table_func_column
AlterFunctionStmt ::= ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict | ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict | ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict
alterfunc_opt_list ::= common_func_opt_item | alterfunc_opt_list common_func_opt_item
opt_restrict ::= RESTRICT | /*empty*/
RemoveFuncStmt ::= DROP FUNCTION function_with_argtypes_list opt_drop_behavior | DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior | DROP PROCEDURE function_with_argtypes_list opt_drop_behavior | DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior | DROP ROUTINE function_with_argtypes_list opt_drop_behavior | DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior
RemoveAggrStmt ::= DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior | DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior
RemoveOperStmt ::= DROP OPERATOR operator_with_argtypes_list opt_drop_behavior | DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior
oper_argtypes ::= '(' Typename ')' | '(' Typename ',' Typename ')' | '(' NONE ',' Typename ')' | '(' Typename ',' NONE ')'
any_operator ::= all_Op | ColId '.' any_operator
operator_with_argtypes_list ::= operator_with_argtypes | operator_with_argtypes_list ',' operator_with_argtypes
operator_with_argtypes ::= any_operator oper_argtypes
DoStmt ::= DO dostmt_opt_list
dostmt_opt_list ::= dostmt_opt_item | dostmt_opt_list dostmt_opt_item
dostmt_opt_item ::= Sconst | LANGUAGE NonReservedWord_or_Sconst
CreateCastStmt ::= CREATE CAST '(' Typename AS Typename ')' WITH FUNCTION function_with_argtypes cast_context | CREATE CAST '(' Typename AS Typename ')' WITHOUT FUNCTION cast_context | CREATE CAST '(' Typename AS Typename ')' WITH INOUT cast_context
cast_context ::= AS IMPLICIT_P | AS ASSIGNMENT |
DropCastStmt ::= DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior
opt_if_exists ::= IF_P EXISTS |
CreateTransformStmt ::= CREATE opt_or_replace TRANSFORM FOR Typename LANGUAGE name '(' transform_element_list ')'
transform_element_list ::= FROM SQL_P WITH FUNCTION function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes | TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH FUNCTION function_with_argtypes | FROM SQL_P WITH FUNCTION function_with_argtypes | TO SQL_P WITH FUNCTION function_with_argtypes
DropTransformStmt ::= DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_drop_behavior
ReindexStmt ::= REINDEX reindex_target_type opt_concurrently qualified_name | REINDEX reindex_target_multitable opt_concurrently name | REINDEX '(' reindex_option_list ')' reindex_target_type opt_concurrently qualified_name | REINDEX '(' reindex_option_list ')' reindex_target_multitable opt_concurrently name
reindex_target_type ::= INDEX | TABLE
reindex_target_multitable ::= SCHEMA | SYSTEM_P | DATABASE
reindex_option_list ::= reindex_option_elem | reindex_option_list ',' reindex_option_elem
reindex_option_elem ::= VERBOSE
AlterTblSpcStmt ::= ALTER TABLESPACE name SET reloptions | ALTER TABLESPACE name RESET reloptions
RenameStmt ::= ALTER AGGREGATE aggregate_with_argtypes RENAME TO name | ALTER COLLATION any_name RENAME TO name | ALTER CONVERSION_P any_name RENAME TO name | ALTER DATABASE database_name RENAME TO database_name | ALTER DOMAIN_P any_name RENAME TO name | ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name | ALTER FOREIGN DATA_P WRAPPER name RENAME TO name | ALTER FUNCTION function_with_argtypes RENAME TO name | ALTER GROUP_P RoleId RENAME TO RoleId | ALTER opt_procedural LANGUAGE name RENAME TO name | ALTER OPERATOR CLASS any_name USING access_method RENAME TO name | ALTER OPERATOR FAMILY any_name USING access_method RENAME TO name | ALTER POLICY name ON qualified_name RENAME TO name | ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name | ALTER PROCEDURE function_with_argtypes RENAME TO name | ALTER PUBLICATION name RENAME TO name | ALTER ROUTINE function_with_argtypes RENAME TO name | ALTER SCHEMA name RENAME TO name | ALTER SERVER name RENAME TO name | ALTER SUBSCRIPTION name RENAME TO name | ALTER TABLE relation_expr RENAME TO name | ALTER TABLE IF_P EXISTS relation_expr RENAME TO name | ALTER SEQUENCE qualified_name RENAME TO name | ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name | ALTER VIEW qualified_name RENAME TO name | ALTER VIEW IF_P EXISTS qualified_name RENAME TO name | ALTER MATERIALIZED VIEW qualified_name RENAME TO name | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME TO name | ALTER INDEX qualified_name RENAME TO name | ALTER INDEX IF_P EXISTS qualified_name RENAME TO name | ALTER FOREIGN TABLE relation_expr RENAME TO name | ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name | ALTER TABLE relation_expr RENAME opt_column name TO name | ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name | ALTER VIEW qualified_name RENAME opt_column name TO name | ALTER VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name | ALTER MATERIALIZED VIEW qualified_name RENAME opt_column name TO name | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name | ALTER TABLE relation_expr RENAME CONSTRAINT name TO name | ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name | ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name | ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name | ALTER RULE name ON qualified_name RENAME TO name | ALTER TRIGGER name ON qualified_name RENAME TO name | ALTER EVENT TRIGGER name RENAME TO name | ALTER ROLE RoleId RENAME TO RoleId | ALTER USER RoleId RENAME TO RoleId | ALTER TABLESPACE name RENAME TO name | ALTER STATISTICS any_name RENAME TO name | ALTER TEXT_P SEARCH PARSER any_name RENAME TO name | ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name | ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name | ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name | ALTER TYPE_P any_name RENAME TO name | ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior
opt_column ::= COLUMN |
opt_set_data ::= SET DATA_P |
AlterObjectDependsStmt ::= ALTER FUNCTION function_with_argtypes opt_no DEPENDS ON EXTENSION name | ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name | ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name | ALTER TRIGGER name ON qualified_name opt_no DEPENDS ON EXTENSION name | ALTER MATERIALIZED VIEW qualified_name opt_no DEPENDS ON EXTENSION name | ALTER INDEX qualified_name opt_no DEPENDS ON EXTENSION name
opt_no ::= NO |
AlterObjectSchemaStmt ::= ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name | ALTER COLLATION any_name SET SCHEMA name | ALTER CONVERSION_P any_name SET SCHEMA name | ALTER DOMAIN_P any_name SET SCHEMA name | ALTER EXTENSION name SET SCHEMA name | ALTER FUNCTION function_with_argtypes SET SCHEMA name | ALTER OPERATOR operator_with_argtypes SET SCHEMA name | ALTER OPERATOR CLASS any_name USING access_method SET SCHEMA name | ALTER OPERATOR FAMILY any_name USING access_method SET SCHEMA name | ALTER PROCEDURE function_with_argtypes SET SCHEMA name | ALTER ROUTINE function_with_argtypes SET SCHEMA name | ALTER TABLE relation_expr SET SCHEMA name | ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name | ALTER STATISTICS any_name SET SCHEMA name | ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name | ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name | ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name | ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name | ALTER SEQUENCE qualified_name SET SCHEMA name | ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name | ALTER VIEW qualified_name SET SCHEMA name | ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name | ALTER MATERIALIZED VIEW qualified_name SET SCHEMA name | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name SET SCHEMA name | ALTER FOREIGN TABLE relation_expr SET SCHEMA name | ALTER FOREIGN TABLE IF_P EXISTS relation_expr SET SCHEMA name | ALTER TYPE_P any_name SET SCHEMA name
AlterOperatorStmt ::= ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')'
operator_def_list ::= operator_def_elem | operator_def_list ',' operator_def_elem
operator_def_elem ::= ColLabel '=' NONE | ColLabel '=' operator_def_arg
operator_def_arg ::= func_type | reserved_keyword | qual_all_Op | NumericOnly | Sconst
AlterTypeStmt ::= ALTER TYPE_P any_name SET '(' operator_def_list ')'
AlterOwnerStmt ::= ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec | ALTER COLLATION any_name OWNER TO RoleSpec | ALTER CONVERSION_P any_name OWNER TO RoleSpec | ALTER DATABASE database_name OWNER TO RoleSpec | ALTER DOMAIN_P any_name OWNER TO RoleSpec | ALTER FUNCTION function_with_argtypes OWNER TO RoleSpec | ALTER opt_procedural LANGUAGE name OWNER TO RoleSpec | ALTER LARGE_P OBJECT_P NumericOnly OWNER TO RoleSpec | ALTER OPERATOR operator_with_argtypes OWNER TO RoleSpec | ALTER OPERATOR CLASS any_name USING access_method OWNER TO RoleSpec | ALTER OPERATOR FAMILY any_name USING access_method OWNER TO RoleSpec | ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec | ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec | ALTER SCHEMA name OWNER TO RoleSpec | ALTER TYPE_P any_name OWNER TO RoleSpec | ALTER TABLESPACE name OWNER TO RoleSpec | ALTER STATISTICS any_name OWNER TO RoleSpec | ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleSpec | ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleSpec | ALTER FOREIGN DATA_P WRAPPER name OWNER TO RoleSpec | ALTER SERVER name OWNER TO RoleSpec | ALTER EVENT TRIGGER name OWNER TO RoleSpec | ALTER PUBLICATION name OWNER TO RoleSpec | ALTER SUBSCRIPTION name OWNER TO RoleSpec
CreatePublicationStmt ::= CREATE PUBLICATION name opt_publication_for_tables opt_definition
opt_publication_for_tables ::= publication_for_tables |
publication_for_tables ::= FOR TABLE relation_expr_list | FOR ALL TABLES
AlterPublicationStmt ::= ALTER PUBLICATION name SET definition | ALTER PUBLICATION name ADD_P TABLE relation_expr_list | ALTER PUBLICATION name SET TABLE relation_expr_list | ALTER PUBLICATION name DROP TABLE relation_expr_list
CreateSubscriptionStmt ::= CREATE SUBSCRIPTION name CONNECTION Sconst PUBLICATION publication_name_list opt_definition
publication_name_list ::= publication_name_item | publication_name_list ',' publication_name_item
publication_name_item ::= ColLabel
AlterSubscriptionStmt ::= ALTER SUBSCRIPTION name SET definition | ALTER SUBSCRIPTION name CONNECTION Sconst | ALTER SUBSCRIPTION name REFRESH PUBLICATION opt_definition | ALTER SUBSCRIPTION name SET PUBLICATION publication_name_list opt_definition | ALTER SUBSCRIPTION name ENABLE_P | ALTER SUBSCRIPTION name DISABLE_P
DropSubscriptionStmt ::= DROP SUBSCRIPTION name opt_drop_behavior | DROP SUBSCRIPTION IF_P EXISTS name opt_drop_behavior
RuleStmt ::= CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead RuleActionList
RuleActionList ::= NOTHING | RuleActionStmt | '(' RuleActionMulti ')'
RuleActionMulti ::= RuleActionMulti ';' RuleActionStmtOrEmpty | RuleActionStmtOrEmpty
RuleActionStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt | NotifyStmt
RuleActionStmtOrEmpty ::= RuleActionStmt |
event ::= SELECT | UPDATE | DELETE_P | INSERT
opt_instead ::= INSTEAD | ALSO |
NotifyStmt ::= NOTIFY ColId notify_payload
notify_payload ::= ',' Sconst |
ListenStmt ::= LISTEN ColId
UnlistenStmt ::= UNLISTEN ColId | UNLISTEN '*'
TransactionStmt ::= ABORT_P opt_transaction opt_transaction_chain | BEGIN_P opt_transaction transaction_mode_list_or_empty | START TRANSACTION transaction_mode_list_or_empty | COMMIT opt_transaction opt_transaction_chain | END_P opt_transaction opt_transaction_chain | ROLLBACK opt_transaction opt_transaction_chain | SAVEPOINT ColId | RELEASE SAVEPOINT ColId | RELEASE ColId | ROLLBACK opt_transaction TO SAVEPOINT ColId | ROLLBACK opt_transaction TO ColId | PREPARE TRANSACTION Sconst | COMMIT PREPARED Sconst | ROLLBACK PREPARED Sconst
opt_transaction ::= WORK | TRANSACTION |
transaction_mode_item ::= ISOLATION LEVEL iso_level | READ ONLY | READ WRITE | DEFERRABLE | NOT DEFERRABLE
transaction_mode_list ::= transaction_mode_item | transaction_mode_list ',' transaction_mode_item | transaction_mode_list transaction_mode_item
transaction_mode_list_or_empty ::= transaction_mode_list |
opt_transaction_chain ::= AND CHAIN | AND NO CHAIN |
ViewStmt ::= CREATE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option | CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option | CREATE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option | CREATE OR REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option
opt_check_option ::= WITH CHECK OPTION | WITH CASCADED CHECK OPTION | WITH LOCAL CHECK OPTION |
LoadStmt ::= LOAD file_name
CreatedbStmt ::= CREATE DATABASE database_name opt_with createdb_opt_list
createdb_opt_list ::= createdb_opt_items |
createdb_opt_items ::= createdb_opt_item | createdb_opt_items createdb_opt_item
createdb_opt_item ::= createdb_opt_name opt_equal SignedIconst | createdb_opt_name opt_equal opt_boolean_or_string | createdb_opt_name opt_equal DEFAULT
createdb_opt_name ::= IDENT | CONNECTION LIMIT | ENCODING | LOCATION | OWNER | TABLESPACE | TEMPLATE
opt_equal ::= '=' |
AlterDatabaseStmt ::= ALTER DATABASE database_name WITH createdb_opt_list | ALTER DATABASE database_name createdb_opt_list | ALTER DATABASE database_name SET TABLESPACE name
AlterDatabaseSetStmt ::= ALTER DATABASE database_name SetResetClause
DropdbStmt ::= DROP DATABASE database_name | DROP DATABASE IF_P EXISTS database_name | DROP DATABASE database_name opt_with '(' drop_option_list ')' | DROP DATABASE IF_P EXISTS database_name opt_with '(' drop_option_list ')'
drop_option_list ::= drop_option | drop_option_list ',' drop_option
drop_option ::= FORCE
AlterCollationStmt ::= ALTER COLLATION any_name REFRESH VERSION_P
AlterSystemStmt ::= ALTER SYSTEM_P SET generic_set | ALTER SYSTEM_P RESET generic_reset
CreateDomainStmt ::= CREATE DOMAIN_P any_name opt_as Typename ColQualList
AlterDomainStmt ::= ALTER DOMAIN_P any_name alter_column_default | ALTER DOMAIN_P any_name DROP NOT NULL_P | ALTER DOMAIN_P any_name SET NOT NULL_P | ALTER DOMAIN_P any_name ADD_P TableConstraint | ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior | ALTER DOMAIN_P any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior | ALTER DOMAIN_P any_name VALIDATE CONSTRAINT name
opt_as ::= AS |
AlterTSDictionaryStmt ::= ALTER TEXT_P SEARCH DICTIONARY any_name definition
AlterTSConfigurationStmt ::= ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list any_with any_name_list | ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list any_with any_name_list | ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name any_with any_name | ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name | ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list | ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list
any_with ::= WITH | WITH_LA
CreateConversionStmt ::= CREATE opt_default CONVERSION_P any_name FOR Sconst TO Sconst FROM any_name
ClusterStmt ::= CLUSTER opt_verbose qualified_name cluster_index_specification | CLUSTER opt_verbose | CLUSTER opt_verbose index_name ON qualified_name
cluster_index_specification ::= USING index_name |
VacuumStmt ::= VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list | VACUUM '(' vac_analyze_option_list ')' opt_vacuum_relation_list
AnalyzeStmt ::= analyze_keyword opt_verbose opt_vacuum_relation_list | analyze_keyword '(' vac_analyze_option_list ')' opt_vacuum_relation_list
vac_analyze_option_list ::= vac_analyze_option_elem | vac_analyze_option_list ',' vac_analyze_option_elem
analyze_keyword ::= ANALYZE | ANALYSE
vac_analyze_option_elem ::= vac_analyze_option_name vac_analyze_option_arg
vac_analyze_option_name ::= NonReservedWord | analyze_keyword
vac_analyze_option_arg ::= opt_boolean_or_string | NumericOnly |
opt_analyze ::= analyze_keyword |
opt_verbose ::= VERBOSE |
opt_full ::= FULL |
opt_freeze ::= FREEZE |
opt_name_list ::= '(' name_list ')' |
vacuum_relation ::= qualified_name opt_name_list
vacuum_relation_list ::= vacuum_relation | vacuum_relation_list ',' vacuum_relation
opt_vacuum_relation_list ::= vacuum_relation_list |
ExplainStmt ::= EXPLAIN ExplainableStmt | EXPLAIN analyze_keyword opt_verbose ExplainableStmt | EXPLAIN VERBOSE ExplainableStmt | EXPLAIN '(' explain_option_list ')' ExplainableStmt
ExplainableStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt | DeclareCursorStmt | CreateAsStmt | CreateMatViewStmt | RefreshMatViewStmt | ExecuteStmt
explain_option_list ::= explain_option_elem | explain_option_list ',' explain_option_elem
explain_option_elem ::= explain_option_name explain_option_arg
explain_option_name ::= NonReservedWord | analyze_keyword
explain_option_arg ::= opt_boolean_or_string | NumericOnly |
PrepareStmt ::= PREPARE name prep_type_clause AS PreparableStmt
prep_type_clause ::= '(' type_list ')' |
PreparableStmt ::= SelectStmt | InsertStmt | UpdateStmt | DeleteStmt
ExecuteStmt ::= EXECUTE name execute_param_clause | CREATE OptTemp TABLE create_as_target AS EXECUTE name execute_param_clause opt_with_data | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE name execute_param_clause opt_with_data
execute_param_clause ::= '(' expr_list ')' |
DeallocateStmt ::= DEALLOCATE name | DEALLOCATE PREPARE name | DEALLOCATE ALL | DEALLOCATE PREPARE ALL
InsertStmt ::= opt_with_clause INSERT INTO insert_target insert_rest opt_on_conflict returning_clause
insert_target ::= qualified_name | qualified_name AS ColId
insert_rest ::= SelectStmt | OVERRIDING override_kind VALUE_P SelectStmt | '(' insert_column_list ')' SelectStmt | '(' insert_column_list ')' OVERRIDING override_kind VALUE_P SelectStmt | DEFAULT VALUES
override_kind ::= USER | SYSTEM_P
insert_column_list ::= insert_column_item | insert_column_list ',' insert_column_item
insert_column_item ::= ColId opt_indirection
opt_on_conflict ::= ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list where_clause | ON CONFLICT opt_conf_expr DO NOTHING |
opt_conf_expr ::= '(' index_params ')' where_clause | ON CONSTRAINT name |
returning_clause ::= RETURNING target_list |
DeleteStmt ::= opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause
using_clause ::= USING from_list |
LockStmt ::= LOCK_P opt_table relation_expr_list opt_lock opt_nowait
opt_lock ::= IN_P lock_type MODE |
lock_type ::= ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
opt_nowait ::= NOWAIT |
opt_nowait_or_skip ::= NOWAIT | SKIP LOCKED |
UpdateStmt ::= opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause
set_clause_list ::= set_clause | set_clause_list ',' set_clause
set_clause ::= set_target '=' a_expr | '(' set_target_list ')' '=' a_expr
set_target ::= ColId opt_indirection
set_target_list ::= set_target | set_target_list ',' set_target
DeclareCursorStmt ::= DECLARE cursor_name cursor_options CURSOR opt_hold FOR SelectStmt
cursor_name ::= name
cursor_options ::= | cursor_options NO SCROLL | cursor_options SCROLL | cursor_options BINARY | cursor_options INSENSITIVE
opt_hold ::= | WITH HOLD | WITHOUT HOLD
SelectStmt ::= select_no_parens | select_with_parens
select_with_parens ::= '(' select_no_parens ')' | '(' select_with_parens ')'
select_no_parens ::= simple_select | select_clause sort_clause | select_clause opt_sort_clause for_locking_clause opt_select_limit | select_clause opt_sort_clause select_limit opt_for_locking_clause | with_clause select_clause | with_clause select_clause sort_clause | with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit | with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause
select_clause ::= simple_select | select_with_parens
simple_select ::= SELECT opt_all_clause opt_target_list into_clause from_clause where_clause group_clause having_clause window_clause | SELECT distinct_clause target_list into_clause from_clause where_clause group_clause having_clause window_clause | values_clause | TABLE relation_expr | select_clause UNION all_or_distinct select_clause | select_clause INTERSECT all_or_distinct select_clause | select_clause EXCEPT all_or_distinct select_clause
with_clause ::= WITH cte_list | WITH_LA cte_list | WITH RECURSIVE cte_list
cte_list ::= common_table_expr | cte_list ',' common_table_expr
common_table_expr ::= name opt_name_list AS opt_materialized '(' PreparableStmt ')'
opt_materialized ::= MATERIALIZED | NOT MATERIALIZED |
opt_with_clause ::= with_clause |
into_clause ::= INTO OptTempTableName |
OptTempTableName ::= TEMPORARY opt_table qualified_name | TEMP opt_table qualified_name | LOCAL TEMPORARY opt_table qualified_name | LOCAL TEMP opt_table qualified_name | GLOBAL TEMPORARY opt_table qualified_name | GLOBAL TEMP opt_table qualified_name | UNLOGGED opt_table qualified_name | TABLE qualified_name | qualified_name
opt_table ::= TABLE |
all_or_distinct ::= ALL | DISTINCT |
distinct_clause ::= DISTINCT | DISTINCT ON '(' expr_list ')'
opt_all_clause ::= ALL |
opt_sort_clause ::= sort_clause |
sort_clause ::= ORDER BY sortby_list
sortby_list ::= sortby | sortby_list ',' sortby
sortby ::= a_expr USING qual_all_Op opt_nulls_order | a_expr opt_asc_desc opt_nulls_order
select_limit ::= limit_clause offset_clause | offset_clause limit_clause | limit_clause | offset_clause
opt_select_limit ::= select_limit |
limit_clause ::= LIMIT select_limit_value | LIMIT select_limit_value ',' select_offset_value | FETCH first_or_next select_fetch_first_value row_or_rows ONLY | FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES | FETCH first_or_next row_or_rows ONLY | FETCH first_or_next row_or_rows WITH TIES
offset_clause ::= OFFSET select_offset_value | OFFSET select_fetch_first_value row_or_rows
select_limit_value ::= a_expr | ALL
select_offset_value ::= a_expr
select_fetch_first_value ::= c_expr | '+' I_or_F_const | '-' I_or_F_const
I_or_F_const ::= Iconst | FCONST
row_or_rows ::= ROW | ROWS
first_or_next ::= FIRST_P | NEXT
group_clause ::= GROUP_P BY group_by_list |
group_by_list ::= group_by_item | group_by_list ',' group_by_item
group_by_item ::= a_expr | empty_grouping_set | cube_clause | rollup_clause | grouping_sets_clause
empty_grouping_set ::= '(' ')'
rollup_clause ::= ROLLUP '(' expr_list ')'
cube_clause ::= CUBE '(' expr_list ')'
grouping_sets_clause ::= GROUPING SETS '(' group_by_list ')'
having_clause ::= HAVING a_expr |
for_locking_clause ::= for_locking_items | FOR READ ONLY
opt_for_locking_clause ::= for_locking_clause |
for_locking_items ::= for_locking_item | for_locking_items for_locking_item
for_locking_item ::= for_locking_strength locked_rels_list opt_nowait_or_skip
for_locking_strength ::= FOR UPDATE | FOR NO KEY UPDATE | FOR SHARE | FOR KEY SHARE
locked_rels_list ::= OF qualified_name_list |
values_clause ::= VALUES '(' expr_list ')' | values_clause ',' '(' expr_list ')'
from_clause ::= FROM from_list |
from_list ::= table_ref | from_list ',' table_ref
table_ref ::= relation_expr opt_alias_clause | relation_expr opt_alias_clause tablesample_clause | func_table func_alias_clause | LATERAL_P func_table func_alias_clause | xmltable opt_alias_clause | LATERAL_P xmltable opt_alias_clause | select_with_parens opt_alias_clause | LATERAL_P select_with_parens opt_alias_clause | joined_table | '(' joined_table ')' alias_clause
joined_table ::= '(' joined_table ')' | table_ref CROSS JOIN table_ref | table_ref join_type JOIN table_ref join_qual | table_ref JOIN table_ref join_qual | table_ref NATURAL join_type JOIN table_ref | table_ref NATURAL JOIN table_ref
alias_clause ::= AS ColId '(' name_list ')' | AS ColId | ColId '(' name_list ')' | ColId
opt_alias_clause ::= alias_clause |
func_alias_clause ::= alias_clause | AS '(' TableFuncElementList ')' | AS ColId '(' TableFuncElementList ')' | ColId '(' TableFuncElementList ')' |
join_type ::= FULL join_outer | LEFT join_outer | RIGHT join_outer | INNER_P
join_outer ::= OUTER_P |
join_qual ::= USING '(' name_list ')' | ON a_expr
relation_expr ::= qualified_name | qualified_name '*' | ONLY qualified_name | ONLY '(' qualified_name ')'
relation_expr_list ::= relation_expr | relation_expr_list ',' relation_expr
relation_expr_opt_alias ::= relation_expr | relation_expr ColId | relation_expr AS ColId
tablesample_clause ::= TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause
opt_repeatable_clause ::= REPEATABLE '(' a_expr ')' |
func_table ::= func_expr_windowless opt_ordinality | ROWS FROM '(' rowsfrom_list ')' opt_ordinality
rowsfrom_item ::= func_expr_windowless opt_col_def_list
rowsfrom_list ::= rowsfrom_item | rowsfrom_list ',' rowsfrom_item
opt_col_def_list ::= AS '(' TableFuncElementList ')' |
opt_ordinality ::= WITH_LA ORDINALITY |
where_clause ::= WHERE a_expr |
where_or_current_clause ::= WHERE a_expr | WHERE CURRENT_P OF cursor_name |
OptTableFuncElementList ::= TableFuncElementList |
TableFuncElementList ::= TableFuncElement | TableFuncElementList ',' TableFuncElement
TableFuncElement ::= ColId Typename opt_collate_clause
xmltable ::= XMLTABLE '(' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' | XMLTABLE '(' XMLNAMESPACES '(' xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS xmltable_column_list ')'
xmltable_column_list ::= xmltable_column_el | xmltable_column_list ',' xmltable_column_el
xmltable_column_el ::= ColId Typename | ColId Typename xmltable_column_option_list | ColId FOR ORDINALITY
xmltable_column_option_list ::= xmltable_column_option_el | xmltable_column_option_list xmltable_column_option_el
xmltable_column_option_el ::= IDENT b_expr | DEFAULT b_expr | NOT NULL_P | NULL_P
xml_namespace_list ::= xml_namespace_el | xml_namespace_list ',' xml_namespace_el
xml_namespace_el ::= b_expr AS ColLabel | DEFAULT b_expr
Typename ::= SimpleTypename opt_array_bounds | SETOF SimpleTypename opt_array_bounds | SimpleTypename ARRAY '[' Iconst ']' | SETOF SimpleTypename ARRAY '[' Iconst ']' | SimpleTypename ARRAY | SETOF SimpleTypename ARRAY
opt_array_bounds ::= opt_array_bounds '[' ']' | opt_array_bounds '[' Iconst ']' |
SimpleTypename ::= GenericType | Numeric | Bit | Character | ConstDatetime | ConstInterval opt_interval | ConstInterval '(' Iconst ')'
ConstTypename ::= Numeric | ConstBit | ConstCharacter | ConstDatetime
GenericType ::= type_function_name opt_type_modifiers | type_function_name attrs opt_type_modifiers
opt_type_modifiers ::= '(' expr_list ')' |
Numeric ::= INT_P | INTEGER | SMALLINT | BIGINT | REAL | FLOAT_P opt_float | DOUBLE_P PRECISION | DECIMAL_P opt_type_modifiers | DEC opt_type_modifiers | NUMERIC opt_type_modifiers | BOOLEAN_P
opt_float ::= '(' Iconst ')' |
Bit ::= BitWithLength | BitWithoutLength
ConstBit ::= BitWithLength | BitWithoutLength
BitWithLength ::= BIT opt_varying '(' expr_list ')'
BitWithoutLength ::= BIT opt_varying
Character ::= CharacterWithLength | CharacterWithoutLength
ConstCharacter ::= CharacterWithLength | CharacterWithoutLength
CharacterWithLength ::= character '(' Iconst ')'
CharacterWithoutLength ::= character
character ::= CHARACTER opt_varying | CHAR_P opt_varying | VARCHAR | NATIONAL CHARACTER opt_varying | NATIONAL CHAR_P opt_varying | NCHAR opt_varying
opt_varying ::= VARYING |
ConstDatetime ::= TIMESTAMP '(' Iconst ')' opt_timezone | TIMESTAMP opt_timezone | TIME '(' Iconst ')' opt_timezone | TIME opt_timezone
ConstInterval ::= INTERVAL
opt_timezone ::= WITH_LA TIME ZONE | WITHOUT TIME ZONE |
opt_interval ::= YEAR_P | MONTH_P | DAY_P | HOUR_P | MINUTE_P | interval_second | YEAR_P TO MONTH_P | DAY_P TO HOUR_P | DAY_P TO MINUTE_P | DAY_P TO interval_second | HOUR_P TO MINUTE_P | HOUR_P TO interval_second | MINUTE_P TO interval_second |
interval_second ::= SECOND_P | SECOND_P '(' Iconst ')'
a_expr ::= c_expr | a_expr TYPECAST Typename | a_expr COLLATE any_name | a_expr AT TIME ZONE a_expr | '+' a_expr | '-' a_expr | a_expr '+' a_expr | a_expr '-' a_expr | a_expr '*' a_expr | a_expr '/' a_expr | a_expr '%' a_expr | a_expr '^' a_expr | a_expr '<' a_expr | a_expr '>' a_expr | a_expr '=' a_expr | a_expr LESS_EQUALS a_expr | a_expr GREATER_EQUALS a_expr | a_expr NOT_EQUALS a_expr | a_expr qual_Op a_expr | qual_Op a_expr | a_expr qual_Op | a_expr AND a_expr | a_expr OR a_expr | NOT a_expr | NOT_LA a_expr | a_expr LIKE a_expr | a_expr LIKE a_expr ESCAPE a_expr | a_expr NOT_LA LIKE a_expr | a_expr NOT_LA LIKE a_expr ESCAPE a_expr | a_expr ILIKE a_expr | a_expr ILIKE a_expr ESCAPE a_expr | a_expr NOT_LA ILIKE a_expr | a_expr NOT_LA ILIKE a_expr ESCAPE a_expr | a_expr SIMILAR TO a_expr | a_expr SIMILAR TO a_expr ESCAPE a_expr | a_expr NOT_LA SIMILAR TO a_expr | a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr | a_expr IS NULL_P | a_expr ISNULL | a_expr IS NOT NULL_P | a_expr NOTNULL | row OVERLAPS row | a_expr IS TRUE_P | a_expr IS NOT TRUE_P | a_expr IS FALSE_P | a_expr IS NOT FALSE_P | a_expr IS UNKNOWN | a_expr IS NOT UNKNOWN | a_expr IS DISTINCT FROM a_expr | a_expr IS NOT DISTINCT FROM a_expr | a_expr IS OF '(' type_list ')' | a_expr IS NOT OF '(' type_list ')' | a_expr BETWEEN opt_asymmetric b_expr AND a_expr | a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr | a_expr BETWEEN SYMMETRIC b_expr AND a_expr | a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr | a_expr IN_P in_expr | a_expr NOT_LA IN_P in_expr | a_expr subquery_Op sub_type select_with_parens | a_expr subquery_Op sub_type '(' a_expr ')' | UNIQUE select_with_parens | a_expr IS DOCUMENT_P | a_expr IS NOT DOCUMENT_P | a_expr IS NORMALIZED | a_expr IS unicode_normal_form NORMALIZED | a_expr IS NOT NORMALIZED | a_expr IS NOT unicode_normal_form NORMALIZED | DEFAULT
b_expr ::= c_expr | b_expr TYPECAST Typename | '+' b_expr | '-' b_expr | b_expr '+' b_expr | b_expr '-' b_expr | b_expr '*' b_expr | b_expr '/' b_expr | b_expr '%' b_expr | b_expr '^' b_expr | b_expr '<' b_expr | b_expr '>' b_expr | b_expr '=' b_expr | b_expr LESS_EQUALS b_expr | b_expr GREATER_EQUALS b_expr | b_expr NOT_EQUALS b_expr | b_expr qual_Op b_expr | qual_Op b_expr | b_expr qual_Op | b_expr IS DISTINCT FROM b_expr | b_expr IS NOT DISTINCT FROM b_expr | b_expr IS OF '(' type_list ')' | b_expr IS NOT OF '(' type_list ')' | b_expr IS DOCUMENT_P | b_expr IS NOT DOCUMENT_P
c_expr ::= columnref | AexprConst | PARAM opt_indirection | '(' a_expr ')' opt_indirection | case_expr | func_expr | select_with_parens | select_with_parens indirection | EXISTS select_with_parens | ARRAY select_with_parens | ARRAY array_expr | explicit_row | implicit_row | GROUPING '(' expr_list ')'
func_application ::= func_name '(' ')' | func_name '(' func_arg_list opt_sort_clause ')' | func_name '(' VARIADIC func_arg_expr opt_sort_clause ')' | func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause ')' | func_name '(' ALL func_arg_list opt_sort_clause ')' | func_name '(' DISTINCT func_arg_list opt_sort_clause ')' | func_name '(' '*' ')'
func_expr ::= func_application within_group_clause filter_clause over_clause | func_expr_common_subexpr
func_expr_windowless ::= func_application | func_expr_common_subexpr
func_expr_common_subexpr ::= COLLATION FOR '(' a_expr ')' | CURRENT_DATE | CURRENT_TIME | CURRENT_TIME '(' Iconst ')' | CURRENT_TIMESTAMP | CURRENT_TIMESTAMP '(' Iconst ')' | LOCALTIME | LOCALTIME '(' Iconst ')' | LOCALTIMESTAMP | LOCALTIMESTAMP '(' Iconst ')' | CURRENT_ROLE | CURRENT_USER | SESSION_USER | USER | CURRENT_CATALOG | CURRENT_SCHEMA | CAST '(' a_expr AS Typename ')' | EXTRACT '(' extract_list ')' | NORMALIZE '(' a_expr ')' | NORMALIZE '(' a_expr ',' unicode_normal_form ')' | OVERLAY '(' overlay_list ')' | POSITION '(' position_list ')' | SUBSTRING '(' substr_list ')' | TREAT '(' a_expr AS Typename ')' | TRIM '(' BOTH trim_list ')' | TRIM '(' LEADING trim_list ')' | TRIM '(' TRAILING trim_list ')' | TRIM '(' trim_list ')' | NULLIF '(' a_expr ',' a_expr ')' | COALESCE '(' expr_list ')' | GREATEST '(' expr_list ')' | LEAST '(' expr_list ')' | XMLCONCAT '(' expr_list ')' | XMLELEMENT '(' NAME_P ColLabel ')' | XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ')' | XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')' | XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ',' expr_list ')' | XMLEXISTS '(' c_expr xmlexists_argument ')' | XMLFOREST '(' xml_attribute_list ')' | XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')' | XMLPI '(' NAME_P ColLabel ')' | XMLPI '(' NAME_P ColLabel ',' a_expr ')' | XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')' | XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')'
xml_root_version ::= VERSION_P a_expr | VERSION_P NO VALUE_P
opt_xml_root_standalone ::= ',' STANDALONE_P YES_P | ',' STANDALONE_P NO | ',' STANDALONE_P NO VALUE_P |
xml_attributes ::= XMLATTRIBUTES '(' xml_attribute_list ')'
xml_attribute_list ::= xml_attribute_el | xml_attribute_list ',' xml_attribute_el
xml_attribute_el ::= a_expr AS ColLabel | a_expr
document_or_content ::= DOCUMENT_P | CONTENT_P
xml_whitespace_option ::= PRESERVE WHITESPACE_P | STRIP_P WHITESPACE_P |
xmlexists_argument ::= PASSING c_expr | PASSING c_expr xml_passing_mech | PASSING xml_passing_mech c_expr | PASSING xml_passing_mech c_expr xml_passing_mech
xml_passing_mech ::= BY REF | BY VALUE_P
within_group_clause ::= WITHIN GROUP_P '(' sort_clause ')' |
filter_clause ::= FILTER '(' WHERE a_expr ')' |
window_clause ::= WINDOW window_definition_list |
window_definition_list ::= window_definition | window_definition_list ',' window_definition
window_definition ::= ColId AS window_specification
over_clause ::= OVER window_specification | OVER ColId |
window_specification ::= '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')'
opt_existing_window_name ::= ColId |
opt_partition_clause ::= PARTITION BY expr_list |
opt_frame_clause ::= RANGE frame_extent opt_window_exclusion_clause | ROWS frame_extent opt_window_exclusion_clause | GROUPS frame_extent opt_window_exclusion_clause |
frame_extent ::= frame_bound | BETWEEN frame_bound AND frame_bound
frame_bound ::= UNBOUNDED PRECEDING | UNBOUNDED FOLLOWING | CURRENT_P ROW | a_expr PRECEDING | a_expr FOLLOWING
opt_window_exclusion_clause ::= EXCLUDE CURRENT_P ROW | EXCLUDE GROUP_P | EXCLUDE TIES | EXCLUDE NO OTHERS |
row ::= ROW '(' expr_list ')' | ROW '(' ')' | '(' expr_list ',' a_expr ')'
explicit_row ::= ROW '(' expr_list ')' | ROW '(' ')'
implicit_row ::= '(' expr_list ',' a_expr ')'
sub_type ::= ANY | SOME | ALL
all_Op ::= Op | MathOp
MathOp ::= '+' | '-' | '*' | '/' | '%' | '^' | '<' | '>' | '=' | LESS_EQUALS | GREATER_EQUALS | NOT_EQUALS
qual_Op ::= Op | OPERATOR '(' any_operator ')'
qual_all_Op ::= all_Op | OPERATOR '(' any_operator ')'
subquery_Op ::= all_Op | OPERATOR '(' any_operator ')' | LIKE | NOT_LA LIKE | ILIKE | NOT_LA ILIKE
expr_list ::= a_expr | expr_list ',' a_expr
func_arg_list ::= func_arg_expr | func_arg_list ',' func_arg_expr
func_arg_expr ::= a_expr | param_name COLON_EQUALS a_expr | param_name EQUALS_GREATER a_expr
type_list ::= Typename | type_list ',' Typename
array_expr ::= '[' expr_list ']' | '[' array_expr_list ']' | '[' ']'
array_expr_list ::= array_expr | array_expr_list ',' array_expr
extract_list ::= extract_arg FROM a_expr |
extract_arg ::= IDENT | YEAR_P | MONTH_P | DAY_P | HOUR_P | MINUTE_P | SECOND_P | Sconst
unicode_normal_form ::= NFC | NFD | NFKC | NFKD
overlay_list ::= a_expr overlay_placing substr_from substr_for | a_expr overlay_placing substr_from
overlay_placing ::= PLACING a_expr
position_list ::= b_expr IN_P b_expr |
substr_list ::= a_expr substr_from substr_for | a_expr substr_for substr_from | a_expr substr_from | a_expr substr_for | expr_list |
substr_from ::= FROM a_expr
substr_for ::= FOR a_expr
trim_list ::= a_expr FROM expr_list | FROM expr_list | expr_list
in_expr ::= select_with_parens | '(' expr_list ')'
case_expr ::= CASE case_arg when_clause_list case_default END_P
when_clause_list ::= when_clause | when_clause_list when_clause
when_clause ::= WHEN a_expr THEN a_expr
case_default ::= ELSE a_expr |
case_arg ::= a_expr |
columnref ::= ColId | ColId indirection
indirection_el ::= '.' attr_name | '.' '*' | '[' a_expr ']' | '[' opt_slice_bound ':' opt_slice_bound ']'
opt_slice_bound ::= a_expr |
indirection ::= indirection_el | indirection indirection_el
opt_indirection ::= | opt_indirection indirection_el
opt_asymmetric ::= ASYMMETRIC | /*empty*/
opt_target_list ::= target_list |
target_list ::= target_el | target_list ',' target_el
target_el ::= a_expr AS ColLabel | a_expr IDENT | a_expr | '*'
qualified_name_list ::= qualified_name | qualified_name_list ',' qualified_name
qualified_name ::= ColId | ColId indirection
name_list ::= name | name_list ',' name
name ::= ColId
database_name ::= ColId
access_method ::= ColId
attr_name ::= ColLabel
index_name ::= ColId
file_name ::= Sconst
func_name ::= type_function_name | ColId indirection
AexprConst ::= Iconst | FCONST | Sconst | BCONST | XCONST | func_name Sconst | func_name '(' func_arg_list opt_sort_clause ')' Sconst | ConstTypename Sconst | ConstInterval Sconst opt_interval | ConstInterval '(' Iconst ')' Sconst | TRUE_P | FALSE_P | NULL_P
Iconst ::= ICONST
Sconst ::= SCONST
SignedIconst ::= Iconst | '+' Iconst | '-' Iconst
RoleId ::= RoleSpec
RoleSpec ::= NonReservedWord | CURRENT_USER | SESSION_USER
role_list ::= RoleSpec | role_list ',' RoleSpec
ColId ::= IDENT | unreserved_keyword | col_name_keyword
type_function_name ::= IDENT | unreserved_keyword | type_func_name_keyword
NonReservedWord ::= IDENT | unreserved_keyword | col_name_keyword | type_func_name_keyword
ColLabel ::= IDENT | unreserved_keyword | col_name_keyword | type_func_name_keyword | reserved_keyword
unreserved_keyword ::= ABORT_P | ABSOLUTE_P | ACCESS | ACTION | ADD_P | ADMIN | AFTER | AGGREGATE | ALSO | ALTER | ALWAYS | ASSERTION | ASSIGNMENT | AT | ATTACH | ATTRIBUTE | BACKWARD | BEFORE | BEGIN_P | BY | CACHE | CALL | CALLED | CASCADE | CASCADED | CATALOG_P | CHAIN | CHARACTERISTICS | CHECKPOINT | CLASS | CLOSE | CLUSTER | COLUMNS | COMMENT | COMMENTS | COMMIT | COMMITTED | CONFIGURATION | CONFLICT | CONNECTION | CONSTRAINTS | CONTENT_P | CONTINUE_P | CONVERSION_P | COPY | COST | CSV | CUBE | CURRENT_P | CURSOR | CYCLE | DATA_P | DATABASE | DAY_P | DEALLOCATE | DECLARE | DEFAULTS | DEFERRED | DEFINER | DELETE_P | DELIMITER | DELIMITERS | DEPENDS | DETACH | DICTIONARY | DISABLE_P | DISCARD | DOCUMENT_P | DOMAIN_P | DOUBLE_P | DROP | EACH | ENABLE_P | ENCODING | ENCRYPTED | ENUM_P | ESCAPE | EVENT | EXCLUDE | EXCLUDING | EXCLUSIVE | EXECUTE | EXPLAIN | EXPRESSION | EXTENSION | EXTERNAL | FAMILY | FILTER | FIRST_P | FOLLOWING | FORCE | FORWARD | FUNCTION | FUNCTIONS | GENERATED | GLOBAL | GRANTED | GROUPS | HANDLER | HEADER_P | HOLD | HOUR_P | IDENTITY_P | IF_P | IMMEDIATE | IMMUTABLE | IMPLICIT_P | IMPORT_P | INCLUDE | INCLUDING | INCREMENT | INDEX | INDEXES | INHERIT | INHERITS | INLINE_P | INPUT_P | INSENSITIVE | INSERT | INSTEAD | INVOKER | ISOLATION | KEY | LABEL | LANGUAGE | LARGE_P | LAST_P | LEAKPROOF | LEVEL | LISTEN | LOAD | LOCAL | LOCATION | LOCK_P | LOCKED | LOGGED | MAPPING | MATCH | MATERIALIZED | MAXVALUE | METHOD | MINUTE_P | MINVALUE | MODE | MONTH_P | MOVE | NAME_P | NAMES | NEW | NEXT | NFC | NFD | NFKC | NFKD | NO | NORMALIZED | NOTHING | NOTIFY | NOWAIT | NULLS_P | OBJECT_P | OF | OFF | OIDS | OLD | OPERATOR | OPTION | OPTIONS | ORDINALITY | OTHERS | OVER | OVERRIDING | OWNED | OWNER | PARALLEL | PARSER | PARTIAL | PARTITION | PASSING | PASSWORD | PLANS | POLICY | PRECEDING | PREPARE | PREPARED | PRESERVE | PRIOR | PRIVILEGES | PROCEDURAL | PROCEDURE | PROCEDURES | PROGRAM | PUBLICATION | QUOTE | RANGE | READ | REASSIGN | RECHECK | RECURSIVE | REF | REFERENCING | REFRESH | REINDEX | RELATIVE_P | RELEASE | RENAME | REPEATABLE | REPLACE | REPLICA | RESET | RESTART | RESTRICT | RETURNS | REVOKE | ROLE | ROLLBACK | ROLLUP | ROUTINE | ROUTINES | ROWS | RULE | SAVEPOINT | SCHEMA | SCHEMAS | SCROLL | SEARCH | SECOND_P | SECURITY | SEQUENCE | SEQUENCES | SERIALIZABLE | SERVER | SESSION | SET | SETS | SHARE | SHOW | SIMPLE | SKIP | SNAPSHOT | SQL_P | STABLE | STANDALONE_P | START | STATEMENT | STATISTICS | STDIN | STDOUT | STORAGE | STORED | STRICT_P | STRIP_P | SUBSCRIPTION | SUPPORT | SYSID | SYSTEM_P | TABLES | TABLESPACE | TEMP | TEMPLATE | TEMPORARY | TEXT_P | TIES | TRANSACTION | TRANSFORM | TRIGGER | TRUNCATE | TRUSTED | TYPE_P | TYPES_P | UESCAPE | UNBOUNDED | UNCOMMITTED | UNENCRYPTED | UNKNOWN | UNLISTEN | UNLOGGED | UNTIL | UPDATE | VACUUM | VALID | VALIDATE | VALIDATOR | VALUE_P | VARYING | VERSION_P | VIEW | VIEWS | VOLATILE | WHITESPACE_P | WITHIN | WITHOUT | WORK | WRAPPER | WRITE | XML_P | YEAR_P | YES_P | ZONE
col_name_keyword ::= BETWEEN | BIGINT | BIT | BOOLEAN_P | CHAR_P | CHARACTER | COALESCE | DEC | DECIMAL_P | EXISTS | EXTRACT | FLOAT_P | GREATEST | GROUPING | INOUT | INT_P | INTEGER | INTERVAL | LEAST | NATIONAL | NCHAR | NONE | NORMALIZE | NULLIF | NUMERIC | OUT_P | OVERLAY | POSITION | PRECISION | REAL | ROW | SETOF | SMALLINT | SUBSTRING | TIME | TIMESTAMP | TREAT | TRIM | VALUES | VARCHAR | XMLATTRIBUTES | XMLCONCAT | XMLELEMENT | XMLEXISTS | XMLFOREST | XMLNAMESPACES | XMLPARSE | XMLPI | XMLROOT | XMLSERIALIZE | XMLTABLE
type_func_name_keyword ::= AUTHORIZATION | BINARY | COLLATION | CONCURRENTLY | CROSS | CURRENT_SCHEMA | FREEZE | FULL | ILIKE | INNER_P | IS | ISNULL | JOIN | LEFT | LIKE | NATURAL | NOTNULL | OUTER_P | OVERLAPS | RIGHT | SIMILAR | TABLESAMPLE | VERBOSE
reserved_keyword ::= ALL | ANALYSE | ANALYZE | AND | ANY | ARRAY | AS | ASC | ASYMMETRIC | BOTH | CASE | CAST | CHECK | COLLATE | COLUMN | CONSTRAINT | CREATE | CURRENT_CATALOG | CURRENT_DATE | CURRENT_ROLE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | DEFAULT | DEFERRABLE | DESC | DISTINCT | DO | ELSE | END_P | EXCEPT | FALSE_P | FETCH | FOR | FOREIGN | FROM | GRANT | GROUP_P | HAVING | IN_P | INITIALLY | INTERSECT | INTO | LATERAL_P | LEADING | LIMIT | LOCALTIME | LOCALTIMESTAMP | NOT | NULL_P | OFFSET | ON | ONLY | OR | ORDER | PLACING | PRIMARY | REFERENCES | RETURNING | SELECT | SESSION_USER | SOME | SYMMETRIC | TABLE | THEN | TO | TRAILING | TRUE_P | UNION | UNIQUE | USER | USING | VARIADIC | WHEN | WHERE | WINDOW | WITH

// Tokens from postgresql-13.3/src/include/parser/kwlist.h

ABORT_P ::= "abort"
ABSOLUTE_P ::= "absolute"
ACCESS ::= "access"
ACTION ::= "action"
ADD_P ::= "add"
ADMIN ::= "admin"
AFTER ::= "after"
AGGREGATE ::= "aggregate"
ALL ::= "all"
ALSO ::= "also"
ALTER ::= "alter"
ALWAYS ::= "always"
ANALYSE ::= "analyse"
ANALYZE ::= "analyze"
AND ::= "and"
ANY ::= "any"
ARRAY ::= "array"
AS ::= "as"
ASC ::= "asc"
ASSERTION ::= "assertion"
ASSIGNMENT ::= "assignment"
ASYMMETRIC ::= "asymmetric"
AT ::= "at"
ATTACH ::= "attach"
ATTRIBUTE ::= "attribute"
AUTHORIZATION ::= "authorization"
BACKWARD ::= "backward"
BEFORE ::= "before"
BEGIN_P ::= "begin"
BETWEEN ::= "between"
BIGINT ::= "bigint"
BINARY ::= "binary"
BIT ::= "bit"
BOOLEAN_P ::= "boolean"
BOTH ::= "both"
BY ::= "by"
CACHE ::= "cache"
CALL ::= "call"
CALLED ::= "called"
CASCADE ::= "cascade"
CASCADED ::= "cascaded"
CASE ::= "case"
CAST ::= "cast"
CATALOG_P ::= "catalog"
CHAIN ::= "chain"
CHAR_P ::= "char"
CHARACTER ::= "character"
CHARACTERISTICS ::= "characteristics"
CHECK ::= "check"
CHECKPOINT ::= "checkpoint"
CLASS ::= "class"
CLOSE ::= "close"
CLUSTER ::= "cluster"
COALESCE ::= "coalesce"
COLLATE ::= "collate"
COLLATION ::= "collation"
COLUMN ::= "column"
COLUMNS ::= "columns"
COMMENT ::= "comment"
COMMENTS ::= "comments"
COMMIT ::= "commit"
COMMITTED ::= "committed"
CONCURRENTLY ::= "concurrently"
CONFIGURATION ::= "configuration"
CONFLICT ::= "conflict"
CONNECTION ::= "connection"
CONSTRAINT ::= "constraint"
CONSTRAINTS ::= "constraints"
CONTENT_P ::= "content"
CONTINUE_P ::= "continue"
CONVERSION_P ::= "conversion"
COPY ::= "copy"
COST ::= "cost"
CREATE ::= "create"
CROSS ::= "cross"
CSV ::= "csv"
CUBE ::= "cube"
CURRENT_P ::= "current"
CURRENT_CATALOG ::= "current_catalog"
CURRENT_DATE ::= "current_date"
CURRENT_ROLE ::= "current_role"
CURRENT_SCHEMA ::= "current_schema"
CURRENT_TIME ::= "current_time"
CURRENT_TIMESTAMP ::= "current_timestamp"
CURRENT_USER ::= "current_user"
CURSOR ::= "cursor"
CYCLE ::= "cycle"
DATA_P ::= "data"
DATABASE ::= "database"
DAY_P ::= "day"
DEALLOCATE ::= "deallocate"
DEC ::= "dec"
DECIMAL_P ::= "decimal"
DECLARE ::= "declare"
DEFAULT ::= "default"
DEFAULTS ::= "defaults"
DEFERRABLE ::= "deferrable"
DEFERRED ::= "deferred"
DEFINER ::= "definer"
DELETE_P ::= "delete"
DELIMITER ::= "delimiter"
DELIMITERS ::= "delimiters"
DEPENDS ::= "depends"
DESC ::= "desc"
DETACH ::= "detach"
DICTIONARY ::= "dictionary"
DISABLE_P ::= "disable"
DISCARD ::= "discard"
DISTINCT ::= "distinct"
DO ::= "do"
DOCUMENT_P ::= "document"
DOMAIN_P ::= "domain"
DOUBLE_P ::= "double"
DROP ::= "drop"
EACH ::= "each"
ELSE ::= "else"
ENABLE_P ::= "enable"
ENCODING ::= "encoding"
ENCRYPTED ::= "encrypted"
END_P ::= "end"
ENUM_P ::= "enum"
ESCAPE ::= "escape"
EVENT ::= "event"
EXCEPT ::= "except"
EXCLUDE ::= "exclude"
EXCLUDING ::= "excluding"
EXCLUSIVE ::= "exclusive"
EXECUTE ::= "execute"
EXISTS ::= "exists"
EXPLAIN ::= "explain"
EXPRESSION ::= "expression"
EXTENSION ::= "extension"
EXTERNAL ::= "external"
EXTRACT ::= "extract"
FALSE_P ::= "false"
FAMILY ::= "family"
FETCH ::= "fetch"
FILTER ::= "filter"
FIRST_P ::= "first"
FLOAT_P ::= "float"
FOLLOWING ::= "following"
FOR ::= "for"
FORCE ::= "force"
FOREIGN ::= "foreign"
FORWARD ::= "forward"
FREEZE ::= "freeze"
FROM ::= "from"
FULL ::= "full"
FUNCTION ::= "function"
FUNCTIONS ::= "functions"
GENERATED ::= "generated"
GLOBAL ::= "global"
GRANT ::= "grant"
GRANTED ::= "granted"
GREATEST ::= "greatest"
GROUP_P ::= "group"
GROUPING ::= "grouping"
GROUPS ::= "groups"
HANDLER ::= "handler"
HAVING ::= "having"
HEADER_P ::= "header"
HOLD ::= "hold"
HOUR_P ::= "hour"
IDENTITY_P ::= "identity"
IF_P ::= "if"
ILIKE ::= "ilike"
IMMEDIATE ::= "immediate"
IMMUTABLE ::= "immutable"
IMPLICIT_P ::= "implicit"
IMPORT_P ::= "import"
IN_P ::= "in"
INCLUDE ::= "include"
INCLUDING ::= "including"
INCREMENT ::= "increment"
INDEX ::= "index"
INDEXES ::= "indexes"
INHERIT ::= "inherit"
INHERITS ::= "inherits"
INITIALLY ::= "initially"
INLINE_P ::= "inline"
INNER_P ::= "inner"
INOUT ::= "inout"
INPUT_P ::= "input"
INSENSITIVE ::= "insensitive"
INSERT ::= "insert"
INSTEAD ::= "instead"
INT_P ::= "int"
INTEGER ::= "integer"
INTERSECT ::= "intersect"
INTERVAL ::= "interval"
INTO ::= "into"
INVOKER ::= "invoker"
IS ::= "is"
ISNULL ::= "isnull"
ISOLATION ::= "isolation"
JOIN ::= "join"
KEY ::= "key"
LABEL ::= "label"
LANGUAGE ::= "language"
LARGE_P ::= "large"
LAST_P ::= "last"
LATERAL_P ::= "lateral"
LEADING ::= "leading"
LEAKPROOF ::= "leakproof"
LEAST ::= "least"
LEFT ::= "left"
LEVEL ::= "level"
LIKE ::= "like"
LIMIT ::= "limit"
LISTEN ::= "listen"
LOAD ::= "load"
LOCAL ::= "local"
LOCALTIME ::= "localtime"
LOCALTIMESTAMP ::= "localtimestamp"
LOCATION ::= "location"
LOCK_P ::= "lock"
LOCKED ::= "locked"
LOGGED ::= "logged"
MAPPING ::= "mapping"
MATCH ::= "match"
MATERIALIZED ::= "materialized"
MAXVALUE ::= "maxvalue"
METHOD ::= "method"
MINUTE_P ::= "minute"
MINVALUE ::= "minvalue"
MODE ::= "mode"
MONTH_P ::= "month"
MOVE ::= "move"
NAME_P ::= "name"
NAMES ::= "names"
NATIONAL ::= "national"
NATURAL ::= "natural"
NCHAR ::= "nchar"
NEW ::= "new"
NEXT ::= "next"
NFC ::= "nfc"
NFD ::= "nfd"
NFKC ::= "nfkc"
NFKD ::= "nfkd"
NO ::= "no"
NONE ::= "none"
NORMALIZE ::= "normalize"
NORMALIZED ::= "normalized"
NOT ::= "not"
NOTHING ::= "nothing"
NOTIFY ::= "notify"
NOTNULL ::= "notnull"
NOWAIT ::= "nowait"
NULL_P ::= "null"
NULLIF ::= "nullif"
NULLS_P ::= "nulls"
NUMERIC ::= "numeric"
OBJECT_P ::= "object"
OF ::= "of"
OFF ::= "off"
OFFSET ::= "offset"
OIDS ::= "oids"
OLD ::= "old"
ON ::= "on"
ONLY ::= "only"
OPERATOR ::= "operator"
OPTION ::= "option"
OPTIONS ::= "options"
OR ::= "or"
ORDER ::= "order"
ORDINALITY ::= "ordinality"
OTHERS ::= "others"
OUT_P ::= "out"
OUTER_P ::= "outer"
OVER ::= "over"
OVERLAPS ::= "overlaps"
OVERLAY ::= "overlay"
OVERRIDING ::= "overriding"
OWNED ::= "owned"
OWNER ::= "owner"
PARALLEL ::= "parallel"
PARSER ::= "parser"
PARTIAL ::= "partial"
PARTITION ::= "partition"
PASSING ::= "passing"
PASSWORD ::= "password"
PLACING ::= "placing"
PLANS ::= "plans"
POLICY ::= "policy"
POSITION ::= "position"
PRECEDING ::= "preceding"
PRECISION ::= "precision"
PREPARE ::= "prepare"
PREPARED ::= "prepared"
PRESERVE ::= "preserve"
PRIMARY ::= "primary"
PRIOR ::= "prior"
PRIVILEGES ::= "privileges"
PROCEDURAL ::= "procedural"
PROCEDURE ::= "procedure"
PROCEDURES ::= "procedures"
PROGRAM ::= "program"
PUBLICATION ::= "publication"
QUOTE ::= "quote"
RANGE ::= "range"
READ ::= "read"
REAL ::= "real"
REASSIGN ::= "reassign"
RECHECK ::= "recheck"
RECURSIVE ::= "recursive"
REF ::= "ref"
REFERENCES ::= "references"
REFERENCING ::= "referencing"
REFRESH ::= "refresh"
REINDEX ::= "reindex"
RELATIVE_P ::= "relative"
RELEASE ::= "release"
RENAME ::= "rename"
REPEATABLE ::= "repeatable"
REPLACE ::= "replace"
REPLICA ::= "replica"
RESET ::= "reset"
RESTART ::= "restart"
RESTRICT ::= "restrict"
RETURNING ::= "returning"
RETURNS ::= "returns"
REVOKE ::= "revoke"
RIGHT ::= "right"
ROLE ::= "role"
ROLLBACK ::= "rollback"
ROLLUP ::= "rollup"
ROUTINE ::= "routine"
ROUTINES ::= "routines"
ROW ::= "row"
ROWS ::= "rows"
RULE ::= "rule"
SAVEPOINT ::= "savepoint"
SCHEMA ::= "schema"
SCHEMAS ::= "schemas"
SCROLL ::= "scroll"
SEARCH ::= "search"
SECOND_P ::= "second"
SECURITY ::= "security"
SELECT ::= "select"
SEQUENCE ::= "sequence"
SEQUENCES ::= "sequences"
SERIALIZABLE ::= "serializable"
SERVER ::= "server"
SESSION ::= "session"
SESSION_USER ::= "session_user"
SET ::= "set"
SETOF ::= "setof"
SETS ::= "sets"
SHARE ::= "share"
SHOW ::= "show"
SIMILAR ::= "similar"
SIMPLE ::= "simple"
SKIP ::= "skip"
SMALLINT ::= "smallint"
SNAPSHOT ::= "snapshot"
SOME ::= "some"
SQL_P ::= "sql"
STABLE ::= "stable"
STANDALONE_P ::= "standalone"
START ::= "start"
STATEMENT ::= "statement"
STATISTICS ::= "statistics"
STDIN ::= "stdin"
STDOUT ::= "stdout"
STORAGE ::= "storage"
STORED ::= "stored"
STRICT_P ::= "strict"
STRIP_P ::= "strip"
SUBSCRIPTION ::= "subscription"
SUBSTRING ::= "substring"
SUPPORT ::= "support"
SYMMETRIC ::= "symmetric"
SYSID ::= "sysid"
SYSTEM_P ::= "system"
TABLE ::= "table"
TABLES ::= "tables"
TABLESAMPLE ::= "tablesample"
TABLESPACE ::= "tablespace"
TEMP ::= "temp"
TEMPLATE ::= "template"
TEMPORARY ::= "temporary"
TEXT_P ::= "text"
THEN ::= "then"
TIES ::= "ties"
TIME ::= "time"
TIMESTAMP ::= "timestamp"
TO ::= "to"
TRAILING ::= "trailing"
TRANSACTION ::= "transaction"
TRANSFORM ::= "transform"
TREAT ::= "treat"
TRIGGER ::= "trigger"
TRIM ::= "trim"
TRUE_P ::= "true"
TRUNCATE ::= "truncate"
TRUSTED ::= "trusted"
TYPE_P ::= "type"
TYPES_P ::= "types"
UESCAPE ::= "uescape"
UNBOUNDED ::= "unbounded"
UNCOMMITTED ::= "uncommitted"
UNENCRYPTED ::= "unencrypted"
UNION ::= "union"
UNIQUE ::= "unique"
UNKNOWN ::= "unknown"
UNLISTEN ::= "unlisten"
UNLOGGED ::= "unlogged"
UNTIL ::= "until"
UPDATE ::= "update"
USER ::= "user"
USING ::= "using"
VACUUM ::= "vacuum"
VALID ::= "valid"
VALIDATE ::= "validate"
VALIDATOR ::= "validator"
VALUE_P ::= "value"
VALUES ::= "values"
VARCHAR ::= "varchar"
VARIADIC ::= "variadic"
VARYING ::= "varying"
VERBOSE ::= "verbose"
VERSION_P ::= "version"
VIEW ::= "view"
VIEWS ::= "views"
VOLATILE ::= "volatile"
WHEN ::= "when"
WHERE ::= "where"
WHITESPACE_P ::= "whitespace"
WINDOW ::= "window"
WITH ::= "with"
WITHIN ::= "within"
WITHOUT ::= "without"
WORK ::= "work"
WRAPPER ::= "wrapper"
WRITE ::= "write"
XML_P ::= "xml"
XMLATTRIBUTES ::= "xmlattributes"
XMLCONCAT ::= "xmlconcat"
XMLELEMENT ::= "xmlelement"
XMLEXISTS ::= "xmlexists"
XMLFOREST ::= "xmlforest"
XMLNAMESPACES ::= "xmlnamespaces"
XMLPARSE ::= "xmlparse"
XMLPI ::= "xmlpi"
XMLROOT ::= "xmlroot"
XMLSERIALIZE ::= "xmlserialize"
XMLTABLE ::= "xmltable"
YEAR_P ::= "year"
YES_P ::= "yes"
ZONE ::= "zone"
====

(4) By Domingo (mingodad) on 2021-07-02 10:08:56 in reply to 1 [link]

And also I did the same for percona server but they have not enabled issues on their repository (where I normally post) so here it is for sqlite users to make comparison:

EBNF for https://www.bottlecaps.de/rr/ui :
====
/*
From https://raw.githubusercontent.com/percona/percona-server/8.0/sql/sql_yacc.yy
*/

start_entry ::= sql_statement | GRAMMAR_SELECTOR_EXPR bit_expr END_OF_INPUT | GRAMMAR_SELECTOR_PART partition_clause END_OF_INPUT | GRAMMAR_SELECTOR_GCOL IDENT_sys '(' expr ')' END_OF_INPUT | GRAMMAR_SELECTOR_CTE table_subquery END_OF_INPUT | GRAMMAR_SELECTOR_DERIVED_EXPR expr END_OF_INPUT
sql_statement ::= END_OF_INPUT | simple_statement_or_begin ';' opt_end_of_input | simple_statement_or_begin END_OF_INPUT
opt_end_of_input ::= /*empty*/ | END_OF_INPUT
simple_statement_or_begin ::= simple_statement | begin_stmt
simple_statement ::= alter_database_stmt | alter_event_stmt | alter_function_stmt | alter_instance_stmt | alter_logfile_stmt | alter_procedure_stmt | alter_resource_group_stmt | alter_server_stmt | alter_tablespace_stmt | alter_undo_tablespace_stmt | alter_table_stmt | alter_user_stmt | alter_view_stmt | analyze_table_stmt | binlog_base64_event | call_stmt | change | check_table_stmt | checksum | clone_stmt | commit | create | create_index_stmt | create_resource_group_stmt | create_role_stmt | create_srs_stmt | create_table_stmt | deallocate | delete_stmt | describe_stmt | do_stmt | drop_database_stmt | drop_event_stmt | drop_function_stmt | drop_index_stmt | drop_logfile_stmt | drop_procedure_stmt | drop_resource_group_stmt | drop_role_stmt | drop_server_stmt | drop_srs_stmt | drop_tablespace_stmt | drop_undo_tablespace_stmt | drop_table_stmt | drop_trigger_stmt | drop_user_stmt | drop_view_stmt | execute | explain_stmt | flush | get_diagnostics | group_replication | grant | handler_stmt | help | import_stmt | insert_stmt | install | kill | load_stmt | lock | optimize_table_stmt | keycache_stmt | preload_stmt | prepare | purge | release | rename | repair_table_stmt | replace_stmt | reset | resignal_stmt | restart_server_stmt | revoke | rollback | savepoint | select_stmt | set | set_resource_group_stmt | set_role_stmt | show_binary_logs_stmt | show_binlog_events_stmt | show_character_set_stmt | show_collation_stmt | show_columns_stmt | show_count_errors_stmt | show_count_warnings_stmt | show_create_database_stmt | show_create_event_stmt | show_create_function_stmt | show_create_procedure_stmt | show_create_table_stmt | show_create_trigger_stmt | show_create_user_stmt | show_create_view_stmt | show_databases_stmt | show_engine_logs_stmt | show_engine_mutex_stmt | show_engine_status_stmt | show_engines_stmt | show_errors_stmt | show_events_stmt | show_function_code_stmt | show_function_status_stmt | show_grants_stmt | show_keys_stmt | show_master_status_stmt | show_open_tables_stmt | show_plugins_stmt | show_privileges_stmt | show_procedure_code_stmt | show_procedure_status_stmt | show_processlist_stmt | show_profile_stmt | show_profiles_stmt | show_relaylog_events_stmt | show_replica_status_stmt | show_replicas_stmt | show_stats_stmt | show_status_stmt | show_table_status_stmt | show_tables_stmt | show_triggers_stmt | show_variables_stmt | show_warnings_stmt | shutdown_stmt | signal_stmt | start | start_replica_stmt | stop_replica_stmt | truncate_stmt | uninstall | unlock | update_stmt | use | xa
deallocate ::= deallocate_or_drop PREPARE_SYM ident
deallocate_or_drop ::= DEALLOCATE_SYM | DROP
prepare ::= PREPARE_SYM ident FROM prepare_src
prepare_src ::= TEXT_STRING_sys | '@' ident_or_text
execute ::= EXECUTE_SYM ident execute_using
execute_using ::= /*empty*/ | USING execute_var_list
execute_var_list ::= execute_var_list ',' execute_var_ident | execute_var_ident
execute_var_ident ::= '@' ident_or_text
help ::= HELP_SYM ident_or_text
change_replication_source ::= MASTER_SYM | REPLICATION SOURCE_SYM
change ::= CHANGE change_replication_source TO_SYM source_defs opt_channel | CHANGE REPLICATION FILTER_SYM filter_defs opt_channel
filter_defs ::= filter_def | filter_defs ',' filter_def
filter_def ::= REPLICATE_DO_DB EQ opt_filter_db_list | REPLICATE_IGNORE_DB EQ opt_filter_db_list | REPLICATE_DO_TABLE EQ opt_filter_table_list | REPLICATE_IGNORE_TABLE EQ opt_filter_table_list | REPLICATE_WILD_DO_TABLE EQ opt_filter_string_list | REPLICATE_WILD_IGNORE_TABLE EQ opt_filter_string_list | REPLICATE_REWRITE_DB EQ opt_filter_db_pair_list
opt_filter_db_list ::= '(' ')' | '(' filter_db_list ')'
filter_db_list ::= filter_db_ident | filter_db_list ',' filter_db_ident
filter_db_ident ::= ident
opt_filter_db_pair_list ::= '(' ')' | '(' filter_db_pair_list ')'
filter_db_pair_list ::= '(' filter_db_ident ',' filter_db_ident ')' | filter_db_pair_list ',' '(' filter_db_ident ',' filter_db_ident ')'
opt_filter_table_list ::= '(' ')' | '(' filter_table_list ')'
filter_table_list ::= filter_table_ident | filter_table_list ',' filter_table_ident
filter_table_ident ::= schema '.' ident
opt_filter_string_list ::= '(' ')' | '(' filter_string_list ')'
filter_string_list ::= filter_string | filter_string_list ',' filter_string
filter_string ::= filter_wild_db_table_string
source_defs ::= source_def | source_defs ',' source_def
change_replication_source_auto_position ::= MASTER_AUTO_POSITION_SYM | SOURCE_AUTO_POSITION_SYM
change_replication_source_host ::= MASTER_HOST_SYM | SOURCE_HOST_SYM
change_replication_source_bind ::= MASTER_BIND_SYM | SOURCE_BIND_SYM
change_replication_source_user ::= MASTER_USER_SYM | SOURCE_USER_SYM
change_replication_source_password ::= MASTER_PASSWORD_SYM | SOURCE_PASSWORD_SYM
change_replication_source_port ::= MASTER_PORT_SYM | SOURCE_PORT_SYM
change_replication_source_connect_retry ::= MASTER_CONNECT_RETRY_SYM | SOURCE_CONNECT_RETRY_SYM
change_replication_source_retry_count ::= MASTER_RETRY_COUNT_SYM | SOURCE_RETRY_COUNT_SYM
change_replication_source_delay ::= MASTER_DELAY_SYM | SOURCE_DELAY_SYM
change_replication_source_ssl ::= MASTER_SSL_SYM | SOURCE_SSL_SYM
change_replication_source_ssl_ca ::= MASTER_SSL_CA_SYM | SOURCE_SSL_CA_SYM
change_replication_source_ssl_capath ::= MASTER_SSL_CAPATH_SYM | SOURCE_SSL_CAPATH_SYM
change_replication_source_ssl_cipher ::= MASTER_SSL_CIPHER_SYM | SOURCE_SSL_CIPHER_SYM
change_replication_source_ssl_crl ::= MASTER_SSL_CRL_SYM | SOURCE_SSL_CRL_SYM
change_replication_source_ssl_crlpath ::= MASTER_SSL_CRLPATH_SYM | SOURCE_SSL_CRLPATH_SYM
change_replication_source_ssl_key ::= MASTER_SSL_KEY_SYM | SOURCE_SSL_KEY_SYM
change_replication_source_ssl_verify_server_cert ::= MASTER_SSL_VERIFY_SERVER_CERT_SYM | SOURCE_SSL_VERIFY_SERVER_CERT_SYM
change_replication_source_tls_version ::= MASTER_TLS_VERSION_SYM | SOURCE_TLS_VERSION_SYM
change_replication_source_tls_ciphersuites ::= MASTER_TLS_CIPHERSUITES_SYM | SOURCE_TLS_CIPHERSUITES_SYM
change_replication_source_ssl_cert ::= MASTER_SSL_CERT_SYM | SOURCE_SSL_CERT_SYM
change_replication_source_public_key ::= MASTER_PUBLIC_KEY_PATH_SYM | SOURCE_PUBLIC_KEY_PATH_SYM
change_replication_source_get_source_public_key ::= GET_MASTER_PUBLIC_KEY_SYM | GET_SOURCE_PUBLIC_KEY_SYM
change_replication_source_heartbeat_period ::= MASTER_HEARTBEAT_PERIOD_SYM | SOURCE_HEARTBEAT_PERIOD_SYM
change_replication_source_compression_algorithm ::= MASTER_COMPRESSION_ALGORITHM_SYM | SOURCE_COMPRESSION_ALGORITHM_SYM
change_replication_source_zstd_compression_level ::= MASTER_ZSTD_COMPRESSION_LEVEL_SYM | SOURCE_ZSTD_COMPRESSION_LEVEL_SYM
source_def ::= change_replication_source_host EQ TEXT_STRING_sys_nonewline | NETWORK_NAMESPACE_SYM EQ TEXT_STRING_sys_nonewline | change_replication_source_bind EQ TEXT_STRING_sys_nonewline | change_replication_source_user EQ TEXT_STRING_sys_nonewline | change_replication_source_password EQ TEXT_STRING_sys_nonewline | change_replication_source_port EQ ulong_num | change_replication_source_connect_retry EQ ulong_num | change_replication_source_retry_count EQ ulong_num | change_replication_source_delay EQ ulong_num | change_replication_source_ssl EQ ulong_num | change_replication_source_ssl_ca EQ TEXT_STRING_sys_nonewline | change_replication_source_ssl_capath EQ TEXT_STRING_sys_nonewline | change_replication_source_tls_version EQ TEXT_STRING_sys_nonewline | change_replication_source_tls_ciphersuites EQ source_tls_ciphersuites_def | change_replication_source_ssl_cert EQ TEXT_STRING_sys_nonewline | change_replication_source_ssl_cipher EQ TEXT_STRING_sys_nonewline | change_replication_source_ssl_key EQ TEXT_STRING_sys_nonewline | change_replication_source_ssl_verify_server_cert EQ ulong_num | change_replication_source_ssl_crl EQ TEXT_STRING_sys_nonewline | change_replication_source_ssl_crlpath EQ TEXT_STRING_sys_nonewline | change_replication_source_public_key EQ TEXT_STRING_sys_nonewline | change_replication_source_get_source_public_key EQ ulong_num | change_replication_source_heartbeat_period EQ NUM_literal | IGNORE_SERVER_IDS_SYM EQ '(' ignore_server_id_list ')' | change_replication_source_compression_algorithm EQ TEXT_STRING_sys | change_replication_source_zstd_compression_level EQ ulong_num | change_replication_source_auto_position EQ ulong_num | PRIVILEGE_CHECKS_USER_SYM EQ privilege_check_def | REQUIRE_ROW_FORMAT_SYM EQ ulong_num | REQUIRE_TABLE_PRIMARY_KEY_CHECK_SYM EQ table_primary_key_check_def | SOURCE_CONNECTION_AUTO_FAILOVER_SYM EQ real_ulong_num | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_SYM EQ assign_gtids_to_anonymous_transactions_def | source_file_def
ignore_server_id_list ::= /*empty*/ | ignore_server_id | ignore_server_id_list ',' ignore_server_id
ignore_server_id ::= ulong_num
privilege_check_def ::= user_ident_or_text | NULL_SYM
table_primary_key_check_def ::= STREAM_SYM | ON_SYM | OFF_SYM
assign_gtids_to_anonymous_transactions_def ::= OFF_SYM | LOCAL_SYM | TEXT_STRING
source_tls_ciphersuites_def ::= TEXT_STRING_sys_nonewline | NULL_SYM
source_log_file ::= MASTER_LOG_FILE_SYM | SOURCE_LOG_FILE_SYM
source_log_pos ::= MASTER_LOG_POS_SYM | SOURCE_LOG_POS_SYM
source_file_def ::= source_log_file EQ TEXT_STRING_sys_nonewline | source_log_pos EQ ulonglong_num | RELAY_LOG_FILE_SYM EQ TEXT_STRING_sys_nonewline | RELAY_LOG_POS_SYM EQ ulong_num
opt_channel ::= | FOR_SYM CHANNEL_SYM TEXT_STRING_sys_nonewline
create_table_stmt ::= CREATE opt_temporary TABLE_SYM opt_if_not_exists table_ident '(' table_element_list ')' opt_create_table_options_etc | CREATE opt_temporary TABLE_SYM opt_if_not_exists table_ident opt_create_table_options_etc | CREATE opt_temporary TABLE_SYM opt_if_not_exists table_ident LIKE table_ident | CREATE opt_temporary TABLE_SYM opt_if_not_exists table_ident '(' LIKE table_ident ')'
create_role_stmt ::= CREATE ROLE_SYM opt_if_not_exists role_list
create_resource_group_stmt ::= CREATE RESOURCE_SYM GROUP_SYM ident TYPE_SYM opt_equal resource_group_types opt_resource_group_vcpu_list opt_resource_group_priority opt_resource_group_enable_disable
create ::= CREATE DATABASE opt_if_not_exists ident opt_create_database_options | CREATE view_or_trigger_or_sp_or_event | CREATE USER opt_if_not_exists create_user_list default_role_clause require_clause connect_options opt_account_lock_password_expire_options opt_user_attribute | CREATE LOGFILE_SYM GROUP_SYM ident ADD lg_undofile opt_logfile_group_options | CREATE TABLESPACE_SYM ident opt_ts_datafile_name opt_logfile_group_name opt_tablespace_options | CREATE UNDO_SYM TABLESPACE_SYM ident ADD ts_datafile opt_undo_tablespace_options | CREATE SERVER_SYM ident_or_text FOREIGN DATA_SYM WRAPPER_SYM ident_or_text OPTIONS_SYM '(' server_options_list ')' | CREATE COMPRESSION_DICTIONARY_SYM opt_if_not_exists ident '(' create_compression_dictionary_allowed_expr ')'
create_srs_stmt ::= CREATE OR_SYM REPLACE_SYM SPATIAL_SYM REFERENCE_SYM SYSTEM_SYM real_ulonglong_num srs_attributes | CREATE SPATIAL_SYM REFERENCE_SYM SYSTEM_SYM opt_if_not_exists real_ulonglong_num srs_attributes
srs_attributes ::= | srs_attributes NAME_SYM TEXT_STRING_sys_nonewline | srs_attributes DEFINITION_SYM TEXT_STRING_sys_nonewline | srs_attributes ORGANIZATION_SYM TEXT_STRING_sys_nonewline IDENTIFIED_SYM BY real_ulonglong_num | srs_attributes DESCRIPTION_SYM TEXT_STRING_sys_nonewline
default_role_clause ::= | DEFAULT_SYM ROLE_SYM role_list
create_index_stmt ::= CREATE opt_unique_combo_clustering INDEX_SYM ident opt_index_type_clause ON_SYM table_ident '(' key_list_with_expression ')' opt_index_options opt_index_lock_and_algorithm | CREATE FULLTEXT_SYM INDEX_SYM ident ON_SYM table_ident '(' key_list_with_expression ')' opt_fulltext_index_options opt_index_lock_and_algorithm | CREATE SPATIAL_SYM INDEX_SYM ident ON_SYM table_ident '(' key_list_with_expression ')' opt_spatial_index_options opt_index_lock_and_algorithm
create_compression_dictionary_allowed_expr ::= text_literal | variable
server_options_list ::= server_option | server_options_list ',' server_option
server_option ::= USER TEXT_STRING_sys | HOST_SYM TEXT_STRING_sys | DATABASE TEXT_STRING_sys | OWNER_SYM TEXT_STRING_sys | PASSWORD TEXT_STRING_sys | SOCKET_SYM TEXT_STRING_sys | PORT_SYM ulong_num
event_tail ::= EVENT_SYM opt_if_not_exists sp_name ON_SYM SCHEDULE_SYM ev_schedule_time opt_ev_on_completion opt_ev_status opt_ev_comment DO_SYM ev_sql_stmt
ev_schedule_time ::= EVERY_SYM expr interval ev_starts ev_ends | AT_SYM expr
opt_ev_status ::= | ENABLE_SYM | DISABLE_SYM ON_SYM SLAVE | DISABLE_SYM
ev_starts ::= | STARTS_SYM expr
ev_ends ::= /*empty*/ | ENDS_SYM expr
opt_ev_on_completion ::= | ev_on_completion
ev_on_completion ::= ON_SYM COMPLETION_SYM PRESERVE_SYM | ON_SYM COMPLETION_SYM NOT_SYM PRESERVE_SYM
opt_ev_comment ::= | COMMENT_SYM TEXT_STRING_sys
ev_sql_stmt ::= ev_sql_stmt_inner
ev_sql_stmt_inner ::= sp_proc_stmt_statement | sp_proc_stmt_return | sp_proc_stmt_if | case_stmt_specification | sp_labeled_block | sp_unlabeled_block | sp_labeled_control | sp_proc_stmt_unlabeled | sp_proc_stmt_leave | sp_proc_stmt_iterate | sp_proc_stmt_open | sp_proc_stmt_fetch | sp_proc_stmt_close
sp_name ::= ident '.' ident | ident
sp_a_chistics ::= | sp_a_chistics sp_chistic
sp_c_chistics ::= | sp_c_chistics sp_c_chistic
sp_chistic ::= COMMENT_SYM TEXT_STRING_sys | LANGUAGE_SYM SQL_SYM | NO_SYM SQL_SYM | CONTAINS_SYM SQL_SYM | READS_SYM SQL_SYM DATA_SYM | MODIFIES_SYM SQL_SYM DATA_SYM | sp_suid
sp_c_chistic ::= sp_chistic | DETERMINISTIC_SYM | not DETERMINISTIC_SYM
sp_suid ::= SQL_SYM SECURITY_SYM DEFINER_SYM | SQL_SYM SECURITY_SYM INVOKER_SYM
call_stmt ::= CALL_SYM sp_name opt_paren_expr_list
opt_paren_expr_list ::= | '(' opt_expr_list ')'
sp_fdparam_list ::= /*empty*/ | sp_fdparams
sp_fdparams ::= sp_fdparams ',' sp_fdparam | sp_fdparam
sp_fdparam ::= ident type opt_collate
sp_pdparam_list ::= /*empty*/ | sp_pdparams
sp_pdparams ::= sp_pdparams ',' sp_pdparam | sp_pdparam
sp_pdparam ::= sp_opt_inout ident type opt_collate
sp_opt_inout ::= | IN_SYM | OUT_SYM | INOUT_SYM
sp_proc_stmts ::= | sp_proc_stmts sp_proc_stmt ';'
sp_proc_stmts1 ::= sp_proc_stmt ';' | sp_proc_stmts1 sp_proc_stmt ';'
sp_decls ::= | sp_decls sp_decl ';'
sp_decl ::= DECLARE_SYM sp_decl_idents type opt_collate sp_opt_default | DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond | DECLARE_SYM sp_handler_type HANDLER_SYM FOR_SYM sp_hcond_list sp_proc_stmt | DECLARE_SYM ident CURSOR_SYM FOR_SYM select_stmt
sp_handler_type ::= EXIT_SYM | CONTINUE_SYM
sp_hcond_list ::= sp_hcond_element | sp_hcond_list ',' sp_hcond_element
sp_hcond_element ::= sp_hcond
sp_cond ::= ulong_num | sqlstate
sqlstate ::= SQLSTATE_SYM opt_value TEXT_STRING_literal
opt_value ::= | VALUE_SYM
sp_hcond ::= sp_cond | ident | SQLWARNING_SYM | not FOUND_SYM | SQLEXCEPTION_SYM
signal_stmt ::= SIGNAL_SYM signal_value opt_set_signal_information
signal_value ::= ident | sqlstate
opt_signal_value ::= | signal_value
opt_set_signal_information ::= | SET_SYM signal_information_item_list
signal_information_item_list ::= signal_condition_information_item_name EQ signal_allowed_expr | signal_information_item_list ',' signal_condition_information_item_name EQ signal_allowed_expr
signal_allowed_expr ::= literal_or_null | variable | simple_ident
signal_condition_information_item_name ::= CLASS_ORIGIN_SYM | SUBCLASS_ORIGIN_SYM | CONSTRAINT_CATALOG_SYM | CONSTRAINT_SCHEMA_SYM | CONSTRAINT_NAME_SYM | CATALOG_NAME_SYM | SCHEMA_NAME_SYM | TABLE_NAME_SYM | COLUMN_NAME_SYM | CURSOR_NAME_SYM | MESSAGE_TEXT_SYM | MYSQL_ERRNO_SYM
resignal_stmt ::= RESIGNAL_SYM opt_signal_value opt_set_signal_information
get_diagnostics ::= GET_SYM which_area DIAGNOSTICS_SYM diagnostics_information
which_area ::= | CURRENT_SYM | STACKED_SYM
diagnostics_information ::= statement_information | CONDITION_SYM condition_number condition_information
statement_information ::= statement_information_item | statement_information ',' statement_information_item
statement_information_item ::= simple_target_specification EQ statement_information_item_name
simple_target_specification ::= ident | '@' ident_or_text
statement_information_item_name ::= NUMBER_SYM | ROW_COUNT_SYM
condition_number ::= signal_allowed_expr
condition_information ::= condition_information_item | condition_information ',' condition_information_item
condition_information_item ::= simple_target_specification EQ condition_information_item_name
condition_information_item_name ::= CLASS_ORIGIN_SYM | SUBCLASS_ORIGIN_SYM | CONSTRAINT_CATALOG_SYM | CONSTRAINT_SCHEMA_SYM | CONSTRAINT_NAME_SYM | CATALOG_NAME_SYM | SCHEMA_NAME_SYM | TABLE_NAME_SYM | COLUMN_NAME_SYM | CURSOR_NAME_SYM | MESSAGE_TEXT_SYM | MYSQL_ERRNO_SYM | RETURNED_SQLSTATE_SYM
sp_decl_idents ::= ident | sp_decl_idents ',' ident
sp_opt_default ::= | DEFAULT_SYM expr
sp_proc_stmt ::= sp_proc_stmt_statement | sp_proc_stmt_return | sp_proc_stmt_if | case_stmt_specification | sp_labeled_block | sp_unlabeled_block | sp_labeled_control | sp_proc_stmt_unlabeled | sp_proc_stmt_leave | sp_proc_stmt_iterate | sp_proc_stmt_open | sp_proc_stmt_fetch | sp_proc_stmt_close
sp_proc_stmt_if ::= IF sp_if END IF
sp_proc_stmt_statement ::= simple_statement
sp_proc_stmt_return ::= RETURN_SYM expr
sp_proc_stmt_unlabeled ::= sp_unlabeled_control
sp_proc_stmt_leave ::= LEAVE_SYM label_ident
sp_proc_stmt_iterate ::= ITERATE_SYM label_ident
sp_proc_stmt_open ::= OPEN_SYM ident
sp_proc_stmt_fetch ::= FETCH_SYM sp_opt_fetch_noise ident INTO sp_fetch_list
sp_proc_stmt_close ::= CLOSE_SYM ident
sp_opt_fetch_noise ::= /*empty*/ | NEXT_SYM FROM | FROM
sp_fetch_list ::= ident | sp_fetch_list ',' ident
sp_if ::= expr THEN_SYM sp_proc_stmts1 sp_elseifs
sp_elseifs ::= /*empty*/ | ELSEIF_SYM sp_if | ELSE sp_proc_stmts1
case_stmt_specification ::= simple_case_stmt | searched_case_stmt
simple_case_stmt ::= CASE_SYM expr simple_when_clause_list else_clause_opt END CASE_SYM
searched_case_stmt ::= CASE_SYM searched_when_clause_list else_clause_opt END CASE_SYM
simple_when_clause_list ::= simple_when_clause | simple_when_clause_list simple_when_clause
searched_when_clause_list ::= searched_when_clause | searched_when_clause_list searched_when_clause
simple_when_clause ::= WHEN_SYM expr THEN_SYM sp_proc_stmts1
searched_when_clause ::= WHEN_SYM expr THEN_SYM sp_proc_stmts1
else_clause_opt ::= | ELSE sp_proc_stmts1
sp_labeled_control ::= label_ident ':' sp_unlabeled_control sp_opt_label
sp_opt_label ::= | label_ident
sp_labeled_block ::= label_ident ':' sp_block_content sp_opt_label
sp_unlabeled_block ::= sp_block_content
sp_block_content ::= BEGIN_SYM sp_decls sp_proc_stmts END
sp_unlabeled_control ::= LOOP_SYM sp_proc_stmts1 END LOOP_SYM | WHILE_SYM expr DO_SYM sp_proc_stmts1 END WHILE_SYM | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM expr END REPEAT_SYM
trg_action_time ::= BEFORE_SYM | AFTER_SYM
trg_event ::= INSERT_SYM | UPDATE_SYM | DELETE_SYM
opt_ts_datafile_name ::= | ADD ts_datafile
opt_logfile_group_name ::= | USE_SYM LOGFILE_SYM GROUP_SYM ident
opt_tablespace_options ::= | tablespace_option_list
tablespace_option_list ::= tablespace_option | tablespace_option_list opt_comma tablespace_option
tablespace_option ::= ts_option_initial_size | ts_option_autoextend_size | ts_option_max_size | ts_option_extent_size | ts_option_nodegroup | ts_option_engine | ts_option_wait | ts_option_comment | ts_option_file_block_size | ts_option_encryption | ts_option_encryption_key_id | ts_option_engine_attribute
opt_alter_tablespace_options ::= | alter_tablespace_option_list
alter_tablespace_option_list ::= alter_tablespace_option | alter_tablespace_option_list opt_comma alter_tablespace_option
alter_tablespace_option ::= ts_option_initial_size | ts_option_autoextend_size | ts_option_max_size | ts_option_engine | ts_option_wait | ts_option_encryption | ts_option_encryption_key_id | ts_option_engine_attribute
opt_undo_tablespace_options ::= | undo_tablespace_option_list
undo_tablespace_option_list ::= undo_tablespace_option | undo_tablespace_option_list opt_comma undo_tablespace_option
undo_tablespace_option ::= ts_option_engine
opt_logfile_group_options ::= | logfile_group_option_list
logfile_group_option_list ::= logfile_group_option | logfile_group_option_list opt_comma logfile_group_option
logfile_group_option ::= ts_option_initial_size | ts_option_undo_buffer_size | ts_option_redo_buffer_size | ts_option_nodegroup | ts_option_engine | ts_option_wait | ts_option_comment
opt_alter_logfile_group_options ::= | alter_logfile_group_option_list
alter_logfile_group_option_list ::= alter_logfile_group_option | alter_logfile_group_option_list opt_comma alter_logfile_group_option
alter_logfile_group_option ::= ts_option_initial_size | ts_option_engine | ts_option_wait
ts_datafile ::= DATAFILE_SYM TEXT_STRING_sys
undo_tablespace_state ::= ACTIVE_SYM | INACTIVE_SYM
lg_undofile ::= UNDOFILE_SYM TEXT_STRING_sys
ts_option_initial_size ::= INITIAL_SIZE_SYM opt_equal size_number
ts_option_autoextend_size ::= option_autoextend_size
option_autoextend_size ::= AUTOEXTEND_SIZE_SYM opt_equal size_number
ts_option_max_size ::= MAX_SIZE_SYM opt_equal size_number
ts_option_extent_size ::= EXTENT_SIZE_SYM opt_equal size_number
ts_option_undo_buffer_size ::= UNDO_BUFFER_SIZE_SYM opt_equal size_number
ts_option_redo_buffer_size ::= REDO_BUFFER_SIZE_SYM opt_equal size_number
ts_option_nodegroup ::= NODEGROUP_SYM opt_equal real_ulong_num
ts_option_comment ::= COMMENT_SYM opt_equal TEXT_STRING_sys
ts_option_engine ::= opt_storage ENGINE_SYM opt_equal ident_or_text
ts_option_file_block_size ::= FILE_BLOCK_SIZE_SYM opt_equal size_number
ts_option_wait ::= WAIT_SYM | NO_WAIT_SYM
ts_option_encryption ::= ENCRYPTION_SYM opt_equal TEXT_STRING_sys
ts_option_encryption_key_id ::= ENCRYPTION_KEY_ID_SYM opt_equal real_ulong_num
ts_option_engine_attribute ::= ENGINE_ATTRIBUTE_SYM opt_equal json_attribute
size_number ::= real_ulonglong_num | IDENT_sys
opt_create_table_options_etc ::= create_table_options opt_create_partitioning_etc | opt_create_partitioning_etc
opt_create_partitioning_etc ::= partition_clause opt_duplicate_as_qe | opt_duplicate_as_qe
opt_duplicate_as_qe ::= | duplicate as_create_query_expression | as_create_query_expression
as_create_query_expression ::= AS query_expression_or_parens | query_expression_or_parens
partition_clause ::= PARTITION_SYM BY part_type_def opt_num_parts opt_sub_part opt_part_defs
part_type_def ::= opt_linear KEY_SYM opt_key_algo '(' opt_name_list ')' | opt_linear HASH_SYM '(' bit_expr ')' | RANGE_SYM '(' bit_expr ')' | RANGE_SYM COLUMNS '(' name_list ')' | LIST_SYM '(' bit_expr ')' | LIST_SYM COLUMNS '(' name_list ')'
opt_linear ::= | LINEAR_SYM
opt_key_algo ::= | ALGORITHM_SYM EQ real_ulong_num
opt_num_parts ::= | PARTITIONS_SYM real_ulong_num
opt_sub_part ::= | SUBPARTITION_SYM BY opt_linear HASH_SYM '(' bit_expr ')' opt_num_subparts | SUBPARTITION_SYM BY opt_linear KEY_SYM opt_key_algo '(' name_list ')' opt_num_subparts
opt_name_list ::= | name_list
name_list ::= ident | name_list ',' ident
opt_num_subparts ::= | SUBPARTITIONS_SYM real_ulong_num
opt_part_defs ::= | '(' part_def_list ')'
part_def_list ::= part_definition | part_def_list ',' part_definition
part_definition ::= PARTITION_SYM ident opt_part_values opt_part_options opt_sub_partition
opt_part_values ::= | VALUES LESS_SYM THAN_SYM part_func_max | VALUES IN_SYM part_values_in
part_func_max ::= MAX_VALUE_SYM | part_value_item_list_paren
part_values_in ::= part_value_item_list_paren | '(' part_value_list ')'
part_value_list ::= part_value_item_list_paren | part_value_list ',' part_value_item_list_paren
part_value_item_list_paren ::= '(' part_value_item_list ')'
part_value_item_list ::= part_value_item | part_value_item_list ',' part_value_item
part_value_item ::= MAX_VALUE_SYM | bit_expr
opt_sub_partition ::= | '(' sub_part_list ')'
sub_part_list ::= sub_part_definition | sub_part_list ',' sub_part_definition
sub_part_definition ::= SUBPARTITION_SYM ident_or_text opt_part_options
opt_part_options ::= | part_option_list
part_option_list ::= part_option_list part_option | part_option
part_option ::= TABLESPACE_SYM opt_equal ident | opt_storage ENGINE_SYM opt_equal ident_or_text | NODEGROUP_SYM opt_equal real_ulong_num | MAX_ROWS opt_equal real_ulonglong_num | MIN_ROWS opt_equal real_ulonglong_num | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys | INDEX_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys | COMMENT_SYM opt_equal TEXT_STRING_sys
alter_database_options ::= alter_database_option | alter_database_options alter_database_option
alter_database_option ::= create_database_option | READ_SYM ONLY_SYM opt_equal ternary_option
opt_create_database_options ::= | create_database_options
create_database_options ::= create_database_option | create_database_options create_database_option
create_database_option ::= default_collation | default_charset | default_encryption
opt_if_not_exists ::= | IF not EXISTS
create_table_options_space_separated ::= create_table_option | create_table_options_space_separated create_table_option
create_table_options ::= create_table_option | create_table_options opt_comma create_table_option
opt_comma ::= /*empty*/ | ','
create_table_option ::= ENGINE_SYM opt_equal ident_or_text | SECONDARY_ENGINE_SYM opt_equal NULL_SYM | SECONDARY_ENGINE_SYM opt_equal ident_or_text | MAX_ROWS opt_equal ulonglong_num | MIN_ROWS opt_equal ulonglong_num | AVG_ROW_LENGTH opt_equal ulong_num | PASSWORD opt_equal TEXT_STRING_sys | COMMENT_SYM opt_equal TEXT_STRING_sys | COMPRESSION_SYM opt_equal TEXT_STRING_sys | ENCRYPTION_SYM opt_equal TEXT_STRING_sys | ENCRYPTION_KEY_ID_SYM opt_equal real_ulong_num | AUTO_INC opt_equal ulonglong_num | PACK_KEYS_SYM opt_equal ternary_option | STATS_AUTO_RECALC_SYM opt_equal ternary_option | STATS_PERSISTENT_SYM opt_equal ternary_option | STATS_SAMPLE_PAGES_SYM opt_equal ulong_num | STATS_SAMPLE_PAGES_SYM opt_equal DEFAULT_SYM | CHECKSUM_SYM opt_equal ulong_num | TABLE_CHECKSUM_SYM opt_equal ulong_num | DELAY_KEY_WRITE_SYM opt_equal ulong_num | ROW_FORMAT_SYM opt_equal row_types | UNION_SYM opt_equal '(' opt_table_list ')' | default_charset | default_collation | INSERT_METHOD opt_equal merge_insert_types | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys | INDEX_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys | TABLESPACE_SYM opt_equal ident | STORAGE_SYM DISK_SYM | STORAGE_SYM MEMORY_SYM | CONNECTION_SYM opt_equal TEXT_STRING_sys | KEY_BLOCK_SIZE opt_equal ulong_num | START_SYM TRANSACTION_SYM | ENGINE_ATTRIBUTE_SYM opt_equal json_attribute | SECONDARY_ENGINE_ATTRIBUTE_SYM opt_equal json_attribute | option_autoextend_size
ternary_option ::= ulong_num | DEFAULT_SYM
default_charset ::= opt_default character_set opt_equal charset_name
default_collation ::= opt_default COLLATE_SYM opt_equal collation_name
default_encryption ::= opt_default ENCRYPTION_SYM opt_equal TEXT_STRING_sys
row_types ::= DEFAULT_SYM | FIXED_SYM | DYNAMIC_SYM | COMPRESSED_SYM | REDUNDANT_SYM | COMPACT_SYM
merge_insert_types ::= NO_SYM | FIRST_SYM | LAST_SYM
udf_type ::= STRING_SYM | REAL_SYM | DECIMAL_SYM | INT_SYM
table_element_list ::= table_element | table_element_list ',' table_element
table_element ::= column_def | table_constraint_def
column_def ::= ident field_def opt_references
opt_references ::= | references
table_constraint_def ::= key_or_index opt_index_name_and_type '(' key_list_with_expression ')' opt_index_options | FULLTEXT_SYM opt_key_or_index opt_ident '(' key_list_with_expression ')' opt_fulltext_index_options | SPATIAL_SYM opt_key_or_index opt_ident '(' key_list_with_expression ')' opt_spatial_index_options | opt_constraint_name constraint_key_type opt_index_name_and_type '(' key_list_with_expression ')' opt_index_options | opt_constraint_name FOREIGN KEY_SYM opt_ident '(' key_list ')' references | opt_constraint_name check_constraint opt_constraint_enforcement
check_constraint ::= CHECK_SYM '(' expr ')'
opt_constraint_name ::= | CONSTRAINT opt_ident
opt_not ::= | NOT_SYM
opt_constraint_enforcement ::= | constraint_enforcement
constraint_enforcement ::= opt_not ENFORCED_SYM
field_def ::= type opt_column_attribute_list | type opt_collate opt_generated_always AS '(' expr ')' opt_stored_attribute opt_column_attribute_list
opt_generated_always ::= /*empty*/ | GENERATED ALWAYS_SYM
opt_stored_attribute ::= | VIRTUAL_SYM | STORED_SYM
type ::= int_type opt_field_length field_options | real_type opt_precision field_options | numeric_type float_options field_options | BIT_SYM | BIT_SYM field_length | BOOL_SYM | BOOLEAN_SYM | CHAR_SYM field_length opt_charset_with_opt_binary | CHAR_SYM opt_charset_with_opt_binary | nchar field_length opt_bin_mod | nchar opt_bin_mod | BINARY_SYM field_length | BINARY_SYM | varchar field_length opt_charset_with_opt_binary | nvarchar field_length opt_bin_mod | VARBINARY_SYM field_length | YEAR_SYM opt_field_length field_options | DATE_SYM | TIME_SYM type_datetime_precision | TIMESTAMP_SYM type_datetime_precision | DATETIME_SYM type_datetime_precision | TINYBLOB_SYM | BLOB_SYM opt_field_length | spatial_type | MEDIUMBLOB_SYM | LONGBLOB_SYM | LONG_SYM VARBINARY_SYM | LONG_SYM varchar opt_charset_with_opt_binary | TINYTEXT_SYN opt_charset_with_opt_binary | TEXT_SYM opt_field_length opt_charset_with_opt_binary | MEDIUMTEXT_SYM opt_charset_with_opt_binary | LONGTEXT_SYM opt_charset_with_opt_binary | ENUM_SYM '(' string_list ')' opt_charset_with_opt_binary | SET_SYM '(' string_list ')' opt_charset_with_opt_binary | LONG_SYM opt_charset_with_opt_binary | SERIAL_SYM | JSON_SYM
spatial_type ::= GEOMETRY_SYM | GEOMETRYCOLLECTION_SYM | POINT_SYM | MULTIPOINT_SYM | LINESTRING_SYM | MULTILINESTRING_SYM | POLYGON_SYM | MULTIPOLYGON_SYM
nchar ::= NCHAR_SYM | NATIONAL_SYM CHAR_SYM
varchar ::= CHAR_SYM VARYING | VARCHAR_SYM
nvarchar ::= NATIONAL_SYM VARCHAR_SYM | NVARCHAR_SYM | NCHAR_SYM VARCHAR_SYM | NATIONAL_SYM CHAR_SYM VARYING | NCHAR_SYM VARYING
int_type ::= INT_SYM | TINYINT_SYM | SMALLINT_SYM | MEDIUMINT_SYM | BIGINT_SYM
real_type ::= REAL_SYM | DOUBLE_SYM opt_PRECISION
opt_PRECISION ::= /*empty*/ | PRECISION
numeric_type ::= FLOAT_SYM | DECIMAL_SYM | NUMERIC_SYM | FIXED_SYM
standard_float_options ::= | field_length
float_options ::= | field_length | precision
precision ::= '(' NUM ',' NUM ')'
type_datetime_precision ::= | '(' NUM ')'
func_datetime_precision ::= | '(' ')' | '(' NUM ')'
field_options ::= | field_opt_list
field_opt_list ::= field_opt_list field_option | field_option
field_option ::= SIGNED_SYM | UNSIGNED_SYM | ZEROFILL_SYM
field_length ::= '(' LONG_NUM ')' | '(' ULONGLONG_NUM ')' | '(' DECIMAL_NUM ')' | '(' NUM ')'
opt_field_length ::= | field_length
opt_precision ::= | precision
opt_column_attribute_list ::= | column_attribute_list
column_attribute_list ::= column_attribute_list column_attribute | column_attribute
column_attribute ::= NULL_SYM | not NULL_SYM | not SECONDARY_SYM | DEFAULT_SYM now_or_signed_literal | DEFAULT_SYM '(' expr ')' | ON_SYM UPDATE_SYM now | AUTO_INC | SERIAL_SYM DEFAULT_SYM VALUE_SYM | opt_primary KEY_SYM | UNIQUE_SYM | UNIQUE_SYM KEY_SYM | CLUSTERING_SYM | CLUSTERING_SYM KEY_SYM | COMMENT_SYM TEXT_STRING_sys | COLLATE_SYM collation_name | COLUMN_FORMAT_SYM column_format | COLUMN_FORMAT_SYM COMPRESSED_SYM opt_with_compression_dictionary | STORAGE_SYM storage_media | SRID_SYM real_ulonglong_num | opt_constraint_name check_constraint | constraint_enforcement | ENGINE_ATTRIBUTE_SYM opt_equal json_attribute | SECONDARY_ENGINE_ATTRIBUTE_SYM opt_equal json_attribute | visibility
opt_with_compression_dictionary ::= | WITH COMPRESSION_DICTIONARY_SYM ident
column_format ::= DEFAULT_SYM | FIXED_SYM | DYNAMIC_SYM
storage_media ::= DEFAULT_SYM | DISK_SYM | MEMORY_SYM
now ::= NOW_SYM func_datetime_precision
now_or_signed_literal ::= now | signed_literal_or_null
character_set ::= CHAR_SYM SET_SYM | CHARSET
charset_name ::= ident_or_text | BINARY_SYM
opt_load_data_charset ::= | character_set charset_name
old_or_new_charset_name ::= ident_or_text | BINARY_SYM
old_or_new_charset_name_or_default ::= old_or_new_charset_name | DEFAULT_SYM
collation_name ::= ident_or_text | BINARY_SYM
opt_collate ::= | COLLATE_SYM collation_name
opt_default ::= | DEFAULT_SYM
ascii ::= ASCII_SYM | BINARY_SYM ASCII_SYM | ASCII_SYM BINARY_SYM
unicode ::= UNICODE_SYM | UNICODE_SYM BINARY_SYM | BINARY_SYM UNICODE_SYM
opt_charset_with_opt_binary ::= | ascii | unicode | BYTE_SYM | character_set charset_name opt_bin_mod | BINARY_SYM | BINARY_SYM character_set charset_name
opt_bin_mod ::= | BINARY_SYM
ws_num_codepoints ::= '(' real_ulong_num ')'
opt_primary ::= /*empty*/ | PRIMARY_SYM
references ::= REFERENCES table_ident opt_ref_list opt_match_clause opt_on_update_delete
opt_ref_list ::= | '(' reference_list ')'
reference_list ::= reference_list ',' ident | ident
opt_match_clause ::= | MATCH FULL | MATCH PARTIAL | MATCH SIMPLE_SYM
opt_on_update_delete ::= | ON_SYM UPDATE_SYM delete_option | ON_SYM DELETE_SYM delete_option | ON_SYM UPDATE_SYM delete_option ON_SYM DELETE_SYM delete_option | ON_SYM DELETE_SYM delete_option ON_SYM UPDATE_SYM delete_option
delete_option ::= RESTRICT | CASCADE | SET_SYM NULL_SYM | NO_SYM ACTION | SET_SYM DEFAULT_SYM
constraint_key_type ::= PRIMARY_SYM KEY_SYM | unique_combo_clustering opt_key_or_index
key_or_index ::= KEY_SYM | INDEX_SYM
opt_key_or_index ::= | key_or_index
keys_or_index ::= KEYS | INDEX_SYM | INDEXES
opt_unique_combo_clustering ::= | unique_combo_clustering
unique_combo_clustering ::= UNIQUE_SYM | UNIQUE_SYM KEY_SYM | CLUSTERING_SYM | CLUSTERING_SYM KEY_SYM | UNIQUE_SYM CLUSTERING_SYM | UNIQUE_SYM CLUSTERING_SYM KEY_SYM | CLUSTERING_SYM UNIQUE_SYM | CLUSTERING_SYM UNIQUE_SYM KEY_SYM
opt_fulltext_index_options ::= | fulltext_index_options
fulltext_index_options ::= fulltext_index_option | fulltext_index_options fulltext_index_option
fulltext_index_option ::= common_index_option | WITH PARSER_SYM IDENT_sys
opt_spatial_index_options ::= | spatial_index_options
spatial_index_options ::= spatial_index_option | spatial_index_options spatial_index_option
spatial_index_option ::= common_index_option
opt_index_options ::= | index_options
index_options ::= index_option | index_options index_option
index_option ::= common_index_option | index_type_clause
common_index_option ::= KEY_BLOCK_SIZE opt_equal ulong_num | COMMENT_SYM TEXT_STRING_sys | visibility | ENGINE_ATTRIBUTE_SYM opt_equal json_attribute | SECONDARY_ENGINE_ATTRIBUTE_SYM opt_equal json_attribute
opt_index_name_and_type ::= opt_ident | opt_ident USING index_type | ident TYPE_SYM index_type
opt_index_type_clause ::= | index_type_clause
index_type_clause ::= USING index_type | TYPE_SYM index_type
visibility ::= VISIBLE_SYM | INVISIBLE_SYM
index_type ::= BTREE_SYM | RTREE_SYM | HASH_SYM
key_list ::= key_list ',' key_part | key_part
key_part ::= ident opt_ordering_direction | ident '(' NUM ')' opt_ordering_direction
key_list_with_expression ::= key_list_with_expression ',' key_part_with_expression | key_part_with_expression
key_part_with_expression ::= key_part | '(' expr ')' opt_ordering_direction
opt_ident ::= | ident
opt_component ::= | '.' ident
string_list ::= text_string | string_list ',' text_string
alter_table_stmt ::= ALTER TABLE_SYM table_ident opt_alter_table_actions | ALTER TABLE_SYM table_ident standalone_alter_table_action
alter_database_stmt ::= ALTER DATABASE ident_or_empty alter_database_options
alter_procedure_stmt ::= ALTER PROCEDURE_SYM sp_name sp_a_chistics
alter_function_stmt ::= ALTER FUNCTION_SYM sp_name sp_a_chistics
alter_view_stmt ::= ALTER view_algorithm definer_opt view_tail | ALTER definer_opt view_tail
alter_event_stmt ::= ALTER definer_opt EVENT_SYM sp_name ev_alter_on_schedule_completion opt_ev_rename_to opt_ev_status opt_ev_comment opt_ev_sql_stmt
alter_logfile_stmt ::= ALTER LOGFILE_SYM GROUP_SYM ident ADD lg_undofile opt_alter_logfile_group_options
alter_tablespace_stmt ::= ALTER TABLESPACE_SYM ident ADD ts_datafile opt_alter_tablespace_options | ALTER TABLESPACE_SYM ident DROP ts_datafile opt_alter_tablespace_options | ALTER TABLESPACE_SYM ident RENAME TO_SYM ident | ALTER TABLESPACE_SYM ident alter_tablespace_option_list
alter_undo_tablespace_stmt ::= ALTER UNDO_SYM TABLESPACE_SYM ident SET_SYM undo_tablespace_state opt_undo_tablespace_options
alter_server_stmt ::= ALTER SERVER_SYM ident_or_text OPTIONS_SYM '(' server_options_list ')'
alter_user_stmt ::= alter_user_command alter_user_list require_clause connect_options opt_account_lock_password_expire_options opt_user_attribute | alter_user_command user_func IDENTIFIED_SYM BY RANDOM_SYM PASSWORD opt_replace_password opt_retain_current_password | alter_user_command user_func IDENTIFIED_SYM BY TEXT_STRING opt_replace_password opt_retain_current_password | alter_user_command user_func DISCARD_SYM OLD_SYM PASSWORD | alter_user_command user DEFAULT_SYM ROLE_SYM ALL | alter_user_command user DEFAULT_SYM ROLE_SYM NONE_SYM | alter_user_command user DEFAULT_SYM ROLE_SYM role_list
opt_replace_password ::= | REPLACE_SYM TEXT_STRING_password
alter_resource_group_stmt ::= ALTER RESOURCE_SYM GROUP_SYM ident opt_resource_group_vcpu_list opt_resource_group_priority opt_resource_group_enable_disable opt_force
alter_user_command ::= ALTER USER if_exists
opt_user_attribute ::= | ATTRIBUTE_SYM TEXT_STRING_literal | COMMENT_SYM TEXT_STRING_literal
opt_account_lock_password_expire_options ::= | opt_account_lock_password_expire_option_list
opt_account_lock_password_expire_option_list ::= opt_account_lock_password_expire_option | opt_account_lock_password_expire_option_list opt_account_lock_password_expire_option
opt_account_lock_password_expire_option ::= ACCOUNT_SYM UNLOCK_SYM | ACCOUNT_SYM LOCK_SYM | PASSWORD EXPIRE_SYM | PASSWORD EXPIRE_SYM INTERVAL_SYM real_ulong_num DAY_SYM | PASSWORD EXPIRE_SYM NEVER_SYM | PASSWORD EXPIRE_SYM DEFAULT_SYM | PASSWORD HISTORY_SYM real_ulong_num | PASSWORD HISTORY_SYM DEFAULT_SYM | PASSWORD REUSE_SYM INTERVAL_SYM real_ulong_num DAY_SYM | PASSWORD REUSE_SYM INTERVAL_SYM DEFAULT_SYM | PASSWORD REQUIRE_SYM CURRENT_SYM | PASSWORD REQUIRE_SYM CURRENT_SYM DEFAULT_SYM | PASSWORD REQUIRE_SYM CURRENT_SYM OPTIONAL_SYM | FAILED_LOGIN_ATTEMPTS_SYM real_ulong_num | PASSWORD_LOCK_TIME_SYM real_ulong_num | PASSWORD_LOCK_TIME_SYM UNBOUNDED_SYM
connect_options ::= | WITH connect_option_list
connect_option_list ::= connect_option_list connect_option | connect_option
connect_option ::= MAX_QUERIES_PER_HOUR ulong_num | MAX_UPDATES_PER_HOUR ulong_num | MAX_CONNECTIONS_PER_HOUR ulong_num | MAX_USER_CONNECTIONS_SYM ulong_num
user_func ::= USER '(' ')'
ev_alter_on_schedule_completion ::= | ON_SYM SCHEDULE_SYM ev_schedule_time | ev_on_completion | ON_SYM SCHEDULE_SYM ev_schedule_time ev_on_completion
opt_ev_rename_to ::= | RENAME TO_SYM sp_name
opt_ev_sql_stmt ::= | DO_SYM ev_sql_stmt
ident_or_empty ::= | ident
opt_alter_table_actions ::= opt_alter_command_list | opt_alter_command_list alter_table_partition_options
standalone_alter_table_action ::= standalone_alter_commands | alter_commands_modifier_list ',' standalone_alter_commands
alter_table_partition_options ::= partition_clause | REMOVE_SYM PARTITIONING_SYM
opt_alter_command_list ::= | alter_commands_modifier_list | alter_list | alter_commands_modifier_list ',' alter_list
standalone_alter_commands ::= DISCARD_SYM TABLESPACE_SYM | IMPORT TABLESPACE_SYM | ADD PARTITION_SYM opt_no_write_to_binlog | ADD PARTITION_SYM opt_no_write_to_binlog '(' part_def_list ')' | ADD PARTITION_SYM opt_no_write_to_binlog PARTITIONS_SYM real_ulong_num | DROP PARTITION_SYM ident_string_list | REBUILD_SYM PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list | OPTIMIZE PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list | ANALYZE_SYM PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list | CHECK_SYM PARTITION_SYM all_or_alt_part_name_list opt_mi_check_types | REPAIR PARTITION_SYM opt_no_write_to_binlog all_or_alt_part_name_list opt_mi_repair_types | COALESCE PARTITION_SYM opt_no_write_to_binlog real_ulong_num | TRUNCATE_SYM PARTITION_SYM all_or_alt_part_name_list | REORGANIZE_SYM PARTITION_SYM opt_no_write_to_binlog | REORGANIZE_SYM PARTITION_SYM opt_no_write_to_binlog ident_string_list INTO '(' part_def_list ')' | EXCHANGE_SYM PARTITION_SYM ident WITH TABLE_SYM table_ident opt_with_validation | DISCARD_SYM PARTITION_SYM all_or_alt_part_name_list TABLESPACE_SYM | IMPORT PARTITION_SYM all_or_alt_part_name_list TABLESPACE_SYM | SECONDARY_LOAD_SYM | SECONDARY_UNLOAD_SYM
opt_with_validation ::= | with_validation
with_validation ::= WITH VALIDATION_SYM | WITHOUT_SYM VALIDATION_SYM
all_or_alt_part_name_list ::= ALL | ident_string_list
alter_list ::= alter_list_item | alter_list ',' alter_list_item | alter_list ',' alter_commands_modifier | create_table_options_space_separated | alter_list ',' create_table_options_space_separated
alter_commands_modifier_list ::= alter_commands_modifier | alter_commands_modifier_list ',' alter_commands_modifier
alter_list_item ::= ADD opt_column ident field_def opt_references opt_place | ADD opt_column '(' table_element_list ')' | ADD table_constraint_def | CHANGE opt_column ident ident field_def opt_place | MODIFY_SYM opt_column ident field_def opt_place | DROP opt_column ident opt_restrict | DROP FOREIGN KEY_SYM ident | DROP PRIMARY_SYM KEY_SYM | DROP key_or_index ident | DROP CHECK_SYM ident | DROP CONSTRAINT ident | DISABLE_SYM KEYS | ENABLE_SYM KEYS | ALTER opt_column ident SET_SYM DEFAULT_SYM signed_literal_or_null | ALTER opt_column ident SET_SYM DEFAULT_SYM '(' expr ')' | ALTER opt_column ident DROP DEFAULT_SYM | ALTER opt_column ident SET_SYM visibility | ALTER INDEX_SYM ident visibility | ALTER CHECK_SYM ident constraint_enforcement | ALTER CONSTRAINT ident constraint_enforcement | RENAME opt_to table_ident | RENAME key_or_index ident TO_SYM ident | RENAME COLUMN_SYM ident TO_SYM ident | CONVERT_SYM TO_SYM character_set charset_name opt_collate | CONVERT_SYM TO_SYM character_set DEFAULT_SYM opt_collate | FORCE_SYM | ORDER_SYM BY alter_order_list
alter_commands_modifier ::= alter_algorithm_option | alter_lock_option | with_validation
opt_index_lock_and_algorithm ::= | alter_lock_option | alter_algorithm_option | alter_lock_option alter_algorithm_option | alter_algorithm_option alter_lock_option
alter_algorithm_option ::= ALGORITHM_SYM opt_equal alter_algorithm_option_value
alter_algorithm_option_value ::= DEFAULT_SYM | ident
alter_lock_option ::= LOCK_SYM opt_equal alter_lock_option_value
alter_lock_option_value ::= DEFAULT_SYM | ident
opt_column ::= /*empty*/ | COLUMN_SYM
opt_ignore ::= | IGNORE_SYM
opt_restrict ::= | RESTRICT | CASCADE
opt_place ::= | AFTER_SYM ident | FIRST_SYM
opt_to ::= | TO_SYM | EQ | AS
group_replication ::= group_replication_start opt_group_replication_start_options | STOP_SYM GROUP_REPLICATION
group_replication_start ::= START_SYM GROUP_REPLICATION
opt_group_replication_start_options ::= /*empty*/ | group_replication_start_options
group_replication_start_options ::= group_replication_start_option | group_replication_start_options ',' group_replication_start_option
group_replication_start_option ::= group_replication_user | group_replication_password | group_replication_plugin_auth
group_replication_user ::= USER EQ TEXT_STRING_sys_nonewline
group_replication_password ::= PASSWORD EQ TEXT_STRING_sys_nonewline
group_replication_plugin_auth ::= DEFAULT_AUTH_SYM EQ TEXT_STRING_sys_nonewline
replica ::= SLAVE | REPLICA_SYM
stop_replica_stmt ::= STOP_SYM replica opt_replica_thread_option_list opt_channel
start_replica_stmt ::= START_SYM replica opt_replica_thread_option_list opt_replica_until opt_user_option opt_password_option opt_default_auth_option opt_plugin_dir_option opt_channel
start ::= START_SYM TRANSACTION_SYM opt_start_transaction_option_list
opt_start_transaction_option_list ::= | start_transaction_option_list
start_transaction_option_list ::= start_transaction_option | start_transaction_option_list ',' start_transaction_option
start_transaction_option ::= WITH CONSISTENT_SYM SNAPSHOT_SYM | WITH CONSISTENT_SYM SNAPSHOT_SYM FROM SESSION_SYM expr | READ_SYM ONLY_SYM | READ_SYM WRITE_SYM
opt_user_option ::= | USER EQ TEXT_STRING_sys
opt_password_option ::= | PASSWORD EQ TEXT_STRING_sys
opt_default_auth_option ::= | DEFAULT_AUTH_SYM EQ TEXT_STRING_sys
opt_plugin_dir_option ::= | PLUGIN_DIR_SYM EQ TEXT_STRING_sys
opt_replica_thread_option_list ::= | replica_thread_option_list
replica_thread_option_list ::= replica_thread_option | replica_thread_option_list ',' replica_thread_option
replica_thread_option ::= SQL_THREAD | RELAY_THREAD
opt_replica_until ::= | UNTIL_SYM replica_until
replica_until ::= source_file_def | replica_until ',' source_file_def | SQL_BEFORE_GTIDS EQ TEXT_STRING_sys | SQL_AFTER_GTIDS EQ TEXT_STRING_sys | SQL_AFTER_MTS_GAPS
checksum ::= CHECKSUM_SYM table_or_tables table_list opt_checksum_type
opt_checksum_type ::= | QUICK | EXTENDED_SYM
repair_table_stmt ::= REPAIR opt_no_write_to_binlog table_or_tables table_list opt_mi_repair_types
opt_mi_repair_types ::= | mi_repair_types
mi_repair_types ::= mi_repair_type | mi_repair_types mi_repair_type
mi_repair_type ::= QUICK | EXTENDED_SYM | USE_FRM
analyze_table_stmt ::= ANALYZE_SYM opt_no_write_to_binlog table_or_tables table_list opt_histogram
opt_num_buckets ::= | WITH NUM BUCKETS_SYM
opt_histogram ::= | UPDATE_SYM HISTOGRAM_SYM ON_SYM ident_string_list opt_num_buckets | DROP HISTOGRAM_SYM ON_SYM ident_string_list
binlog_base64_event ::= BINLOG_SYM TEXT_STRING_sys
check_table_stmt ::= CHECK_SYM table_or_tables table_list opt_mi_check_types
opt_mi_check_types ::= | mi_check_types
mi_check_types ::= mi_check_type | mi_check_type mi_check_types
mi_check_type ::= QUICK | FAST_SYM | MEDIUM_SYM | EXTENDED_SYM | CHANGED | FOR_SYM UPGRADE_SYM
optimize_table_stmt ::= OPTIMIZE opt_no_write_to_binlog table_or_tables table_list
opt_no_write_to_binlog ::= | NO_WRITE_TO_BINLOG | LOCAL_SYM
rename ::= RENAME table_or_tables table_to_table_list | RENAME USER rename_list
rename_list ::= user TO_SYM user | rename_list ',' user TO_SYM user
table_to_table_list ::= table_to_table | table_to_table_list ',' table_to_table
table_to_table ::= table_ident TO_SYM table_ident
keycache_stmt ::= CACHE_SYM INDEX_SYM keycache_list IN_SYM key_cache_name | CACHE_SYM INDEX_SYM table_ident adm_partition opt_cache_key_list IN_SYM key_cache_name
keycache_list ::= assign_to_keycache | keycache_list ',' assign_to_keycache
assign_to_keycache ::= table_ident opt_cache_key_list
key_cache_name ::= ident | DEFAULT_SYM
preload_stmt ::= LOAD INDEX_SYM INTO CACHE_SYM table_ident adm_partition opt_cache_key_list opt_ignore_leaves | LOAD INDEX_SYM INTO CACHE_SYM preload_list
preload_list ::= preload_keys | preload_list ',' preload_keys
preload_keys ::= table_ident opt_cache_key_list opt_ignore_leaves
adm_partition ::= PARTITION_SYM '(' all_or_alt_part_name_list ')'
opt_cache_key_list ::= | key_or_index '(' opt_key_usage_list ')'
opt_ignore_leaves ::= | IGNORE_SYM LEAVES
select_stmt ::= query_expression | query_expression locking_clause_list | query_expression_parens | select_stmt_with_into
select_stmt_with_into ::= '(' select_stmt_with_into ')' | query_expression into_clause | query_expression into_clause locking_clause_list | query_expression locking_clause_list into_clause | query_expression_parens into_clause
query_expression ::= query_expression_body opt_order_clause opt_limit_clause | with_clause query_expression_body opt_order_clause opt_limit_clause | query_expression_parens order_clause opt_limit_clause | with_clause query_expression_parens order_clause opt_limit_clause | query_expression_parens limit_clause | with_clause query_expression_parens limit_clause | with_clause query_expression_parens
query_expression_body ::= query_primary | query_expression_body UNION_SYM union_option query_primary | query_expression_parens UNION_SYM union_option query_primary | query_expression_body UNION_SYM union_option query_expression_parens | query_expression_parens UNION_SYM union_option query_expression_parens
query_expression_parens ::= '(' query_expression_parens ')' | '(' query_expression ')' | '(' query_expression locking_clause_list ')'
query_primary ::= query_specification | table_value_constructor | explicit_table
query_specification ::= SELECT_SYM select_options select_item_list into_clause opt_from_clause opt_where_clause opt_group_clause opt_having_clause opt_window_clause | SELECT_SYM select_options select_item_list opt_from_clause opt_where_clause opt_group_clause opt_having_clause opt_window_clause
opt_from_clause ::= | from_clause
from_clause ::= FROM from_tables
from_tables ::= DUAL_SYM | table_reference_list
table_reference_list ::= table_reference | table_reference_list ',' table_reference
table_value_constructor ::= VALUES values_row_list
explicit_table ::= TABLE_SYM table_ident
select_options ::= | select_option_list
select_option_list ::= select_option_list select_option | select_option
select_option ::= query_spec_option | SQL_NO_CACHE_SYM
locking_clause_list ::= locking_clause_list locking_clause | locking_clause
locking_clause ::= FOR_SYM lock_strength opt_locked_row_action | FOR_SYM lock_strength table_locking_list opt_locked_row_action | LOCK_SYM IN_SYM SHARE_SYM MODE_SYM
lock_strength ::= UPDATE_SYM | SHARE_SYM
table_locking_list ::= OF_SYM table_alias_ref_list
opt_locked_row_action ::= | locked_row_action
locked_row_action ::= SKIP_SYM LOCKED_SYM | NOWAIT_SYM
select_item_list ::= select_item_list ',' select_item | select_item | '*'
select_item ::= table_wild | expr select_alias
select_alias ::= | AS ident | AS TEXT_STRING_validated | ident | TEXT_STRING_validated
optional_braces ::= | '(' ')'
expr ::= expr or expr | expr XOR expr | expr and expr | NOT_SYM expr | bool_pri IS TRUE_SYM | bool_pri IS not TRUE_SYM | bool_pri IS FALSE_SYM | bool_pri IS not FALSE_SYM | bool_pri IS UNKNOWN_SYM | bool_pri IS not UNKNOWN_SYM | bool_pri
bool_pri ::= bool_pri IS NULL_SYM | bool_pri IS not NULL_SYM | bool_pri comp_op predicate | bool_pri comp_op all_or_any table_subquery | predicate
predicate ::= bit_expr IN_SYM table_subquery | bit_expr not IN_SYM table_subquery | bit_expr IN_SYM '(' expr ')' | bit_expr IN_SYM '(' expr ',' expr_list ')' | bit_expr not IN_SYM '(' expr ')' | bit_expr not IN_SYM '(' expr ',' expr_list ')' | bit_expr MEMBER_SYM opt_of '(' simple_expr ')' | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate | bit_expr SOUNDS_SYM LIKE bit_expr | bit_expr LIKE simple_expr | bit_expr LIKE simple_expr ESCAPE_SYM simple_expr | bit_expr not LIKE simple_expr | bit_expr not LIKE simple_expr ESCAPE_SYM simple_expr | bit_expr REGEXP bit_expr | bit_expr not REGEXP bit_expr | bit_expr
opt_of ::= OF_SYM | /*empty*/
bit_expr ::= bit_expr '|' bit_expr | bit_expr '&' bit_expr | bit_expr SHIFT_LEFT bit_expr | bit_expr SHIFT_RIGHT bit_expr | bit_expr '+' bit_expr | bit_expr '-' bit_expr | bit_expr '+' INTERVAL_SYM expr interval | bit_expr '-' INTERVAL_SYM expr interval | bit_expr '*' bit_expr | bit_expr '/' bit_expr | bit_expr '%' bit_expr | bit_expr DIV_SYM bit_expr | bit_expr MOD_SYM bit_expr | bit_expr '^' bit_expr | simple_expr
or ::= OR_SYM | OR2_SYM
and ::= AND_SYM | AND_AND_SYM
not ::= NOT_SYM | NOT2_SYM
not2 ::= '!' | NOT2_SYM
comp_op ::= EQ | EQUAL_SYM | GE | GT_SYM | LE | LT | NE
all_or_any ::= ALL | ANY_SYM
simple_expr ::= simple_ident | function_call_keyword | function_call_nonkeyword | function_call_generic | function_call_conflict | simple_expr COLLATE_SYM ident_or_text | literal_or_null | param_marker | variable | set_function_specification | window_func_call | simple_expr OR_OR_SYM simple_expr | '+' simple_expr | '-' simple_expr | '~' simple_expr | not2 simple_expr | row_subquery | '(' expr ')' | '(' expr ',' expr_list ')' | ROW_SYM '(' expr ',' expr_list ')' | EXISTS table_subquery | '{' ident expr '}' | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')' | BINARY_SYM simple_expr | CAST_SYM '(' expr AS cast_type opt_array_cast ')' | CAST_SYM '(' expr AT_SYM LOCAL_SYM AS cast_type opt_array_cast ')' | CAST_SYM '(' expr AT_SYM TIME_SYM ZONE_SYM opt_interval TEXT_STRING_literal AS DATETIME_SYM type_datetime_precision ')' | CASE_SYM opt_expr when_list opt_else END | CONVERT_SYM '(' expr ',' cast_type ')' | CONVERT_SYM '(' expr USING charset_name ')' | DEFAULT_SYM '(' simple_ident ')' | VALUES '(' simple_ident_nospvar ')' | INTERVAL_SYM expr interval '+' expr | simple_ident JSON_SEPARATOR_SYM TEXT_STRING_literal | simple_ident JSON_UNQUOTED_SEPARATOR_SYM TEXT_STRING_literal
opt_array_cast ::= | ARRAY_SYM
function_call_keyword ::= CHAR_SYM '(' expr_list ')' | CHAR_SYM '(' expr_list USING charset_name ')' | CURRENT_USER optional_braces | DATE_SYM '(' expr ')' | DAY_SYM '(' expr ')' | HOUR_SYM '(' expr ')' | INSERT_SYM '(' expr ',' expr ',' expr ',' expr ')' | INTERVAL_SYM '(' expr ',' expr ')' | INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' | JSON_VALUE_SYM '(' simple_expr ',' text_literal opt_returning_type opt_on_empty_or_error ')' | LEFT '(' expr ',' expr ')' | MINUTE_SYM '(' expr ')' | MONTH_SYM '(' expr ')' | RIGHT '(' expr ',' expr ')' | SECOND_SYM '(' expr ')' | TIME_SYM '(' expr ')' | TIMESTAMP_SYM '(' expr ')' | TIMESTAMP_SYM '(' expr ',' expr ')' | TRIM '(' expr ')' | TRIM '(' LEADING expr FROM expr ')' | TRIM '(' TRAILING expr FROM expr ')' | TRIM '(' BOTH expr FROM expr ')' | TRIM '(' LEADING FROM expr ')' | TRIM '(' TRAILING FROM expr ')' | TRIM '(' BOTH FROM expr ')' | TRIM '(' expr FROM expr ')' | USER '(' ')' | YEAR_SYM '(' expr ')'
function_call_nonkeyword ::= ADDDATE_SYM '(' expr ',' expr ')' | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' | CURDATE optional_braces | CURTIME func_datetime_precision | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' | EXTRACT_SYM '(' interval FROM expr ')' | GET_FORMAT '(' date_time_type ',' expr ')' | now | POSITION_SYM '(' bit_expr IN_SYM expr ')' | SUBDATE_SYM '(' expr ',' expr ')' | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' | SUBSTRING '(' expr ',' expr ',' expr ')' | SUBSTRING '(' expr ',' expr ')' | SUBSTRING '(' expr FROM expr FOR_SYM expr ')' | SUBSTRING '(' expr FROM expr ')' | SYSDATE func_datetime_precision | TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')' | TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')' | UTC_DATE_SYM optional_braces | UTC_TIME_SYM func_datetime_precision | UTC_TIMESTAMP_SYM func_datetime_precision
opt_returning_type ::= | RETURNING_SYM cast_type
function_call_conflict ::= ASCII_SYM '(' expr ')' | CHARSET '(' expr ')' | COALESCE '(' expr_list ')' | COLLATION_SYM '(' expr ')' | DATABASE '(' ')' | IF '(' expr ',' expr ',' expr ')' | FORMAT_SYM '(' expr ',' expr ')' | FORMAT_SYM '(' expr ',' expr ',' expr ')' | MICROSECOND_SYM '(' expr ')' | MOD_SYM '(' expr ',' expr ')' | QUARTER_SYM '(' expr ')' | REPEAT_SYM '(' expr ',' expr ')' | REPLACE_SYM '(' expr ',' expr ',' expr ')' | REVERSE_SYM '(' expr ')' | ROW_COUNT_SYM '(' ')' | TRUNCATE_SYM '(' expr ',' expr ')' | WEEK_SYM '(' expr ')' | WEEK_SYM '(' expr ',' expr ')' | WEIGHT_STRING_SYM '(' expr ')' | WEIGHT_STRING_SYM '(' expr AS CHAR_SYM ws_num_codepoints ')' | WEIGHT_STRING_SYM '(' expr AS BINARY_SYM ws_num_codepoints ')' | WEIGHT_STRING_SYM '(' expr ',' ulong_num ',' ulong_num ',' ulong_num ')' | geometry_function
geometry_function ::= GEOMETRYCOLLECTION_SYM '(' opt_expr_list ')' | LINESTRING_SYM '(' expr_list ')' | MULTILINESTRING_SYM '(' expr_list ')' | MULTIPOINT_SYM '(' expr_list ')' | MULTIPOLYGON_SYM '(' expr_list ')' | POINT_SYM '(' expr ',' expr ')' | POLYGON_SYM '(' expr_list ')'
function_call_generic ::= IDENT_sys '(' opt_udf_expr_list ')' | ident '.' ident '(' opt_expr_list ')'
fulltext_options ::= opt_natural_language_mode opt_query_expansion | IN_SYM BOOLEAN_SYM MODE_SYM
opt_natural_language_mode ::= | IN_SYM NATURAL LANGUAGE_SYM MODE_SYM
opt_query_expansion ::= | WITH QUERY_SYM EXPANSION_SYM
opt_udf_expr_list ::= | udf_expr_list
udf_expr_list ::= udf_expr | udf_expr_list ',' udf_expr
udf_expr ::= expr select_alias
set_function_specification ::= sum_expr | grouping_operation
sum_expr ::= AVG_SYM '(' in_sum_expr ')' opt_windowing_clause | AVG_SYM '(' DISTINCT in_sum_expr ')' opt_windowing_clause | BIT_AND_SYM '(' in_sum_expr ')' opt_windowing_clause | BIT_OR_SYM '(' in_sum_expr ')' opt_windowing_clause | JSON_ARRAYAGG '(' in_sum_expr ')' opt_windowing_clause | JSON_OBJECTAGG '(' in_sum_expr ',' in_sum_expr ')' opt_windowing_clause | BIT_XOR_SYM '(' in_sum_expr ')' opt_windowing_clause | COUNT_SYM '(' opt_all '*' ')' opt_windowing_clause | COUNT_SYM '(' in_sum_expr ')' opt_windowing_clause | COUNT_SYM '(' DISTINCT expr_list ')' opt_windowing_clause | MIN_SYM '(' in_sum_expr ')' opt_windowing_clause | MIN_SYM '(' DISTINCT in_sum_expr ')' opt_windowing_clause | MAX_SYM '(' in_sum_expr ')' opt_windowing_clause | MAX_SYM '(' DISTINCT in_sum_expr ')' opt_windowing_clause | STD_SYM '(' in_sum_expr ')' opt_windowing_clause | VARIANCE_SYM '(' in_sum_expr ')' opt_windowing_clause | STDDEV_SAMP_SYM '(' in_sum_expr ')' opt_windowing_clause | VAR_SAMP_SYM '(' in_sum_expr ')' opt_windowing_clause | SUM_SYM '(' in_sum_expr ')' opt_windowing_clause | SUM_SYM '(' DISTINCT in_sum_expr ')' opt_windowing_clause | GROUP_CONCAT_SYM '(' opt_distinct expr_list opt_gorder_clause opt_gconcat_separator ')' opt_windowing_clause
window_func_call ::= ROW_NUMBER_SYM '(' ')' windowing_clause | RANK_SYM '(' ')' windowing_clause | DENSE_RANK_SYM '(' ')' windowing_clause | CUME_DIST_SYM '(' ')' windowing_clause | PERCENT_RANK_SYM '(' ')' windowing_clause | NTILE_SYM '(' stable_integer ')' windowing_clause | LEAD_SYM '(' expr opt_lead_lag_info ')' opt_null_treatment windowing_clause | LAG_SYM '(' expr opt_lead_lag_info ')' opt_null_treatment windowing_clause | FIRST_VALUE_SYM '(' expr ')' opt_null_treatment windowing_clause | LAST_VALUE_SYM '(' expr ')' opt_null_treatment windowing_clause | NTH_VALUE_SYM '(' expr ',' simple_expr ')' opt_from_first_last opt_null_treatment windowing_clause
opt_lead_lag_info ::= | ',' stable_integer opt_ll_default
stable_integer ::= int64_literal | param_or_var
param_or_var ::= param_marker | ident | '@' ident_or_text
opt_ll_default ::= | ',' expr
opt_null_treatment ::= | RESPECT_SYM NULLS_SYM | IGNORE_SYM NULLS_SYM
opt_from_first_last ::= | FROM FIRST_SYM | FROM LAST_SYM
opt_windowing_clause ::= | windowing_clause
windowing_clause ::= OVER_SYM window_name_or_spec
window_name_or_spec ::= window_name | window_spec
window_name ::= ident
window_spec ::= '(' window_spec_details ')'
window_spec_details ::= opt_existing_window_name opt_partition_clause opt_window_order_by_clause opt_window_frame_clause
opt_existing_window_name ::= | window_name
opt_partition_clause ::= | PARTITION_SYM BY group_list
opt_window_order_by_clause ::= | ORDER_SYM BY order_list
opt_window_frame_clause ::= | window_frame_units window_frame_extent opt_window_frame_exclusion
window_frame_extent ::= window_frame_start | window_frame_between
window_frame_start ::= UNBOUNDED_SYM PRECEDING_SYM | NUM_literal PRECEDING_SYM | param_marker PRECEDING_SYM | INTERVAL_SYM expr interval PRECEDING_SYM | CURRENT_SYM ROW_SYM
window_frame_between ::= BETWEEN_SYM window_frame_bound AND_SYM window_frame_bound
window_frame_bound ::= window_frame_start | UNBOUNDED_SYM FOLLOWING_SYM | NUM_literal FOLLOWING_SYM | param_marker FOLLOWING_SYM | INTERVAL_SYM expr interval FOLLOWING_SYM
opt_window_frame_exclusion ::= | EXCLUDE_SYM CURRENT_SYM ROW_SYM | EXCLUDE_SYM GROUP_SYM | EXCLUDE_SYM TIES_SYM | EXCLUDE_SYM NO_SYM OTHERS_SYM
window_frame_units ::= ROWS_SYM | RANGE_SYM | GROUPS_SYM
grouping_operation ::= GROUPING_SYM '(' expr_list ')'
variable ::= '@' variable_aux
variable_aux ::= ident_or_text SET_VAR expr | ident_or_text | '@' opt_var_ident_type ident_or_text opt_component
opt_distinct ::= | DISTINCT
opt_gconcat_separator ::= | SEPARATOR_SYM text_string
opt_gorder_clause ::= | ORDER_SYM BY gorder_list
gorder_list ::= gorder_list ',' order_expr | order_expr
in_sum_expr ::= opt_all expr
cast_type ::= BINARY_SYM opt_field_length | CHAR_SYM opt_field_length opt_charset_with_opt_binary | nchar opt_field_length | SIGNED_SYM | SIGNED_SYM INT_SYM | UNSIGNED_SYM | UNSIGNED_SYM INT_SYM | DATE_SYM | YEAR_SYM | TIME_SYM type_datetime_precision | DATETIME_SYM type_datetime_precision | DECIMAL_SYM float_options | JSON_SYM | real_type | FLOAT_SYM standard_float_options
opt_expr_list ::= | expr_list
expr_list ::= expr | expr_list ',' expr
ident_list_arg ::= ident_list | '(' ident_list ')'
ident_list ::= simple_ident | ident_list ',' simple_ident
opt_expr ::= | expr
opt_else ::= | ELSE expr
when_list ::= WHEN_SYM expr THEN_SYM expr | when_list WHEN_SYM expr THEN_SYM expr
table_reference ::= table_factor | joined_table | '{' OJ_SYM esc_table_reference '}'
esc_table_reference ::= table_factor | joined_table
joined_table ::= table_reference inner_join_type table_reference ON_SYM expr | table_reference inner_join_type table_reference USING '(' using_list ')' | table_reference outer_join_type table_reference ON_SYM expr | table_reference outer_join_type table_reference USING '(' using_list ')' | table_reference inner_join_type table_reference | table_reference natural_join_type table_factor
natural_join_type ::= NATURAL opt_inner JOIN_SYM | NATURAL RIGHT opt_outer JOIN_SYM | NATURAL LEFT opt_outer JOIN_SYM
inner_join_type ::= JOIN_SYM | INNER_SYM JOIN_SYM | CROSS JOIN_SYM | STRAIGHT_JOIN
outer_join_type ::= LEFT opt_outer JOIN_SYM | RIGHT opt_outer JOIN_SYM
opt_inner ::= /*empty*/ | INNER_SYM
opt_outer ::= /*empty*/ | OUTER_SYM
opt_use_partition ::= | use_partition
use_partition ::= PARTITION_SYM '(' using_list ')'
table_factor ::= single_table | single_table_parens | derived_table | joined_table_parens | table_reference_list_parens | table_function
table_reference_list_parens ::= '(' table_reference_list_parens ')' | '(' table_reference_list ',' table_reference ')'
single_table_parens ::= '(' single_table_parens ')' | '(' single_table ')'
single_table ::= table_ident opt_use_partition opt_table_alias opt_key_definition
joined_table_parens ::= '(' joined_table_parens ')' | '(' joined_table ')'
derived_table ::= table_subquery opt_table_alias opt_derived_column_list | LATERAL_SYM table_subquery opt_table_alias opt_derived_column_list
table_function ::= JSON_TABLE_SYM '(' expr ',' text_literal columns_clause ')' opt_table_alias | SEQUENCE_TABLE_SYM '(' expr ')' opt_table_alias
columns_clause ::= COLUMNS '(' columns_list ')'
columns_list ::= jt_column | columns_list ',' jt_column
jt_column ::= ident FOR_SYM ORDINALITY_SYM | ident type opt_collate jt_column_type PATH_SYM text_literal opt_on_empty_or_error_json_table | NESTED_SYM PATH_SYM text_literal columns_clause
jt_column_type ::= | EXISTS
opt_on_empty_or_error ::= | on_empty | on_error | on_empty on_error
opt_on_empty_or_error_json_table ::= opt_on_empty_or_error | on_error on_empty
on_empty ::= json_on_response ON_SYM EMPTY_SYM
on_error ::= json_on_response ON_SYM ERROR_SYM
json_on_response ::= ERROR_SYM | NULL_SYM | DEFAULT_SYM signed_literal
index_hint_clause ::= | FOR_SYM JOIN_SYM | FOR_SYM ORDER_SYM BY | FOR_SYM GROUP_SYM BY
index_hint_type ::= FORCE_SYM | IGNORE_SYM
index_hint_definition ::= index_hint_type key_or_index index_hint_clause '(' key_usage_list ')' | USE_SYM key_or_index index_hint_clause '(' opt_key_usage_list ')'
index_hints_list ::= index_hint_definition | index_hints_list index_hint_definition
opt_index_hints_list ::= | index_hints_list
opt_key_definition ::= opt_index_hints_list
opt_key_usage_list ::= | key_usage_list
key_usage_element ::= ident | PRIMARY_SYM
key_usage_list ::= key_usage_element | key_usage_list ',' key_usage_element
using_list ::= ident_string_list
ident_string_list ::= ident | ident_string_list ',' ident
interval ::= interval_time_stamp | DAY_HOUR_SYM | DAY_MICROSECOND_SYM | DAY_MINUTE_SYM | DAY_SECOND_SYM | HOUR_MICROSECOND_SYM | HOUR_MINUTE_SYM | HOUR_SECOND_SYM | MINUTE_MICROSECOND_SYM | MINUTE_SECOND_SYM | SECOND_MICROSECOND_SYM | YEAR_MONTH_SYM
interval_time_stamp ::= DAY_SYM | WEEK_SYM | HOUR_SYM | MINUTE_SYM | MONTH_SYM | QUARTER_SYM | SECOND_SYM | MICROSECOND_SYM | YEAR_SYM
date_time_type ::= DATE_SYM | TIME_SYM | TIMESTAMP_SYM | DATETIME_SYM
opt_as ::= /*empty*/ | AS
opt_table_alias ::= | opt_as ident
opt_all ::= /*empty*/ | ALL
opt_where_clause ::= | where_clause
where_clause ::= WHERE expr
opt_having_clause ::= | HAVING expr
with_clause ::= WITH with_list | WITH RECURSIVE_SYM with_list
with_list ::= with_list ',' common_table_expr | common_table_expr
common_table_expr ::= ident opt_derived_column_list AS table_subquery
opt_derived_column_list ::= | '(' simple_ident_list ')'
simple_ident_list ::= ident | simple_ident_list ',' ident
opt_window_clause ::= | WINDOW_SYM window_definition_list
window_definition_list ::= window_definition | window_definition_list ',' window_definition
window_definition ::= window_name AS window_spec
opt_group_clause ::= | GROUP_SYM BY group_list olap_opt
group_list ::= group_list ',' grouping_expr | grouping_expr
olap_opt ::= | WITH_ROLLUP_SYM
alter_order_list ::= alter_order_list ',' alter_order_item | alter_order_item
alter_order_item ::= simple_ident_nospvar opt_ordering_direction
opt_order_clause ::= | order_clause
order_clause ::= ORDER_SYM BY order_list
order_list ::= order_list ',' order_expr | order_expr
opt_ordering_direction ::= | ordering_direction
ordering_direction ::= ASC | DESC
opt_limit_clause ::= | limit_clause
limit_clause ::= LIMIT limit_options
limit_options ::= limit_option | limit_option ',' limit_option | limit_option OFFSET_SYM limit_option
limit_option ::= ident | param_marker | ULONGLONG_NUM | LONG_NUM | NUM
opt_simple_limit ::= | LIMIT limit_option
ulong_num ::= NUM | HEX_NUM | LONG_NUM | ULONGLONG_NUM | DECIMAL_NUM | FLOAT_NUM
real_ulong_num ::= NUM | HEX_NUM | LONG_NUM | ULONGLONG_NUM | dec_num_error
ulonglong_num ::= NUM | ULONGLONG_NUM | LONG_NUM | DECIMAL_NUM | FLOAT_NUM
real_ulonglong_num ::= NUM | HEX_NUM | ULONGLONG_NUM | LONG_NUM | dec_num_error
dec_num_error ::= dec_num
dec_num ::= DECIMAL_NUM | FLOAT_NUM
select_var_list ::= select_var_list ',' select_var_ident | select_var_ident
select_var_ident ::= '@' ident_or_text | ident_or_text
into_clause ::= INTO into_destination
into_destination ::= OUTFILE TEXT_STRING_filesystem opt_load_data_charset opt_field_term opt_line_term | DUMPFILE TEXT_STRING_filesystem | select_var_list
do_stmt ::= DO_SYM select_item_list
drop_table_stmt ::= DROP opt_temporary table_or_tables if_exists table_list opt_restrict
drop_index_stmt ::= DROP INDEX_SYM ident ON_SYM table_ident opt_index_lock_and_algorithm
drop_database_stmt ::= DROP DATABASE if_exists ident
drop_function_stmt ::= DROP FUNCTION_SYM if_exists ident '.' ident | DROP FUNCTION_SYM if_exists ident
drop_resource_group_stmt ::= DROP RESOURCE_SYM GROUP_SYM ident opt_force
drop_procedure_stmt ::= DROP PROCEDURE_SYM if_exists sp_name
drop_user_stmt ::= DROP USER if_exists user_list
drop_view_stmt ::= DROP VIEW_SYM if_exists table_list opt_restrict
drop_event_stmt ::= DROP EVENT_SYM if_exists sp_name
drop_trigger_stmt ::= DROP TRIGGER_SYM if_exists sp_name
drop_tablespace_stmt ::= DROP TABLESPACE_SYM ident opt_drop_ts_options
drop_undo_tablespace_stmt ::= DROP UNDO_SYM TABLESPACE_SYM ident opt_undo_tablespace_options
drop_logfile_stmt ::= DROP LOGFILE_SYM GROUP_SYM ident opt_drop_ts_options
drop_server_stmt ::= DROP SERVER_SYM if_exists ident_or_text | DROP COMPRESSION_DICTIONARY_SYM if_exists ident
drop_srs_stmt ::= DROP SPATIAL_SYM REFERENCE_SYM SYSTEM_SYM if_exists real_ulonglong_num
drop_role_stmt ::= DROP ROLE_SYM if_exists role_list
table_list ::= table_ident | table_list ',' table_ident
table_alias_ref_list ::= table_ident_opt_wild | table_alias_ref_list ',' table_ident_opt_wild
if_exists ::= | IF EXISTS
opt_temporary ::= | TEMPORARY
opt_drop_ts_options ::= | drop_ts_option_list
drop_ts_option_list ::= drop_ts_option | drop_ts_option_list opt_comma drop_ts_option
drop_ts_option ::= ts_option_engine | ts_option_wait
insert_stmt ::= INSERT_SYM insert_lock_option opt_ignore opt_INTO table_ident opt_use_partition insert_from_constructor opt_values_reference opt_insert_update_list | INSERT_SYM insert_lock_option opt_ignore opt_INTO table_ident opt_use_partition SET_SYM update_list opt_values_reference opt_insert_update_list | INSERT_SYM insert_lock_option opt_ignore opt_INTO table_ident opt_use_partition insert_query_expression opt_insert_update_list
replace_stmt ::= REPLACE_SYM replace_lock_option opt_INTO table_ident opt_use_partition insert_from_constructor | REPLACE_SYM replace_lock_option opt_INTO table_ident opt_use_partition SET_SYM update_list | REPLACE_SYM replace_lock_option opt_INTO table_ident opt_use_partition insert_query_expression
insert_lock_option ::= | LOW_PRIORITY | DELAYED_SYM | HIGH_PRIORITY
replace_lock_option ::= opt_low_priority | DELAYED_SYM
opt_INTO ::= /*empty*/ | INTO
insert_from_constructor ::= insert_values | '(' ')' insert_values | '(' fields ')' insert_values
insert_query_expression ::= query_expression_or_parens | '(' ')' query_expression_or_parens | '(' fields ')' query_expression_or_parens
fields ::= fields ',' insert_ident | insert_ident
insert_values ::= value_or_values values_list
query_expression_or_parens ::= query_expression | query_expression locking_clause_list | query_expression_parens
value_or_values ::= VALUE_SYM | VALUES
values_list ::= values_list ',' row_value | row_value
values_row_list ::= values_row_list ',' row_value_explicit | row_value_explicit
equal ::= EQ | SET_VAR
opt_equal ::= /*empty*/ | equal
row_value ::= '(' opt_values ')'
row_value_explicit ::= ROW_SYM '(' opt_values ')'
opt_values ::= | values
values ::= values ',' expr_or_default | expr_or_default
expr_or_default ::= expr | DEFAULT_SYM
opt_values_reference ::= | AS ident opt_derived_column_list
opt_insert_update_list ::= | ON_SYM DUPLICATE_SYM KEY_SYM UPDATE_SYM update_list
update_stmt ::= opt_with_clause UPDATE_SYM opt_low_priority opt_ignore table_reference_list SET_SYM update_list opt_where_clause opt_order_clause opt_simple_limit
opt_with_clause ::= | with_clause
update_list ::= update_list ',' update_elem | update_elem
update_elem ::= simple_ident_nospvar equal expr_or_default
opt_low_priority ::= | LOW_PRIORITY
delete_stmt ::= opt_with_clause DELETE_SYM opt_delete_options FROM table_ident opt_table_alias opt_use_partition opt_where_clause opt_order_clause opt_simple_limit | opt_with_clause DELETE_SYM opt_delete_options table_alias_ref_list FROM table_reference_list opt_where_clause | opt_with_clause DELETE_SYM opt_delete_options FROM table_alias_ref_list USING table_reference_list opt_where_clause
opt_wild ::= /*empty*/ | '.' '*'
opt_delete_options ::= | opt_delete_option opt_delete_options
opt_delete_option ::= QUICK | LOW_PRIORITY | IGNORE_SYM
truncate_stmt ::= TRUNCATE_SYM opt_table table_ident
opt_table ::= /*empty*/ | TABLE_SYM
opt_profile_defs ::= | profile_defs
profile_defs ::= profile_def | profile_defs ',' profile_def
profile_def ::= CPU_SYM | MEMORY_SYM | BLOCK_SYM IO_SYM | CONTEXT_SYM SWITCHES_SYM | PAGE_SYM FAULTS_SYM | IPC_SYM | SWAPS_SYM | SOURCE_SYM | ALL
opt_for_query ::= | FOR_SYM QUERY_SYM NUM
show_databases_stmt ::= SHOW DATABASES opt_wild_or_where
show_tables_stmt ::= SHOW opt_show_cmd_type TABLES opt_db opt_wild_or_where
show_triggers_stmt ::= SHOW opt_full TRIGGERS_SYM opt_db opt_wild_or_where
show_events_stmt ::= SHOW EVENTS_SYM opt_db opt_wild_or_where
show_table_status_stmt ::= SHOW TABLE_SYM STATUS_SYM opt_db opt_wild_or_where
show_open_tables_stmt ::= SHOW OPEN_SYM TABLES opt_db opt_wild_or_where
show_plugins_stmt ::= SHOW PLUGINS_SYM
show_engine_logs_stmt ::= SHOW ENGINE_SYM engine_or_all LOGS_SYM
show_engine_mutex_stmt ::= SHOW ENGINE_SYM engine_or_all MUTEX_SYM
show_engine_status_stmt ::= SHOW ENGINE_SYM engine_or_all STATUS_SYM
show_columns_stmt ::= SHOW opt_show_cmd_type COLUMNS from_or_in table_ident opt_db opt_wild_or_where
show_binary_logs_stmt ::= SHOW master_or_binary LOGS_SYM
show_replicas_stmt ::= SHOW SLAVE HOSTS_SYM | SHOW REPLICAS_SYM
show_binlog_events_stmt ::= SHOW BINLOG_SYM EVENTS_SYM opt_binlog_in binlog_from opt_limit_clause
show_relaylog_events_stmt ::= SHOW RELAYLOG_SYM EVENTS_SYM opt_binlog_in binlog_from opt_limit_clause opt_channel
show_keys_stmt ::= SHOW opt_extended keys_or_index from_or_in table_ident opt_db opt_where_clause
show_engines_stmt ::= SHOW opt_storage ENGINES_SYM
show_count_warnings_stmt ::= SHOW COUNT_SYM '(' '*' ')' WARNINGS
show_count_errors_stmt ::= SHOW COUNT_SYM '(' '*' ')' ERRORS
show_warnings_stmt ::= SHOW WARNINGS opt_limit_clause
show_errors_stmt ::= SHOW ERRORS opt_limit_clause
show_profiles_stmt ::= SHOW PROFILES_SYM
show_profile_stmt ::= SHOW PROFILE_SYM opt_profile_defs opt_for_query opt_limit_clause
show_status_stmt ::= SHOW opt_var_type STATUS_SYM opt_wild_or_where
show_processlist_stmt ::= SHOW opt_full PROCESSLIST_SYM
show_variables_stmt ::= SHOW opt_var_type VARIABLES opt_wild_or_where
show_character_set_stmt ::= SHOW character_set opt_wild_or_where
show_collation_stmt ::= SHOW COLLATION_SYM opt_wild_or_where
show_privileges_stmt ::= SHOW PRIVILEGES
show_grants_stmt ::= SHOW GRANTS | SHOW GRANTS FOR_SYM user | SHOW GRANTS FOR_SYM user USING user_list | SHOW EFFECTIVE_SYM GRANTS | SHOW EFFECTIVE_SYM GRANTS FOR_SYM user | SHOW EFFECTIVE_SYM GRANTS FOR_SYM user USING user_list
show_create_database_stmt ::= SHOW CREATE DATABASE opt_if_not_exists ident
show_create_table_stmt ::= SHOW CREATE TABLE_SYM table_ident
show_create_view_stmt ::= SHOW CREATE VIEW_SYM table_ident
show_master_status_stmt ::= SHOW MASTER_SYM STATUS_SYM
show_replica_status_stmt ::= SHOW replica STATUS_SYM opt_channel
show_stats_stmt ::= SHOW CLIENT_STATS_SYM opt_wild_or_where | SHOW USER_STATS_SYM opt_wild_or_where | SHOW THREAD_STATS_SYM opt_wild_or_where | SHOW TABLE_STATS_SYM opt_wild_or_where | SHOW INDEX_STATS_SYM opt_wild_or_where
show_create_procedure_stmt ::= SHOW CREATE PROCEDURE_SYM sp_name
show_create_function_stmt ::= SHOW CREATE FUNCTION_SYM sp_name
show_create_trigger_stmt ::= SHOW CREATE TRIGGER_SYM sp_name
show_procedure_status_stmt ::= SHOW PROCEDURE_SYM STATUS_SYM opt_wild_or_where
show_function_status_stmt ::= SHOW FUNCTION_SYM STATUS_SYM opt_wild_or_where
show_procedure_code_stmt ::= SHOW PROCEDURE_SYM CODE_SYM sp_name
show_function_code_stmt ::= SHOW FUNCTION_SYM CODE_SYM sp_name
show_create_event_stmt ::= SHOW CREATE EVENT_SYM sp_name
show_create_user_stmt ::= SHOW CREATE USER user
engine_or_all ::= ident_or_text | ALL
master_or_binary ::= MASTER_SYM | BINARY_SYM
opt_storage ::= /*empty*/ | STORAGE_SYM
opt_db ::= | from_or_in ident
opt_full ::= | FULL
opt_extended ::= | EXTENDED_SYM
opt_show_cmd_type ::= | FULL | EXTENDED_SYM | EXTENDED_SYM FULL
from_or_in ::= FROM | IN_SYM
opt_binlog_in ::= | IN_SYM TEXT_STRING_sys
binlog_from ::= | FROM ulonglong_num
opt_wild_or_where ::= | LIKE TEXT_STRING_literal | where_clause
describe_stmt ::= describe_command table_ident opt_describe_column
explain_stmt ::= describe_command opt_explain_analyze_type explainable_stmt
explainable_stmt ::= select_stmt | insert_stmt | replace_stmt | update_stmt | delete_stmt | FOR_SYM CONNECTION_SYM real_ulong_num
describe_command ::= DESC | DESCRIBE
opt_explain_format_type ::= | FORMAT_SYM EQ ident_or_text
opt_explain_analyze_type ::= ANALYZE_SYM opt_explain_format_type | opt_explain_format_type
opt_describe_column ::= | text_string | ident
flush ::= FLUSH_SYM opt_no_write_to_binlog flush_options
flush_options ::= table_or_tables opt_table_list opt_flush_lock | flush_options_list
opt_flush_lock ::= | WITH READ_SYM LOCK_SYM | FOR_SYM EXPORT_SYM
flush_options_list ::= flush_options_list ',' flush_option | flush_option
flush_option ::= ERROR_SYM LOGS_SYM | ENGINE_SYM LOGS_SYM | GENERAL LOGS_SYM | SLOW LOGS_SYM | BINARY_SYM LOGS_SYM | RELAY LOGS_SYM opt_channel | HOSTS_SYM | PRIVILEGES | LOGS_SYM | STATUS_SYM | CLIENT_STATS_SYM | USER_STATS_SYM | THREAD_STATS_SYM | TABLE_STATS_SYM | INDEX_STATS_SYM | RESOURCES | OPTIMIZER_COSTS_SYM | CHANGED_PAGE_BITMAPS_SYM | MEMORY_SYM PROFILE_SYM
opt_table_list ::= | table_list
reset ::= RESET_SYM reset_options | RESET_SYM PERSIST_SYM opt_if_exists_ident
reset_options ::= reset_options ',' reset_option | reset_option
opt_if_exists_ident ::= | if_exists ident
reset_option ::= SLAVE opt_replica_reset_options opt_channel | REPLICA_SYM opt_replica_reset_options opt_channel | MASTER_SYM source_reset_options | CHANGED_PAGE_BITMAPS_SYM
opt_replica_reset_options ::= | ALL
source_reset_options ::= | TO_SYM real_ulonglong_num
purge ::= PURGE purge_options
purge_options ::= master_or_binary LOGS_SYM purge_option | CHANGED_PAGE_BITMAPS_SYM BEFORE_SYM real_ulonglong_num
purge_option ::= TO_SYM TEXT_STRING_sys | BEFORE_SYM expr
kill ::= KILL_SYM kill_option expr
kill_option ::= | CONNECTION_SYM | QUERY_SYM
use ::= USE_SYM ident
load_stmt ::= LOAD data_or_xml load_data_lock opt_local INFILE TEXT_STRING_filesystem opt_duplicate INTO TABLE_SYM table_ident opt_use_partition opt_load_data_charset opt_xml_rows_identified_by opt_field_term opt_line_term opt_ignore_lines opt_field_or_var_spec opt_load_data_set_spec
data_or_xml ::= DATA_SYM | XML_SYM
opt_local ::= | LOCAL_SYM
load_data_lock ::= | CONCURRENT | LOW_PRIORITY
opt_duplicate ::= | duplicate
duplicate ::= REPLACE_SYM | IGNORE_SYM
opt_field_term ::= | COLUMNS field_term_list
field_term_list ::= field_term_list field_term | field_term
field_term ::= TERMINATED BY text_string | OPTIONALLY ENCLOSED BY text_string | ENCLOSED BY text_string | ESCAPED BY text_string
opt_line_term ::= | LINES line_term_list
line_term_list ::= line_term_list line_term | line_term
line_term ::= TERMINATED BY text_string | STARTING BY text_string
opt_xml_rows_identified_by ::= | ROWS_SYM IDENTIFIED_SYM BY text_string
opt_ignore_lines ::= | IGNORE_SYM NUM lines_or_rows
lines_or_rows ::= LINES | ROWS_SYM
opt_field_or_var_spec ::= | '(' fields_or_vars ')' | '(' ')'
fields_or_vars ::= fields_or_vars ',' field_or_var | field_or_var
field_or_var ::= simple_ident_nospvar | '@' ident_or_text
opt_load_data_set_spec ::= | SET_SYM load_data_set_list
load_data_set_list ::= load_data_set_list ',' load_data_set_elem | load_data_set_elem
load_data_set_elem ::= simple_ident_nospvar equal expr_or_default
text_literal ::= TEXT_STRING | NCHAR_STRING | UNDERSCORE_CHARSET TEXT_STRING | text_literal TEXT_STRING_literal
text_string ::= TEXT_STRING_literal | HEX_NUM | BIN_NUM
param_marker ::= PARAM_MARKER
signed_literal ::= literal | '+' NUM_literal | '-' NUM_literal
signed_literal_or_null ::= signed_literal | null_as_literal
null_as_literal ::= NULL_SYM
literal ::= text_literal | NUM_literal | temporal_literal | FALSE_SYM | TRUE_SYM | HEX_NUM | BIN_NUM | UNDERSCORE_CHARSET HEX_NUM | UNDERSCORE_CHARSET BIN_NUM
literal_or_null ::= literal | null_as_literal
NUM_literal ::= int64_literal | DECIMAL_NUM | FLOAT_NUM
int64_literal ::= NUM | LONG_NUM | ULONGLONG_NUM
temporal_literal ::= DATE_SYM TEXT_STRING | TIME_SYM TEXT_STRING | TIMESTAMP_SYM TEXT_STRING
opt_interval ::= | INTERVAL_SYM
insert_ident ::= simple_ident_nospvar | table_wild
table_wild ::= ident '.' '*' | ident '.' ident '.' '*'
order_expr ::= expr opt_ordering_direction
grouping_expr ::= expr
simple_ident ::= ident | simple_ident_q
simple_ident_nospvar ::= ident | simple_ident_q
simple_ident_q ::= ident '.' ident | ident '.' ident '.' ident
table_ident ::= ident | ident '.' ident
table_ident_opt_wild ::= ident opt_wild | ident '.' ident opt_wild
IDENT_sys ::= IDENT | IDENT_QUOTED
TEXT_STRING_sys_nonewline ::= TEXT_STRING_sys
filter_wild_db_table_string ::= TEXT_STRING_sys_nonewline
TEXT_STRING_sys ::= TEXT_STRING
TEXT_STRING_literal ::= TEXT_STRING
TEXT_STRING_filesystem ::= TEXT_STRING
TEXT_STRING_password ::= TEXT_STRING
TEXT_STRING_hash ::= TEXT_STRING_sys | HEX_NUM
TEXT_STRING_validated ::= TEXT_STRING
ident ::= IDENT_sys | ident_keyword
role_ident ::= IDENT_sys | role_keyword
label_ident ::= IDENT_sys | label_keyword
lvalue_ident ::= IDENT_sys | lvalue_keyword
ident_or_text ::= ident | TEXT_STRING_sys | LEX_HOSTNAME
role_ident_or_text ::= role_ident | TEXT_STRING_sys | LEX_HOSTNAME
user_ident_or_text ::= ident_or_text | ident_or_text '@' ident_or_text
user ::= user_ident_or_text | CURRENT_USER optional_braces
role ::= role_ident_or_text | role_ident_or_text '@' ident_or_text
schema ::= ident
ident_keyword ::= ident_keywords_unambiguous | ident_keywords_ambiguous_1_roles_and_labels | ident_keywords_ambiguous_2_labels | ident_keywords_ambiguous_3_roles | ident_keywords_ambiguous_4_system_variables
ident_keywords_ambiguous_1_roles_and_labels ::= EXECUTE_SYM | RESTART_SYM | SHUTDOWN
ident_keywords_ambiguous_2_labels ::= ASCII_SYM | BEGIN_SYM | BYTE_SYM | CACHE_SYM | CHARSET | CHECKSUM_SYM | CLONE_SYM | COMMENT_SYM | COMMIT_SYM | COMPRESSION_DICTIONARY_SYM | CONTAINS_SYM | DEALLOCATE_SYM | DO_SYM | END | FLUSH_SYM | FOLLOWS_SYM | HANDLER_SYM | HELP_SYM | IMPORT | INSTALL_SYM | LANGUAGE_SYM | NO_SYM | PRECEDES_SYM | PREPARE_SYM | REPAIR | RESET_SYM | ROLLBACK_SYM | SAVEPOINT_SYM | SIGNED_SYM | SLAVE | START_SYM | STOP_SYM | TRUNCATE_SYM | UNICODE_SYM | UNINSTALL_SYM | XA_SYM
label_keyword ::= ident_keywords_unambiguous | ident_keywords_ambiguous_3_roles | ident_keywords_ambiguous_4_system_variables
ident_keywords_ambiguous_3_roles ::= EVENT_SYM | FILE_SYM | NONE_SYM | PROCESS | PROXY_SYM | RELOAD | REPLICATION | RESOURCE_SYM | SUPER_SYM
ident_keywords_unambiguous ::= ACTION | ACCOUNT_SYM | ACTIVE_SYM | ADDDATE_SYM | ADMIN_SYM | AFTER_SYM | AGAINST | AGGREGATE_SYM | ALGORITHM_SYM | ALWAYS_SYM | ANY_SYM | ARRAY_SYM | AT_SYM | ATTRIBUTE_SYM | AUTOEXTEND_SIZE_SYM | AUTO_INC | AVG_ROW_LENGTH | AVG_SYM | BACKUP_SYM | BINLOG_SYM | BIT_SYM | BLOCK_SYM | BOOLEAN_SYM | BOOL_SYM | BTREE_SYM | BUCKETS_SYM | CASCADED | CATALOG_NAME_SYM | CHAIN_SYM | CHANGED | CHANGED_PAGE_BITMAPS_SYM | CHANNEL_SYM | CIPHER_SYM | CLASS_ORIGIN_SYM | CLIENT_SYM | CLIENT_STATS_SYM | CLOSE_SYM | COALESCE | CODE_SYM | COLLATION_SYM | COLUMNS | COLUMN_FORMAT_SYM | COLUMN_NAME_SYM | COMMITTED_SYM | COMPACT_SYM | COMPLETION_SYM | COMPONENT_SYM | COMPRESSED_SYM | COMPRESSION_SYM | CONCURRENT | CONNECTION_SYM | CONSISTENT_SYM | CONSTRAINT_CATALOG_SYM | CONSTRAINT_NAME_SYM | CONSTRAINT_SCHEMA_SYM | CONTEXT_SYM | CPU_SYM | CURRENT_SYM | CURSOR_NAME_SYM | DATAFILE_SYM | DATA_SYM | DATETIME_SYM | DATE_SYM | DAY_SYM | DEFAULT_AUTH_SYM | DEFINER_SYM | DEFINITION_SYM | DELAY_KEY_WRITE_SYM | DESCRIPTION_SYM | DIAGNOSTICS_SYM | DIRECTORY_SYM | DISABLE_SYM | DISCARD_SYM | DISK_SYM | DUMPFILE | DUPLICATE_SYM | DYNAMIC_SYM | EFFECTIVE_SYM | ENABLE_SYM | ENCRYPTION_KEY_ID_SYM | ENCRYPTION_SYM | ENDS_SYM | ENFORCED_SYM | ENGINES_SYM | ENGINE_SYM | ENGINE_ATTRIBUTE_SYM | ENUM_SYM | ERRORS | ERROR_SYM | ESCAPE_SYM | EVENTS_SYM | EVERY_SYM | EXCHANGE_SYM | EXCLUDE_SYM | EXPANSION_SYM | EXPIRE_SYM | EXPORT_SYM | EXTENDED_SYM | EXTENT_SIZE_SYM | FAILED_LOGIN_ATTEMPTS_SYM | FAST_SYM | FAULTS_SYM | FILE_BLOCK_SIZE_SYM | FILTER_SYM | FIRST_SYM | FIXED_SYM | FOLLOWING_SYM | FORMAT_SYM | FOUND_SYM | FULL | GENERAL | GEOMETRYCOLLECTION_SYM | GEOMETRY_SYM | GET_FORMAT | GET_MASTER_PUBLIC_KEY_SYM | GET_SOURCE_PUBLIC_KEY_SYM | GRANTS | GROUP_REPLICATION | HASH_SYM | HISTOGRAM_SYM | HISTORY_SYM | HOSTS_SYM | HOST_SYM | HOUR_SYM | IDENTIFIED_SYM | IGNORE_SERVER_IDS_SYM | INACTIVE_SYM | INDEX_STATS_SYM | INDEXES | INITIAL_SIZE_SYM | INSERT_METHOD | INSTANCE_SYM | INVISIBLE_SYM | INVOKER_SYM | IO_SYM | IPC_SYM | ISOLATION | ISSUER_SYM | JSON_SYM | JSON_VALUE_SYM | KEY_BLOCK_SIZE | LAST_SYM | LEAVES | LESS_SYM | LEVEL_SYM | LINESTRING_SYM | LIST_SYM | LOCKED_SYM | LOCKS_SYM | LOGFILE_SYM | LOGS_SYM | MASTER_AUTO_POSITION_SYM | MASTER_COMPRESSION_ALGORITHM_SYM | MASTER_CONNECT_RETRY_SYM | MASTER_DELAY_SYM | MASTER_HEARTBEAT_PERIOD_SYM | MASTER_HOST_SYM | NETWORK_NAMESPACE_SYM | MASTER_LOG_FILE_SYM | MASTER_LOG_POS_SYM | MASTER_PASSWORD_SYM | MASTER_PORT_SYM | MASTER_PUBLIC_KEY_PATH_SYM | MASTER_RETRY_COUNT_SYM | MASTER_SSL_CAPATH_SYM | MASTER_SSL_CA_SYM | MASTER_SSL_CERT_SYM | MASTER_SSL_CIPHER_SYM | MASTER_SSL_CRLPATH_SYM | MASTER_SSL_CRL_SYM | MASTER_SSL_KEY_SYM | MASTER_SSL_SYM | MASTER_SYM | MASTER_TLS_CIPHERSUITES_SYM | MASTER_TLS_VERSION_SYM | MASTER_USER_SYM | MASTER_ZSTD_COMPRESSION_LEVEL_SYM | MAX_CONNECTIONS_PER_HOUR | MAX_QUERIES_PER_HOUR | MAX_ROWS | MAX_SIZE_SYM | MAX_UPDATES_PER_HOUR | MAX_USER_CONNECTIONS_SYM | MEDIUM_SYM | MEMBER_SYM | MEMORY_SYM | MERGE_SYM | MESSAGE_TEXT_SYM | MICROSECOND_SYM | MIGRATE_SYM | MINUTE_SYM | MIN_ROWS | MODE_SYM | MODIFY_SYM | MONTH_SYM | MULTILINESTRING_SYM | MULTIPOINT_SYM | MULTIPOLYGON_SYM | MUTEX_SYM | MYSQL_ERRNO_SYM | NAMES_SYM | NAME_SYM | NATIONAL_SYM | NCHAR_SYM | NDBCLUSTER_SYM | NESTED_SYM | NEVER_SYM | NEW_SYM | NEXT_SYM | NODEGROUP_SYM | NOWAIT_SYM | NO_WAIT_SYM | NULLS_SYM | NUMBER_SYM | NVARCHAR_SYM | OFF_SYM | OFFSET_SYM | OJ_SYM | OLD_SYM | ONE_SYM | ONLY_SYM | OPEN_SYM | OPTIONAL_SYM | OPTIONS_SYM | ORDINALITY_SYM | ORGANIZATION_SYM | OTHERS_SYM | OWNER_SYM | PACK_KEYS_SYM | PAGE_SYM | PARSER_SYM | PARTIAL | PARTITIONING_SYM | PARTITIONS_SYM | PASSWORD | PASSWORD_LOCK_TIME_SYM | PATH_SYM | PHASE_SYM | PLUGINS_SYM | PLUGIN_DIR_SYM | PLUGIN_SYM | POINT_SYM | POLYGON_SYM | PORT_SYM | PRECEDING_SYM | PRESERVE_SYM | PREV_SYM | PRIVILEGES | PRIVILEGE_CHECKS_USER_SYM | PROCESSLIST_SYM | PROFILES_SYM | PROFILE_SYM | QUARTER_SYM | QUERY_SYM | QUICK | RANDOM_SYM | READ_ONLY_SYM | REBUILD_SYM | RECOVER_SYM | REDO_BUFFER_SIZE_SYM | REDUNDANT_SYM | REFERENCE_SYM | RELAY | RELAYLOG_SYM | RELAY_LOG_FILE_SYM | RELAY_LOG_POS_SYM | RELAY_THREAD | REMOVE_SYM | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_SYM | REORGANIZE_SYM | REPEATABLE_SYM | REPLICAS_SYM | REPLICATE_DO_DB | REPLICATE_DO_TABLE | REPLICATE_IGNORE_DB | REPLICATE_IGNORE_TABLE | REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE | REPLICATE_WILD_IGNORE_TABLE | REPLICA_SYM | REQUIRE_ROW_FORMAT_SYM | REQUIRE_TABLE_PRIMARY_KEY_CHECK_SYM | RESOURCES | RESPECT_SYM | RESTORE_SYM | RESUME_SYM | RETAIN_SYM | RETURNED_SQLSTATE_SYM | RETURNING_SYM | RETURNS_SYM | REUSE_SYM | REVERSE_SYM | ROLE_SYM | ROLLUP_SYM | ROTATE_SYM | ROUTINE_SYM | ROW_COUNT_SYM | ROW_FORMAT_SYM | RTREE_SYM | SCHEDULE_SYM | SCHEMA_NAME_SYM | SECONDARY_ENGINE_SYM | SECONDARY_ENGINE_ATTRIBUTE_SYM | SECONDARY_LOAD_SYM | SECONDARY_SYM | SECONDARY_UNLOAD_SYM | SECOND_SYM | SECURITY_SYM | SERIALIZABLE_SYM | SERIAL_SYM | SERVER_SYM | SHARE_SYM | SIMPLE_SYM | SKIP_SYM | SLOW | SNAPSHOT_SYM | SOCKET_SYM | SONAME_SYM | SOUNDS_SYM | SOURCE_AUTO_POSITION_SYM | SOURCE_BIND_SYM | SOURCE_COMPRESSION_ALGORITHM_SYM | SOURCE_CONNECTION_AUTO_FAILOVER_SYM | SOURCE_CONNECT_RETRY_SYM | SOURCE_DELAY_SYM | SOURCE_HEARTBEAT_PERIOD_SYM | SOURCE_HOST_SYM | SOURCE_LOG_FILE_SYM | SOURCE_LOG_POS_SYM | SOURCE_PASSWORD_SYM | SOURCE_PORT_SYM | SOURCE_PUBLIC_KEY_PATH_SYM | SOURCE_RETRY_COUNT_SYM | SOURCE_SSL_CAPATH_SYM | SOURCE_SSL_CA_SYM | SOURCE_SSL_CERT_SYM | SOURCE_SSL_CIPHER_SYM | SOURCE_SSL_CRLPATH_SYM | SOURCE_SSL_CRL_SYM | SOURCE_SSL_KEY_SYM | SOURCE_SSL_SYM | SOURCE_SSL_VERIFY_SERVER_CERT_SYM | SOURCE_SYM | SOURCE_TLS_CIPHERSUITES_SYM | SOURCE_TLS_VERSION_SYM | SOURCE_USER_SYM | SOURCE_ZSTD_COMPRESSION_LEVEL_SYM | SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS | SQL_BUFFER_RESULT | SQL_NO_CACHE_SYM | SQL_THREAD | SRID_SYM | STACKED_SYM | STARTS_SYM | STATS_AUTO_RECALC_SYM | STATS_PERSISTENT_SYM | STATS_SAMPLE_PAGES_SYM | STATUS_SYM | STORAGE_SYM | STREAM_SYM | STRING_SYM | SUBCLASS_ORIGIN_SYM | SUBDATE_SYM | SUBJECT_SYM | SUBPARTITIONS_SYM | SUBPARTITION_SYM | SUSPEND_SYM | SWAPS_SYM | SWITCHES_SYM | TABLES | TABLESPACE_SYM | TABLE_CHECKSUM_SYM | TABLE_NAME_SYM | TABLE_STATS_SYM | TEMPORARY | TEMPTABLE_SYM | TEXT_SYM | THAN_SYM | THREAD_PRIORITY_SYM | THREAD_STATS_SYM | TIES_SYM | TIMESTAMP_ADD | TIMESTAMP_DIFF | TIMESTAMP_SYM | TIME_SYM | TLS_SYM | TRANSACTION_SYM | TRIGGERS_SYM | TYPES_SYM | TYPE_SYM | UNBOUNDED_SYM | UNCOMMITTED_SYM | UNDEFINED_SYM | UNDOFILE_SYM | UNDO_BUFFER_SIZE_SYM | UNKNOWN_SYM | UNTIL_SYM | UPGRADE_SYM | USER | USER_STATS_SYM | USE_FRM | VALIDATION_SYM | VALUE_SYM | VARIABLES | VCPU_SYM | VIEW_SYM | VISIBLE_SYM | WAIT_SYM | WARNINGS | WEEK_SYM | WEIGHT_STRING_SYM | WITHOUT_SYM | WORK_SYM | WRAPPER_SYM | X509_SYM | XID_SYM | XML_SYM | YEAR_SYM | ZONE_SYM
role_keyword ::= ident_keywords_unambiguous | ident_keywords_ambiguous_2_labels | ident_keywords_ambiguous_4_system_variables
lvalue_keyword ::= ident_keywords_unambiguous | ident_keywords_ambiguous_1_roles_and_labels | ident_keywords_ambiguous_2_labels | ident_keywords_ambiguous_3_roles
ident_keywords_ambiguous_4_system_variables ::= GLOBAL_SYM | LOCAL_SYM | PERSIST_SYM | PERSIST_ONLY_SYM | SESSION_SYM
set ::= SET_SYM start_option_value_list
start_option_value_list ::= option_value_no_option_type option_value_list_continued | TRANSACTION_SYM transaction_characteristics | option_type start_option_value_list_following_option_type | PASSWORD equal TEXT_STRING_password opt_replace_password opt_retain_current_password | PASSWORD TO_SYM RANDOM_SYM opt_replace_password opt_retain_current_password | PASSWORD FOR_SYM user equal TEXT_STRING_password opt_replace_password opt_retain_current_password | PASSWORD FOR_SYM user TO_SYM RANDOM_SYM opt_replace_password opt_retain_current_password
set_role_stmt ::= SET_SYM ROLE_SYM role_list | SET_SYM ROLE_SYM NONE_SYM | SET_SYM ROLE_SYM DEFAULT_SYM | SET_SYM DEFAULT_SYM ROLE_SYM role_list TO_SYM role_list | SET_SYM DEFAULT_SYM ROLE_SYM NONE_SYM TO_SYM role_list | SET_SYM DEFAULT_SYM ROLE_SYM ALL TO_SYM role_list | SET_SYM ROLE_SYM ALL opt_except_role_list
opt_except_role_list ::= | EXCEPT_SYM role_list
set_resource_group_stmt ::= SET_SYM RESOURCE_SYM GROUP_SYM ident | SET_SYM RESOURCE_SYM GROUP_SYM ident FOR_SYM thread_id_list_options
thread_id_list ::= real_ulong_num | thread_id_list opt_comma real_ulong_num
thread_id_list_options ::= thread_id_list
start_option_value_list_following_option_type ::= option_value_following_option_type option_value_list_continued | TRANSACTION_SYM transaction_characteristics
option_value_list_continued ::= | ',' option_value_list
option_value_list ::= option_value | option_value_list ',' option_value
option_value ::= option_type option_value_following_option_type | option_value_no_option_type
option_type ::= GLOBAL_SYM | PERSIST_SYM | PERSIST_ONLY_SYM | LOCAL_SYM | SESSION_SYM
opt_var_type ::= | GLOBAL_SYM | LOCAL_SYM | SESSION_SYM
opt_var_ident_type ::= | GLOBAL_SYM '.' | LOCAL_SYM '.' | SESSION_SYM '.'
opt_set_var_ident_type ::= | PERSIST_SYM '.' | PERSIST_ONLY_SYM '.' | GLOBAL_SYM '.' | LOCAL_SYM '.' | SESSION_SYM '.'
option_value_following_option_type ::= internal_variable_name equal set_expr_or_default
option_value_no_option_type ::= internal_variable_name equal set_expr_or_default | '@' ident_or_text equal expr | '@' '@' opt_set_var_ident_type internal_variable_name equal set_expr_or_default | character_set old_or_new_charset_name_or_default | NAMES_SYM equal expr | NAMES_SYM charset_name opt_collate | NAMES_SYM DEFAULT_SYM
internal_variable_name ::= lvalue_ident | lvalue_ident '.' ident | DEFAULT_SYM '.' ident
transaction_characteristics ::= transaction_access_mode opt_isolation_level | isolation_level opt_transaction_access_mode
transaction_access_mode ::= transaction_access_mode_types
opt_transaction_access_mode ::= | ',' transaction_access_mode
isolation_level ::= ISOLATION LEVEL_SYM isolation_types
opt_isolation_level ::= | ',' isolation_level
transaction_access_mode_types ::= READ_SYM ONLY_SYM | READ_SYM WRITE_SYM
isolation_types ::= READ_SYM UNCOMMITTED_SYM | READ_SYM COMMITTED_SYM | REPEATABLE_SYM READ_SYM | SERIALIZABLE_SYM
set_expr_or_default ::= expr | DEFAULT_SYM | ON_SYM | ALL | BINARY_SYM | ROW_SYM | SYSTEM_SYM | FORCE_SYM
lock ::= LOCK_SYM lock_variant
lock_variant ::= TABLES FOR_SYM BACKUP_SYM | table_or_tables table_lock_list | INSTANCE_SYM FOR_SYM BACKUP_SYM
table_or_tables ::= TABLE_SYM | TABLES
table_lock_list ::= table_lock | table_lock_list ',' table_lock
table_lock ::= table_ident opt_table_alias lock_option
lock_option ::= READ_SYM | WRITE_SYM | LOW_PRIORITY WRITE_SYM | READ_SYM LOCAL_SYM
unlock ::= UNLOCK_SYM unlock_variant
unlock_variant ::= INSTANCE_SYM | table_or_tables
shutdown_stmt ::= SHUTDOWN
restart_server_stmt ::= RESTART_SYM
alter_instance_stmt ::= ALTER INSTANCE_SYM alter_instance_action
alter_instance_action ::= ROTATE_SYM ident_or_text MASTER_SYM KEY_SYM | ROTATE_SYM ident_or_text SYSTEM_SYM KEY_SYM ulong_num | ROTATE_SYM ident_or_text SYSTEM_SYM KEY_SYM | RELOAD TLS_SYM | RELOAD TLS_SYM NO_SYM ROLLBACK_SYM ON_SYM ERROR_SYM | RELOAD TLS_SYM FOR_SYM CHANNEL_SYM ident | RELOAD TLS_SYM FOR_SYM CHANNEL_SYM ident NO_SYM ROLLBACK_SYM ON_SYM ERROR_SYM | ENABLE_SYM ident ident | DISABLE_SYM ident ident
handler_stmt ::= HANDLER_SYM table_ident OPEN_SYM opt_table_alias | HANDLER_SYM ident CLOSE_SYM | HANDLER_SYM ident READ_SYM handler_scan_function opt_where_clause opt_limit_clause | HANDLER_SYM ident READ_SYM ident handler_rkey_function opt_where_clause opt_limit_clause | HANDLER_SYM ident READ_SYM ident handler_rkey_mode '(' values ')' opt_where_clause opt_limit_clause
handler_scan_function ::= FIRST_SYM | NEXT_SYM
handler_rkey_function ::= FIRST_SYM | NEXT_SYM | PREV_SYM | LAST_SYM
handler_rkey_mode ::= EQ | GE | LE | GT_SYM | LT
revoke ::= REVOKE role_or_privilege_list FROM user_list | REVOKE role_or_privilege_list ON_SYM opt_acl_type grant_ident FROM user_list | REVOKE ALL opt_privileges ON_SYM opt_acl_type grant_ident FROM user_list | REVOKE ALL opt_privileges ',' GRANT OPTION FROM user_list | REVOKE PROXY_SYM ON_SYM user FROM user_list
grant ::= GRANT role_or_privilege_list TO_SYM user_list opt_with_admin_option | GRANT role_or_privilege_list ON_SYM opt_acl_type grant_ident TO_SYM user_list grant_options opt_grant_as | GRANT ALL opt_privileges ON_SYM opt_acl_type grant_ident TO_SYM user_list grant_options opt_grant_as | GRANT PROXY_SYM ON_SYM user TO_SYM user_list opt_grant_option
opt_acl_type ::= | TABLE_SYM | FUNCTION_SYM | PROCEDURE_SYM
opt_privileges ::= /*empty*/ | PRIVILEGES
role_or_privilege_list ::= role_or_privilege | role_or_privilege_list ',' role_or_privilege
role_or_privilege ::= role_ident_or_text opt_column_list | role_ident_or_text '@' ident_or_text | SELECT_SYM opt_column_list | INSERT_SYM opt_column_list | UPDATE_SYM opt_column_list | REFERENCES opt_column_list | DELETE_SYM | USAGE | INDEX_SYM | ALTER | CREATE | DROP | EXECUTE_SYM | RELOAD | SHUTDOWN | PROCESS | FILE_SYM | GRANT OPTION | SHOW DATABASES | SUPER_SYM | CREATE TEMPORARY TABLES | LOCK_SYM TABLES | REPLICATION SLAVE | REPLICATION CLIENT_SYM | CREATE VIEW_SYM | SHOW VIEW_SYM | CREATE ROUTINE_SYM | ALTER ROUTINE_SYM | CREATE USER | EVENT_SYM | TRIGGER_SYM | CREATE TABLESPACE_SYM | CREATE ROLE_SYM | DROP ROLE_SYM
opt_with_admin_option ::= | WITH ADMIN_SYM OPTION
opt_and ::= /*empty*/ | AND_SYM
require_list ::= require_list_element opt_and require_list | require_list_element
require_list_element ::= SUBJECT_SYM TEXT_STRING | ISSUER_SYM TEXT_STRING | CIPHER_SYM TEXT_STRING
grant_ident ::= '*' | schema '.' '*' | '*' '.' '*' | ident | schema '.' ident
user_list ::= user | user_list ',' user
role_list ::= role | role_list ',' role
opt_retain_current_password ::= | RETAIN_SYM CURRENT_SYM PASSWORD
opt_discard_old_password ::= | DISCARD_SYM OLD_SYM PASSWORD
create_user ::= user IDENTIFIED_SYM BY TEXT_STRING_password | user IDENTIFIED_SYM BY RANDOM_SYM PASSWORD | user IDENTIFIED_SYM WITH ident_or_text | user IDENTIFIED_SYM WITH ident_or_text AS TEXT_STRING_hash | user IDENTIFIED_SYM WITH ident_or_text BY TEXT_STRING_password | user IDENTIFIED_SYM WITH ident_or_text BY RANDOM_SYM PASSWORD | user
alter_user ::= user IDENTIFIED_SYM BY TEXT_STRING REPLACE_SYM TEXT_STRING_password opt_retain_current_password | user IDENTIFIED_SYM WITH ident_or_text BY TEXT_STRING_password REPLACE_SYM TEXT_STRING_password opt_retain_current_password | user IDENTIFIED_SYM BY TEXT_STRING_password opt_retain_current_password | user IDENTIFIED_SYM BY RANDOM_SYM PASSWORD opt_retain_current_password | user IDENTIFIED_SYM BY RANDOM_SYM PASSWORD REPLACE_SYM TEXT_STRING_password opt_retain_current_password | user IDENTIFIED_SYM WITH ident_or_text | user IDENTIFIED_SYM WITH ident_or_text AS TEXT_STRING_hash opt_retain_current_password | user IDENTIFIED_SYM WITH ident_or_text BY TEXT_STRING_password opt_retain_current_password | user IDENTIFIED_SYM WITH ident_or_text BY RANDOM_SYM PASSWORD opt_retain_current_password | user opt_discard_old_password
create_user_list ::= create_user | create_user_list ',' create_user
alter_user_list ::= alter_user | alter_user_list ',' alter_user
opt_column_list ::= | '(' column_list ')'
column_list ::= ident | column_list ',' ident
require_clause ::= /*empty*/ | REQUIRE_SYM require_list | REQUIRE_SYM SSL_SYM | REQUIRE_SYM X509_SYM | REQUIRE_SYM NONE_SYM
grant_options ::= | WITH GRANT OPTION
opt_grant_option ::= | WITH GRANT OPTION
opt_with_roles ::= | WITH ROLE_SYM role_list | WITH ROLE_SYM ALL opt_except_role_list | WITH ROLE_SYM NONE_SYM | WITH ROLE_SYM DEFAULT_SYM
opt_grant_as ::= | AS user opt_with_roles
begin_stmt ::= BEGIN_SYM opt_work
opt_work ::= | WORK_SYM
opt_chain ::= | AND_SYM NO_SYM CHAIN_SYM | AND_SYM CHAIN_SYM
opt_release ::= | RELEASE_SYM | NO_SYM RELEASE_SYM
opt_savepoint ::= | SAVEPOINT_SYM
commit ::= COMMIT_SYM opt_work opt_chain opt_release
rollback ::= ROLLBACK_SYM opt_work opt_chain opt_release | ROLLBACK_SYM opt_work TO_SYM opt_savepoint ident
savepoint ::= SAVEPOINT_SYM ident
release ::= RELEASE_SYM SAVEPOINT_SYM ident
union_option ::= | DISTINCT | ALL
row_subquery ::= subquery
table_subquery ::= subquery
subquery ::= query_expression_parens
query_spec_option ::= STRAIGHT_JOIN | HIGH_PRIORITY | DISTINCT | SQL_SMALL_RESULT | SQL_BIG_RESULT | SQL_BUFFER_RESULT | SQL_CALC_FOUND_ROWS | ALL
init_lex_create_info ::=
view_or_trigger_or_sp_or_event ::= definer init_lex_create_info definer_tail | no_definer init_lex_create_info no_definer_tail | view_replace_or_algorithm definer_opt init_lex_create_info view_tail
definer_tail ::= view_tail | trigger_tail | sp_tail | sf_tail | event_tail
no_definer_tail ::= view_tail | trigger_tail | sp_tail | sf_tail | udf_tail | event_tail
definer_opt ::= no_definer | definer
no_definer ::=
definer ::= DEFINER_SYM EQ user
view_replace_or_algorithm ::= view_replace | view_replace view_algorithm | view_algorithm
view_replace ::= OR_SYM REPLACE_SYM
view_algorithm ::= ALGORITHM_SYM EQ UNDEFINED_SYM | ALGORITHM_SYM EQ MERGE_SYM | ALGORITHM_SYM EQ TEMPTABLE_SYM
view_suid ::= | SQL_SYM SECURITY_SYM DEFINER_SYM | SQL_SYM SECURITY_SYM INVOKER_SYM
view_tail ::= view_suid VIEW_SYM table_ident opt_derived_column_list AS view_select
view_select ::= query_expression_or_parens view_check_option
view_check_option ::= | WITH CHECK_SYM OPTION | WITH CASCADED CHECK_SYM OPTION | WITH LOCAL_SYM CHECK_SYM OPTION
trigger_action_order ::= FOLLOWS_SYM | PRECEDES_SYM
trigger_follows_precedes_clause ::= | trigger_action_order ident_or_text
trigger_tail ::= TRIGGER_SYM sp_name trg_action_time trg_event ON_SYM table_ident FOR_SYM EACH_SYM ROW_SYM trigger_follows_precedes_clause sp_proc_stmt
udf_tail ::= AGGREGATE_SYM FUNCTION_SYM ident RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys | FUNCTION_SYM ident RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys
sf_tail ::= FUNCTION_SYM sp_name '(' sp_fdparam_list ')' RETURNS_SYM type opt_collate sp_c_chistics sp_proc_stmt
sp_tail ::= PROCEDURE_SYM sp_name '(' sp_pdparam_list ')' sp_c_chistics sp_proc_stmt
xa ::= XA_SYM begin_or_start xid opt_join_or_resume | XA_SYM END xid opt_suspend | XA_SYM PREPARE_SYM xid | XA_SYM COMMIT_SYM xid opt_one_phase | XA_SYM ROLLBACK_SYM xid | XA_SYM RECOVER_SYM opt_convert_xid
opt_convert_xid ::= | CONVERT_SYM XID_SYM
xid ::= text_string | text_string ',' text_string | text_string ',' text_string ',' ulong_num
begin_or_start ::= BEGIN_SYM | START_SYM
opt_join_or_resume ::= | JOIN_SYM | RESUME_SYM
opt_one_phase ::= | ONE_SYM PHASE_SYM
opt_suspend ::= | SUSPEND_SYM | SUSPEND_SYM FOR_SYM MIGRATE_SYM
install ::= INSTALL_SYM PLUGIN_SYM ident SONAME_SYM TEXT_STRING_sys | INSTALL_SYM COMPONENT_SYM TEXT_STRING_sys_list
uninstall ::= UNINSTALL_SYM PLUGIN_SYM ident | UNINSTALL_SYM COMPONENT_SYM TEXT_STRING_sys_list
TEXT_STRING_sys_list ::= TEXT_STRING_sys | TEXT_STRING_sys_list ',' TEXT_STRING_sys
import_stmt ::= IMPORT TABLE_SYM FROM TEXT_STRING_sys_list
clone_stmt ::= CLONE_SYM LOCAL_SYM DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_filesystem | CLONE_SYM INSTANCE_SYM FROM user ':' ulong_num IDENTIFIED_SYM BY TEXT_STRING_sys opt_datadir_ssl
opt_datadir_ssl ::= opt_ssl | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_filesystem opt_ssl
opt_ssl ::= | REQUIRE_SYM SSL_SYM | REQUIRE_SYM NO_SYM SSL_SYM
resource_group_types ::= USER | SYSTEM_SYM
opt_resource_group_vcpu_list ::= | VCPU_SYM opt_equal vcpu_range_spec_list
vcpu_range_spec_list ::= vcpu_num_or_range | vcpu_range_spec_list opt_comma vcpu_num_or_range
vcpu_num_or_range ::= NUM | NUM '-' NUM
signed_num ::= NUM | '-' NUM
opt_resource_group_priority ::= | THREAD_PRIORITY_SYM opt_equal signed_num
opt_resource_group_enable_disable ::= | ENABLE_SYM | DISABLE_SYM
opt_force ::= | FORCE_SYM
json_attribute ::= TEXT_STRING_sys

// Tokens from https://raw.githubusercontent.com/percona/percona-server/8.0/sql/lex.h

AND_AND_SYM ::= "&&"
LT ::= "<"
LE ::= "<="
NE ::= "<>"
NE ::= "!="
EQ ::= "="
GT_SYM ::= ">"
GE ::= ">="
SHIFT_LEFT ::= "<<"
SHIFT_RIGHT ::= ">>"
EQUAL_SYM ::= "<=>"
ACCESSIBLE_SYM ::= "ACCESSIBLE"
ACCOUNT_SYM ::= "ACCOUNT"
ACTION ::= "ACTION"
ACTIVE_SYM ::= "ACTIVE"
ADD ::= "ADD"
ADMIN_SYM ::= "ADMIN"
AFTER_SYM ::= "AFTER"
AGAINST ::= "AGAINST"
AGGREGATE_SYM ::= "AGGREGATE"
ALL ::= "ALL"
ALGORITHM_SYM ::= "ALGORITHM"
ALWAYS_SYM ::= "ALWAYS"
AND_SYM ::= "AND"
ANY_SYM ::= "ANY"
ARRAY_SYM ::= "ARRAY"
AS ::= "AS"
ASC ::= "ASC"
ASCII_SYM ::= "ASCII"
ASENSITIVE_SYM ::= "ASENSITIVE"
AT_SYM ::= "AT"
ATTRIBUTE_SYM ::= "ATTRIBUTE"
AUTO_INC ::= "AUTO_INCREMENT"
AUTOEXTEND_SIZE_SYM ::= "AUTOEXTEND_SIZE"
AVG_SYM ::= "AVG"
AVG_ROW_LENGTH ::= "AVG_ROW_LENGTH"
BACKUP_SYM ::= "BACKUP"
BEFORE_SYM ::= "BEFORE"
BEGIN_SYM ::= "BEGIN"
BETWEEN_SYM ::= "BETWEEN"
BIGINT_SYM ::= "BIGINT"
BINARY_SYM ::= "BINARY"
BINLOG_SYM ::= "BINLOG"
BIT_SYM ::= "BIT"
BLOB_SYM ::= "BLOB"
BLOCK_SYM ::= "BLOCK"
BOOL_SYM ::= "BOOL"
BOOLEAN_SYM ::= "BOOLEAN"
BOTH ::= "BOTH"
BTREE_SYM ::= "BTREE"
BUCKETS_SYM ::= "BUCKETS"
BY ::= "BY"
BYTE_SYM ::= "BYTE"
CACHE_SYM ::= "CACHE"
CASCADE ::= "CASCADE"
CASCADED ::= "CASCADED"
CASE_SYM ::= "CASE"
CATALOG_NAME_SYM ::= "CATALOG_NAME"
CHAIN_SYM ::= "CHAIN"
CHANGE ::= "CHANGE"
CHANGED ::= "CHANGED"
CHANGED_PAGE_BITMAPS_SYM ::= "CHANGED_PAGE_BITMAPS"
CHANNEL_SYM ::= "CHANNEL"
CHAR_SYM ::= "CHAR"
CHAR_SYM ::= "CHARACTER"
CHARSET ::= "CHARSET"
CHECKSUM_SYM ::= "CHECKSUM"
CIPHER_SYM ::= "CIPHER"
CLASS_ORIGIN_SYM ::= "CLASS_ORIGIN"
CLIENT_SYM ::= "CLIENT"
CLIENT_STATS_SYM ::= "CLIENT_STATISTICS"
CLONE_SYM ::= "CLONE"
CLOSE_SYM ::= "CLOSE"
CLUSTERING_SYM ::= "CLUSTERING"
COALESCE ::= "COALESCE"
CODE_SYM ::= "CODE"
COLLATE_SYM ::= "COLLATE"
COLLATION_SYM ::= "COLLATION"
COLUMN_SYM ::= "COLUMN"
COLUMN_FORMAT_SYM ::= "COLUMN_FORMAT"
COLUMN_NAME_SYM ::= "COLUMN_NAME"
COLUMNS ::= "COLUMNS"
COMMENT_SYM ::= "COMMENT"
COMMIT_SYM ::= "COMMIT"
COMMITTED_SYM ::= "COMMITTED"
COMPACT_SYM ::= "COMPACT"
COMPLETION_SYM ::= "COMPLETION"
COMPONENT_SYM ::= "COMPONENT"
COMPRESSION_SYM ::= "COMPRESSION"
COMPRESSED_SYM ::= "COMPRESSED"
COMPRESSION_DICTIONARY_SYM ::= "COMPRESSION_DICTIONARY"
ENCRYPTION_SYM ::= "ENCRYPTION"
ENCRYPTION_KEY_ID_SYM ::= "ENCRYPTION_KEY_ID"
CONCURRENT ::= "CONCURRENT"
CONDITION_SYM ::= "CONDITION"
CONNECTION_SYM ::= "CONNECTION"
CONSISTENT_SYM ::= "CONSISTENT"
CONSTRAINT ::= "CONSTRAINT"
CONSTRAINT_CATALOG_SYM ::= "CONSTRAINT_CATALOG"
CONSTRAINT_NAME_SYM ::= "CONSTRAINT_NAME"
CONSTRAINT_SCHEMA_SYM ::= "CONSTRAINT_SCHEMA"
CONTAINS_SYM ::= "CONTAINS"
CONTEXT_SYM ::= "CONTEXT"
CONTINUE_SYM ::= "CONTINUE"
CONVERT_SYM ::= "CONVERT"
CPU_SYM ::= "CPU"
CROSS ::= "CROSS"
CUBE_SYM ::= "CUBE"
CUME_DIST_SYM ::= "CUME_DIST"
CURRENT_SYM ::= "CURRENT"
CURDATE ::= "CURRENT_DATE"
CURTIME ::= "CURRENT_TIME"
NOW_SYM ::= "CURRENT_TIMESTAMP"
CURRENT_USER ::= "CURRENT_USER"
CURSOR_SYM ::= "CURSOR"
CURSOR_NAME_SYM ::= "CURSOR_NAME"
DATA_SYM ::= "DATA"
DATABASE ::= "DATABASE"
DATABASES ::= "DATABASES"
DATAFILE_SYM ::= "DATAFILE"
DATE_SYM ::= "DATE"
DATETIME_SYM ::= "DATETIME"
DAY_SYM ::= "DAY"
DAY_HOUR_SYM ::= "DAY_HOUR"
DAY_MICROSECOND_SYM ::= "DAY_MICROSECOND"
DAY_MINUTE_SYM ::= "DAY_MINUTE"
DAY_SECOND_SYM ::= "DAY_SECOND"
DEALLOCATE_SYM ::= "DEALLOCATE"
DECIMAL_SYM ::= "DEC"
DECIMAL_SYM ::= "DECIMAL"
DECLARE_SYM ::= "DECLARE"
DEFAULT_SYM ::= "DEFAULT"
DEFAULT_AUTH_SYM ::= "DEFAULT_AUTH"
DEFINER_SYM ::= "DEFINER"
DEFINITION_SYM ::= "DEFINITION"
DELAYED_SYM ::= "DELAYED"
DELAY_KEY_WRITE_SYM ::= "DELAY_KEY_WRITE"
DENSE_RANK_SYM ::= "DENSE_RANK"
DESC ::= "DESC"
DESCRIBE ::= "DESCRIBE"
DESCRIPTION_SYM ::= "DESCRIPTION"
DETERMINISTIC_SYM ::= "DETERMINISTIC"
DIAGNOSTICS_SYM ::= "DIAGNOSTICS"
DIRECTORY_SYM ::= "DIRECTORY"
DISABLE_SYM ::= "DISABLE"
DISCARD_SYM ::= "DISCARD"
DISK_SYM ::= "DISK"
DISTINCT ::= "DISTINCT"
DISTINCT ::= "DISTINCTROW"
DIV_SYM ::= "DIV"
DO_SYM ::= "DO"
DOUBLE_SYM ::= "DOUBLE"
DROP ::= "DROP"
DUAL_SYM ::= "DUAL"
DUMPFILE ::= "DUMPFILE"
DUPLICATE_SYM ::= "DUPLICATE"
DYNAMIC_SYM ::= "DYNAMIC"
EACH_SYM ::= "EACH"
EFFECTIVE_SYM ::= "EFFECTIVE"
ELSE ::= "ELSE"
ELSEIF_SYM ::= "ELSEIF"
EMPTY_SYM ::= "EMPTY"
ENABLE_SYM ::= "ENABLE"
ENCLOSED ::= "ENCLOSED"
END ::= "END"
ENDS_SYM ::= "ENDS"
ENFORCED_SYM ::= "ENFORCED"
ENGINE_SYM ::= "ENGINE"
ENGINE_ATTRIBUTE_SYM ::= "ENGINE_ATTRIBUTE"
ENGINES_SYM ::= "ENGINES"
ENUM_SYM ::= "ENUM"
ERROR_SYM ::= "ERROR"
ERRORS ::= "ERRORS"
ESCAPE_SYM ::= "ESCAPE"
ESCAPED ::= "ESCAPED"
EVENT_SYM ::= "EVENT"
EVENTS_SYM ::= "EVENTS"
EVERY_SYM ::= "EVERY"
EXCEPT_SYM ::= "EXCEPT"
EXCHANGE_SYM ::= "EXCHANGE"
EXCLUDE_SYM ::= "EXCLUDE"
EXECUTE_SYM ::= "EXECUTE"
EXISTS ::= "EXISTS"
EXIT_SYM ::= "EXIT"
EXPANSION_SYM ::= "EXPANSION"
EXPORT_SYM ::= "EXPORT"
EXPIRE_SYM ::= "EXPIRE"
DESCRIBE ::= "EXPLAIN"
EXTENDED_SYM ::= "EXTENDED"
EXTENT_SIZE_SYM ::= "EXTENT_SIZE"
FAILED_LOGIN_ATTEMPTS_SYM ::= "FAILED_LOGIN_ATTEMPTS"
FALSE_SYM ::= "FALSE"
FAST_SYM ::= "FAST"
FAULTS_SYM ::= "FAULTS"
FETCH_SYM ::= "FETCH"
COLUMNS ::= "FIELDS"
FILE_SYM ::= "FILE"
FILE_BLOCK_SIZE_SYM ::= "FILE_BLOCK_SIZE"
FILTER_SYM ::= "FILTER"
FIRST_SYM ::= "FIRST"
FIRST_VALUE_SYM ::= "FIRST_VALUE"
FIXED_SYM ::= "FIXED"
FLOAT_SYM ::= "FLOAT"
FLOAT_SYM ::= "FLOAT4"
DOUBLE_SYM ::= "FLOAT8"
FLUSH_SYM ::= "FLUSH"
FOLLOWS_SYM ::= "FOLLOWS"
FOLLOWING_SYM ::= "FOLLOWING"
FOR_SYM ::= "FOR"
FORCE_SYM ::= "FORCE"
FOREIGN ::= "FOREIGN"
FORMAT_SYM ::= "FORMAT"
FOUND_SYM ::= "FOUND"
FROM ::= "FROM"
FULL ::= "FULL"
FULLTEXT_SYM ::= "FULLTEXT"
FUNCTION_SYM ::= "FUNCTION"
GENERAL ::= "GENERAL"
GROUP_REPLICATION ::= "GROUP_REPLICATION"
GEOMETRYCOLLECTION_SYM ::= "GEOMCOLLECTION"
GEOMETRY_SYM ::= "GEOMETRY"
GEOMETRYCOLLECTION_SYM ::= "GEOMETRYCOLLECTION"
GET_FORMAT ::= "GET_FORMAT"
GET_MASTER_PUBLIC_KEY_SYM ::= "GET_MASTER_PUBLIC_KEY"
GET_SOURCE_PUBLIC_KEY_SYM ::= "GET_SOURCE_PUBLIC_KEY"
GET_SYM ::= "GET"
GENERATED ::= "GENERATED"
GLOBAL_SYM ::= "GLOBAL"
GRANT ::= "GRANT"
GRANTS ::= "GRANTS"
GROUP_SYM ::= "GROUP"
GROUPING_SYM ::= "GROUPING"
GROUPS_SYM ::= "GROUPS"
HANDLER_SYM ::= "HANDLER"
HASH_SYM ::= "HASH"
HAVING ::= "HAVING"
HELP_SYM ::= "HELP"
HIGH_PRIORITY ::= "HIGH_PRIORITY"
HISTOGRAM_SYM ::= "HISTOGRAM"
HISTORY_SYM ::= "HISTORY"
HOST_SYM ::= "HOST"
HOSTS_SYM ::= "HOSTS"
HOUR_SYM ::= "HOUR"
HOUR_MICROSECOND_SYM ::= "HOUR_MICROSECOND"
HOUR_MINUTE_SYM ::= "HOUR_MINUTE"
HOUR_SECOND_SYM ::= "HOUR_SECOND"
IDENTIFIED_SYM ::= "IDENTIFIED"
IF ::= "IF"
IGNORE_SYM ::= "IGNORE"
IGNORE_SERVER_IDS_SYM ::= "IGNORE_SERVER_IDS"
IMPORT ::= "IMPORT"
IN_SYM ::= "IN"
INACTIVE_SYM ::= "INACTIVE"
INDEX_SYM ::= "INDEX"
INDEX_STATS_SYM ::= "INDEX_STATISTICS"
INDEXES ::= "INDEXES"
INFILE ::= "INFILE"
INITIAL_SIZE_SYM ::= "INITIAL_SIZE"
INNER_SYM ::= "INNER"
INOUT_SYM ::= "INOUT"
INSENSITIVE_SYM ::= "INSENSITIVE"
INSERT_METHOD ::= "INSERT_METHOD"
INSTALL_SYM ::= "INSTALL"
INSTANCE_SYM ::= "INSTANCE"
INT_SYM ::= "INT"
TINYINT_SYM ::= "INT1"
SMALLINT_SYM ::= "INT2"
MEDIUMINT_SYM ::= "INT3"
INT_SYM ::= "INT4"
BIGINT_SYM ::= "INT8"
INT_SYM ::= "INTEGER"
INTERVAL_SYM ::= "INTERVAL"
INTO ::= "INTO"
IO_SYM ::= "IO"
IO_AFTER_GTIDS ::= "IO_AFTER_GTIDS"
IO_BEFORE_GTIDS ::= "IO_BEFORE_GTIDS"
RELAY_THREAD ::= "IO_THREAD"
IPC_SYM ::= "IPC"
IS ::= "IS"
ISOLATION ::= "ISOLATION"
ISSUER_SYM ::= "ISSUER"
ITERATE_SYM ::= "ITERATE"
INVISIBLE_SYM ::= "INVISIBLE"
INVOKER_SYM ::= "INVOKER"
JOIN_SYM ::= "JOIN"
JSON_SYM ::= "JSON"
JSON_TABLE_SYM ::= "JSON_TABLE"
JSON_VALUE_SYM ::= "JSON_VALUE"
KEY_SYM ::= "KEY"
KEYS ::= "KEYS"
KEY_BLOCK_SIZE ::= "KEY_BLOCK_SIZE"
KILL_SYM ::= "KILL"
LAG_SYM ::= "LAG"
LANGUAGE_SYM ::= "LANGUAGE"
LAST_SYM ::= "LAST"
LAST_VALUE_SYM ::= "LAST_VALUE"
LATERAL_SYM ::= "LATERAL"
LEAD_SYM ::= "LEAD"
LEADING ::= "LEADING"
LEAVE_SYM ::= "LEAVE"
LEAVES ::= "LEAVES"
LEFT ::= "LEFT"
LESS_SYM ::= "LESS"
LEVEL_SYM ::= "LEVEL"
LIKE ::= "LIKE"
LIMIT ::= "LIMIT"
LINEAR_SYM ::= "LINEAR"
LINES ::= "LINES"
LINESTRING_SYM ::= "LINESTRING"
LIST_SYM ::= "LIST"
LOCAL_SYM ::= "LOCAL"
NOW_SYM ::= "LOCALTIME"
NOW_SYM ::= "LOCALTIMESTAMP"
LOCK_SYM ::= "LOCK"
LOCKED_SYM ::= "LOCKED"
LOCKS_SYM ::= "LOCKS"
LOGFILE_SYM ::= "LOGFILE"
LOGS_SYM ::= "LOGS"
LONG_SYM ::= "LONG"
LONGBLOB_SYM ::= "LONGBLOB"
LONGTEXT_SYM ::= "LONGTEXT"
LOOP_SYM ::= "LOOP"
LOW_PRIORITY ::= "LOW_PRIORITY"
MASTER_SYM ::= "MASTER"
MASTER_AUTO_POSITION_SYM ::= "MASTER_AUTO_POSITION"
MASTER_BIND_SYM ::= "MASTER_BIND"
MASTER_CONNECT_RETRY_SYM ::= "MASTER_CONNECT_RETRY"
MASTER_COMPRESSION_ALGORITHM_SYM ::= "MASTER_COMPRESSION_ALGORITHMS"
MASTER_DELAY_SYM ::= "MASTER_DELAY"
MASTER_HEARTBEAT_PERIOD_SYM ::= "MASTER_HEARTBEAT_PERIOD"
MASTER_HOST_SYM ::= "MASTER_HOST"
MASTER_LOG_FILE_SYM ::= "MASTER_LOG_FILE"
MASTER_LOG_POS_SYM ::= "MASTER_LOG_POS"
MASTER_PASSWORD_SYM ::= "MASTER_PASSWORD"
MASTER_PORT_SYM ::= "MASTER_PORT"
MASTER_PUBLIC_KEY_PATH_SYM ::= "MASTER_PUBLIC_KEY_PATH"
MASTER_RETRY_COUNT_SYM ::= "MASTER_RETRY_COUNT"
MASTER_SSL_SYM ::= "MASTER_SSL"
MASTER_SSL_CA_SYM ::= "MASTER_SSL_CA"
MASTER_SSL_CAPATH_SYM ::= "MASTER_SSL_CAPATH"
MASTER_SSL_CERT_SYM ::= "MASTER_SSL_CERT"
MASTER_SSL_CIPHER_SYM ::= "MASTER_SSL_CIPHER"
MASTER_SSL_CRL_SYM ::= "MASTER_SSL_CRL"
MASTER_SSL_CRLPATH_SYM ::= "MASTER_SSL_CRLPATH"
MASTER_SSL_KEY_SYM ::= "MASTER_SSL_KEY"
MASTER_SSL_VERIFY_SERVER_CERT_SYM ::= "MASTER_SSL_VERIFY_SERVER_CERT"
MASTER_TLS_CIPHERSUITES_SYM ::= "MASTER_TLS_CIPHERSUITES"
MASTER_TLS_VERSION_SYM ::= "MASTER_TLS_VERSION"
MASTER_USER_SYM ::= "MASTER_USER"
MASTER_ZSTD_COMPRESSION_LEVEL_SYM ::= "MASTER_ZSTD_COMPRESSION_LEVEL"
MATCH ::= "MATCH"
MAX_CONNECTIONS_PER_HOUR ::= "MAX_CONNECTIONS_PER_HOUR"
MAX_QUERIES_PER_HOUR ::= "MAX_QUERIES_PER_HOUR"
MAX_ROWS ::= "MAX_ROWS"
MAX_SIZE_SYM ::= "MAX_SIZE"
MAX_UPDATES_PER_HOUR ::= "MAX_UPDATES_PER_HOUR"
MAX_USER_CONNECTIONS_SYM ::= "MAX_USER_CONNECTIONS"
MAX_VALUE_SYM ::= "MAXVALUE"
MEDIUM_SYM ::= "MEDIUM"
MEDIUMBLOB_SYM ::= "MEDIUMBLOB"
MEDIUMINT_SYM ::= "MEDIUMINT"
MEDIUMTEXT_SYM ::= "MEDIUMTEXT"
MEMBER_SYM ::= "MEMBER"
MEMORY_SYM ::= "MEMORY"
MERGE_SYM ::= "MERGE"
MESSAGE_TEXT_SYM ::= "MESSAGE_TEXT"
MICROSECOND_SYM ::= "MICROSECOND"
MEDIUMINT_SYM ::= "MIDDLEINT"
MIGRATE_SYM ::= "MIGRATE"
MINUTE_SYM ::= "MINUTE"
MINUTE_MICROSECOND_SYM ::= "MINUTE_MICROSECOND"
MINUTE_SECOND_SYM ::= "MINUTE_SECOND"
MIN_ROWS ::= "MIN_ROWS"
MOD_SYM ::= "MOD"
MODE_SYM ::= "MODE"
MODIFIES_SYM ::= "MODIFIES"
MODIFY_SYM ::= "MODIFY"
MONTH_SYM ::= "MONTH"
MULTILINESTRING_SYM ::= "MULTILINESTRING"
MULTIPOINT_SYM ::= "MULTIPOINT"
MULTIPOLYGON_SYM ::= "MULTIPOLYGON"
MUTEX_SYM ::= "MUTEX"
MYSQL_ERRNO_SYM ::= "MYSQL_ERRNO"
NAME_SYM ::= "NAME"
NAMES_SYM ::= "NAMES"
NATIONAL_SYM ::= "NATIONAL"
NATURAL ::= "NATURAL"
NDBCLUSTER_SYM ::= "NDB"
NDBCLUSTER_SYM ::= "NDBCLUSTER"
NCHAR_SYM ::= "NCHAR"
NESTED_SYM ::= "NESTED"
NETWORK_NAMESPACE_SYM ::= "NETWORK_NAMESPACE"
NEVER_SYM ::= "NEVER"
NEW_SYM ::= "NEW"
NEXT_SYM ::= "NEXT"
NO_SYM ::= "NO"
NO_WAIT_SYM ::= "NO_WAIT"
NOWAIT_SYM ::= "NOWAIT"
NODEGROUP_SYM ::= "NODEGROUP"
NONE_SYM ::= "NONE"
NOT_SYM ::= "NOT"
NO_WRITE_TO_BINLOG ::= "NO_WRITE_TO_BINLOG"
NTH_VALUE_SYM ::= "NTH_VALUE"
NTILE_SYM ::= "NTILE"
NULL_SYM ::= "NULL"
NULLS_SYM ::= "NULLS"
NUMBER_SYM ::= "NUMBER"
NUMERIC_SYM ::= "NUMERIC"
NVARCHAR_SYM ::= "NVARCHAR"
OF_SYM ::= "OF"
OFF_SYM ::= "OFF"
OFFSET_SYM ::= "OFFSET"
OJ_SYM ::= "OJ"
OLD_SYM ::= "OLD"
ON_SYM ::= "ON"
ONE_SYM ::= "ONE"
ONLY_SYM ::= "ONLY"
OPEN_SYM ::= "OPEN"
OPTIMIZER_COSTS_SYM ::= "OPTIMIZER_COSTS"
OPTIONS_SYM ::= "OPTIONS"
OPTION ::= "OPTION"
OPTIONAL_SYM ::= "OPTIONAL"
OPTIONALLY ::= "OPTIONALLY"
OR_SYM ::= "OR"
ORGANIZATION_SYM ::= "ORGANIZATION"
OTHERS_SYM ::= "OTHERS"
ORDER_SYM ::= "ORDER"
ORDINALITY_SYM ::= "ORDINALITY"
OUT_SYM ::= "OUT"
OUTER_SYM ::= "OUTER"
OUTFILE ::= "OUTFILE"
OVER_SYM ::= "OVER"
OWNER_SYM ::= "OWNER"
PACK_KEYS_SYM ::= "PACK_KEYS"
PATH_SYM ::= "PATH"
PARSER_SYM ::= "PARSER"
PAGE_SYM ::= "PAGE"
PARTIAL ::= "PARTIAL"
PARTITION_SYM ::= "PARTITION"
PARTITIONING_SYM ::= "PARTITIONING"
PARTITIONS_SYM ::= "PARTITIONS"
PASSWORD ::= "PASSWORD"
PASSWORD_LOCK_TIME_SYM ::= "PASSWORD_LOCK_TIME"
PERCENT_RANK_SYM ::= "PERCENT_RANK"
PERSIST_SYM ::= "PERSIST"
PERSIST_ONLY_SYM ::= "PERSIST_ONLY"
PHASE_SYM ::= "PHASE"
PLUGIN_SYM ::= "PLUGIN"
PLUGINS_SYM ::= "PLUGINS"
PLUGIN_DIR_SYM ::= "PLUGIN_DIR"
POINT_SYM ::= "POINT"
POLYGON_SYM ::= "POLYGON"
PORT_SYM ::= "PORT"
PRECEDES_SYM ::= "PRECEDES"
PRECEDING_SYM ::= "PRECEDING"
PRECISION ::= "PRECISION"
PREPARE_SYM ::= "PREPARE"
PRESERVE_SYM ::= "PRESERVE"
PREV_SYM ::= "PREV"
PRIMARY_SYM ::= "PRIMARY"
PRIVILEGES ::= "PRIVILEGES"
PRIVILEGE_CHECKS_USER_SYM ::= "PRIVILEGE_CHECKS_USER"
PROCEDURE_SYM ::= "PROCEDURE"
PROCESS ::= "PROCESS"
PROCESSLIST_SYM ::= "PROCESSLIST"
PROFILE_SYM ::= "PROFILE"
PROFILES_SYM ::= "PROFILES"
PROXY_SYM ::= "PROXY"
PURGE ::= "PURGE"
QUARTER_SYM ::= "QUARTER"
QUERY_SYM ::= "QUERY"
QUICK ::= "QUICK"
RANDOM_SYM ::= "RANDOM"
RANK_SYM ::= "RANK"
RANGE_SYM ::= "RANGE"
READ_SYM ::= "READ"
READ_ONLY_SYM ::= "READ_ONLY"
READ_WRITE_SYM ::= "READ_WRITE"
READS_SYM ::= "READS"
REAL_SYM ::= "REAL"
REBUILD_SYM ::= "REBUILD"
RECOVER_SYM ::= "RECOVER"
RECURSIVE_SYM ::= "RECURSIVE"
REDO_BUFFER_SIZE_SYM ::= "REDO_BUFFER_SIZE"
REDUNDANT_SYM ::= "REDUNDANT"
REFERENCE_SYM ::= "REFERENCE"
REFERENCES ::= "REFERENCES"
REGEXP ::= "REGEXP"
RELAY ::= "RELAY"
RELAYLOG_SYM ::= "RELAYLOG"
RELAY_LOG_FILE_SYM ::= "RELAY_LOG_FILE"
RELAY_LOG_POS_SYM ::= "RELAY_LOG_POS"
RELAY_THREAD ::= "RELAY_THREAD"
RELEASE_SYM ::= "RELEASE"
RELOAD ::= "RELOAD"
REMOVE_SYM ::= "REMOVE"
RENAME ::= "RENAME"
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_SYM ::= "ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS"
REORGANIZE_SYM ::= "REORGANIZE"
REPAIR ::= "REPAIR"
REPEATABLE_SYM ::= "REPEATABLE"
REPLICA_SYM ::= "REPLICA"
REPLICAS_SYM ::= "REPLICAS"
REPLICATION ::= "REPLICATION"
REPLICATE_DO_DB ::= "REPLICATE_DO_DB"
REPLICATE_IGNORE_DB ::= "REPLICATE_IGNORE_DB"
REPLICATE_DO_TABLE ::= "REPLICATE_DO_TABLE"
REPLICATE_IGNORE_TABLE ::= "REPLICATE_IGNORE_TABLE"
REPLICATE_WILD_DO_TABLE ::= "REPLICATE_WILD_DO_TABLE"
REPLICATE_WILD_IGNORE_TABLE ::= "REPLICATE_WILD_IGNORE_TABLE"
REPLICATE_REWRITE_DB ::= "REPLICATE_REWRITE_DB"
REPEAT_SYM ::= "REPEAT"
REQUIRE_SYM ::= "REQUIRE"
REQUIRE_ROW_FORMAT_SYM ::= "REQUIRE_ROW_FORMAT"
REQUIRE_TABLE_PRIMARY_KEY_CHECK_SYM ::= "REQUIRE_TABLE_PRIMARY_KEY_CHECK"
RESET_SYM ::= "RESET"
RESPECT_SYM ::= "RESPECT"
RESIGNAL_SYM ::= "RESIGNAL"
RESOURCE_SYM ::= "RESOURCE"
RESTART_SYM ::= "RESTART"
RESTORE_SYM ::= "RESTORE"
RESTRICT ::= "RESTRICT"
RESUME_SYM ::= "RESUME"
RETAIN_SYM ::= "RETAIN"
RETURNED_SQLSTATE_SYM ::= "RETURNED_SQLSTATE"
RETURN_SYM ::= "RETURN"
RETURNING_SYM ::= "RETURNING"
RETURNS_SYM ::= "RETURNS"
REUSE_SYM ::= "REUSE"
REVERSE_SYM ::= "REVERSE"
REVOKE ::= "REVOKE"
RIGHT ::= "RIGHT"
REGEXP ::= "RLIKE"
ROLE_SYM ::= "ROLE"
ROLLBACK_SYM ::= "ROLLBACK"
ROLLUP_SYM ::= "ROLLUP"
ROUTINE_SYM ::= "ROUTINE"
ROTATE_SYM ::= "ROTATE"
ROW_SYM ::= "ROW"
ROW_COUNT_SYM ::= "ROW_COUNT"
ROW_NUMBER_SYM ::= "ROW_NUMBER"
ROWS_SYM ::= "ROWS"
ROW_FORMAT_SYM ::= "ROW_FORMAT"
RTREE_SYM ::= "RTREE"
SAVEPOINT_SYM ::= "SAVEPOINT"
SCHEDULE_SYM ::= "SCHEDULE"
DATABASE ::= "SCHEMA"
SCHEMA_NAME_SYM ::= "SCHEMA_NAME"
DATABASES ::= "SCHEMAS"
SECOND_SYM ::= "SECOND"
SECOND_MICROSECOND_SYM ::= "SECOND_MICROSECOND"
SECONDARY_SYM ::= "SECONDARY"
SECONDARY_ENGINE_SYM ::= "SECONDARY_ENGINE"
SECONDARY_ENGINE_ATTRIBUTE_SYM ::= "SECONDARY_ENGINE_ATTRIBUTE"
SECONDARY_LOAD_SYM ::= "SECONDARY_LOAD"
SECONDARY_UNLOAD_SYM ::= "SECONDARY_UNLOAD"
SECURITY_SYM ::= "SECURITY"
SENSITIVE_SYM ::= "SENSITIVE"
SEPARATOR_SYM ::= "SEPARATOR"
SERIAL_SYM ::= "SERIAL"
SERIALIZABLE_SYM ::= "SERIALIZABLE"
SESSION_SYM ::= "SESSION"
SEQUENCE_TABLE_SYM ::= "SEQUENCE_TABLE"
SERVER_SYM ::= "SERVER"
SET_SYM ::= "SET"
SHARE_SYM ::= "SHARE"
SHOW ::= "SHOW"
SHUTDOWN ::= "SHUTDOWN"
SIGNAL_SYM ::= "SIGNAL"
SIGNED_SYM ::= "SIGNED"
SIMPLE_SYM ::= "SIMPLE"
SKIP_SYM ::= "SKIP"
SLAVE ::= "SLAVE"
SLOW ::= "SLOW"
SNAPSHOT_SYM ::= "SNAPSHOT"
SMALLINT_SYM ::= "SMALLINT"
SOCKET_SYM ::= "SOCKET"
ANY_SYM ::= "SOME"
SONAME_SYM ::= "SONAME"
SOUNDS_SYM ::= "SOUNDS"
SOURCE_SYM ::= "SOURCE"
SOURCE_AUTO_POSITION_SYM ::= "SOURCE_AUTO_POSITION"
SOURCE_BIND_SYM ::= "SOURCE_BIND"
SOURCE_COMPRESSION_ALGORITHM_SYM ::= "SOURCE_COMPRESSION_ALGORITHMS"
SOURCE_CONNECT_RETRY_SYM ::= "SOURCE_CONNECT_RETRY"
SOURCE_CONNECTION_AUTO_FAILOVER_SYM ::= "SOURCE_CONNECTION_AUTO_FAILOVER"
SOURCE_DELAY_SYM ::= "SOURCE_DELAY"
SOURCE_HEARTBEAT_PERIOD_SYM ::= "SOURCE_HEARTBEAT_PERIOD"
SOURCE_HOST_SYM ::= "SOURCE_HOST"
SOURCE_LOG_FILE_SYM ::= "SOURCE_LOG_FILE"
SOURCE_LOG_POS_SYM ::= "SOURCE_LOG_POS"
SOURCE_PASSWORD_SYM ::= "SOURCE_PASSWORD"
SOURCE_PORT_SYM ::= "SOURCE_PORT"
SOURCE_PUBLIC_KEY_PATH_SYM ::= "SOURCE_PUBLIC_KEY_PATH"
SOURCE_RETRY_COUNT_SYM ::= "SOURCE_RETRY_COUNT"
SOURCE_SSL_CAPATH_SYM ::= "SOURCE_SSL_CAPATH"
SOURCE_SSL_CA_SYM ::= "SOURCE_SSL_CA"
SOURCE_SSL_CERT_SYM ::= "SOURCE_SSL_CERT"
SOURCE_SSL_CIPHER_SYM ::= "SOURCE_SSL_CIPHER"
SOURCE_SSL_CRL_SYM ::= "SOURCE_SSL_CRL"
SOURCE_SSL_CRLPATH_SYM ::= "SOURCE_SSL_CRLPATH"
SOURCE_SSL_KEY_SYM ::= "SOURCE_SSL_KEY"
SOURCE_SSL_SYM ::= "SOURCE_SSL"
SOURCE_SSL_VERIFY_SERVER_CERT_SYM ::= "SOURCE_SSL_VERIFY_SERVER_CERT"
SOURCE_TLS_CIPHERSUITES_SYM ::= "SOURCE_TLS_CIPHERSUITES"
SOURCE_TLS_VERSION_SYM ::= "SOURCE_TLS_VERSION"
SOURCE_USER_SYM ::= "SOURCE_USER"
SOURCE_ZSTD_COMPRESSION_LEVEL_SYM ::= "SOURCE_ZSTD_COMPRESSION_LEVEL"
SPATIAL_SYM ::= "SPATIAL"
SPECIFIC_SYM ::= "SPECIFIC"
SQL_SYM ::= "SQL"
SQLEXCEPTION_SYM ::= "SQLEXCEPTION"
SQLSTATE_SYM ::= "SQLSTATE"
SQLWARNING_SYM ::= "SQLWARNING"
SQL_AFTER_GTIDS ::= "SQL_AFTER_GTIDS"
SQL_AFTER_MTS_GAPS ::= "SQL_AFTER_MTS_GAPS"
SQL_BEFORE_GTIDS ::= "SQL_BEFORE_GTIDS"
SQL_BIG_RESULT ::= "SQL_BIG_RESULT"
SQL_BUFFER_RESULT ::= "SQL_BUFFER_RESULT"
SQL_CALC_FOUND_ROWS ::= "SQL_CALC_FOUND_ROWS"
SQL_NO_CACHE_SYM ::= "SQL_NO_CACHE"
SQL_SMALL_RESULT ::= "SQL_SMALL_RESULT"
SQL_THREAD ::= "SQL_THREAD"
SECOND_SYM ::= "SQL_TSI_SECOND"
MINUTE_SYM ::= "SQL_TSI_MINUTE"
HOUR_SYM ::= "SQL_TSI_HOUR"
DAY_SYM ::= "SQL_TSI_DAY"
WEEK_SYM ::= "SQL_TSI_WEEK"
MONTH_SYM ::= "SQL_TSI_MONTH"
QUARTER_SYM ::= "SQL_TSI_QUARTER"
YEAR_SYM ::= "SQL_TSI_YEAR"
SRID_SYM ::= "SRID"
SSL_SYM ::= "SSL"
STACKED_SYM ::= "STACKED"
START_SYM ::= "START"
STARTING ::= "STARTING"
STARTS_SYM ::= "STARTS"
STATS_AUTO_RECALC_SYM ::= "STATS_AUTO_RECALC"
STATS_PERSISTENT_SYM ::= "STATS_PERSISTENT"
STATS_SAMPLE_PAGES_SYM ::= "STATS_SAMPLE_PAGES"
STATUS_SYM ::= "STATUS"
STOP_SYM ::= "STOP"
STORAGE_SYM ::= "STORAGE"
STORED_SYM ::= "STORED"
STRAIGHT_JOIN ::= "STRAIGHT_JOIN"
STREAM_SYM ::= "STREAM"
STRING_SYM ::= "STRING"
SUBCLASS_ORIGIN_SYM ::= "SUBCLASS_ORIGIN"
SUBJECT_SYM ::= "SUBJECT"
SUBPARTITION_SYM ::= "SUBPARTITION"
SUBPARTITIONS_SYM ::= "SUBPARTITIONS"
SUPER_SYM ::= "SUPER"
SUSPEND_SYM ::= "SUSPEND"
SWAPS_SYM ::= "SWAPS"
SWITCHES_SYM ::= "SWITCHES"
SYSTEM_SYM ::= "SYSTEM"
TABLE_SYM ::= "TABLE"
TABLE_NAME_SYM ::= "TABLE_NAME"
TABLES ::= "TABLES"
TABLESPACE_SYM ::= "TABLESPACE"
TABLE_CHECKSUM_SYM ::= "TABLE_CHECKSUM"
TABLE_STATS_SYM ::= "TABLE_STATISTICS"
TEMPORARY ::= "TEMPORARY"
TEMPTABLE_SYM ::= "TEMPTABLE"
TERMINATED ::= "TERMINATED"
TEXT_SYM ::= "TEXT"
THAN_SYM ::= "THAN"
THEN_SYM ::= "THEN"
THREAD_PRIORITY_SYM ::= "THREAD_PRIORITY"
THREAD_STATS_SYM ::= "THREAD_STATISTICS"
TIES_SYM ::= "TIES"
TIME_SYM ::= "TIME"
TIMESTAMP_SYM ::= "TIMESTAMP"
TIMESTAMP_ADD ::= "TIMESTAMPADD"
TIMESTAMP_DIFF ::= "TIMESTAMPDIFF"
TINYBLOB_SYM ::= "TINYBLOB"
TINYINT_SYM ::= "TINYINT"
TINYTEXT_SYN ::= "TINYTEXT"
TLS_SYM ::= "TLS"
TO_SYM ::= "TO"
TRAILING ::= "TRAILING"
TRANSACTION_SYM ::= "TRANSACTION"
TRIGGER_SYM ::= "TRIGGER"
TRIGGERS_SYM ::= "TRIGGERS"
TRUE_SYM ::= "TRUE"
TRUNCATE_SYM ::= "TRUNCATE"
TYPE_SYM ::= "TYPE"
TYPES_SYM ::= "TYPES"
UNBOUNDED_SYM ::= "UNBOUNDED"
UNCOMMITTED_SYM ::= "UNCOMMITTED"
UNDEFINED_SYM ::= "UNDEFINED"
UNDO_BUFFER_SIZE_SYM ::= "UNDO_BUFFER_SIZE"
UNDOFILE_SYM ::= "UNDOFILE"
UNDO_SYM ::= "UNDO"
UNICODE_SYM ::= "UNICODE"
UNION_SYM ::= "UNION"
UNIQUE_SYM ::= "UNIQUE"
UNKNOWN_SYM ::= "UNKNOWN"
UNLOCK_SYM ::= "UNLOCK"
UNINSTALL_SYM ::= "UNINSTALL"
UNSIGNED_SYM ::= "UNSIGNED"
UNTIL_SYM ::= "UNTIL"
UPGRADE_SYM ::= "UPGRADE"
USAGE ::= "USAGE"
USE_SYM ::= "USE"
USER ::= "USER"
RESOURCES ::= "USER_RESOURCES"
USER_STATS_SYM ::= "USER_STATISTICS"
USE_FRM ::= "USE_FRM"
USING ::= "USING"
UTC_DATE_SYM ::= "UTC_DATE"
UTC_TIME_SYM ::= "UTC_TIME"
UTC_TIMESTAMP_SYM ::= "UTC_TIMESTAMP"
VALIDATION_SYM ::= "VALIDATION"
VALUE_SYM ::= "VALUE"
VALUES ::= "VALUES"
VARBINARY_SYM ::= "VARBINARY"
VARCHAR_SYM ::= "VARCHAR"
VARCHAR_SYM ::= "VARCHARACTER"
VARIABLES ::= "VARIABLES"
VARYING ::= "VARYING"
WAIT_SYM ::= "WAIT"
WARNINGS ::= "WARNINGS"
WEEK_SYM ::= "WEEK"
WEIGHT_STRING_SYM ::= "WEIGHT_STRING"
WHEN_SYM ::= "WHEN"
WHERE ::= "WHERE"
WHILE_SYM ::= "WHILE"
WINDOW_SYM ::= "WINDOW"
VCPU_SYM ::= "VCPU"
VIEW_SYM ::= "VIEW"
VIRTUAL_SYM ::= "VIRTUAL"
VISIBLE_SYM ::= "VISIBLE"
WITH ::= "WITH"
WITHOUT_SYM ::= "WITHOUT"
WORK_SYM ::= "WORK"
WRAPPER_SYM ::= "WRAPPER"
WRITE_SYM ::= "WRITE"
X509_SYM ::= "X509"
XOR ::= "XOR"
XA_SYM ::= "XA"
XID_SYM ::= "XID"
XML_SYM ::= "XML"
YEAR_SYM ::= "YEAR"
YEAR_MONTH_SYM ::= "YEAR_MONTH"
ZEROFILL_SYM ::= "ZEROFILL"
ZONE_SYM ::= "ZONE"
OR_OR_SYM ::= "||"
/*
Place keywords that accept optimizer hints below this comment.
*/
DELETE_SYM ::= "DELETE"
INSERT_SYM ::= "INSERT"
REPLACE_SYM ::= "REPLACE"
SELECT_SYM ::= "SELECT"
UPDATE_SYM ::= "UPDATE"
OPTIMIZE ::= "OPTIMIZE"
CALL_SYM ::= "CALL"
ALTER ::= "ALTER"
ANALYZE_SYM ::= "ANALYZE"
CHECK_SYM ::= "CHECK"
LOAD ::= "LOAD"
CREATE ::= "CREATE"
/*
Insert new function definitions after that commentary (by alphabetical
order)
*/
ADDDATE_SYM ::= "ADDDATE"
BIT_AND_SYM ::= "BIT_AND"
BIT_OR_SYM ::= "BIT_OR"
BIT_XOR_SYM ::= "BIT_XOR"
CAST_SYM ::= "CAST"
COUNT_SYM ::= "COUNT"
CURDATE ::= "CURDATE"
CURTIME ::= "CURTIME"
DATE_ADD_INTERVAL ::= "DATE_ADD"
DATE_SUB_INTERVAL ::= "DATE_SUB"
EXTRACT_SYM ::= "EXTRACT"
GROUP_CONCAT_SYM ::= "GROUP_CONCAT"
JSON_OBJECTAGG ::= "JSON_OBJECTAGG"
JSON_ARRAYAGG ::= "JSON_ARRAYAGG"
MAX_SYM ::= "MAX"
SUBSTRING ::= "MID"
MIN_SYM ::= "MIN"
NOW_SYM ::= "NOW"
POSITION_SYM ::= "POSITION"
USER ::= "SESSION_USER"
STD_SYM ::= "STD"
STD_SYM ::= "STDDEV"
STD_SYM ::= "STDDEV_POP"
STDDEV_SAMP_SYM ::= "STDDEV_SAMP"
SUBDATE_SYM ::= "SUBDATE"
SUBSTRING ::= "SUBSTR"
SUBSTRING ::= "SUBSTRING"
SUM_SYM ::= "SUM"
SYSDATE ::= "SYSDATE"
USER ::= "SYSTEM_USER"
TRIM ::= "TRIM"
VARIANCE_SYM ::= "VARIANCE"
VARIANCE_SYM ::= "VAR_POP"
VAR_SAMP_SYM ::= "VAR_SAMP"
/*
Insert new optimizer hint keywords after that commentary:
*/
BKA_HINT ::= "BKA"
BNL_HINT ::= "BNL"
DUPSWEEDOUT_HINT ::= "DUPSWEEDOUT"
FIRSTMATCH_HINT ::= "FIRSTMATCH"
INTOEXISTS_HINT ::= "INTOEXISTS"
LOOSESCAN_HINT ::= "LOOSESCAN"
MATERIALIZATION_HINT ::= "MATERIALIZATION"
MAX_EXECUTION_TIME_HINT ::= "MAX_EXECUTION_TIME"
NO_BKA_HINT ::= "NO_BKA"
NO_BNL_HINT ::= "NO_BNL"
NO_ICP_HINT ::= "NO_ICP"
NO_MRR_HINT ::= "NO_MRR"
NO_RANGE_OPTIMIZATION_HINT ::= "NO_RANGE_OPTIMIZATION"
NO_SEMIJOIN_HINT ::= "NO_SEMIJOIN"
MRR_HINT ::= "MRR"
QB_NAME_HINT ::= "QB_NAME"
SEMIJOIN_HINT ::= "SEMIJOIN"
SET_VAR_HINT ::= "SET_VAR"
SUBQUERY_HINT ::= "SUBQUERY"
DERIVED_MERGE_HINT ::= "MERGE"
NO_DERIVED_MERGE_HINT ::= "NO_MERGE"
JOIN_PREFIX_HINT ::= "JOIN_PREFIX"
JOIN_SUFFIX_HINT ::= "JOIN_SUFFIX"
JOIN_ORDER_HINT ::= "JOIN_ORDER"
JOIN_FIXED_ORDER_HINT ::= "JOIN_FIXED_ORDER"
INDEX_MERGE_HINT ::= "INDEX_MERGE"
NO_INDEX_MERGE_HINT ::= "NO_INDEX_MERGE"
RESOURCE_GROUP_HINT ::= "RESOURCE_GROUP"
SKIP_SCAN_HINT ::= "SKIP_SCAN"
NO_SKIP_SCAN_HINT ::= "NO_SKIP_SCAN"
HASH_JOIN_HINT ::= "HASH_JOIN"
NO_HASH_JOIN_HINT ::= "NO_HASH_JOIN"
INDEX_HINT ::= "INDEX"
NO_INDEX_HINT ::= "NO_INDEX"
JOIN_INDEX_HINT ::= "JOIN_INDEX"
NO_JOIN_INDEX_HINT ::= "NO_JOIN_INDEX"
GROUP_INDEX_HINT ::= "GROUP_INDEX"
NO_GROUP_INDEX_HINT ::= "NO_GROUP_INDEX"
ORDER_INDEX_HINT ::= "ORDER_INDEX"
NO_ORDER_INDEX_HINT ::= "NO_ORDER_INDEX"
DERIVED_CONDITION_PUSHDOWN_HINT ::= "DERIVED_CONDITION_PUSHDOWN"
NO_DERIVED_CONDITION_PUSHDOWN_HINT ::= "NO_DERIVED_CONDITION_PUSHDOWN"
====

(5) By Domingo (mingodad) on 2021-07-16 09:04:12 in reply to 1 [link]

I also just created the railroad diagram for the FIREBIRD database you can see/get it here https://github.com/FirebirdSQL/firebird/issues/6898

(6) By Domingo (mingodad) on 2021-07-16 11:50:24 in reply to 1 [link]

And here is a manual conversion from an old GOLD parser grammar for TSQL https://github.com/karlatgit/tsql-grammar/issues/1

(7) By Domingo (mingodad) on 2021-07-24 16:25:13 in reply to 1 [link]

And here is the railroad diagram for Alasql https://github.com/agershun/alasql/issues/1359 that somehow has a similarity in spirit to https://github.com/facebookincubator/CG-SQL

(8) By Domingo (mingodad) on 2021-07-28 12:24:33 in reply to 1

And here there is a railroad diagram for a manually converted sql-2003 grammar:

https://github.com/ronsavage/SQL/issues/5#issuecomment-888264796

(9) By Domingo (mingodad) on 2021-08-02 10:00:42 in reply to 1 [link]

Related with the grammar there is a tool to generate random text for testing purposes and I've got an initial working "BNF" for sqlite expressions here https://github.com/dmbaturin/bnfgen/issues/2 if you are interested and could help improve it you are welcome.

(10) By Domingo (mingodad) on 2021-08-04 15:09:03 in reply to 1 [link]

And here I manually converted the SQL-2016 grammar to generate the railroad diagram https://github.com/JakeWheat/sql-overview/issues/6