use super::*;
impl Renderer {
pub(super) fn render_raw_stmt(&mut self, raw: &RawStmt) {
self.render_raw(&raw.sql, &raw.params)
}
pub(super) fn render_raw(&mut self, sql: &str, params: &[Param]) {
self.cacheable = false;
if params.is_empty() && !sql.as_bytes().contains(&b'?') {
self.sql.push_str(sql);
return;
}
let mut bind_index = 0usize;
crate::raw::scan_raw_tokens(sql, |token| match token {
crate::raw::RawToken::Text(text) => self.sql.push_str(text),
crate::raw::RawToken::EscapedQuestion => self.sql.push('?'),
crate::raw::RawToken::Placeholder => {
self.push_param(params[bind_index].clone());
bind_index += 1;
}
});
debug_assert_eq!(bind_index, params.len());
}
pub(super) fn push_param(&mut self, param: Param) {
self.params.push(param);
self.sql.push('$');
let mut buffer = itoa::Buffer::new();
self.sql.push_str(buffer.format(self.params.len()));
}
}