use crate::dialect::DialectId;
#[derive(Debug, Clone, Copy)]
pub struct DialectCaps {
pub returning_in_insert: bool,
pub returning_in_update: bool,
pub returning_in_delete: bool,
pub create_sequence: bool,
pub on_duplicate_key_update: bool,
pub on_conflict: bool,
pub mariadb_raw_native: bool,
}
const NONE: DialectCaps = DialectCaps {
returning_in_insert: false,
returning_in_update: false,
returning_in_delete: false,
create_sequence: false,
on_duplicate_key_update: false,
on_conflict: false,
mariadb_raw_native: false,
};
pub const MYSQL: DialectCaps = DialectCaps {
on_duplicate_key_update: true,
..NONE
};
pub const MARIADB: DialectCaps = DialectCaps {
returning_in_insert: true,
returning_in_update: true,
returning_in_delete: true,
create_sequence: true,
on_duplicate_key_update: true,
mariadb_raw_native: true,
..NONE
};
pub const POSTGRES: DialectCaps = DialectCaps {
returning_in_insert: true,
returning_in_update: true,
returning_in_delete: true,
create_sequence: true,
on_conflict: true,
..NONE
};
pub const MSSQL: DialectCaps = DialectCaps {
create_sequence: true,
..NONE
};
pub const SQLITE: DialectCaps = DialectCaps {
returning_in_insert: true,
returning_in_update: true,
returning_in_delete: true,
on_conflict: true,
..NONE
};
pub const GENERIC: DialectCaps = DialectCaps {
returning_in_insert: true,
returning_in_update: true,
returning_in_delete: true,
create_sequence: true,
on_duplicate_key_update: true,
on_conflict: true,
..NONE
};
pub fn caps_for(dialect: DialectId) -> DialectCaps {
match dialect {
DialectId::MySql => MYSQL,
DialectId::MariaDb => MARIADB,
DialectId::Postgres => POSTGRES,
DialectId::MsSql => MSSQL,
DialectId::Sqlite => SQLITE,
DialectId::Generic => GENERIC,
}
}