use super::Lexer;
use radixdb_core::SmartString;
impl Lexer {
pub(super) fn read_line_comment(&mut self) -> SmartString {
let mut result = SmartString::new("");
result.push(self.ch);
if self.ch == '-' && self.peek_char() == '-' {
self.read_char(); result.push(self.ch); self.read_char(); } else if self.ch == '#' {
self.read_char(); }
while self.ch != '\n' && !self.eof {
if self.ch == '\0' {
self.last_error = Some("NULL byte (0x00) is not allowed in SQL input".to_string());
break;
}
result.push(self.ch);
self.read_char();
}
result
}
pub(super) fn read_block_comment(&mut self) -> SmartString {
let mut result = SmartString::new("");
let mut depth = 1usize;
result.push(self.ch); self.read_char();
result.push(self.ch); self.read_char();
while depth > 0 && !self.eof {
if self.ch == '\0' {
self.last_error = Some("NULL byte (0x00) is not allowed in SQL input".to_string());
break;
}
if self.ch == '/' && self.peek_char() == '*' {
depth += 1;
result.push(self.ch);
self.read_char();
result.push(self.ch);
self.read_char();
continue;
}
if self.ch == '*' && self.peek_char() == '/' {
depth -= 1;
result.push(self.ch);
self.read_char();
result.push(self.ch);
self.read_char();
continue;
}
result.push(self.ch);
self.read_char();
}
if depth != 0 && self.last_error.is_none() {
self.last_error = Some("unterminated block comment".to_string());
}
result
}
}