diesel_codegen 0.16.1

Custom derive and procedural macros for Diesel
Documentation
#![allow(dead_code, unused_must_use)]

#[cfg(feature = "sqlite")]
type Backend = ::diesel::sqlite::Sqlite;
#[cfg(feature = "mysql")]
type Backend = ::diesel::mysql::Mysql;
#[cfg(feature = "postgres")]
type Backend = ::diesel::pg::Pg;

#[test]
fn simple_belongs_to() {
    use diesel::*;

    table! {
        users {
            id -> Integer,
            name -> Text,
        }
    }

    table! {
        posts {
            id -> Integer,
            user_id -> Integer,
            title -> Text,
        }
    }

    #[derive(Identifiable)]
    pub struct User {
        id: i32,
        name: String
    }

    #[derive(Associations, Identifiable)]
    #[belongs_to(User)]
    pub struct Post {
        id: i32,
        user_id: i32,
        title: String,
    }

    joinable!(posts -> users(user_id));

    let _can_join_tables = posts::table.inner_join(users::table)
        .select((users::id, users::name, posts::id))
        .filter(posts::id.eq(1)
                .and(posts::user_id.eq(2))
                .and(posts::title.eq("Bar")));

    let _can_reverse_join_tables = users::table.inner_join(posts::table)
        .select((posts::id, posts::user_id, posts::title))
        .filter(users::id.eq(1)
                .and(users::name.eq("Sean")));

    let t = User { id: 42, name: "Sean".into() };

    let belong_to = Post::belonging_to(&t);
    let filter = posts::table.filter(posts::user_id.eq(42));

    assert_eq!(
        debug_query::<Backend, _>(&belong_to).to_string(),
        debug_query::<Backend, _>(&filter).to_string()
    );
}


#[test]
fn custom_foreign_key() {
    use diesel::*;

    table! {
        users {
            id -> Integer,
            name -> Text,
        }
    }

    table! {
        posts {
            id -> Integer,
            belongs_to_user -> Integer,
            title -> Text,
        }
    }

    #[derive(Identifiable)]
    pub struct User {
        id: i32,
        name: String
    }

    #[derive(Associations, Identifiable)]
    #[belongs_to(User, foreign_key = "belongs_to_user")]
    pub struct Post {
        id: i32,
        belongs_to_user: i32,
        title: String,
    }

    joinable!(posts -> users(belongs_to_user));


    let _can_join_tables = posts::table.inner_join(users::table)
        .select((users::id, users::name))
        .filter(posts::id.eq(1)
            .and(posts::belongs_to_user.eq(2))
                .and(posts::title.eq("Bar")));

    let _can_reverse_join_tables = users::table.inner_join(posts::table)
        .select((posts::id, posts::belongs_to_user, posts::title))
        .filter(users::id.eq(1)
                .and(users::name.eq("Sean")));

    let t = User { id: 42, name: "Sean".into() };

    let belong_to = Post::belonging_to(&t);
    let filter = posts::table.filter(posts::belongs_to_user.eq(42));

    assert_eq!(
        debug_query::<Backend, _>(&belong_to).to_string(),
        debug_query::<Backend, _>(&filter).to_string()
    );
}

#[test]
fn self_referential() {
    use diesel::*;

    table! {
        trees {
            id -> Integer,
            parent_id -> Nullable<Integer>,
        }
    }


    #[derive(Associations, Identifiable)]
    #[belongs_to(Tree, foreign_key = "parent_id")]
    pub struct Tree {
        id: i32,
        parent_id: Option<i32>,
    }
    let t = Tree { id: 42, parent_id: None };

    let belong_to = Tree::belonging_to(&t);
    let filter = trees::table.filter(trees::parent_id.eq(42));
    assert_eq!(
        debug_query::<Backend, _>(&belong_to).to_string(),
        debug_query::<Backend, _>(&filter).to_string()
    );
}