diff --git a/cli/src/session.rs b/cli/src/session.rs index 7ea90a88..ff0b475c 100644 --- a/cli/src/session.rs +++ b/cli/src/session.rs @@ -453,17 +453,26 @@ impl Session { self.query.push_str(line); 'Parser: loop { - let mut tokenizer = Tokenizer::new(&self.query); - - while let Some(Ok(token)) = tokenizer.next() { - if let TokenKind::SemiColon = token.kind { - // push to current and continue the tokenizer - let (sql, remain) = self.query.split_at(token.span.end as usize); - if !sql.is_empty() { - queries.push(sql.to_string()); + let mut is_valid = true; + let tokenizer = Tokenizer::new(&self.query); + for token in tokenizer { + match token { + Ok(token) => { + if let TokenKind::SemiColon = token.kind { + // push to current and continue the tokenizer + let (sql, remain) = self.query.split_at(token.span.end as usize); + if is_valid && !sql.is_empty() { + queries.push(sql.to_string()); + } + self.query = remain.to_string(); + continue 'Parser; + } + } + Err(_) => { + // ignore current query if have invalid token. + is_valid = false; + continue; } - self.query = remain.to_string(); - continue 'Parser; } } break; diff --git a/cli/tests/00-base.sql b/cli/tests/00-base.sql index 7882d3a7..98ae616c 100644 --- a/cli/tests/00-base.sql +++ b/cli/tests/00-base.sql @@ -28,6 +28,9 @@ insert into t values(null); select * from t; drop table t; +-- issue 572 +CREATE TABLE 🐳🍞(🐳🐳 INTEGER, 🍞🍞 INTEGER); + -- enable it after we support code string in databend -- select $$aa$$; -- select $$