use crate::{ast::CreateForeignServer, SQLError};
use pg_query::protobuf::Token;
pub(super) fn retain_string_presence(
sql: &str,
statement: &mut CreateForeignServer,
) -> Result<(), SQLError> {
let scanned = crate::parser::scan(sql)?;
let tokens = scanned
.tokens
.iter()
.map(|token| token.token())
.filter(|token| !matches!(token, Token::SqlComment | Token::CComment))
.collect::<Vec<_>>();
let mut position = after_token(&tokens, if statement.if_not_exists { 5 } else { 2 });
if tokens.get(position) == Some(&Token::TypeP) {
statement.server_type.get_or_insert_with(String::new);
position = after_token(&tokens, position + 1);
}
if tokens.get(position) == Some(&Token::VersionP)
&& tokens.get(position + 1) != Some(&Token::NullP)
{
statement.version.get_or_insert_with(String::new);
}
Ok(())
}
fn after_token(tokens: &[Token], position: usize) -> usize {
let next = position + 1;
if tokens.get(next) == Some(&Token::Uescape) {
next + 2
} else {
next
}
}