Skip to content

Commit 6314c1d

Browse files
committed
GRAPH_TABLE Syntax
1 parent 12ceec3 commit 6314c1d

File tree

2 files changed

+457
-10
lines changed

2 files changed

+457
-10
lines changed

partiql-parser/src/lexer/partiql.rs

Lines changed: 102 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,6 @@ pub enum Token<'input> {
203203
Plus,
204204
#[token("*")]
205205
Star,
206-
#[token("?")]
207-
SqlParameter,
208206
#[token("%")]
209207
Percent,
210208
#[token("/")]
@@ -213,10 +211,64 @@ pub enum Token<'input> {
213211
Caret,
214212
#[token(".")]
215213
Period,
216-
#[token("~")]
217-
Tilde,
218214
#[token("||")]
219215
DblPipe,
216+
#[token("|")]
217+
Pipe,
218+
#[token("&")]
219+
Ampersand,
220+
#[token("!")]
221+
Bang,
222+
#[token("?")]
223+
QuestionMark,
224+
225+
// Graph Symbols
226+
#[token("|+|")]
227+
PipePlusPipe,
228+
#[token("<-")]
229+
LeftArrow,
230+
#[token("~")]
231+
Tilde,
232+
#[token("->")]
233+
RightArrow,
234+
#[token("<~")]
235+
LeftArrowTilde,
236+
#[token("~>")]
237+
TildeRightArrow,
238+
#[token("<-[")]
239+
LeftArrowBracket,
240+
#[token("]-")]
241+
RightBracketMinus,
242+
#[token("~[")]
243+
TildeLeftBracket,
244+
#[token("]~")]
245+
RightBracketTilde,
246+
#[token("-[")]
247+
MinusLeftBracket,
248+
#[token("]->")]
249+
BracketRightArrow,
250+
#[token("<~[")]
251+
LeftArrowTildeBracket,
252+
#[token("]~>")]
253+
BracketTildeRightArrow,
254+
#[token("<->")]
255+
LeftMinusRight,
256+
#[token("<-/")]
257+
LeftArrowSlash,
258+
#[token("/-")]
259+
RightSlashMinus,
260+
#[token("~/")]
261+
TildeLeftSlash,
262+
#[token("/~")]
263+
RightSlashTilde,
264+
#[token("-/")]
265+
MinusLeftSlash,
266+
#[token("/->")]
267+
SlashRightArrow,
268+
#[token("<~/")]
269+
LeftArrowTildeSlash,
270+
#[token("/~>")]
271+
SlashTildeRightArrow,
220272

