From ebf4e657e96f928d93522faade6c322bc65468b9 Mon Sep 17 00:00:00 2001 From: Matthias Queitsch Date: Wed, 29 Mar 2023 21:44:05 +0200 Subject: [PATCH] add `full outer` joins --- grammar.js | 3 +++ test/corpus/select.txt | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/grammar.js b/grammar.js index 0834fd9e..5c1be049 100644 --- a/grammar.js +++ b/grammar.js @@ -50,6 +50,7 @@ module.exports = grammar({ keyword_left: _ => make_keyword("left"), keyword_right: _ => make_keyword("right"), keyword_inner: _ => make_keyword("inner"), + keyword_full: _ => make_keyword("full"), keyword_outer: _ => make_keyword("outer"), keyword_cross: _ => make_keyword("cross"), keyword_join: _ => make_keyword("join"), @@ -1677,10 +1678,12 @@ module.exports = grammar({ choice( $.keyword_cross, $.keyword_left, + seq($.keyword_full, $.keyword_outer), seq($.keyword_left, $.keyword_outer), $.keyword_right, seq($.keyword_right, $.keyword_outer), $.keyword_inner, + $.keyword_full, ), ), $.keyword_join, diff --git a/test/corpus/select.txt b/test/corpus/select.txt index 31050918..216c6c90 100644 --- a/test/corpus/select.txt +++ b/test/corpus/select.txt @@ -1056,7 +1056,11 @@ ON a.id = d.d_id RIGHT OUTER JOIN table_d d ON a.id = d.d_id INNER JOIN table_e e -ON a.id = e.e_id; +ON a.id = e.e_id +FULL OUTER JOIN table_f f +ON a.id = f.f_id +FULL JOIN table_g g +ON a.id = g.g_id; -------------------------------------------------------------------------------- @@ -1145,6 +1149,37 @@ ON a.id = e.e_id; name: (identifier)) table_alias: (identifier)) (keyword_on) + predicate: (binary_expression + left: (field + table_alias: (identifier) + name: (identifier)) + right: (field + table_alias: (identifier) + name: (identifier)))) + (join + (keyword_full) + (keyword_outer) + (keyword_join) + (relation + (table_reference + name: (identifier)) + table_alias: (identifier)) + (keyword_on) + predicate: (binary_expression + left: (field + table_alias: (identifier) + name: (identifier)) + right: (field + table_alias: (identifier) + name: (identifier)))) + (join + (keyword_full) + (keyword_join) + (relation + (table_reference + name: (identifier)) + table_alias: (identifier)) + (keyword_on) predicate: (binary_expression left: (field table_alias: (identifier)