secra-database 0.1.0

基于 SeaORM 的 Rust 数据库连接和管理库
Documentation
# Secra Database

一个基于 SeaORM 的 Rust 数据库连接和管理库,提供数据库连接、连接池、Schema 和表管理功能。

## 功能特性

- ✅ 数据库连接管理(PostgreSQL、MySQL、SQLite)
- ✅ 连接池管理和监控
- ✅ Schema 管理(PostgreSQL)
- ✅ 表信息查询和管理
- ✅ 安全的 URL 编码和配置验证
- ✅ 支持 PgBouncer
- ✅ 完整的错误处理

## 安装

在 `Cargo.toml` 中添加依赖:

```toml
[dependencies]
secra-database = { path = "../secra-database" }
# 或者从 git 仓库
# secra-database = { git = "https://github.com/your-org/secra-database" }
```

## 快速开始

### 基本连接

```rust
use secra_database::{DatabaseConfig, DatabaseService, ConnectionOptions};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = DatabaseConfig {
        database_type: "postgres".to_string(),
        host: "localhost".to_string(),
        port: 5432,
        username: "user".to_string(),
        password: "password".to_string(),
        database_name: "mydb".to_string(),
        schema: "public".to_string(),
        logging_level: "info".to_string(),
        use_pgbouncer: false,
    };

    // 验证配置
    DatabaseService::validate_config(&config)?;

    // 创建数据库连接
    let db = DatabaseService::init(&config, None).await?;

    // 测试连接
    DatabaseService::test_connection(&db).await?;

    Ok(())
}
```

### 自定义连接选项

```rust
use secra_database::{DatabaseConfig, DatabaseService, ConnectionOptions};

let config = DatabaseConfig { /* ... */ };

let options = ConnectionOptions {
    max_connections: 100,
    min_connections: 10,
    connect_timeout: 10,
    acquire_timeout: 10,
    idle_timeout: 600,
    max_lifetime: 1800,
    sqlx_logging: true,
};

let db = DatabaseService::init(&config, Some(options)).await?;
```

### 连接池监控

```rust
use secra_database::ConnectionPoolService;

// 获取连接池统计信息(需要提供最大和最小连接数)
let stats = ConnectionPoolService::get_pool_stats(&db, Some(100), Some(5)).await?;
println!("连接池统计: {:?}", stats);
```

### Schema 管理

```rust
use secra_database::SchemaService;

// 获取所有 Schema
let schemas = SchemaService::list_schemas(&db).await?;

// 获取指定 Schema 信息
let schema_info = SchemaService::get_schema_info(&db, "public").await?;
```

### 表管理

```rust
use secra_database::TableService;

// 获取所有表
let tables = TableService::list_tables(&db, Some("public")).await?;

// 获取表信息
let table_info = TableService::get_table_info(&db, Some("public"), "users").await?;

// 获取表列信息
let columns = TableService::get_table_columns(&db, Some("public"), "users").await?;
```

## 模块说明

- **connection**: 数据库连接管理,包括配置、连接创建和验证
- **pool**: 连接池管理和统计
- **schema**: Schema 管理(PostgreSQL)
- **table**: 表信息查询和管理
- **models**: 数据库模型相关功能

## 配置说明

### DatabaseConfig

- `database_type`: 数据库类型("postgres", "mysql", "sqlite")
- `host`: 数据库主机地址
- `port`: 数据库端口
- `username`: 数据库用户名
- `password`: 数据库密码
- `database_name`: 数据库名称
- `schema`: 默认 Schema(PostgreSQL,默认为 "public")
- `logging_level`: 日志级别("off", "error", "warn", "info", "debug", "trace")
- `use_pgbouncer`: 是否使用 PgBouncer(默认为 false)

### ConnectionOptions

- `max_connections`: 最大连接数(默认 300)
- `min_connections`: 最小连接数(默认 5)
- `connect_timeout`: 连接超时时间(秒,默认 8)
- `acquire_timeout`: 获取连接超时时间(秒,默认 8)
- `idle_timeout`: 空闲连接超时时间(秒,默认 600)
- `max_lifetime`: 连接最大生命周期(秒,默认 1800)
- `sqlx_logging`: 是否启用 SQL 日志(默认 true)

## 安全性

- ✅ Schema 名称验证,防止 SQL 注入
- ✅ URL 编码,确保特殊字符正确处理
- ✅ 配置验证,确保输入有效性
- ✅ 日志脱敏,避免密码泄露

## 支持的数据库

- PostgreSQL(完整支持)
- MySQL(基本支持)
- SQLite(基本支持)

## 运行示例

项目包含多个示例代码,演示如何使用库的各种功能:

```bash
# 基本连接示例
cargo run --example basic_connection

# 自定义连接选项示例
cargo run --example custom_options

# 连接池监控示例
cargo run --example pool_monitoring
```

**注意**:运行示例前,请确保:
1. 已安装并运行相应的数据库(PostgreSQL/MySQL/SQLite)
2. 修改示例中的数据库连接配置(主机、端口、用户名、密码等)

## 运行测试

```bash
# 运行所有测试
cargo test

# 运行特定模块的测试
cargo test --lib connection
```

## 许可证

[在此添加许可证信息]

## 贡献

欢迎提交 Issue 和 Pull Request!