cquill 0.0.9

Versioned CQL migrations for Cassandra and ScyllaDB
Documentation
use super::*;

pub(crate) async fn create(
    session: &Session,
    keyspace_name: &String,
    table_name: &String,
) -> Result<(), QueryError> {
    let cql = format!("create table {keyspace_name}.{table_name} (id timeuuid primary key, ver smallint, name varchar, hash varchar)");
    session.query(cql, ()).await?;
    Ok(())
}

#[allow(dead_code)]
pub(crate) async fn drop(
    session: &Session,
    keyspace_name: &String,
    table_name: &String,
) -> Result<(), QueryError> {
    session
        .query(format!("drop table {keyspace_name}.{table_name}"), ())
        .await?;
    Ok(())
}

#[cfg(test)]
mod tests {
    use crate::test_utils;

    use super::*;

    #[tokio::test]
    async fn test_create_table() {
        let session = test_utils::cql_session().await;
        let keyspace_opts = test_utils::create_keyspace(&session).await;

        create(&session, &keyspace_opts.name, &String::from("migrated_cql"))
            .await
            .expect("creating table");

        keyspace::drop(&session, &keyspace_opts.name)
            .await
            .expect("drop keyspace");
    }

    #[tokio::test]
    async fn test_drop_table() {
        let harness = test_utils::TestHarness::builder().initialize().await;

        drop(
            &harness.session,
            &harness.cquill_keyspace,
            &harness.cquill_table,
        )
        .await
        .expect("drop table");
        drop(
            &harness.session,
            &harness.cquill_keyspace,
            &harness.cquill_table,
        )
        .await
        .expect_err("drop table");

        harness.drop_keyspace().await;
    }

    #[tokio::test]
    async fn test_create_table_errors_table_already_exists() {
        let session = test_utils::cql_session().await;
        let keyspace_opts = test_utils::create_keyspace(&session).await;
        let table_name = String::from("migrated_cql");
        create(&session, &keyspace_opts.name, &table_name)
            .await
            .expect("creating table");

        create(&session, &keyspace_opts.name, &table_name)
            .await
            .expect_err("creating table");

        keyspace::drop(&session, &keyspace_opts.name)
            .await
            .expect("drop keyspace");
    }
}