#sql-query #sqlx #conditional #macro #sqlx-conditional-queries #templating #layering

sqlx-conditional-queries-layering

Query templating for sqlx-conditional-queries

11 releases

0.1.10 Jul 9, 2024
0.1.9 Jun 20, 2024
0.1.2 May 31, 2024

#1648 in Database interfaces

MIT license

7KB
82 lines

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

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:

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.

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:

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.

Dependencies

You need to enable the macro_metavar_expr feature to use this library:

#![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

No runtime deps