kitx 0.0.7

A lightweight wrapper for database operations based on sqlx, enabling fast CRUD operations.
Documentation
# KitX - Lightweight SQL Builder for Rust


A minimalistic SQL builder library based on [sqlx](https://crates.io/crates/sqlx), supporting SQLite, MySQL/MariaDB, and PostgreSQL. It offers efficient database operations with soft delete capabilities and global filters, enabling developers to interact with databases more effectively.

## Features


### Core Functionality

- **Efficient CRUD Operations**  
  `insert_one`, `insert_many`, `update_one`, `update_many`, `delete_one`, `delete_many` with transaction support

- **Advanced Queries**  
  `fetch_all`, `fetch_by_key`, `fetch_one`, `fetch_paginated`, `fetch_by_cursor`, `exists`, `count`

- **Soft Delete Management**  
  `restore_one`, `restore_many` with global configuration

- **Flexible Query Building**  
  Supports JOINs, CASE WHEN, aggregations, and custom SQL extensions

### Key Advantages

- 🚀 **No ORM Overhead** - Direct SQL interaction with builder pattern  
- 🔧 **Field Access API** - Utilizes [field_access]https://crates.io/crates/field_access for field operations  
- 🌍 **Global Filters** - Apply tenant ID or soft delete filters across all queries  
- 📦 **Extensible** - Easily add custom operations and query modifiers  

## Quick Start


### 1. Add Dependency

```toml
# Default SQL Builder

kitx = "0.0.7"

# For SQLite only

kitx = { version = "0.0.7", features = ["sqlite"] }

# For MySQL/MariaDB only

kitx = { version = "0.0.7", features = ["mysql"] }

# For PostgreSQL only

kitx = { version = "0.0.7", features = ["postgres"] }
```

### 2. Basic Usage

```rust
use kitx::sqlite::{sql::QueryBuilder, sql::field, operations::Operations};

// SQL Builder Example
let query = QueryBuilder::select("users", &["id", "name"])
    .filter(field("age").eq(23))
    .filter(field("salary").gt(4500))
    .or(field("status").in_vec(vec!["active", "pending"]))
    .order_by("created_at", false)
    .build_mut().0;

// CRUD Operations
let op = Operations::new("articles", ("article_id", true));
let article = Article {
    id: 42,
    title: "Rust Best Practices".into(),
    content: "...".into(),
};

// Insert with transaction
op.insert_one(article, true).await?;
```

### 3. Pagination Example

```rust
let results = op.fetch_paginated(10, 2, QueryCondition.empty()).await?;

let results = op.fetch_by_cursor(10, QueryCondition.from(..)).await?;

```

### 4. Optional: Global Configuration

```rust
// Soft delete configuration
set_global_soft_delete_field("deleted_at", vec!["audit_logs"]);

// Global_filter is applied on a per-thread basis.
// Multi-tenant filtering
set_global_filter(field("tenant_id").eq(123)), vec!["system_metrics"]);
```

## License

MIT License