Built by @KipData ███████╗███╗ ██╗ ██████╗██╗ ██╗ ███████╗ ██████╗ ██╗ ██╔════╝████╗ ██║██╔════╝██║ ██╔╝ ██╔════╝██╔═══██╗██║ █████╗ ██╔██╗ ██║██║ █████╔╝ ███████╗██║ ██║██║ ██╔══╝ ██║╚██╗██║██║ ██╔═██╗ ╚════██║██║▄▄ ██║██║ ██║ ██║ ╚████║╚██████╗██║ ██╗ ███████║╚██████╔╝███████╗ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝ ╚══════╝ ╚══▀▀═╝ ╚══════╝ ----------------------------------- 🖕
FnckSQL individual developers independently implemented LSM KV-based SQL DBMS out of hobby. This SQL database will prove to you that anyone can write a database (even the core author cannot find a job). If you are also a database-related Enthusiastic, let us give this "beautiful" industry a middle finger🖕.
Welcome to our WebSite, Power By FnckSQL: http://www.kipdata.site/
Clone the repository
git clone https://github.com/KipData/FnckSQL.gitInstall rust toolchain first.
cargo run
Example
create table blog (id int primary key, title varchar unique);
insert into blog (id, title) values (0, 'FnckSQL'), (1, 'KipDB');
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;Using FnckSQL in code
let fnck_sql = Database::with_kipdb("./data").await?;
let tupes = db.run("select * from t1").await?;Storage Support:
- KipDB
- ORM Mapping:
features = ["marcos"]
#[derive(Default, Debug, PartialEq)]
struct MyStruct {
c1: i32,
c2: String,
}
implement_from_tuple!(
MyStruct, (
c1: i32 => |inner: &mut MyStruct, value| {
if let DataValue::Int32(Some(val)) = value {
inner.c1 = val;
}
},
c2: String => |inner: &mut MyStruct, value| {
if let DataValue::Utf8(Some(val)) = value {
inner.c2 = val;
}
}
)
);- Optimizer
- RBO
- CBO based on RBO(Physical Selection)
- Execute
- Volcano
- Codegen on LuaJIT:
features = ["codegen_execute"]
- MVCC Transaction
- Optimistic
- Field options
- [not] null
- unique
- primary key
- SQL where options
- is [not] null
- [not] like
- [not] in
- Supports index type
- Unique Index
- Supports multiple primary key types
- Tinyint
- UTinyint
- Smallint
- USmallint
- Integer
- UInteger
- Bigint
- UBigint
- Varchar
- DDL
- Create
- Table
- Index
- Drop
- Table
- Index
- Truncate
- Create
- DQL
- Select
- SeqScan
- IndexScan
- Where
- Distinct
- Alias
- Aggregation: count()/sum()/avg()/min()/max()
- SubQuery(from)
- Join: Inner/Left/Right/Full Cross(x)
- Group By
- Having
- Order By
- Limit
- Select
- DML
- Insert
- Insert Overwrite
- Update
- Delete
- Analyze
- DataTypes
- Invalid
- SqlNull
- Boolean
- Tinyint
- UTinyint
- Smallint
- USmallint
- Integer
- UInteger
- Bigint
- UBigint
- Float
- Double
- Varchar
- Date
- DateTime
FnckSQL uses the Apache 2.0 license to strike a balance between open contributions and allowing you to use the software however you want.
- Fedomn/sqlrs: Main reference materials, Optimizer and Executor all refer to the design of sqlrs
- systemxlabs/bustubx
- duckdb/duckdb