sqlb is a simple and expressive SQLBuilder for Rust for sqlx focused on PostgreSQL (for now).

NOTE: SQL Builders are typically not used directly by application business logic, but rather to be wrapped in some Application Model Access Layer (e.g., DAOs or MCs - Model Controller -). Even when using ORMs, it is often a good code design to wrap those access via some data access layers.

Goals for first 0.x.x releases:

Early API Example (just conceptual for now)

``rust //sqlx::FromRowallows to do sqlx_exec::fetch_as... //sqlb::Fieldsallows to have: // -toto.fields()(name, value)[] (only direct or NOT Not values) // -Todo::field_names()here would return["id", "title"]`

[derive(sqlx::FromRow, sqlb::Fields)]

pub struct Todo { id: i64,

title: String,
desc: Option<String>,

#[skip_field]
someting_else: String,

}

[derive(sqlb::Fields)]

pub struct TodoForCreate { title: String, desc: Option,

#[skip_field]
someting_else: String,

}

[derive(sqlb::Fields)]

pub struct TodoForUpdate { title: Option, desc: Option, }

// -- Create new row let todoc = TodoForCreate { title: "title 01".tostring(), desc: "desc 01".tostring() }; // will update all fields specified in TodoForCreate let sb = sqlb::insert().table("todo").data(todoc.allfields()); let sb = sb.returning(&["id", "title"]); let (id, title) = sb.fetchone::<_, (i64, String)>(&dbpool).await?;

// -- Select let sb = sqlb::select().table("todo").columns(Todo::fieldnames()).orderby("!id"); let todos: Vec = sb.fetchasall(&db_pool).await?;

// -- Update let todou - TodoForUpdate { desc: "Updated desc 01".tostring()}; let sb = sqlb::update().table("todo").data(todou.notnonefields()).andwhereeq("id", 123); let rowaffected = sb.exec(&db_pool).await?; // will not update .title because of the use of .not_none_fields(). ```

Latest Breaking Changes

For sqlb Dev

Start a PostgreSQL

```sh

In terminal 1 - start postges

docker run --rm --name pg -p 5432:5432 -e POSTGRES_PASSWORD=welcome postgres:14

In terminal 2 - (optional) launch psql on the Postgres instance above

docker exec -it -u postgres pg psql

In terminal 3 -

cargo test

or watch a particular test target

cargo watch -q -c -x 'test --test testsbinsert ```