IMPORTANT - Still experimental and extremely incomplete. All 0.0.x version will be experimental and probably break APIs in each release

sqlb is intended to be a simple and progressive SQLBuilder for Rust, independent from database SQL executor.

NOTE: SQL Builders are typically not to be used directly by application business logic, but rather to be wrapped in some sort of Application Data Access Layer (DAOs, DM, patterns).

Scope for first 0.1.x releases:

Early API Example (just conceptual for now)

Insert:

rust let sb = sqlb::insert("todo").data(patch_data.fields()); let sb = sb.returning(&["id", "title"]); let (_id, title) = sqlb::sqlx_exec::fetch_as_one::<(i64, String), _>(&db_pool, &sb).await?;

Select:

rust let sb = sqlb::select("todo").columns(&["id", "title"]).order_by("!id"); let todos: Vec<Todo> = sqlb::sqlx_exec::fetch_as_all(&db_pool, &sb).await?; assert_eq!(1, todos.len());

The data setup:

```rust

[derive(sqlx::FromRow)] // Optional: to be able to use the sqlxexec::fetchas...

pub struct Todo { pub id: i64, pub title: String, }

pub struct TodoPatch { pub title: Option, }

impl GetFields for TodoPatch { fn fields(&self) -> Vec { let mut fields = Vec::new(); if let Some(title) = &self.title { fields.push(Field::from_string("title", title)); } fields } } ```

For sqlb Dev

Start a postgressql

```sh

In terminal 1 - start postges

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

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

docker exec -it -u postgres pg psql

In terminal 3 - MUST run with --test-threads=1 to avoid database access conflicts

cargo test -- --test-threads=1

or watch a particular test target

cargo watch -q -c -x 'test --test testsbinsert -- --test-threads=1' ```