#sql-database #sql #persistence #async

nightly bin+lib kip-sql

构建 KipDB 数据库的 SQL 层

8 个版本

0.0.1-alpha.82024 年 1 月 12 日
0.0.1-alpha.62023 年 12 月 2 日
0.0.1-alpha.52023 年 11 月 25 日
0.0.1-alpha.32023 年 10 月 1 日
0.0.1-alpha.02023 年 9 月 30 日

#2543数据库接口

27 每月下载量

Apache-2.0

1.5MB
15K SLoC

Built by @KipData

██╗  ██╗██╗██████╗ ███████╗ ██████╗ ██╗
██║ ██╔╝██║██╔══██╗██╔════╝██╔═══██╗██║
█████╔╝ ██║██████╔╝███████╗██║   ██║██║
██╔═██╗ ██║██╔═══╝ ╚════██║██║▄▄ ██║██║
     ██║  ██╗██║██║     ███████║╚██████╔╝███████╗
     ╚═╝  ╚═╝╚═╝╚═╝     ╚══════╝ ╚══▀▀═╝ ╚══════╝
-----------------------------------
Embedded SQL DBMS

轻量级嵌入式 OLTP 开源数据库

  CI    

github star github fork

什么是 KipSQL

KipSQL 设计用于允许小型 Rust 项目减少外部依赖并摆脱沉重的数据库维护,从而使 Rust 应用程序本身能够提供 SQL 存储功能。

如果您是以下应用程序的开发者,我们非常欢迎您尝试使用 KipSQL 并提供您使用它的经验和意见。

  • 个人网站
  • 桌面/移动应用程序
  • 学习数据库
  • 平台机器人

欢迎来到我们的网站,由 KipSQL 提供: http://www.kipdata.site/

快速入门

克隆存储库

git clone https://github.com/KipData/KipSQL.git

首先安装 rust 工具链。

cargo run

示例

create table blog (id int primary key, title varchar unique);

insert into blog (id, title) values (0, 'KipSQL'), (1, 'KipDB'), (2, 'KipBlog');

update blog set title = 'KipData' where id = 2;

select * from blog order by title desc nulls first

select count(distinct id) from blog;

delete from blog where title like 'Kip%';

truncate table blog;

drop table blog;

在代码中使用 KipSQL

let kipsql = Database::with_kipdb("./data").await?;

let tupes = db.run("select * from t1").await?;

存储支持

  • KipDB

功能

  • ORM 映射: features = ["marcos"]
#[derive(Debug, Clone, Default)]
pub struct Post {
    pub post_title: String,
    pub post_date: NaiveDateTime,
    pub post_body: String,
}

implement_from_tuple!(Post, (
    post_title: String => |post: &mut Post, value: DataValue| {
        if let Some(title) = value.utf8() {
            post.post_title = title;
        }
    },
    post_date: NaiveDateTime => |post: &mut Post, value: DataValue| {
        if let Some(date_time) = value.datetime() {
            post.post_date = date_time;
        }
    },
    post_body: String => |post: &mut Post, value: DataValue| {
        if let Some(body) = value.utf8() {
            post.post_body = body;
        }
    }
));
  • 执行
    • 火山
    • 在 LuaJIT 上代码生成: features = ["codegen_execute"]
  • MVCC 事务
    • 乐观
  • SQL 字段选项
    • 非空
    • 唯一
    • 主键
  • SQL WHERE 选项
    • 是空
    • 非空
    • 不象
    • 在...之内
    • 不在...之内
  • 支持索引类型
    • 唯一索引
  • 支持多种主键类型
    • tinyint
    • utinyint
    • smallint
    • usmallint
    • integer
    • uinteger
    • bigint
    • ubigint
    • varchar
  • DDL
    • 创建
      • 索引
    • 删除
      • 索引
    • 截断
  • DQL
    • 选择
      • 顺序扫描
      • 索引扫描
    • WHERE
    • 唯一
    • 别名
    • 聚合:count()/sum()/avg()/min()/max()
    • 子查询(from)
    • 连接:内连接/左连接/右连接/全外连接(x)
    • GROUP BY
    • HAVING
    • ORDER BY
    • LIMIT
  • DML
    • 插入
    • 插入覆盖
    • 更新
    • 删除
  • 数据类型
    • 无效
    • SqlNull
    • 布尔
    • tinyint
    • utinyint
    • smallint
    • usmallint
    • integer
    • uinteger
    • bigint
    • ubigint
    • 浮点
    • 双精度浮点
    • varchar
    • 日期
    • 日期时间
  • 优化器规则
    • 限制/投影/转置
    • 消除限制
    • 通过连接推送限制
    • 将限制推入扫描
    • 合并过滤器
    • 列剪枝
    • 折叠投影

许可证

KipSQL使用Apache 2.0许可证在开放贡献和使用软件的方式之间取得平衡。

感谢

依赖关系

~19–31MB
~440K SLoC