Skip to content

Commit b2b301e

Browse files
authored
Merge pull request #5 from MaterializeInc/peek-immediate
Support PEEK IMMEDIATE
2 parents 4eae5d2 + 9dfce11 commit b2b301e

File tree

5 files changed

+30
-9
lines changed

5 files changed

+30
-9
lines changed

src/ast/mod.rs

+12-3
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,11 @@ pub enum Statement {
452452
Commit { chain: bool },
453453
/// ROLLBACK [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ]
454454
Rollback { chain: bool },
455-
/// PEEK
456-
Peek { name: ObjectName },
455+
/// PEEK [ IMMEDIATE ]
456+
Peek {
457+
name: ObjectName,
458+
immediate: bool,
459+
},
457460
/// TAIL
458461
Tail { name: ObjectName },
459462
/// The mysql-ish `SHOW COLUMNS FROM`
@@ -692,7 +695,13 @@ impl fmt::Display for Statement {
692695
Statement::Rollback { chain } => {
693696
write!(f, "ROLLBACK{}", if *chain { " AND CHAIN" } else { "" },)
694697
}
695-
Statement::Peek { name } => write!(f, "PEEK {}", name),
698+
Statement::Peek { name, immediate } => {
699+
f.write_str("PEEK ")?;
700+
if *immediate {
701+
f.write_str("IMMEDIATE ")?;
702+
}
703+
write!(f, "{}", name)
704+
},
696705
Statement::Show { object_type } => {
697706
use ObjectType::*;
698707
write!(

src/ast/visit.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -470,8 +470,8 @@ pub trait Visit<'ast> {
470470

471471
fn visit_rollback(&mut self, _chain: bool) {}
472472

473-
fn visit_peek(&mut self, name: &'ast ObjectName) {
474-
visit_peek(self, name)
473+
fn visit_peek(&mut self, name: &'ast ObjectName, immediate: bool) {
474+
visit_peek(self, name, immediate)
475475
}
476476

477477
fn visit_show_columns(&mut self, name: &'ast ObjectName) {
@@ -559,8 +559,8 @@ pub fn visit_statement<'ast, V: Visit<'ast> + ?Sized>(visitor: &mut V, statement
559559
Statement::SetTransaction { modes } => visitor.visit_set_transaction(modes),
560560
Statement::Commit { chain } => visitor.visit_commit(*chain),
561561
Statement::Rollback { chain } => visitor.visit_rollback(*chain),
562-
Statement::Peek { name } => {
563-
visitor.visit_peek(name);
562+
Statement::Peek { name, immediate } => {
563+
visitor.visit_peek(name, *immediate);
564564
}
565565
Statement::Show { object_type } => visitor.visit_show(*object_type),
566566
Statement::ShowColumns { table_name } => visitor.visit_show_columns(table_name),
@@ -1397,7 +1397,7 @@ pub fn visit_transaction_mode<'ast, V: Visit<'ast> + ?Sized>(
13971397
}
13981398
}
13991399

1400-
pub fn visit_peek<'ast, V: Visit<'ast> + ?Sized>(visitor: &mut V, name: &'ast ObjectName) {
1400+
pub fn visit_peek<'ast, V: Visit<'ast> + ?Sized>(visitor: &mut V, name: &'ast ObjectName, _immediate: bool) {
14011401
visitor.visit_object_name(name);
14021402
}
14031403

src/dialect/keywords.rs

+1
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ define_keywords!(
197197
HOUR,
198198
IDENTITY,
199199
IF,
200+
IMMEDIATE,
200201
IN,
201202
INDICATOR,
202203
INNER,

src/parser.rs

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ impl Parser {
135135
"COMMIT" => Ok(self.parse_commit()?),
136136
"ROLLBACK" => Ok(self.parse_rollback()?),
137137
"PEEK" => Ok(Statement::Peek {
138+
immediate: self.parse_keyword("IMMEDIATE"),
138139
name: self.parse_object_name()?,
139140
}),
140141
"SHOW" => Ok(self.parse_show()?),

tests/sqlparser_common.rs

+11-1
Original file line numberDiff line numberDiff line change
@@ -2354,8 +2354,18 @@ fn parse_drop_source() {
23542354
fn parse_peek() {
23552355
let sql = "PEEK foo.bar";
23562356
match verified_stmt(sql) {
2357-
Statement::Peek { name } => {
2357+
Statement::Peek { name, immediate } => {
23582358
assert_eq!("foo.bar", name.to_string());
2359+
assert!(!immediate);
2360+
}
2361+
_ => assert!(false),
2362+
}
2363+
2364+
let sql = "PEEK IMMEDIATE foo.bar";
2365+
match verified_stmt(sql) {
2366+
Statement::Peek { name, immediate } => {
2367+
assert_eq!("foo.bar", name.to_string());
2368+
assert!(immediate);
23592369
}
23602370
_ => assert!(false),
23612371
}

0 commit comments

Comments
 (0)