221273
// unquoted identifiers
222274
#[regex("[a-zA-Z_$][a-zA-Z0-9_$]*", |lex| lex.slice())]
@@ -292,6 +344,8 @@ pub enum Token<'input> {
292344
Desc,
293345
#[regex("(?i:Distinct)")]
294346
Distinct,
347+
#[regex("(?i:Element)")]
348+
Element,
295349
#[regex("(?i:Else)")]
296350
Else,
297351
#[regex("(?i:End)")]
@@ -316,6 +370,8 @@ pub enum Token<'input> {
316370
From,
317371
#[regex("(?i:Group)")]
318372
Group,
373+
#[regex("(?i:Groups)")]
374+
Groups,
319375
#[regex("(?i:Having)")]
320376
Having,
321377
#[regex("(?i:In)")]
@@ -328,6 +384,8 @@ pub enum Token<'input> {
328384
Intersect,
329385
#[regex("(?i:Join)")]
330386
Join,
387+
#[regex("(?i:Keep)")]
388+
Keep,
331389
#[regex("(?i:Last)")]
332390
Last,
333391
#[regex("(?i:Lateral)")]
@@ -364,6 +422,8 @@ pub enum Token<'input> {
364422
Order,
365423
#[regex("(?i:Outer)")]
366424
Outer,
425+
#[regex("(?i:Path)")]
426+
Path,
367427
#[regex("(?i:Partial)")]
368428
Partial,
369429
#[regex("(?i:Per)")]
@@ -374,6 +434,8 @@ pub enum Token<'input> {
374434
Preserve,
375435
#[regex("(?i:Recursive)")]
376436
Recursive,
437+
#[regex("(?i:REPEATABLE)")]
438+
Repeatable,
377439
#[regex("(?i:Right)")]
378440
Right,
379441
#[regex("(?i:Row)")]
@@ -577,19 +639,22 @@ impl Token<'_> {
577639
| Token::Date
578640
| Token::Desc
579641
| Token::Distinct
642+
| Token::Element
580643
| Token::Escape
581644
| Token::Except
582645
| Token::First
583646
| Token::For
584647
| Token::Full
585648
| Token::From
586649
| Token::Group
650+
| Token::Groups
587651
| Token::Having
588652
| Token::In
589653
| Token::Inner
590654
| Token::Is
591655
| Token::Intersect
592656
| Token::Join
657+
| Token::Keep
593658
| Token::Last
594659
| Token::Lateral
595660
| Token::Left
@@ -606,11 +671,13 @@ impl Token<'_> {
606671
| Token::Or
607672
| Token::Order
608673
| Token::Outer
674+
| Token::Path
609675
| Token::Partial
610676
| Token::Pivot
611677
| Token::Preserve
612678
| Token::Right
613679
| Token::Recursive
680+
| Token::Repeatable
614681
| Token::Search
615682
| Token::Select
616683
| Token::Table
@@ -661,13 +728,41 @@ impl fmt::Display for Token<'_> {
661728
Token::Minus => write!(f, "-"),
662729
Token::Plus => write!(f, "+"),
663730
Token::Star => write!(f, "*"),
664-
Token::SqlParameter => write!(f, "?"),
665731
Token::Percent => write!(f, "%"),
666732
Token::Slash => write!(f, "/"),
667733
Token::Caret => write!(f, "^"),
668734
Token::Period => write!(f, "."),
669-
Token::Tilde => write!(f, "~"),
670735
Token::DblPipe => write!(f, "||"),
736+
Token::Pipe => write!(f, "|"),
737+
Token::Ampersand => write!(f, "&"),
738+
Token::Bang => write!(f, "!"),
739+
Token::QuestionMark => write!(f, "?"),
740+
// graph symbols
741+
Token::PipePlusPipe => write!(f, "|+|"),
742+
Token::LeftArrow => write!(f, "<-"),
743+
Token::Tilde => write!(f, "~"),
744+
Token::RightArrow => write!(f, "->"),
745+
Token::LeftArrowTilde => write!(f, "<~"),
746+
Token::TildeRightArrow => write!(f, "~>"),
747+
Token::LeftArrowBracket => write!(f, "<-["),
748+
Token::RightBracketMinus => write!(f, "]-"),
749+
Token::TildeLeftBracket => write!(f, "~["),
750+
Token::RightBracketTilde => write!(f, "]~"),
751+
Token::MinusLeftBracket => write!(f, "-["),
752+
Token::BracketRightArrow => write!(f, "]->"),
753+
Token::LeftArrowTildeBracket => write!(f, "<~["),
754+
Token::BracketTildeRightArrow => write!(f, "]~>"),
755+
Token::LeftMinusRight => write!(f, "<->"),
756+
Token::LeftArrowSlash => write!(f, "<-/"),
757+
Token::RightSlashMinus => write!(f, "/-"),
758+
Token::TildeLeftSlash => write!(f, "~/"),
759+
Token::RightSlashTilde => write!(f, "/~"),
760+
Token::MinusLeftSlash => write!(f, "-/"),
761+
Token::SlashRightArrow => write!(f, "/->"),
762+
Token::LeftArrowTildeSlash => write!(f, "<~/"),
763+
Token::SlashTildeRightArrow => write!(f, "/~>"),
764+
765+
// other
671766
Token::UnquotedIdent(id) => write!(f, "<{id}:UNQUOTED_IDENT>"),
672767
Token::QuotedIdent(id) => write!(f, "<{id}:QUOTED_IDENT>"),
673768
Token::UnquotedAtIdentifier(id) => write!(f, "<{id}:UNQUOTED_ATIDENT>"),
@@ -679,7 +774,7 @@ impl fmt::Display for Token<'_> {
679774
Token::EmbeddedDocQuote => write!(f, "<DOC>"),
680775
Token::EmbeddedDoc(txt) => write!(f, "<```{txt}```:DOC>"),
681776
Token::EmptyEmbeddedDocQuote => write!(f, "<``:DOC>"),
682-
777+
// keywords
683778
_ => {
684779
write!(f, "{}", format!("{self:?}").to_uppercase())
685780
}

0 commit comments

Comments
 (0)