diesel/pg/
backend.rs

1//! The PostgreSQL backend
2
3use byteorder::NetworkEndian;
4
5use super::query_builder::PgQueryBuilder;
6use super::PgMetadataLookup;
7use backend::*;
8use prelude::Queryable;
9use query_builder::bind_collector::RawBytesBindCollector;
10use sql_types::{Oid, TypeMetadata};
11
12/// The PostgreSQL backend
13#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
14pub struct Pg;
15
16/// The [OIDs] for a SQL type
17///
18/// [OIDs]: https://www.postgresql.org/docs/current/static/datatype-oid.html
19#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Default)]
20pub struct PgTypeMetadata {
21    /// The [OID] of `T`
22    ///
23    /// [OID]: https://www.postgresql.org/docs/current/static/datatype-oid.html
24    pub oid: u32,
25    /// The [OID] of `T[]`
26    ///
27    /// [OID]: https://www.postgresql.org/docs/current/static/datatype-oid.html
28    pub array_oid: u32,
29}
30
31impl Queryable<(Oid, Oid), Pg> for PgTypeMetadata {
32    type Row = (u32, u32);
33
34    fn build((oid, array_oid): Self::Row) -> Self {
35        PgTypeMetadata { oid, array_oid }
36    }
37}
38
39impl Backend for Pg {
40    type QueryBuilder = PgQueryBuilder;
41    type BindCollector = RawBytesBindCollector<Pg>;
42    type RawValue = [u8];
43    type ByteOrder = NetworkEndian;
44}
45
46impl TypeMetadata for Pg {
47    type TypeMetadata = PgTypeMetadata;
48    type MetadataLookup = PgMetadataLookup;
49}
50
51impl SupportsReturningClause for Pg {}
52impl SupportsDefaultKeyword for Pg {}
53impl UsesAnsiSavepointSyntax for Pg {}