6个版本
0.3.3 | 2024年6月26日 |
---|---|
0.3.2 | 2024年6月26日 |
0.2.0 | 2024年6月26日 |
0.1.0 | 2024年6月26日 |
#604 在 数据库接口
36 每月下载量
用于 迁移
30KB
828 行
db_dsl
一组struct(Table, Column, Index, ForeignKey),通过ToSql trait转换为SQL。适用于rigz-db和migrations。
pub trait ToSql {
fn to_sqlite(&self) -> Option<String> {
None
}
fn to_sql(&self, dialect: Dialect) -> Option<String> {
match dialect {
Dialect::Sqlite => self.to_sqlite(),
}
}
}
用法
use db_dsl::{Table, Column, Index, ForeignKey, Dialect, ToSql};
use db_dsl::TableDefinition::{column, index, foreign_key, primary_key};
pub fn main() {
let table = Table::new("users", vec![
column(Column::new("name", DataType::String)),
index(Index::unique(vec!["name"])),
foreign_key(ForeignKey::new("accounts")),
]);
let sql = table.sql_up(Dialect::Sqlite).unwrap();
println!("{}", sql);
/**
* CREATE TABLE IF NOT EXISTS users (
* id BIGINT PRIMARY KEY AUTOINCREMENT,
* name TEXT,
* account_id BIGINT NOT NULL,
* );
* CREATE UNIQUE INDEX idx_users_name ON users (name);
* CREATE FOREIGN KEY fk_users_id (account_id) REFERENCES accounts (id);
*/
}
待办事项
- 更好地支持引用/外键,目前您必须手动添加accounts列
- 支持Postgres, MySQL和SQL Server
- 添加查询构建器
依赖项
~0.7–1.4MB
~28K SLoC