You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: redis_store.rs
    path of file: ./repos/gluesql/storages/redis-storage/tests
    
    the code of the file until where you have to start completion: #![cfg(feature = "test-redis")]

use {
    async_trait::async_trait,
    gluesql_core::prelude::Glue,
    gluesql_redis_sto
    
async fn redis_storage_namespace() {
    use gluesql_core::prelude::Glue;

    let mut path = env::current_dir().unwrap();
    path.push("tests/redis-storage.toml");
    let redis_config_str = fs::read_to_string(path).unwrap();
    let redis_config: toml::Value = toml::from_str(&redis_config_str).unwrap();
    let url = redis_config["redis"]["url"].as_str().unwrap();
    let port: u16 = redis_config["redis"]["port"].as_integer().unwrap() as u16;

    let storage_first = RedisStorage::new("redis_storage_namespace_first", url, port);
    let mut glue_first = Glue::new(storage_first);

    let storage_second = RedisStorage::new("redis_storage_namespace_second", url, port);
    let mut glue_second = Glue::new(storage_second);

    exec!(glue_first "CREATE TABLE dummy (id INTEGER PRIMARY KEY);");
    exec!(glue_first "INSERT INTO dummy (id) values (1)");
    exec!(glue_first "INSERT INTO dummy (id) values (11)");

    exec!(glue_second "CREATE TABLE dummy (id INTEGER PRIMARY KEY);");
    exec!(glue_second "INSERT INTO dummy (id) values (2)");
    exec!(glue_second "INSERT INTO dummy (id) values (22)");

    exec!(glue_first "DROP TABLE dummy;");
    exec!(glue_second "DROP TABLE dummy;");
}