pub enum NameLimit {
Bytes(u16),
Characters(u16),
}Expand description
The longest name a database keeps, in the unit it measures names by.
Postgres measures a name in bytes, MySQL and MariaDB in characters, so a name of accented letters can fit one database and not the other.
§Examples
use ruststream_sqlx_dialect::{
Dialect, NameLimit, Param, Statement, StatementError, TableSpec,
};
/// SQL Server, a database without a built-in dialect.
#[derive(Debug)]
pub struct Mssql;
impl Mssql {
// SQL Server keeps a name of up to 128 characters.
fn named<'n>(&self, name: &'n str) -> Result<&'n str, StatementError> {
if name.chars().count() <= 128 {
return Ok(name);
}
Err(StatementError::IdentifierTooLong {
dialect: self.name(),
identifier: name.to_owned(),
limit: NameLimit::Characters(128),
})
}
}
impl Dialect for Mssql {
fn name(&self) -> &'static str {
"mssql"
}
fn ack(&self, spec: &TableSpec<'_>) -> Result<Statement, StatementError> {
let mut sql = String::from("DELETE FROM ");
self.quote_into(self.named(spec.table())?, &mut sql);
sql.push_str(" WHERE ");
self.quote_into(self.named(spec.id().name())?, &mut sql);
sql.push_str(" = @p1");
Ok(Statement::new(sql, [Param::Id]))
}
}Variants§
Trait Implementations§
impl Copy for NameLimit
impl Eq for NameLimit
impl StructuralPartialEq for NameLimit
Auto Trait Implementations§
impl Freeze for NameLimit
impl RefUnwindSafe for NameLimit
impl Send for NameLimit
impl Sync for NameLimit
impl Unpin for NameLimit
impl UnsafeUnpin for NameLimit
impl UnwindSafe for NameLimit
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more