5 个版本
0.2.0 | 2019 年 2 月 26 日 |
---|---|
0.1.3 | 2019 年 2 月 15 日 |
0.1.2 | 2019 年 2 月 14 日 |
0.1.1 | 2019 年 2 月 12 日 |
0.1.0 | 2019 年 2 月 11 日 |
#261 在 数据库实现
590KB
374 代码行,不包括注释
包含 (WOFF 字体, 82KB) fontawesome-webfont.woff, (WOFF 字体, 65KB) fontawesome-webfont.woff2
Kiln v0.2
Kiln 是一个用 Rust 实现的关系型数据库。与 PostgreSQL 和 SQLite 等数据库不同,Kiln 不基于客户端-服务器模型。相反,它是一个独立的库,允许它无依赖项使用。
这是数据库的早期版本。到目前为止,唯一完成的事情是格式化数据库存储表。
有一个高级的 指南,它提供了 Kiln 的介绍。
已实现的功能
- 创建数据库
- 创建和访问现有表
- 从表中访问行
- 通过行 ID
- 通过值(例如:找到所有 foo = bar 的行)
- 解析 specfiles 以获得类型安全的列
- 从表中访问行
- 访问行
- 从行获取列
- 在行中设置列
路线图
- 实现 O(1) 连接(说起来容易做起来难)
- 使所有这些线程安全,并支持异步(可能是 futures)
用法
以下是一个与一个简单表一起工作的简单示例。查询的结构与传统 SQL 数据库中的实现非常不同。这种独特的结构使得可以使用表达式的 Rust 代码轻松与数据库交互。
#[macro_use]
extern crate kiln;
fn main() {
// Create a new database in the `data` dir
let db = kiln::Db::new("data").expect("Failed to create or access db");
// Create or access a table "users" with col types int and string
let users = db.table("users", table!{
age: i32,
name: str
}).expect("Table with same name exists with different spec");
// Insert a row into the users table
let mut bob = users.insert(row!{
name: "Bob",
age: 24
}).expect("Could not insert row");
users.insert(row!{
name: "Jeff",
age: 24
}).expect("Failed to insert");
println!("Bob is {} years old", bob["age"].i32().unwrap());
//=> Bob is 24 years old
bob.set("age", 42);
println!("Bob is now {} years old", bob["age"].i32().unwrap());
for user in users.get("age", 24) {
println!("24 year old named {}", user["name"].string().unwrap());
}
//=> 24 year old named Jeff
}