#数据库 #关系型 #

nightly bin+lib kiln

仅库的关系型数据库

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数据库实现

GPL-3.0 许可证

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
}

依赖项