Skip to content

RkGrit/FnckSQL

 
 

Repository files navigation

Built by @KipData


███████╗███╗   ██╗ ██████╗██╗  ██╗    ███████╗ ██████╗ ██╗     
██╔════╝████╗  ██║██╔════╝██║ ██╔╝    ██╔════╝██╔═══██╗██║     
█████╗  ██╔██╗ ██║██║     █████╔╝     ███████╗██║   ██║██║     
██╔══╝  ██║╚██╗██║██║     ██╔═██╗     ╚════██║██║▄▄ ██║██║     
██║     ██║ ╚████║╚██████╗██║  ██╗    ███████║╚██████╔╝███████╗
╚═╝     ╚═╝  ╚═══╝ ╚═════╝╚═╝  ╚═╝    ╚══════╝ ╚══▀▀═╝ ╚══════╝

-----------------------------------
🖕

Lightweight DBMS

 

CI

github star github fork

What is FnckSQL

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/

Quick Started

Tips: Install rust toolchain first.

Clone the repository

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

start then use psql to enter sql pg Using FnckSQL in code

let fnck_sql = DataBaseBuilder::path("./data")
    .build()
    .await?;
let tuples = fnck_sql.run("select * from t1").await?;

Storage Support:

  • KipDB

Docker

Pull Image

docker pull kould23333/fncksql:latest

Build From Source

git clone https://github.com/KipData/FnckSQL.git
cd FnckSQL
docker build -t kould23333/fncksql:latest .

Run

We installed the psql tool in the image for easy debug.

You can use psql -h 127.0.0.1 -p 5432 to do this.

docker run -d \
--name=fncksql \
-p 5432:5432 \
--restart=always \
-v fncksql-data:/fnck_sql/fncksql_data \
-v /etc/localtime:/etc/localtime:ro \
kould23333/fncksql:latest

Features

  • 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;
            }
        }
    )
);
  • User-Defined Function: features = ["marcos"]
function!(TestFunction::test(LogicalType::Integer, LogicalType::Integer) -> LogicalType::Integer => |v1: ValueRef, v2: ValueRef| {
    let plus_binary_evaluator = EvaluatorFactory::binary_create(LogicalType::Integer, BinaryOperator::Plus)?;
    let value = plus_binary_evaluator.binary_eval(&v1, &v2);

    let plus_unary_evaluator = EvaluatorFactory::unary_create(LogicalType::Integer, UnaryOperator::Minus)?;
    Ok(plus_unary_evaluator.unary_eval(&value))
});

let fnck_sql = DataBaseBuilder::path("./data")
    .register_function(TestFunction::new())
    .build()
    .await?;
  • 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
    • PrimaryKey
    • Unique
    • Normal
    • Composite
  • Supports multiple primary key types
    • Tinyint
    • UTinyint
    • Smallint
    • USmallint
    • Integer
    • UInteger
    • Bigint
    • UBigint
    • Char
    • Varchar
  • DDL
    • Begin (Server only)
    • Commit (Server only)
    • Rollback (Server only)
    • Create
      • Table
      • Index: Unique\Normal\Composite
    • Drop
      • Table
      • Index
    • Alert
      • Add Column
      • Drop Column
    • Truncate
  • DQL
    • Select
      • SeqScan
      • IndexScan
    • Where
    • Distinct
    • Alias
    • Aggregation: count()/sum()/avg()/min()/max()
    • SubQuery[select/from/where]
    • Join: Inner/Left/Right/Full/Cross (Natural\Using)
    • Group By
    • Having
    • Order By
    • Limit
    • Show Tables
    • Explain
    • Describe
    • Union
  • DML
    • Insert
    • Insert Overwrite
    • Update
    • Delete
    • Analyze
  • DataTypes
    • Invalid
    • SqlNull
    • Boolean
    • Tinyint
    • UTinyint
    • Smallint
    • USmallint
    • Integer
    • UInteger
    • Bigint
    • UBigint
    • Float
    • Double
    • Char
    • Varchar
    • Date
    • DateTime
    • Time
    • Tuple

Roadmap

  • SQL 2016

License

FnckSQL uses the Apache 2.0 license to strike a balance between open contributions and allowing you to use the software however you want.

Contributors

Thanks For

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.9%
  • Dockerfile 0.1%