Skip to content

Commit

Permalink
fix: fix postgres dollar string parsing (#493)
Browse files Browse the repository at this point in the history
* fix: fix postgres dollar string parsing
  • Loading branch information
adelsz authored Feb 26, 2023
1 parent d8acde3 commit f8deeab
Show file tree
Hide file tree
Showing 6 changed files with 206 additions and 142 deletions.
28 changes: 28 additions & 0 deletions packages/parser/src/loader/sql/__snapshots__/index.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,34 @@ Object {
}
`;

exports[`Dollar quoted strings are supported 1`] = `
Object {
"events": Array [],
"queries": Array [
Object {
"name": "CreateUpdatedAtFunction",
"params": Array [],
"statement": Object {
"body": "CREATE FUNCTION UpdatedAt()
RETURNS TRIGGER AS $$
BEGIN
NEW.updatedAt = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql",
"loc": Object {
"a": 41,
"b": 191,
"col": 2,
"line": 3,
},
},
"usedParamSet": Object {},
},
],
}
`;

exports[`Double and single quotes are supported 1`] = `
Object {
"events": Array [],
Expand Down
4 changes: 3 additions & 1 deletion packages/parser/src/loader/sql/grammar/SQLLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@ OPEN_COMMENT: '/*' -> mode(COMMENT);
SID: ID -> type(ID);
S_REQUIRED_MARK: '!';
WORD: [a-zA-Z_0-9]+;
SPECIAL: [\-+*/<>=~@#%^&|`?$(){},.[\]"]+ -> type(WORD);
SPECIAL: [\-+*/<>=~@#%^&|`?(){},.[\]"]+ -> type(WORD);
DOLLAR: '$' -> type(WORD);
EOF_STATEMENT: ';';
WSL : [ \t\r\n]+ -> skip;
// parse strings and recognize escaped quotes
STRING: QUOT (QUOT | .*? ~([\\]) QUOT);
DOLLAR_STRING: DOLLAR WORD? DOLLAR .* DOLLAR WORD? DOLLAR;
PARAM_MARK: ':';
CAST: '::' -> type(WORD);
Expand Down
2 changes: 1 addition & 1 deletion packages/parser/src/loader/sql/grammar/SQLParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ statement
statementBody
: (LINE_COMMENT | ignoredComment | param | word)*;

word: WORD | ID | STRING | S_REQUIRED_MARK;
word: WORD | ID | STRING | S_REQUIRED_MARK | DOLLAR_STRING;

param: PARAM_MARK paramId;

Expand Down
14 changes: 14 additions & 0 deletions packages/parser/src/loader/sql/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,17 @@ test('Comment starts in strings are ignored', () => {
const parseTree = parse(text);
expect(parseTree).toMatchSnapshot();
});

test('Dollar quoted strings are supported', () => {
const text = `
/* @name CreateUpdatedAtFunction */
CREATE FUNCTION UpdatedAt()
RETURNS TRIGGER AS $$
BEGIN
NEW.updatedAt = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;`;
const parseTree = parse(text);
expect(parseTree).toMatchSnapshot();
});
209 changes: 112 additions & 97 deletions packages/parser/src/loader/sql/parser/SQLLexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,21 @@ export class SQLLexer extends Lexer {
public static readonly EOF_STATEMENT = 6;
public static readonly WSL = 7;
public static readonly STRING = 8;
public static readonly PARAM_MARK = 9;
public static readonly WS = 10;
public static readonly TRANSFORM_ARROW = 11;
public static readonly SPREAD = 12;
public static readonly NAME_TAG = 13;
public static readonly TYPE_TAG = 14;
public static readonly OB = 15;
public static readonly CB = 16;
public static readonly COMMA = 17;
public static readonly C_REQUIRED_MARK = 18;
public static readonly ANY = 19;
public static readonly CLOSE_COMMENT = 20;
public static readonly CAST = 21;
public static readonly DOLLAR_STRING = 9;
public static readonly PARAM_MARK = 10;
public static readonly WS = 11;
public static readonly TRANSFORM_ARROW = 12;
public static readonly SPREAD = 13;
public static readonly NAME_TAG = 14;
public static readonly TYPE_TAG = 15;
public static readonly OB = 16;
public static readonly CB = 17;
public static readonly COMMA = 18;
public static readonly C_REQUIRED_MARK = 19;
public static readonly ANY = 20;
public static readonly CLOSE_COMMENT = 21;
public static readonly DOLLAR = 22;
public static readonly CAST = 23;
public static readonly COMMENT = 1;

// tslint:disable:no-trailing-whitespace
Expand All @@ -50,22 +52,23 @@ export class SQLLexer extends Lexer {
];

public static readonly ruleNames: string[] = [
"QUOT", "ID", "LINE_COMMENT", "OPEN_COMMENT", "SID", "S_REQUIRED_MARK",
"WORD", "SPECIAL", "EOF_STATEMENT", "WSL", "STRING", "PARAM_MARK", "CAST",
"CID", "WS", "TRANSFORM_ARROW", "SPREAD", "NAME_TAG", "TYPE_TAG", "OB",
"CB", "COMMA", "C_REQUIRED_MARK", "ANY", "CLOSE_COMMENT",
"QUOT", "ID", "LINE_COMMENT", "OPEN_COMMENT", "SID", "S_REQUIRED_MARK",
"WORD", "SPECIAL", "DOLLAR", "EOF_STATEMENT", "WSL", "STRING", "DOLLAR_STRING",
"PARAM_MARK", "CAST", "CID", "WS", "TRANSFORM_ARROW", "SPREAD", "NAME_TAG",
"TYPE_TAG", "OB", "CB", "COMMA", "C_REQUIRED_MARK", "ANY", "CLOSE_COMMENT",
];

private static readonly _LITERAL_NAMES: Array<string | undefined> = [
undefined, undefined, undefined, "'/*'", undefined, undefined, "';'",
undefined, undefined, "':'", undefined, "'->'", "'...'", "'@name'", "'@param'",
"'('", "')'", "','", undefined, undefined, "'*/'", "'::'",
undefined, undefined, undefined, "'/*'", undefined, undefined, "';'",
undefined, undefined, undefined, "':'", undefined, "'->'", "'...'", "'@name'",
"'@param'", "'('", "')'", "','", undefined, undefined, "'*/'", "'$'",
"'::'",
];
private static readonly _SYMBOLIC_NAMES: Array<string | undefined> = [
undefined, "ID", "LINE_COMMENT", "OPEN_COMMENT", "S_REQUIRED_MARK", "WORD",
"EOF_STATEMENT", "WSL", "STRING", "PARAM_MARK", "WS", "TRANSFORM_ARROW",
"SPREAD", "NAME_TAG", "TYPE_TAG", "OB", "CB", "COMMA", "C_REQUIRED_MARK",
"ANY", "CLOSE_COMMENT", "CAST",
undefined, "ID", "LINE_COMMENT", "OPEN_COMMENT", "S_REQUIRED_MARK", "WORD",
"EOF_STATEMENT", "WSL", "STRING", "DOLLAR_STRING", "PARAM_MARK", "WS",
"TRANSFORM_ARROW", "SPREAD", "NAME_TAG", "TYPE_TAG", "OB", "CB", "COMMA",
"C_REQUIRED_MARK", "ANY", "CLOSE_COMMENT", "DOLLAR", "CAST",
];
public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(SQLLexer._LITERAL_NAMES, SQLLexer._SYMBOLIC_NAMES, []);

Expand Down Expand Up @@ -98,83 +101,95 @@ export class SQLLexer extends Lexer {
public get modeNames(): string[] { return SQLLexer.modeNames; }

public static readonly _serializedATN: string =
"\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x17\xB1\b\x01" +
"\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x19\xCA\b\x01" +
"\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06" +
"\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f" +
"\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04" +
"\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04" +
"\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x03\x02\x03\x02\x03" +
"\x03\x03\x03\x07\x03;\n\x03\f\x03\x0E\x03>\v\x03\x03\x04\x03\x04\x03\x04" +
"\x03\x04\x07\x04D\n\x04\f\x04\x0E\x04G\v\x04\x03\x04\x05\x04J\n\x04\x03" +
"\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03" +
"\x06\x03\x06\x03\x07\x03\x07\x03\b\x06\bZ\n\b\r\b\x0E\b[\x03\t\x06\t_" +
"\n\t\r\t\x0E\t`\x03\t\x03\t\x03\n\x03\n\x03\v\x06\vh\n\v\r\v\x0E\vi\x03" +
"\v\x03\v\x03\f\x03\f\x03\f\x07\fq\n\f\f\f\x0E\ft\v\f\x03\f\x03\f\x05\f" +
"x\n\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03" +
"\x0F\x03\x0F\x03\x0F\x03\x10\x06\x10\x86\n\x10\r\x10\x0E\x10\x87\x03\x10" +
"\x03\x10\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13" +
"\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14" +
"\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x16\x03\x16\x03\x17\x03\x17" +
"\x03\x18\x03\x18\x03\x19\x06\x19\xA9\n\x19\r\x19\x0E\x19\xAA\x03\x1A\x03" +
"\x1A\x03\x1A\x03\x1A\x03\x1A\x04r\xAA\x02\x02\x1B\x04\x02\x02\x06\x02" +
"\x03\b\x02\x04\n\x02\x05\f\x02\x02\x0E\x02\x06\x10\x02\x07\x12\x02\x02" +
"\x14\x02\b\x16\x02\t\x18\x02\n\x1A\x02\v\x1C\x02\x17\x1E\x02\x02 \x02" +
"\f\"\x02\r$\x02\x0E&\x02\x0F(\x02\x10*\x02\x11,\x02\x12.\x02\x130\x02" +
"\x142\x02\x154\x02\x16\x04\x02\x03\b\x05\x02C\\aac|\x06\x022;C\\aac|\x04" +
"\x02\f\f\x0F\x0F\t\x02$(*1>B]]_`bb}\x80\x05\x02\v\f\x0F\x0F\"\"\x03\x02" +
"^^\x02\xB7\x02\b\x03\x02\x02\x02\x02\n\x03\x02\x02\x02\x02\f\x03\x02\x02" +
"\x02\x02\x0E\x03\x02\x02\x02\x02\x10\x03\x02\x02\x02\x02\x12\x03\x02\x02" +
"\x02\x02\x14\x03\x02\x02\x02\x02\x16\x03\x02\x02\x02\x02\x18\x03\x02\x02" +
"\x02\x02\x1A\x03\x02\x02\x02\x02\x1C\x03\x02\x02\x02\x03\x1E\x03\x02\x02" +
"\x02\x03 \x03\x02\x02\x02\x03\"\x03\x02\x02\x02\x03$\x03\x02\x02\x02\x03" +
"&\x03\x02\x02\x02\x03(\x03\x02\x02\x02\x03*\x03\x02\x02\x02\x03,\x03\x02" +
"\x02\x02\x03.\x03\x02\x02\x02\x030\x03\x02\x02\x02\x032\x03\x02\x02\x02" +
"\x034\x03\x02\x02\x02\x046\x03\x02\x02\x02\x068\x03\x02\x02\x02\b?\x03" +
"\x02\x02\x02\nM\x03\x02\x02\x02\fR\x03\x02\x02\x02\x0EV\x03\x02\x02\x02" +
"\x10Y\x03\x02\x02\x02\x12^\x03\x02\x02\x02\x14d\x03\x02\x02\x02\x16g\x03" +
"\x02\x02\x02\x18m\x03\x02\x02\x02\x1Ay\x03\x02\x02\x02\x1C{\x03\x02\x02" +
"\x02\x1E\x80\x03\x02\x02\x02 \x85\x03\x02\x02\x02\"\x8B\x03\x02\x02\x02" +
"$\x8E\x03\x02\x02\x02&\x92\x03\x02\x02\x02(\x98\x03\x02\x02\x02*\x9F\x03" +
"\x02\x02\x02,\xA1\x03\x02\x02\x02.\xA3\x03\x02\x02\x020\xA5\x03\x02\x02" +
"\x022\xA8\x03\x02\x02\x024\xAC\x03\x02\x02\x0267\x07)\x02\x027\x05\x03" +
"\x02\x02\x028<\t\x02\x02\x029;\t\x03\x02\x02:9\x03\x02\x02\x02;>\x03\x02" +
"\x02\x02<:\x03\x02\x02\x02<=\x03\x02\x02\x02=\x07\x03\x02\x02\x02><\x03" +
"\x02\x02\x02?@\x07/\x02\x02@A\x07/\x02\x02AE\x03\x02\x02\x02BD\n\x04\x02" +
"\x02CB\x03\x02\x02\x02DG\x03\x02\x02\x02EC\x03\x02\x02\x02EF\x03\x02\x02" +
"\x02FI\x03\x02\x02\x02GE\x03\x02\x02\x02HJ\x07\x0F\x02\x02IH\x03\x02\x02" +
"\x02IJ\x03\x02\x02\x02JK\x03\x02\x02\x02KL\x07\f\x02\x02L\t\x03\x02\x02" +
"\x02MN\x071\x02\x02NO\x07,\x02\x02OP\x03\x02\x02\x02PQ\b\x05\x02\x02Q" +
"\v\x03\x02\x02\x02RS\x05\x06\x03\x02ST\x03\x02\x02\x02TU\b\x06\x03\x02" +
"U\r\x03\x02\x02\x02VW\x07#\x02\x02W\x0F\x03\x02\x02\x02XZ\t\x03\x02\x02" +
"YX\x03\x02\x02\x02Z[\x03\x02\x02\x02[Y\x03\x02\x02\x02[\\\x03\x02\x02" +
"\x02\\\x11\x03\x02\x02\x02]_\t\x05\x02\x02^]\x03\x02\x02\x02_`\x03\x02" +
"\x02\x02`^\x03\x02\x02\x02`a\x03\x02\x02\x02ab\x03\x02\x02\x02bc\b\t\x04" +
"\x02c\x13\x03\x02\x02\x02de\x07=\x02\x02e\x15\x03\x02\x02\x02fh\t\x06" +
"\x02\x02gf\x03\x02\x02\x02hi\x03\x02\x02\x02ig\x03\x02\x02\x02ij\x03\x02" +
"\x02\x02jk\x03\x02\x02\x02kl\b\v\x05\x02l\x17\x03\x02\x02\x02mw\x05\x04" +
"\x02\x02nx\x05\x04\x02\x02oq\v\x02\x02\x02po\x03\x02\x02\x02qt\x03\x02" +
"\x02\x02rs\x03\x02\x02\x02rp\x03\x02\x02\x02su\x03\x02\x02\x02tr\x03\x02" +
"\x02\x02uv\n\x07\x02\x02vx\x05\x04\x02\x02wn\x03\x02\x02\x02wr\x03\x02" +
"\x02\x02x\x19\x03\x02\x02\x02yz\x07<\x02\x02z\x1B\x03\x02\x02\x02{|\x07" +
"<\x02\x02|}\x07<\x02\x02}~\x03\x02\x02\x02~\x7F\b\x0E\x04\x02\x7F\x1D" +
"\x03\x02\x02\x02\x80\x81\x05\x06\x03\x02\x81\x82\x03\x02\x02\x02\x82\x83" +
"\b\x0F\x03\x02\x83\x1F\x03\x02\x02\x02\x84\x86\t\x06\x02\x02\x85\x84\x03" +
"\x02\x02\x02\x86\x87\x03\x02\x02\x02\x87\x85\x03\x02\x02\x02\x87\x88\x03" +
"\x02\x02\x02\x88\x89\x03\x02\x02\x02\x89\x8A\b\x10\x05\x02\x8A!\x03\x02" +
"\x02\x02\x8B\x8C\x07/\x02\x02\x8C\x8D\x07@\x02\x02\x8D#\x03\x02\x02\x02" +
"\x8E\x8F\x070\x02\x02\x8F\x90\x070\x02\x02\x90\x91\x070\x02\x02\x91%\x03" +
"\x02\x02\x02\x92\x93\x07B\x02\x02\x93\x94\x07p\x02\x02\x94\x95\x07c\x02" +
"\x02\x95\x96\x07o\x02\x02\x96\x97\x07g\x02\x02\x97\'\x03\x02\x02\x02\x98" +
"\x99\x07B\x02\x02\x99\x9A\x07r\x02\x02\x9A\x9B\x07c\x02\x02\x9B\x9C\x07" +
"t\x02\x02\x9C\x9D\x07c\x02\x02\x9D\x9E\x07o\x02\x02\x9E)\x03\x02\x02\x02" +
"\x9F\xA0\x07*\x02\x02\xA0+\x03\x02\x02\x02\xA1\xA2\x07+\x02\x02\xA2-\x03" +
"\x02\x02\x02\xA3\xA4\x07.\x02\x02\xA4/\x03\x02\x02\x02\xA5\xA6\x07#\x02" +
"\x02\xA61\x03\x02\x02\x02\xA7\xA9\v\x02\x02\x02\xA8\xA7\x03\x02\x02\x02" +
"\xA9\xAA\x03\x02\x02\x02\xAA\xAB\x03\x02\x02\x02\xAA\xA8\x03\x02\x02\x02" +
"\xAB3\x03\x02\x02\x02\xAC\xAD\x07,\x02\x02\xAD\xAE\x071\x02\x02\xAE\xAF" +
"\x03\x02\x02\x02\xAF\xB0\b\x1A\x06\x02\xB05\x03\x02\x02\x02\x0E\x02\x03" +
"<EI[`irw\x87\xAA\x07\x04\x03\x02\t\x03\x02\t\x07\x02\b\x02\x02\x04\x02" +
"\x02";
"\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04" +
"\x1C\t\x1C\x03\x02\x03\x02\x03\x03\x03\x03\x07\x03?\n\x03\f\x03\x0E\x03" +
"B\v\x03\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04H\n\x04\f\x04\x0E\x04K" +
"\v\x04\x03\x04\x05\x04N\n\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05" +
"\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\b" +
"\x06\b^\n\b\r\b\x0E\b_\x03\t\x06\tc\n\t\r\t\x0E\td\x03\t\x03\t\x03\n\x03" +
"\n\x03\n\x03\n\x03\v\x03\v\x03\f\x06\fp\n\f\r\f\x0E\fq\x03\f\x03\f\x03" +
"\r\x03\r\x03\r\x07\ry\n\r\f\r\x0E\r|\v\r\x03\r\x03\r\x05\r\x80\n\r\x03" +
"\x0E\x03\x0E\x05\x0E\x84\n\x0E\x03\x0E\x03\x0E\x07\x0E\x88\n\x0E\f\x0E" +
"\x0E\x0E\x8B\v\x0E\x03\x0E\x03\x0E\x05\x0E\x8F\n\x0E\x03\x0E\x03\x0E\x03" +
"\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03" +
"\x11\x03\x11\x03\x12\x06\x12\x9F\n\x12\r\x12\x0E\x12\xA0\x03\x12\x03\x12" +
"\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15" +
"\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" +
"\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x1A" +
"\x03\x1A\x03\x1B\x06\x1B\xC2\n\x1B\r\x1B\x0E\x1B\xC3\x03\x1C\x03\x1C\x03" +
"\x1C\x03\x1C\x03\x1C\x04z\xC3\x02\x02\x1D\x04\x02\x02\x06\x02\x03\b\x02" +
"\x04\n\x02\x05\f\x02\x02\x0E\x02\x06\x10\x02\x07\x12\x02\x02\x14\x02\x18" +
"\x16\x02\b\x18\x02\t\x1A\x02\n\x1C\x02\v\x1E\x02\f \x02\x19\"\x02\x02" +
"$\x02\r&\x02\x0E(\x02\x0F*\x02\x10,\x02\x11.\x02\x120\x02\x132\x02\x14" +
"4\x02\x156\x02\x168\x02\x17\x04\x02\x03\b\x05\x02C\\aac|\x06\x022;C\\" +
"aac|\x04\x02\f\f\x0F\x0F\n\x02$%\'(*1>B]]_`bb}\x80\x05\x02\v\f\x0F\x0F" +
"\"\"\x03\x02^^\x02\xD3\x02\b\x03\x02\x02\x02\x02\n\x03\x02\x02\x02\x02" +
"\f\x03\x02\x02\x02\x02\x0E\x03\x02\x02\x02\x02\x10\x03\x02\x02\x02\x02" +
"\x12\x03\x02\x02\x02\x02\x14\x03\x02\x02\x02\x02\x16\x03\x02\x02\x02\x02" +
"\x18\x03\x02\x02\x02\x02\x1A\x03\x02\x02\x02\x02\x1C\x03\x02\x02\x02\x02" +
"\x1E\x03\x02\x02\x02\x02 \x03\x02\x02\x02\x03\"\x03\x02\x02\x02\x03$\x03" +
"\x02\x02\x02\x03&\x03\x02\x02\x02\x03(\x03\x02\x02\x02\x03*\x03\x02\x02" +
"\x02\x03,\x03\x02\x02\x02\x03.\x03\x02\x02\x02\x030\x03\x02\x02\x02\x03" +
"2\x03\x02\x02\x02\x034\x03\x02\x02\x02\x036\x03\x02\x02\x02\x038\x03\x02" +
"\x02\x02\x04:\x03\x02\x02\x02\x06<\x03\x02\x02\x02\bC\x03\x02\x02\x02" +
"\nQ\x03\x02\x02\x02\fV\x03\x02\x02\x02\x0EZ\x03\x02\x02\x02\x10]\x03\x02" +
"\x02\x02\x12b\x03\x02\x02\x02\x14h\x03\x02\x02\x02\x16l\x03\x02\x02\x02" +
"\x18o\x03\x02\x02\x02\x1Au\x03\x02\x02\x02\x1C\x81\x03\x02\x02\x02\x1E" +
"\x92\x03\x02\x02\x02 \x94\x03\x02\x02\x02\"\x99\x03\x02\x02\x02$\x9E\x03" +
"\x02\x02\x02&\xA4\x03\x02\x02\x02(\xA7\x03\x02\x02\x02*\xAB\x03\x02\x02" +
"\x02,\xB1\x03\x02\x02\x02.\xB8\x03\x02\x02\x020\xBA\x03\x02\x02\x022\xBC" +
"\x03\x02\x02\x024\xBE\x03\x02\x02\x026\xC1\x03\x02\x02\x028\xC5\x03\x02" +
"\x02\x02:;\x07)\x02\x02;\x05\x03\x02\x02\x02<@\t\x02\x02\x02=?\t\x03\x02" +
"\x02>=\x03\x02\x02\x02?B\x03\x02\x02\x02@>\x03\x02\x02\x02@A\x03\x02\x02" +
"\x02A\x07\x03\x02\x02\x02B@\x03\x02\x02\x02CD\x07/\x02\x02DE\x07/\x02" +
"\x02EI\x03\x02\x02\x02FH\n\x04\x02\x02GF\x03\x02\x02\x02HK\x03\x02\x02" +
"\x02IG\x03\x02\x02\x02IJ\x03\x02\x02\x02JM\x03\x02\x02\x02KI\x03\x02\x02" +
"\x02LN\x07\x0F\x02\x02ML\x03\x02\x02\x02MN\x03\x02\x02\x02NO\x03\x02\x02" +
"\x02OP\x07\f\x02\x02P\t\x03\x02\x02\x02QR\x071\x02\x02RS\x07,\x02\x02" +
"ST\x03\x02\x02\x02TU\b\x05\x02\x02U\v\x03\x02\x02\x02VW\x05\x06\x03\x02" +
"WX\x03\x02\x02\x02XY\b\x06\x03\x02Y\r\x03\x02\x02\x02Z[\x07#\x02\x02[" +
"\x0F\x03\x02\x02\x02\\^\t\x03\x02\x02]\\\x03\x02\x02\x02^_\x03\x02\x02" +
"\x02_]\x03\x02\x02\x02_`\x03\x02\x02\x02`\x11\x03\x02\x02\x02ac\t\x05" +
"\x02\x02ba\x03\x02\x02\x02cd\x03\x02\x02\x02db\x03\x02\x02\x02de\x03\x02" +
"\x02\x02ef\x03\x02\x02\x02fg\b\t\x04\x02g\x13\x03\x02\x02\x02hi\x07&\x02" +
"\x02ij\x03\x02\x02\x02jk\b\n\x04\x02k\x15\x03\x02\x02\x02lm\x07=\x02\x02" +
"m\x17\x03\x02\x02\x02np\t\x06\x02\x02on\x03\x02\x02\x02pq\x03\x02\x02" +
"\x02qo\x03\x02\x02\x02qr\x03\x02\x02\x02rs\x03\x02\x02\x02st\b\f\x05\x02" +
"t\x19\x03\x02\x02\x02u\x7F\x05\x04\x02\x02v\x80\x05\x04\x02\x02wy\v\x02" +
"\x02\x02xw\x03\x02\x02\x02y|\x03\x02\x02\x02z{\x03\x02\x02\x02zx\x03\x02" +
"\x02\x02{}\x03\x02\x02\x02|z\x03\x02\x02\x02}~\n\x07\x02\x02~\x80\x05" +
"\x04\x02\x02\x7Fv\x03\x02\x02\x02\x7Fz\x03\x02\x02\x02\x80\x1B\x03\x02" +
"\x02\x02\x81\x83\x05\x14\n\x02\x82\x84\x05\x10\b\x02\x83\x82\x03\x02\x02" +
"\x02\x83\x84\x03\x02\x02\x02\x84\x85\x03\x02\x02\x02\x85\x89\x05\x14\n" +
"\x02\x86\x88\v\x02\x02\x02\x87\x86\x03\x02\x02\x02\x88\x8B\x03\x02\x02" +
"\x02\x89\x87\x03\x02\x02\x02\x89\x8A\x03\x02\x02\x02\x8A\x8C\x03\x02\x02" +
"\x02\x8B\x89\x03\x02\x02\x02\x8C\x8E\x05\x14\n\x02\x8D\x8F\x05\x10\b\x02" +
"\x8E\x8D\x03\x02\x02\x02\x8E\x8F\x03\x02\x02\x02\x8F\x90\x03\x02\x02\x02" +
"\x90\x91\x05\x14\n\x02\x91\x1D\x03\x02\x02\x02\x92\x93\x07<\x02\x02\x93" +
"\x1F\x03\x02\x02\x02\x94\x95\x07<\x02\x02\x95\x96\x07<\x02\x02\x96\x97" +
"\x03\x02\x02\x02\x97\x98\b\x10\x04\x02\x98!\x03\x02\x02\x02\x99\x9A\x05" +
"\x06\x03\x02\x9A\x9B\x03\x02\x02\x02\x9B\x9C\b\x11\x03\x02\x9C#\x03\x02" +
"\x02\x02\x9D\x9F\t\x06\x02\x02\x9E\x9D\x03\x02\x02\x02\x9F\xA0\x03\x02" +
"\x02\x02\xA0\x9E\x03\x02\x02\x02\xA0\xA1\x03\x02\x02\x02\xA1\xA2\x03\x02" +
"\x02\x02\xA2\xA3\b\x12\x05\x02\xA3%\x03\x02\x02\x02\xA4\xA5\x07/\x02\x02" +
"\xA5\xA6\x07@\x02\x02\xA6\'\x03\x02\x02\x02\xA7\xA8\x070\x02\x02\xA8\xA9" +
"\x070\x02\x02\xA9\xAA\x070\x02\x02\xAA)\x03\x02\x02\x02\xAB\xAC\x07B\x02" +
"\x02\xAC\xAD\x07p\x02\x02\xAD\xAE\x07c\x02\x02\xAE\xAF\x07o\x02\x02\xAF" +
"\xB0\x07g\x02\x02\xB0+\x03\x02\x02\x02\xB1\xB2\x07B\x02\x02\xB2\xB3\x07" +
"r\x02\x02\xB3\xB4\x07c\x02\x02\xB4\xB5\x07t\x02\x02\xB5\xB6\x07c\x02\x02" +
"\xB6\xB7\x07o\x02\x02\xB7-\x03\x02\x02\x02\xB8\xB9\x07*\x02\x02\xB9/\x03" +
"\x02\x02\x02\xBA\xBB\x07+\x02\x02\xBB1\x03\x02\x02\x02\xBC\xBD\x07.\x02" +
"\x02\xBD3\x03\x02\x02\x02\xBE\xBF\x07#\x02\x02\xBF5\x03\x02\x02\x02\xC0" +
"\xC2\v\x02\x02\x02\xC1\xC0\x03\x02\x02\x02\xC2\xC3\x03\x02\x02\x02\xC3" +
"\xC4\x03\x02\x02\x02\xC3\xC1\x03\x02\x02\x02\xC47\x03\x02\x02\x02\xC5" +
"\xC6\x07,\x02\x02\xC6\xC7\x071\x02\x02\xC7\xC8\x03\x02\x02\x02\xC8\xC9" +
"\b\x1C\x06\x02\xC99\x03\x02\x02\x02\x11\x02\x03@IM_dqz\x7F\x83\x89\x8E" +
"\xA0\xC3\x07\x04\x03\x02\t\x03\x02\t\x07\x02\b\x02\x02\x04\x02\x02";
public static __ATN: ATN;
public static get _ATN(): ATN {
if (!SQLLexer.__ATN) {
Expand Down
Loading

0 comments on commit f8deeab

Please sign in to comment.