trader-pgsql-ast-parser
Version:
Yet another simple Postgres SQL parser/modifier
807 lines (790 loc) • 221 kB
text/typescript
// Generated automatically by nearley, version 2.19.7
// http://github.com/Hardmath123/nearley
// Bypasses TS6133. Allow declared but unused functions.
// @ts-ignore
function id(d: any[]): any { return d[0]; }
declare var lparen: any;
declare var rparen: any;
declare var dot: any;
declare var float: any;
declare var int: any;
declare var comma: any;
declare var star: any;
declare var string: any;
declare var eString: any;
declare var kw_primary: any;
declare var kw_unique: any;
declare var quoted_word: any;
declare var word: any;
declare var kw_not: any;
declare var kw_with: any;
declare var kw_null: any;
declare var kw_array: any;
declare var lbracket: any;
declare var rbracket: any;
declare var kw_precision: any;
declare var kw_as: any;
declare var kw_current_schema: any;
declare var kw_all: any;
declare var kw_analyse: any;
declare var kw_analyze: any;
declare var kw_and: any;
declare var kw_any: any;
declare var kw_asc: any;
declare var kw_asymmetric: any;
declare var kw_authorization: any;
declare var kw_binary: any;
declare var kw_both: any;
declare var kw_case: any;
declare var kw_cast: any;
declare var kw_check: any;
declare var kw_collate: any;
declare var kw_collation: any;
declare var kw_concurrently: any;
declare var kw_constraint: any;
declare var kw_create: any;
declare var kw_cross: any;
declare var kw_current_catalog: any;
declare var kw_current_date: any;
declare var kw_current_role: any;
declare var kw_current_time: any;
declare var kw_current_timestamp: any;
declare var kw_current_user: any;
declare var kw_default: any;
declare var kw_deferrable: any;
declare var kw_desc: any;
declare var kw_distinct: any;
declare var kw_do: any;
declare var kw_else: any;
declare var kw_end: any;
declare var kw_except: any;
declare var kw_false: any;
declare var kw_fetch: any;
declare var kw_for: any;
declare var kw_foreign: any;
declare var kw_freeze: any;
declare var kw_from: any;
declare var kw_full: any;
declare var kw_grant: any;
declare var kw_group: any;
declare var kw_having: any;
declare var kw_ilike: any;
declare var kw_in: any;
declare var kw_initially: any;
declare var kw_inner: any;
declare var kw_intersect: any;
declare var kw_into: any;
declare var kw_is: any;
declare var kw_isnull: any;
declare var kw_join: any;
declare var kw_lateral: any;
declare var kw_leading: any;
declare var kw_left: any;
declare var kw_like: any;
declare var kw_limit: any;
declare var kw_localtime: any;
declare var kw_localtimestamp: any;
declare var kw_natural: any;
declare var kw_notnull: any;
declare var kw_offset: any;
declare var kw_on: any;
declare var kw_only: any;
declare var kw_or: any;
declare var kw_order: any;
declare var kw_outer: any;
declare var kw_overlaps: any;
declare var kw_placing: any;
declare var kw_references: any;
declare var kw_returning: any;
declare var kw_right: any;
declare var kw_select: any;
declare var kw_session_user: any;
declare var kw_similar: any;
declare var kw_some: any;
declare var kw_symmetric: any;
declare var kw_table: any;
declare var kw_tablesample: any;
declare var kw_then: any;
declare var kw_to: any;
declare var kw_trailing: any;
declare var kw_true: any;
declare var kw_union: any;
declare var kw_user: any;
declare var kw_using: any;
declare var kw_variadic: any;
declare var kw_verbose: any;
declare var kw_when: any;
declare var kw_where: any;
declare var kw_window: any;
declare var kw_from: any;
declare var kw_as: any;
declare var kw_join: any;
declare var kw_on: any;
declare var kw_using: any;
declare var comma: any;
declare var kw_inner: any;
declare var kw_cross: any;
declare var kw_left: any;
declare var kw_outer: any;
declare var kw_right: any;
declare var kw_full: any;
declare var kw_select: any;
declare var kw_all: any;
declare var kw_distinct: any;
declare var kw_where: any;
declare var kw_group: any;
declare var kw_offset: any;
declare var kw_limit: any;
declare var kw_fetch: any;
declare var kw_only: any;
declare var kw_for: any;
declare var kw_order: any;
declare var kw_asc: any;
declare var kw_desc: any;
declare var kw_or: any;
declare var kw_and: any;
declare var kw_not: any;
declare var op_eq: any;
declare var op_neq: any;
declare var kw_isnull: any;
declare var kw_is: any;
declare var kw_null: any;
declare var kw_notnull: any;
declare var kw_true: any;
declare var kw_false: any;
declare var op_compare: any;
declare var ops_others: any;
declare var op_plus: any;
declare var op_minus: any;
declare var op_additive: any;
declare var star: any;
declare var op_div: any;
declare var op_mod: any;
declare var op_exp: any;
declare var lbracket: any;
declare var rbracket: any;
declare var op_cast: any;
declare var kw_cast: any;
declare var dot: any;
declare var kw_array: any;
declare var qparam: any;
declare var kw_default: any;
declare var kw_like: any;
declare var kw_ilike: any;
declare var op_like: any;
declare var op_ilike: any;
declare var op_not_like: any;
declare var op_not_ilike: any;
declare var kw_in: any;
declare var op_member: any;
declare var op_membertext: any;
declare var kw_case: any;
declare var kw_end: any;
declare var kw_when: any;
declare var kw_then: any;
declare var kw_else: any;
declare var kw_any: any;
declare var kw_some: any;
declare var kw_current_catalog: any;
declare var kw_current_date: any;
declare var kw_current_role: any;
declare var kw_current_schema: any;
declare var kw_current_timestamp: any;
declare var kw_current_time: any;
declare var kw_localtimestamp: any;
declare var kw_localtime: any;
declare var kw_session_user: any;
declare var kw_user: any;
declare var kw_current_user: any;
declare var lparen: any;
declare var kw_placing: any;
declare var rparen: any;
declare var kw_create: any;
declare var kw_table: any;
declare var kw_constraint: any;
declare var kw_unique: any;
declare var kw_check: any;
declare var kw_foreign: any;
declare var kw_references: any;
declare var kw_on: any;
declare var kw_full: any;
declare var kw_null: any;
declare var kw_default: any;
declare var kw_like: any;
declare var kw_all: any;
declare var kw_collate: any;
declare var comma: any;
declare var kw_create: any;
declare var kw_unique: any;
declare var kw_on: any;
declare var kw_using: any;
declare var kw_collate: any;
declare var kw_asc: any;
declare var kw_desc: any;
declare var kw_where: any;
declare var kw_with: any;
declare var comma: any;
declare var op_eq: any;
declare var kw_create: any;
declare var kw_with: any;
declare var kw_from: any;
declare var kw_default: any;
declare var kw_to: any;
declare var op_eq: any;
declare var word: any;
declare var kw_on: any;
declare var kw_true: any;
declare var kw_false: any;
declare var quoted_word: any;
declare var kw_create: any;
declare var kw_using: any;
declare var comma: any;
declare var kw_table: any;
declare var kw_is: any;
declare var kw_only: any;
declare var kw_not: any;
declare var kw_deferrable: any;
declare var kw_into: any;
declare var kw_user: any;
declare var kw_on: any;
declare var kw_returning: any;
declare var kw_do: any;
declare var kw_where: any;
declare var kw_from: any;
declare var kw_returning: any;
declare var op_eq: any;
declare var kw_table: any;
declare var kw_only: any;
declare var kw_to: any;
declare var kw_constraint: any;
declare var kw_default: any;
declare var kw_as: any;
declare var kw_from: any;
declare var kw_returning: any;
declare var kw_table: any;
declare var comma: any;
declare var kw_create: any;
declare var kw_as: any;
declare var kw_with: any;
declare var kw_to: any;
declare var kw_session_user: any;
declare var kw_current_user: any;
declare var comma: any;
declare var kw_table: any;
declare var kw_concurrently: any;
declare var kw_with: any;
declare var kw_as: any;
declare var kw_create: any;
declare var kw_as: any;
declare var comma: any;
declare var kw_union: any;
declare var kw_all: any;
declare var kw_as: any;
declare var kw_all: any;
declare var kw_create: any;
declare var kw_or: any;
declare var comma: any;
declare var kw_as: any;
declare var kw_with: any;
declare var kw_check: any;
declare var op_eq: any;
declare var kw_concurrently: any;
declare var kw_with: any;
declare var kw_create: any;
declare var kw_or: any;
declare var comma: any;
declare var kw_default: any;
declare var op_eq: any;
declare var kw_in: any;
declare var kw_as: any;
declare var codeblock: any;
declare var kw_not: any;
declare var kw_null: any;
declare var kw_on: any;
declare var kw_table: any;
declare var kw_do: any;
declare var semicolon: any;
import {lexerAny} from '../lexer.ts';
import {track, box, unbox, doubleQuoted} from '../lexer.ts';
// usage ex: replace track(whatever) with debug(track)(whatever)
function debug<T>(fn: any): any {
fn = fn || ((x: any) => x);
return ((x: any, ...args: any[]) => {
debugger;
return fn(x, ...args);
});
}
function asName(val: any): any {
return asNameWithColumns(val, undefined);
}
function asNameWithColumns(val: any, columns: any[] | undefined): any {
const name = toStr(val);
if (!columns || columns.length === 0) {
return track(val, {name});
}
return track(val, {
name,
columns: columns.map(c => ({name: toStr(c)})),
});
}
function asLit(val: any): any {
const value = toStr(val);
return track(val, {value});
}
function unwrap(e: any[]): any {
if (Array.isArray(e) && e.length === 1) {
e = unwrap(e[0]);
}
if (Array.isArray(e) && !e.length) {
return null;
}
return unbox(e);
}
const get = (i: number) => (x: any[]) => track(x, x[i]);
const last = (x: any[]) => Array.isArray(x) ? track(x[x.length - 1], x[x.length - 1]) : x;
const trim = (x: string | null | undefined) => x && x.trim();
const value = (x: any) => x && x.value;
function flatten(e: any): any[] {
if (Array.isArray(e)) {
const ret = [];
for (const i of e) {
ret.push(...flatten(i));
}
return ret;
}
if (!e) {
return [];
}
return [e];
}
function asStr(value: any) {
value = unbox(value);
return value?.value ?? value;
}
function flattenStr(e: any): string[] {
const fl = flatten(unbox(e));
return fl.filter(x => !!x)
.map(x => asStr(x))
.filter(x => typeof x === 'string')
.map(x => x.trim())
.filter(x => !!x);
}
function toStr(e: any, join?: string): string {
return flattenStr(e).join(join || '');
}
function fromEntries(vals: [string, any][]): any {
const ret = {} as any;
for (const [k, v] of vals) {
ret[k] = v;
}
return ret;
}
const kwSensitivity = { sensitivity: 'accent' };
const eqInsensitive = (a: string, b: string) => a.localeCompare(b, undefined, kwSensitivity) === 0;
const notReservedKw = (kw: string) => (x: any[], _: any, rej: any) => {
const val = asStr(x[0]);
if (eqInsensitive(val, kw)) {
return box(x, kw);
}
return rej;
}
const kw = notReservedKw;
const anyKw = (...kw: string[]) => {
const kwSet = new Set(kw);
return (x: any[], _: any, rej: any) => {
const val = typeof x[0] === 'string' ? x[0] : x[0].value;
return kwSet.has(val) ? val : rej;
}
}
function setSeqOpts(ret: any, opts: any) {
const defs = new Set();
const unboxed = opts.map(unbox);
for (const [k, v] of unboxed) {
if (defs.has(k)) {
throw new Error('conflicting or redundant options');
}
defs.add(k);
ret[k] = unbox(v);
}
}
interface NearleyToken { value: any;
[key: string]: any;
};
interface NearleyLexer {
reset: (chunk: string, info: any) => void;
next: () => NearleyToken | undefined;
save: () => any;
formatError: (token: NearleyToken) => string;
has: (tokenType: string) => boolean;
};
interface NearleyRule {
name: string;
symbols: NearleySymbol[];
postprocess?: (d: any[], loc?: number, reject?: {}) => any;
};
type NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };
interface Grammar {
Lexer: NearleyLexer | undefined;
ParserRules: NearleyRule[];
ParserStart: string;
};
const grammar: Grammar = {
Lexer: lexerAny,
ParserRules: [
{"name": "lparen", "symbols": [(lexerAny.has("lparen") ? {type: "lparen"} : lparen)]},
{"name": "rparen", "symbols": [(lexerAny.has("rparen") ? {type: "rparen"} : rparen)]},
{"name": "number$subexpression$1", "symbols": ["float"]},
{"name": "number$subexpression$1", "symbols": ["int"]},
{"name": "number", "symbols": ["number$subexpression$1"], "postprocess": unwrap},
{"name": "dot", "symbols": [(lexerAny.has("dot") ? {type: "dot"} : dot)], "postprocess": id},
{"name": "float", "symbols": [(lexerAny.has("float") ? {type: "float"} : float)], "postprocess": x => box(x, parseFloat(unwrap(x)))},
{"name": "int", "symbols": [(lexerAny.has("int") ? {type: "int"} : int)], "postprocess": x => box(x, parseInt(unwrap(x), 10))},
{"name": "comma", "symbols": [(lexerAny.has("comma") ? {type: "comma"} : comma)], "postprocess": id},
{"name": "star", "symbols": [(lexerAny.has("star") ? {type: "star"} : star)], "postprocess": x => box(x, x[0].value)},
{"name": "string$subexpression$1", "symbols": [(lexerAny.has("string") ? {type: "string"} : string)]},
{"name": "string$subexpression$1", "symbols": [(lexerAny.has("eString") ? {type: "eString"} : eString)]},
{"name": "string", "symbols": ["string$subexpression$1"], "postprocess": x => box(x, unwrap(x[0]).value)},
{"name": "ident", "symbols": ["word"], "postprocess": get(0)},
{"name": "word", "symbols": [(lexerAny.has("kw_primary") ? {type: "kw_primary"} : kw_primary)], "postprocess": x => box(x, 'primary')},
{"name": "word", "symbols": [(lexerAny.has("kw_unique") ? {type: "kw_unique"} : kw_unique)], "postprocess": x => box(x, 'unique')},
{"name": "word", "symbols": [(lexerAny.has("quoted_word") ? {type: "quoted_word"} : quoted_word)], "postprocess": x => box(x, x[0].value, true)},
{"name": "word", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": x => box(x, x[0].value)},
{"name": "collist_paren", "symbols": ["lparen", "collist", "rparen"], "postprocess": get(1)},
{"name": "collist$ebnf$1", "symbols": []},
{"name": "collist$ebnf$1$subexpression$1", "symbols": ["comma", "ident"], "postprocess": last},
{"name": "collist$ebnf$1", "symbols": ["collist$ebnf$1", "collist$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]])},
{"name": "collist", "symbols": ["ident", "collist$ebnf$1"], "postprocess": ([head, tail]) => {
return [head, ...(tail || [])];
} },
{"name": "kw_between", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('between')},
{"name": "kw_conflict", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('conflict')},
{"name": "kw_nothing", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('nothing')},
{"name": "kw_begin", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('begin')},
{"name": "kw_if", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('if')},
{"name": "kw_exists", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('exists')},
{"name": "kw_key", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('key')},
{"name": "kw_index", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('index')},
{"name": "kw_extension", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('extension')},
{"name": "kw_schema", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('schema')},
{"name": "kw_nulls", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('nulls')},
{"name": "kw_first", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('first')},
{"name": "kw_last", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('last')},
{"name": "kw_start", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('start')},
{"name": "kw_restart", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('restart')},
{"name": "kw_filter", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('filter')},
{"name": "kw_commit", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('commit')},
{"name": "kw_tablespace", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('tablespace')},
{"name": "kw_transaction", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('transaction')},
{"name": "kw_work", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('work')},
{"name": "kw_read", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('read')},
{"name": "kw_write", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('write')},
{"name": "kw_isolation", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('isolation')},
{"name": "kw_level", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('level')},
{"name": "kw_serializable", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('serializable')},
{"name": "kw_rollback", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('rollback')},
{"name": "kw_insert", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('insert')},
{"name": "kw_value", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('value')},
{"name": "kw_values", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('values')},
{"name": "kw_update", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('update')},
{"name": "kw_column", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('column')},
{"name": "kw_set", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('set')},
{"name": "kw_version", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('version')},
{"name": "kw_alter", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('alter')},
{"name": "kw_rename", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('rename')},
{"name": "kw_sequence", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('sequence')},
{"name": "kw_temp", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('temp')},
{"name": "kw_temporary", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('temporary')},
{"name": "kw_add", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('add')},
{"name": "kw_owner", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('owner')},
{"name": "kw_owned", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('owned')},
{"name": "kw_including", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('including')},
{"name": "kw_excluding", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('excluding')},
{"name": "kw_none", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('none')},
{"name": "kw_drop", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('drop')},
{"name": "kw_operator", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('operator')},
{"name": "kw_minvalue", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('minvalue')},
{"name": "kw_maxvalue", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('maxvalue')},
{"name": "kw_data", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('data')},
{"name": "kw_type", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('type')},
{"name": "kw_delete", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('delete')},
{"name": "kw_cache", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('cache')},
{"name": "kw_cascade", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('cascade')},
{"name": "kw_no", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('no')},
{"name": "kw_timestamp", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('timestamp')},
{"name": "kw_cycle", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('cycle')},
{"name": "kw_function", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('function')},
{"name": "kw_returns", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('returns')},
{"name": "kw_language", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('language')},
{"name": "kw_out", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('out')},
{"name": "kw_inout", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('inout')},
{"name": "kw_variadic", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('variadic')},
{"name": "kw_action", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('action')},
{"name": "kw_restrict", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('restrict')},
{"name": "kw_truncate", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('truncate')},
{"name": "kw_increment", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('increment')},
{"name": "kw_by", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('by')},
{"name": "kw_row", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('row')},
{"name": "kw_rows", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('rows')},
{"name": "kw_next", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('next')},
{"name": "kw_match", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('match')},
{"name": "kw_replace", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('replace')},
{"name": "kw_recursive", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('recursive')},
{"name": "kw_view", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('view')},
{"name": "kw_cascaded", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('cascaded')},
{"name": "kw_unlogged", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('unlogged')},
{"name": "kw_global", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('global')},
{"name": "kw_option", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('option')},
{"name": "kw_materialized", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('materialized')},
{"name": "kw_partial", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('partial')},
{"name": "kw_partition", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('partition')},
{"name": "kw_simple", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('simple')},
{"name": "kw_generated", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('generated')},
{"name": "kw_always", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('always')},
{"name": "kw_identity", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('identity')},
{"name": "kw_name", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('name')},
{"name": "kw_enum", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('enum')},
{"name": "kw_show", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('show')},
{"name": "kw_ordinality", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('ordinality')},
{"name": "kw_overriding", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('overriding')},
{"name": "kw_over", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('over')},
{"name": "kw_system", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('system')},
{"name": "kw_comment", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('comment')},
{"name": "kw_time", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('time')},
{"name": "kw_at", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('at')},
{"name": "kw_zone", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('zone')},
{"name": "kw_interval", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('interval')},
{"name": "kw_hour", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('hour')},
{"name": "kw_minute", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('minute')},
{"name": "kw_local", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('local')},
{"name": "kw_prepare", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('prepare')},
{"name": "kw_deallocate", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('deallocate')},
{"name": "kw_raise", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('raise')},
{"name": "kw_continue", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('continue')},
{"name": "kw_share", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('share')},
{"name": "kw_refresh", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": notReservedKw('refresh')},
{"name": "kw_ifnotexists", "symbols": ["kw_if", (lexerAny.has("kw_not") ? {type: "kw_not"} : kw_not), "kw_exists"]},
{"name": "kw_ifexists", "symbols": ["kw_if", "kw_exists"]},
{"name": "kw_withordinality", "symbols": [(lexerAny.has("kw_with") ? {type: "kw_with"} : kw_with), "kw_ordinality"]},
{"name": "kw_not_null", "symbols": [(lexerAny.has("kw_not") ? {type: "kw_not"} : kw_not), (lexerAny.has("kw_null") ? {type: "kw_null"} : kw_null)]},
{"name": "kw_primary_key", "symbols": [(lexerAny.has("kw_primary") ? {type: "kw_primary"} : kw_primary), "kw_key"]},
{"name": "data_type$ebnf$1$subexpression$1$macrocall$2", "symbols": ["int"]},
{"name": "data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1", "symbols": []},
{"name": "data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1$subexpression$1", "symbols": [(lexerAny.has("comma") ? {type: "comma"} : comma), "data_type$ebnf$1$subexpression$1$macrocall$2"], "postprocess": last},
{"name": "data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1", "symbols": ["data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1", "data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]])},
{"name": "data_type$ebnf$1$subexpression$1$macrocall$1", "symbols": ["data_type$ebnf$1$subexpression$1$macrocall$2", "data_type$ebnf$1$subexpression$1$macrocall$1$ebnf$1"], "postprocess": ([head, tail]) => {
return [head, ...(tail || [])];
} },
{"name": "data_type$ebnf$1$subexpression$1", "symbols": ["lparen", "data_type$ebnf$1$subexpression$1$macrocall$1", "rparen"], "postprocess": get(1)},
{"name": "data_type$ebnf$1", "symbols": ["data_type$ebnf$1$subexpression$1"], "postprocess": id},
{"name": "data_type$ebnf$1", "symbols": [], "postprocess": () => null},
{"name": "data_type$ebnf$2$subexpression$1", "symbols": [(lexerAny.has("kw_array") ? {type: "kw_array"} : kw_array)]},
{"name": "data_type$ebnf$2$subexpression$1$ebnf$1$subexpression$1", "symbols": [(lexerAny.has("lbracket") ? {type: "lbracket"} : lbracket), (lexerAny.has("rbracket") ? {type: "rbracket"} : rbracket)]},
{"name": "data_type$ebnf$2$subexpression$1$ebnf$1", "symbols": ["data_type$ebnf$2$subexpression$1$ebnf$1$subexpression$1"]},
{"name": "data_type$ebnf$2$subexpression$1$ebnf$1$subexpression$2", "symbols": [(lexerAny.has("lbracket") ? {type: "lbracket"} : lbracket), (lexerAny.has("rbracket") ? {type: "rbracket"} : rbracket)]},
{"name": "data_type$ebnf$2$subexpression$1$ebnf$1", "symbols": ["data_type$ebnf$2$subexpression$1$ebnf$1", "data_type$ebnf$2$subexpression$1$ebnf$1$subexpression$2"], "postprocess": (d) => d[0].concat([d[1]])},
{"name": "data_type$ebnf$2$subexpression$1", "symbols": ["data_type$ebnf$2$subexpression$1$ebnf$1"]},
{"name": "data_type$ebnf$2", "symbols": ["data_type$ebnf$2$subexpression$1"], "postprocess": id},
{"name": "data_type$ebnf$2", "symbols": [], "postprocess": () => null},
{"name": "data_type", "symbols": ["data_type_simple", "data_type$ebnf$1", "data_type$ebnf$2"], "postprocess": x => {
let asArray = x[2];
const name = unwrap(x[0]);
let ret;
ret = {
...name,
... Array.isArray(x[1]) && x[1].length ? { config: x[1].map(unwrap) } : {},
};
if (asArray) {
if (asArray[0].type === 'kw_array') {
asArray = [['array']]
}
for (const _ of asArray[0]) {
ret = {
kind: 'array',
arrayOf: ret,
};
}
}
return track(x, ret);
} },
{"name": "data_type_list$ebnf$1", "symbols": []},
{"name": "data_type_list$ebnf$1$subexpression$1", "symbols": ["comma", "data_type"], "postprocess": last},
{"name": "data_type_list$ebnf$1", "symbols": ["data_type_list$ebnf$1", "data_type_list$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]])},
{"name": "data_type_list", "symbols": ["data_type", "data_type_list$ebnf$1"], "postprocess": ([head, tail]) => {
return [head, ...(tail || [])];
} },
{"name": "data_type_simple", "symbols": ["data_type_text"], "postprocess": x => track(x, { name: toStr(x, ' ') })},
{"name": "data_type_simple", "symbols": ["data_type_numeric"], "postprocess": x => track(x, { name: toStr(x, ' ') })},
{"name": "data_type_simple", "symbols": ["data_type_date"]},
{"name": "data_type_simple", "symbols": ["qualified_name_mark_quotes"]},
{"name": "data_type_numeric$subexpression$1", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('double')},
{"name": "data_type_numeric", "symbols": ["data_type_numeric$subexpression$1", (lexerAny.has("kw_precision") ? {type: "kw_precision"} : kw_precision)]},
{"name": "data_type_text$subexpression$1", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": anyKw('character', 'bit')},
{"name": "data_type_text$subexpression$2", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('varying')},
{"name": "data_type_text", "symbols": ["data_type_text$subexpression$1", "data_type_text$subexpression$2"]},
{"name": "data_type_date$subexpression$1", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": anyKw('timestamp', 'time')},
{"name": "data_type_date$subexpression$2", "symbols": [(lexerAny.has("kw_with") ? {type: "kw_with"} : kw_with)]},
{"name": "data_type_date$subexpression$2", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('without')},
{"name": "data_type_date$subexpression$3", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('time')},
{"name": "data_type_date$subexpression$4", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('zone')},
{"name": "data_type_date", "symbols": ["data_type_date$subexpression$1", "data_type_date$subexpression$2", "data_type_date$subexpression$3", "data_type_date$subexpression$4"], "postprocess": x => track(x, { name: toStr(x, ' ') })},
{"name": "data_type_date$subexpression$5", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": anyKw('timestamp', 'time')},
{"name": "data_type_date$subexpression$6", "symbols": ["lparen", "int", "rparen"], "postprocess": get(1)},
{"name": "data_type_date$subexpression$7", "symbols": [(lexerAny.has("kw_with") ? {type: "kw_with"} : kw_with)]},
{"name": "data_type_date$subexpression$7", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('without')},
{"name": "data_type_date$subexpression$8", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('time')},
{"name": "data_type_date$subexpression$9", "symbols": [(lexerAny.has("word") ? {type: "word"} : word)], "postprocess": kw('zone')},
{"name": "data_type_date", "symbols": ["data_type_date$subexpression$5", "data_type_date$subexpression$6", "data_type_date$subexpression$7", "data_type_date$subexpression$8", "data_type_date$subexpression$9"], "postprocess": x => track(x, { name: `timestamp ${toStr(x[2])} time zone`, config: [unbox(x[1])] })},
{"name": "ident_aliased$subexpression$1", "symbols": [(lexerAny.has("kw_as") ? {type: "kw_as"} : kw_as), "ident"], "postprocess": last},
{"name": "ident_aliased", "symbols": ["ident_aliased$subexpression$1"]},
{"name": "ident_aliased", "symbols": ["ident"], "postprocess": unwrap},
{"name": "table_ref", "symbols": ["qualified_name"], "postprocess": unwrap},
{"name": "qcolumn$ebnf$1$subexpression$1", "symbols": ["dot", "ident"], "postprocess": last},
{"name": "qcolumn$ebnf$1", "symbols": ["qcolumn$ebnf$1$subexpression$1"], "postprocess": id},
{"name": "qcolumn$ebnf$1", "symbols": [], "postprocess": () => null},
{"name": "qcolumn", "symbols": ["ident", "dot", "ident", "qcolumn$ebnf$1"], "postprocess": x => {
if (!x[3]) {
return track(x, {
table: unbox(x[0]),
column: unbox(x[2]),
});
}
return track(x, {
schema: unbox(x[0]),
table: unbox(x[2]),
column: unbox(x[3]),
});
} },
{"name": "table_ref_aliased$ebnf$1", "symbols": ["ident_aliased"], "postprocess": id},
{"name": "table_ref_aliased$ebnf$1", "symbols": [], "postprocess": () => null},
{"name": "table_ref_aliased", "symbols": ["table_ref", "table_ref_aliased$ebnf$1"], "postprocess": x => {
const alias = unwrap(x[1]);
return track(x, {
...unwrap(x[0]),
...alias ? { alias } : {},
})
} },
{"name": "qualified_name", "symbols": ["qname_ident"], "postprocess": x => track(x, {name: toStr(x) })},
{"name": "qualified_name", "symbols": ["ident", "dot", "ident_extended"], "postprocess": x => {
const schema = toStr(x[0]);
const name = toStr(x[2]);
return track(x, {schema, name});
} },
{"name": "qualified_name", "symbols": [(lexerAny.has("kw_current_schema") ? {type: "kw_current_schema"} : kw_current_schema)], "postprocess": x => track(x, { name: 'current_schema' })},
{"name": "qualified_name_mark_quotes", "symbols": ["qname_ident"], "postprocess": x => track(x, {name: toStr(x), ...doubleQuoted(x) })},
{"name": "qualified_name_mark_quotes", "symbols": ["ident", "dot", "ident_extended"], "postprocess": x => {
const schema = toStr(x[0]);
const name = toStr(x[2]);
return track(x, {schema, name, ...doubleQuoted(x[2])});
} },
{"name": "qualified_name_mark_quotes", "symbols": [(lexerAny.has("kw_current_schema") ? {type: "kw_current_schema"} : kw_current_schema)], "postprocess": x => track(x, { name: 'current_schema' })},
{"name": "qname_ident", "symbols": ["ident"]},
{"name": "qname_ident", "symbols": [(lexerAny.has("kw_precision") ? {type: "kw_precision"} : kw_precision)]},
{"name": "qname", "symbols": ["qualified_name"], "postprocess": unwrap},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_all") ? {type: "kw_all"} : kw_all)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_analyse") ? {type: "kw_analyse"} : kw_analyse)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_analyze") ? {type: "kw_analyze"} : kw_analyze)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_and") ? {type: "kw_and"} : kw_and)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_any") ? {type: "kw_any"} : kw_any)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_array") ? {type: "kw_array"} : kw_array)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_as") ? {type: "kw_as"} : kw_as)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_asc") ? {type: "kw_asc"} : kw_asc)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_asymmetric") ? {type: "kw_asymmetric"} : kw_asymmetric)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_authorization") ? {type: "kw_authorization"} : kw_authorization)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_binary") ? {type: "kw_binary"} : kw_binary)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_both") ? {type: "kw_both"} : kw_both)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_case") ? {type: "kw_case"} : kw_case)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_cast") ? {type: "kw_cast"} : kw_cast)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_check") ? {type: "kw_check"} : kw_check)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_collate") ? {type: "kw_collate"} : kw_collate)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_collation") ? {type: "kw_collation"} : kw_collation)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_concurrently") ? {type: "kw_concurrently"} : kw_concurrently)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_constraint") ? {type: "kw_constraint"} : kw_constraint)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_create") ? {type: "kw_create"} : kw_create)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_cross") ? {type: "kw_cross"} : kw_cross)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_catalog") ? {type: "kw_current_catalog"} : kw_current_catalog)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_date") ? {type: "kw_current_date"} : kw_current_date)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_role") ? {type: "kw_current_role"} : kw_current_role)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_schema") ? {type: "kw_current_schema"} : kw_current_schema)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_time") ? {type: "kw_current_time"} : kw_current_time)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_timestamp") ? {type: "kw_current_timestamp"} : kw_current_timestamp)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_current_user") ? {type: "kw_current_user"} : kw_current_user)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_default") ? {type: "kw_default"} : kw_default)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_deferrable") ? {type: "kw_deferrable"} : kw_deferrable)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_desc") ? {type: "kw_desc"} : kw_desc)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_distinct") ? {type: "kw_distinct"} : kw_distinct)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_do") ? {type: "kw_do"} : kw_do)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_else") ? {type: "kw_else"} : kw_else)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_end") ? {type: "kw_end"} : kw_end)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_except") ? {type: "kw_except"} : kw_except)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_false") ? {type: "kw_false"} : kw_false)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_fetch") ? {type: "kw_fetch"} : kw_fetch)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_for") ? {type: "kw_for"} : kw_for)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_foreign") ? {type: "kw_foreign"} : kw_foreign)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_freeze") ? {type: "kw_freeze"} : kw_freeze)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_from") ? {type: "kw_from"} : kw_from)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_full") ? {type: "kw_full"} : kw_full)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_grant") ? {type: "kw_grant"} : kw_grant)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_group") ? {type: "kw_group"} : kw_group)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_having") ? {type: "kw_having"} : kw_having)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_ilike") ? {type: "kw_ilike"} : kw_ilike)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_in") ? {type: "kw_in"} : kw_in)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_initially") ? {type: "kw_initially"} : kw_initially)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_inner") ? {type: "kw_inner"} : kw_inner)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_intersect") ? {type: "kw_intersect"} : kw_intersect)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_into") ? {type: "kw_into"} : kw_into)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_is") ? {type: "kw_is"} : kw_is)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_isnull") ? {type: "kw_isnull"} : kw_isnull)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_join") ? {type: "kw_join"} : kw_join)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_lateral") ? {type: "kw_lateral"} : kw_lateral)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_leading") ? {type: "kw_leading"} : kw_leading)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_left") ? {type: "kw_left"} : kw_left)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_like") ? {type: "kw_like"} : kw_like)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_limit") ? {type: "kw_limit"} : kw_limit)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_localtime") ? {type: "kw_localtime"} : kw_localtime)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_localtimestamp") ? {type: "kw_localtimestamp"} : kw_localtimestamp)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_natural") ? {type: "kw_natural"} : kw_natural)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_not") ? {type: "kw_not"} : kw_not)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_notnull") ? {type: "kw_notnull"} : kw_notnull)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_null") ? {type: "kw_null"} : kw_null)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_offset") ? {type: "kw_offset"} : kw_offset)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_on") ? {type: "kw_on"} : kw_on)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_only") ? {type: "kw_only"} : kw_only)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_or") ? {type: "kw_or"} : kw_or)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_order") ? {type: "kw_order"} : kw_order)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_outer") ? {type: "kw_outer"} : kw_outer)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_overlaps") ? {type: "kw_overlaps"} : kw_overlaps)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_placing") ? {type: "kw_placing"} : kw_placing)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_primary") ? {type: "kw_primary"} : kw_primary)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_references") ? {type: "kw_references"} : kw_references)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_returning") ? {type: "kw_returning"} : kw_returning)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_right") ? {type: "kw_right"} : kw_right)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_select") ? {type: "kw_select"} : kw_select)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_session_user") ? {type: "kw_session_user"} : kw_session_user)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_similar") ? {type: "kw_similar"} : kw_similar)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_some") ? {type: "kw_some"} : kw_some)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_symmetric") ? {type: "kw_symmetric"} : kw_symmetric)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_table") ? {type: "kw_table"} : kw_table)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_tablesample") ? {type: "kw_tablesample"} : kw_tablesample)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_then") ? {type: "kw_then"} : kw_then)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_to") ? {type: "kw_to"} : kw_to)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_trailing") ? {type: "kw_trailing"} : kw_trailing)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_true") ? {type: "kw_true"} : kw_true)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_union") ? {type: "kw_union"} : kw_union)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_unique") ? {type: "kw_unique"} : kw_unique)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_user") ? {type: "kw_user"} : kw_user)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_using") ? {type: "kw_using"} : kw_using)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_variadic") ? {type: "kw_variadic"} : kw_variadic)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_verbose") ? {type: "kw_verbose"} : kw_verbose)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_when") ? {type: "kw_when"} : kw_when)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_where") ? {type: "kw_where"} : kw_where)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_window") ? {type: "kw_window"} : kw_window)]},
{"name": "any_keyword", "symbols": [(lexerAny.has("kw_with") ? {type: "kw_with"} : kw_with)]},
{"name": "ident_extended", "symbols": ["ident"]},
{"name": "ident_extended", "symbols": ["any_keyword"]},
{"name": "select_statement$ebnf$1", "symbols": ["select_from"], "postprocess": id},
{"name": "select_statement$ebnf$1", "symbols": [], "postprocess": () => null},
{"name": "select_statement$ebnf$2", "symbols": ["select_where"], "postprocess": id},
{"name": "select_statement$ebnf$2", "symbols": [], "postprocess": () => null},
{"name": "select_statement$ebnf$3", "symbols": ["select_groupby"], "postprocess": id},
{"name": "select_statement$ebnf$3", "symbols": [], "postprocess": () => null},
{"name": "select_statement$ebnf$4", "symbols": ["se