ormer 0.2.9

A minimalist ORM framework that supports SQLite, PostgreSQL, MySQL, and SqlServer
#![cfg(any(feature = "sqlite", feature = "postgresql"))]

use ormer::Model;

#[derive(Debug, Clone, ormer::Model)]
#[table = "hypertable_route_events_1"]
struct HypertableRouteEvent {
    #[primary]
    id: i64,
    payload: String,
    #[hypertable]
    #[ormer_ignore]
    tenant: String,
}

fn route_event(tenant: &str) -> HypertableRouteEvent {
    HypertableRouteEvent {
        id: 1,
        payload: "created".to_string(),
        tenant: tenant.to_string(),
    }
}

#[test]
fn string_hypertable_route_value_is_extracted_from_ignored_field() {
    assert_eq!(HypertableRouteEvent::COLUMNS, &["id", "payload"]);

    let route = route_event("acme").table_route().unwrap();
    assert_eq!(route.get("tenant"), Some("acme"));
}

#[cfg(feature = "sqlite")]
#[test]
fn sqlite_insert_ignores_string_hypertable_route() {
    let event = route_event("acme");
    let statement =
        ormer::abstract_layer::common::common_helpers::build_insert_statement_with_conflict::<
            HypertableRouteEvent,
        >(ormer::DbType::Sqlite, &[&event], None)
        .unwrap();

    assert_eq!(
        statement.0,
        "INSERT INTO hypertable_route_events_1 (id, payload) VALUES (?, ?)"
    );
}

#[cfg(feature = "sqlite")]
#[test]
fn sqlite_select_route_table_keeps_base_table() {
    let (sql, params) = HypertableRouteEvent::query()
        .route_table("tenant", "acme")
        .to_sql_with_params(ormer::DbType::Sqlite);

    assert_eq!(sql, "SELECT id, payload FROM hypertable_route_events_1");
    assert!(params.is_empty());
}

#[cfg(feature = "postgresql")]
#[test]
fn postgresql_insert_routes_string_hypertable_table() {
    let event = route_event("acme");
    let statement =
        ormer::abstract_layer::common::common_helpers::build_insert_statement_with_conflict::<
            HypertableRouteEvent,
        >(ormer::DbType::PostgreSQL, &[&event], None)
        .unwrap();

    assert_eq!(
        statement.0,
        "INSERT INTO hypertable_route_events_1_acme (id, payload) VALUES ($1, $2)"
    );
}

#[cfg(feature = "postgresql")]
#[test]
fn postgresql_select_routes_string_hypertable_table() {
    let (sql, params) = HypertableRouteEvent::query()
        .route_table("tenant", "acme")
        .to_sql_with_params(ormer::DbType::PostgreSQL);

    assert_eq!(
        sql,
        "SELECT id, payload FROM hypertable_route_events_1_acme"
    );
    assert!(params.is_empty());
}