toolu-orm-query 0.2.0

Type-safe query builders for toolu-orm
Documentation
# toolu-orm-query

Type-safe SQL query builders for toolu-orm. Provides Select, Insert, Update, and Delete builders with feature-gated database executors for libsql (async) or rusqlite (sync).

## Stack

- **Query Building:** toolu-orm-core (Expr, Column\<T\>, Value)
- **Execution:** libsql (async, default) or rusqlite (sync)
- **Async:** async-trait, tokio (feature: libsql)

## Architecture

```
src/
├── lib.rs                       # Module exports
├── select/
│   ├── builder.rs               # SelectBuilder (columns, joins, filters, order, limit)
│   └── executor_fetch.rs        # query_map extension methods (feature-gated)
├── insert.rs                    # InsertBuilder (set, or_replace, or_ignore)
├── update.rs                    # UpdateBuilder (set, set_expr, filter)
├── delete.rs                    # DeleteBuilder (filter)
├── executor.rs                  # Executor trait + database implementations
├── transaction.rs               # Transaction wrapper
├── where_clause.rs              # Filter macro + WHERE generation
├── error.rs                     # QueryError
└── exec_helpers.rs              # impl_execute! macro
```

## Usage

```rust
use toolu_orm_query::select::SelectBuilder;
use toolu_orm_query::insert::InsertBuilder;
use toolu_orm_core::query_column::CommonOps;

// Select with type-safe columns
let (sql, params) = SelectBuilder::new("users")
    .columns_typed(&[&users::columns::ID, &users::columns::EMAIL])
    .filter(users::columns::EMAIL.eq("alice@example.com"))
    .order_by(users::columns::CREATED_AT.desc())
    .limit(10)
    .to_sql();

// Insert
let rows = InsertBuilder::new("users")
    .set(&users::columns::ID, "uuid-123")
    .set(&users::columns::EMAIL, "alice@example.com")
    .execute(&conn)
    .await?;
```

## Development

```sh
cargo build -p toolu-orm-query
cargo nextest run -p toolu-orm-query
cargo clippy -p toolu-orm-query -- -D warnings
```