8 个版本
0.0.1-alpha.8 | 2024 年 1 月 12 日 |
---|---|
0.0.1-alpha.6 | 2023 年 12 月 2 日 |
0.0.1-alpha.5 | 2023 年 11 月 25 日 |
0.0.1-alpha.3 | 2023 年 10 月 1 日 |
0.0.1-alpha.0 | 2023 年 9 月 30 日 |
#2543 在 数据库接口
27 每月下载量
1.5MB
15K SLoC
Built by @KipData ██╗ ██╗██╗██████╗ ███████╗ ██████╗ ██╗ ██║ ██╔╝██║██╔══██╗██╔════╝██╔═══██╗██║ █████╔╝ ██║██████╔╝███████╗██║ ██║██║ ██╔═██╗ ██║██╔═══╝ ╚════██║██║▄▄ ██║██║ ██║ ██╗██║██║ ███████║╚██████╔╝███████╗ ╚═╝ ╚═╝╚═╝╚═╝ ╚══════╝ ╚══▀▀═╝ ╚══════╝ ----------------------------------- Embedded SQL DBMS
轻量级嵌入式 OLTP 开源数据库
什么是 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许可证在开放贡献和使用软件的方式之间取得平衡。
感谢
- Fedomn/sqlrs:主要参考资料,优化器和执行器均参考了sqlrs的设计
- systemxlabs/bustubx
- duckdb/duckdb
依赖关系
~19–31MB
~440K SLoC