# `sqlx_conditional_queries_layering` This library provides a macro for handling query templates in conjunction with the `sqlx_conditional_queries` library. It simplifies the creation of SQL queries with conditional parameters. ### Basic Example ```rust let keehee = [Keehee::OwO, Keehee::UmU, Keehee::UwU] .choose(&mut rand::thread_rng()) .cloned() .unwrap_or_default(); create_conditional_query_as!( $keehee_query, #keehee = match keehee { Keehee::OwO => "owo", Keehee::UmU => "umu", Keehee::UwU => "uwu" } ); ``` This will generate an `keehee_query` macro. ### Using the generated query `keehee_query` is a template. You can use it to do an sqlx query: ```rust keehee_query!(BigID, "DO YOUR QUERY", #hey=match {...}) .fetch_one(&pool) .await; ``` We can further extend the template with aditional variables using the macro `supply_sql_variables_to_query_as`. ```rust supply_sql_variables_to_query_as!( $keehee_query as some_query, #name = match Fall::Through { _ => "{keehee_name}", } ); ``` In this example we create `some_query`, which is another macro that have the same template variables as `keehee_query` with the addition of `#name`. ### It does not stop here though! We can merge two queries into one through: ```rs merge_sql_query_as!($(a, b) as argsception); ``` This will merge all the template variables of `a` and `b` into a single `argsception` query! ## Note This macro relies on other macros from [`sqlx_conditional_queries`](https://docs.rs/sqlx_conditional_queries). ### Dependencies You need to enable the `macro_metavar_expr` feature to use this library: ```rs #![feature(macro_metavar_expr)] ``` You will also need to add the following dependencies to `Cargo.toml`: `sqlx_conditional_queries`, `paste`. You can do so easily, through: ``` cargo add sqlx_conditional_queries cargo add paste ``` ### See Also - [`sqlx_conditional_queries`](https://docs.rs/sqlx_conditional_queries)