blob: 5b852e7b172a8fdbcd0ca61a3d038326c4faf448 [file] [log] [blame]
//! The PostgreSQL backend
use byteorder::NetworkEndian;
use super::query_builder::PgQueryBuilder;
use super::{PgMetadataLookup, PgValue};
use crate::backend::*;
use crate::deserialize::Queryable;
use crate::query_builder::bind_collector::RawBytesBindCollector;
use crate::sql_types::{Oid, TypeMetadata};
/// The PostgreSQL backend
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct Pg;
/// The [OIDs] for a SQL type
///
/// [OIDs]: https://www.postgresql.org/docs/current/static/datatype-oid.html
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Default)]
pub struct PgTypeMetadata {
/// The [OID] of `T`
///
/// [OID]: https://www.postgresql.org/docs/current/static/datatype-oid.html
pub oid: u32,
/// The [OID] of `T[]`
///
/// [OID]: https://www.postgresql.org/docs/current/static/datatype-oid.html
pub array_oid: u32,
}
impl Queryable<(Oid, Oid), Pg> for PgTypeMetadata {
type Row = (u32, u32);
fn build((oid, array_oid): Self::Row) -> Self {
PgTypeMetadata { oid, array_oid }
}
}
impl Backend for Pg {
type QueryBuilder = PgQueryBuilder;
type BindCollector = RawBytesBindCollector<Pg>;
type ByteOrder = NetworkEndian;
}
impl<'a> HasRawValue<'a> for Pg {
type RawValue = PgValue<'a>;
}
impl TypeMetadata for Pg {
type TypeMetadata = PgTypeMetadata;
type MetadataLookup = PgMetadataLookup;
}
impl SupportsReturningClause for Pg {}
impl SupportsDefaultKeyword for Pg {}
impl UsesAnsiSavepointSyntax for Pg {}