use std::fmt::Write;
pub trait Dialect {
fn write_placeholder(&self, sql: &mut String, index: usize);
}
#[derive(Debug, Clone, Copy, Default)]
pub struct PostgresDialect;
impl Dialect for PostgresDialect {
fn write_placeholder(&self, sql: &mut String, index: usize) {
let _ = write!(sql, "${index}");
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct SqliteDialect;
impl Dialect for SqliteDialect {
fn write_placeholder(&self, sql: &mut String, index: usize) {
let _ = write!(sql, "?{index}");
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn postgres_dialect_writes_dollar_placeholders() {
let dialect = PostgresDialect;
let mut sql = String::new();
dialect.write_placeholder(&mut sql, 1);
sql.push_str(", ");
dialect.write_placeholder(&mut sql, 2);
assert_eq!(sql, "$1, $2");
}
#[test]
fn sqlite_dialect_writes_question_placeholders() {
let dialect = SqliteDialect;
let mut sql = String::new();
dialect.write_placeholder(&mut sql, 1);
sql.push_str(", ");
dialect.write_placeholder(&mut sql, 2);
assert_eq!(sql, "?1, ?2");
}
}