kip-sql

Crates.iokip-sql
lib.rskip-sql
version0.0.1-alpha.8
sourcesrc
created_at2023-09-30 17:19:22.044669
updated_at2024-01-12 18:12:23.943931
descriptionbuild the SQL layer of KipDB database
homepage
repositoryhttps://github.com/KipData/KipSQL
max_upload_size
id988747
size1,807,801
Kould (KKould)

documentation

README

Built by @KipData

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

The Lightweight Embedded OLTP Open-source Database

  CI    

github star github fork

What is KipSQL

KipSQL is designed to allow small Rust projects to reduce external dependencies and get rid of heavy database maintenance, so that the Rust application itself can provide SQL storage capabilities.

If you are a developer of the following applications, we very much welcome you to try using KipSQL and provide your experience and opinions on using it.

  • personal website
  • desktop/mobile application
  • learning database
  • platform bot

Welcome to our WebSite, Power By KipSQL: http://www.kipdata.site/

Quick Started

Clone the repository

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

Install rust toolchain first.

cargo run

Example

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;

Using KipSQL in code

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

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

Storage Support:

  • KipDB

Features

  • ORM Mapping: 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;
        }
    }
));
  • Execute
    • Volcano
    • Codegen on LuaJIT: features = ["codegen_execute"]
  • MVCC Transaction
    • Optimistic
  • SQL field options
    • not null
    • null
    • unique
    • primary key
  • SQL where options
    • is null
    • is not null
    • like
    • not like
    • in
    • 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
  • 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
  • DML
    • Insert
    • Insert Overwrite
    • Update
    • Delete
  • DataTypes
    • Invalid
    • SqlNull
    • Boolean
    • Tinyint
    • UTinyint
    • Smallint
    • USmallint
    • Integer
    • UInteger
    • Bigint
    • UBigint
    • Float
    • Double
    • Varchar
    • Date
    • DateTime
  • Optimizer rules
    • Limit Project Transpose
    • Eliminate Limits
    • Push Limit Through Join
    • Push Limit Into Scan
    • Combine Filters
    • Column Pruning
    • Collapse Project

License

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

Thanks For

Commit count: 215

cargo fmt