Gluesql Versions Save

GlueSQL is quite sticky. It attaches to anywhere.

v0.15.0

5 months ago

🌊 Breaking Changes

πŸ€ Python Support

Code Samples

from gluesql import Glue, MemoryStorage
from tabulate import tabulate

db = Glue(MemoryStorage())

sql = """
    SELECT
    u.name as user,
    d.name as device
    FROM User u
    JOIN Device d ON u.id = d.userId
""".strip().replace(
    "    ", ""
)

result = db.query(sql)
rows = result[0].get("rows")
print(f"\n[Query]\n{sql}")
print(tabulate(rows, headers="keys", showindex=True, tablefmt="simple_outline"))

πŸ€ Redis Storage

πŸ€ CSV Storage

πŸ€ More operators and functions

πŸš€ Features

  • feat: implement select iterator utility function @ever0de (#1429)

🌟 Improvements

  • Fix parsing of BigDecimal literals with zero fraction part as floats, not integer @zmrdltl (#1416)
  • Update docs/ast-builder padding.md code block lang keyword, @panarch (#1436)
  • Support StoreMut trait to Optional @seonghun-dev (#1435)
  • docs: write docmentation for padding @devgony (#1434)
  • test: add test cases for astb-padding @devgony (#1433)
  • Upgrade to chrono v0.4.31 and adjust millisecond value in Timestamp Creation @zmrdltl (#1427)
  • Remove unnecessary comments in evalaute/function.rs @panarch (#1431)
  • write docmentation for character_conversion @devgony (#1428)
  • docs: Add SLICE function doc @fregataa (#1425)
  • test: add cases to character_conversion @devgony (#1424)
  • docs:Add doc about SPLICE function @jinlee0 (#1423)
  • Change store RowIter type from Iterator to Stream @panarch (#1419)
  • Reflect Deprecation of from_utc in Crate chrono @zmrdltl (#1415)
  • Remove eval_to_{int|float..} macro uses in core/../evaluate/function.rs, @panarch (#1361)
  • test: write example for ast builder @daengdaengLee (#1259)
  • Fix merge conflict in data/value/mod.rs @panarch (#1406)
  • chore: implement ConvertError, @ever0de (#1401)
  • refactor: remove implementation of from Value trait for Evaluated @tgsong827 (#1399)
  • refactor: update function module's namespacing in ast_builder @tgsong827 (#1398)
  • chore: remove Result from ast_builder::transaction return type @ever0de (#1404)
  • chore: bump rust version to 1.72 @ever0de (#1388)
  • chore: add example of convert from payload to custom struct @ever0de (#1379)
  • Update Chrono version to 0.4.26, @panarch (#1374)
  • Update test-suite Tester::run to return Payload, @panarch (#1373)
  • Remove .unwrap() uses in test-suite/ test codes, @panarch (#1372)
  • Replace run!, test! and count! macros in test-suite to Tester methods, @panarch (#1368)
  • Update coverage.yml gh-action to ignore await only lines, @panarch (#1370)
  • Apply pretty_assertions::assert_eq! to core/ ast_builder unit tests @panarch (#1369)
  • Simplify value evaluate cmp with literal @panarch (#1353)
  • Update gh-action author assign - add zmrdltl to reviewers @panarch (#1342)
  • Refactor GCD and LCM functions @cake-monotone (#1331)
  • Refactor write_rows @devgony (#1319)
  • Js pkg wasm pack build not to generate readme and packagejson @panarch (#1327)
  • Update pkg/javascript dist directories to use dist_web/ and dist_node… @panarch (#1326)
  • Upgrade bigdecimal to 0.4.1, sqlparser to 0.36.1 @jinlee0 (#1322)
  • Update wasm-pack-action version to 0.4.0, @panarch (#1316)
  • Update JavaScript package load_indexeddb method to get namespace as a… @panarch (#1320)
  • Upgrade sqlparser-rs version to 0.35, @panarch (#1292)
  • Remove unused error variant in JsonStorage @panarch (#1278)
  • Implement CAST text literal or value to MAP or LIST, @panarch (#1267)
  • Simplity JsonStorage Store::fetch_all_schemas codes, @panarch (#1264)
  • Change console.log in gluesql.js -> console.debug @parkma99 (#1256)
  • Replace actions-rs/toolchain with dtolnay/rust-toolchain @jongwooo (#1251)
  • ci: Automatically assign a PR to its author @rapsealk (#1253)
  • Remove sync methods in core/ Glue struct, @panarch (#1247)
  • Remove test function in test-suite tester, @panarch (#1246)
  • fix: allow interval cast-related functions to accept only literals instead of evaluations @ever0de (#1238)
  • Split custom Partial{Eq|Ord} impl of Value & Literal into evaluate_{eq|cmp} @panarch (#1233)
  • Improve example codes formatting @jopemachine (#1235)
  • feat: fmt list and map @Mehrbod2002 (#1226)
  • Update README.md - add blog article links @panarch (#1232)
  • Write the blog article - revolutionizing databases by unifying the qu… @panarch (#1231)
  • Write the blog article - test driven documentation @panarch (#1229)
  • Write the blog article - breaking the boundary between sql and nosql … @panarch (#1228)
  • Add test and doc for ast-builder::statements::querying::data-aggregation @devgony (#1224)

πŸ› Bug Fixes

  • fix: Literal comparison with BinaryOperator @ding-co (#1397)
  • fix: update Key.cmp to compare a type with other type @tgsong827 (#1367)
  • Fix Value::evaluate_cmp_with_literal between Decimal and Literal::Num… @panarch (#1352)
  • Fix spool on tabular off and SelectMap @devgony (#1314)
  • Update auto-assign-action to be triggered on PR open from fork repos @panarch (#1313)
  • Fix Scala Subquery should contain only 1 column @ChobobDev (#1284)
  • Wrap config path by quotes in auto-author-assign.yml @panarch (#1258)
  • Apply word-wrap to docs/ article h1 @panarch (#1230)
  • Fix docusaurus.config.js themeConfig handler @panarch (#1225)

πŸ‘ New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.14.0...v0.15.0

v0.14.0

11 months ago

We now provide an official documentation website at https://gluesql.org/docs

πŸš€ Features

πŸ€ Schemaless data support

GlueSQL now supports creating tables without a schema, allowing for both structured and unstructured data to be stored in the same table. To create a schemaless table, simply run CREATE TABLE without specifying any columns. For more information on querying schemaless data, please refer to the following link: querying schemaless data

CREATE TABLE Bar;

To insert values,

INSERT INTO Bar VALUES
    ('{ "name": "ast", "value": 30 }'),
    ('{ "name": "glue", "rate": 3.0, "list": [1, 2, 3] }'),

Then, selecting values from schemaless table is simple.

SELECT name, rate, list[0] FROM Bar WHERE name = 'glue';

e.g.

CREATE TABLE Names (id INTEGER, name TEXT);
INSERT INTO Names VALUES (1, 'glue'), (2, 'sql');

CREATE TABLE Logs;
INSERT INTO Logs VALUES
    ('{ "id": 1, "value": 30 }'),
    ('{ "id": 2, "rate": 3.0, "list": [1, 2, 3] }'),
    ('{ "id": 3, "rate": 5.0, "value": 100 }');

SELECT * FROM Names JOIN Logs ON Names.id = Logs.id;
/*
| id | list    | name | rate | value |
|----|---------|------|------|-------|
| 1  |         | glue |      | 30    |
| 2  |[1, 2, 3]| sql  | 3    |       |
*/

πŸ€ IndexedDB & WebStorage supports in JavaScript package

GlueSQL supports handling in-memory, localStorage, sessionStorage, and even IndexedDB using the same SQL syntax. All you need to know is how to specify the ENGINE when creating a table.

e.g.

CREATE TABLE Mem (mid INTEGER) ENGINE = memory;
CREATE TABLE Loc (lid INTEGER) ENGINE = localStorage;
CREATE TABLE Ses (sid INTEGER) ENGINE = sessionStorage;
CREATE TABLE Idb (iid INTEGER) ENGINE = indexedDB;

SELECT
    mid, lid, sid, iid 
FROM Mem
JOIN Loc
JOIN Ses
JOIN Idb;

πŸ€ Data Types - UINT32, UINT64, UINT128, POINT and FLOAT32

πŸ€ Functions - APPEND, PREPEND, RAND, FIND_IDX, INITCAP and CALC_DISTANCE

πŸ€ Store traits

User-level custom function

By implementing both the CustomFunction and CustomFunctionMut traits, users can create, use, and delete user-level custom functions. Although GlueSQL plans to continuously add various functions, users may still find them insufficient. In such cases, users can create their own user-level custom functions to supplement the built-in functions. Additionally, if there are repetitive business logic codes, they can be stored as custom functions. e.g.

CREATE FUNCTION ADD_ONE (n INT, x INT DEFAULT 1) RETURN n + x;

SELECT ADD_ONE(10) AS test;

DROP FUNCTION ADD_ONE;

Metadata

The Metadata trait is an optional implementation for providing additional metadata support in GlueSQL. GlueSQL does not enforce any specific metadata implementation, allowing custom storage developers to decide which type of metadata, such as create time, modify time, etc., they want to provide.

πŸ€ Storages

JSON Storage

Composite Storage

  • Add CompositeStorage which bundles multiple storages @panarch (#1068)

IndexedDB Storage

Web Storage

  • Add WebStorage - support localStorage & sessionStorage for web browsers @panarch (#1050)

πŸ€ Other new features

🌊 Interface Changes

  • Remove Store trait related cfg features, @panarch (#1091)
  • Refactor CreateTable.columns from Vec<ColumnDef> to Option<Vec<ColumnDef>> @devgony (#1086)
  • Remove MutResult @panarch (#1073)
  • Update all store mut trait methods to take &mut self @panarch (#1072)
  • Change StoreMut interface to use &mut self, not to take ownership @panarch (#1071)
  • Modify default ColumnOption from NOT NULL to NULL @devgony (#997)

🌟 Improvements

🌳 Documentation

We now provide an official documentation website at https://gluesql.org/docs

Docs - setup

  • Add gh-action for docs build - runs on both push & pr @panarch (#1215)
  • Setup blog based on docusaurus, @panarch (#1212)
  • Remove mdbook which is replaced by docs/ (docusaurus based) @panarch (#1164)
  • Add docusaurus deployment github action setup @panarch (#1163)
  • Update coverage, javascript and rust gh action to ignore docs/** pa… @panarch (#1168)
  • Update docs/ global styles, @panarch (#1156)
  • Setup new documentation based on docusaurus @panarch (#1136)

πŸ“‹ Tests

πŸ› Bug Fixes

  • Fix docusaurus pages/index broken link @panarch (#1214)
  • Fix docs/ Discord GlueSQL channel invite link address @panarch (#1213)
  • Fix InvalidJsonString error message replacing payload to fileName @devgony (#1185)
  • Fix TryFrom Value::Str to u128 not to use parse_uuid @ChobobDev (#1134)
  • Fix column alias with identifer for TableFactor::Derived @ding-young (#1119)
  • Pass data even when deleted_by is not present @ever0de (#1117)
  • Fix MemoryStorage & WebStorage primary key support @panarch (#1115)
  • Fix plan::validate to handle CTAS and ITAS adding unit test @devgony (#1074)
  • Fix test-suite tester functions to show (found, expected) shape @panarch (#1028)

πŸ‘ New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.13.1...v0.14.0

v0.13.1

1 year ago

🌟 CLI - Data migration support

Dump whole schemas and data by generating SQL using --dump {PATH} option

$ gluesql --path ~/glue_data --dump ./dump.sql
-- dump.sql
CREATE TABLE Item (id INT, name TEXT);
CREATE INDEX item_id ON Item (id);
..
INSERT INTO Item VALUES (1, 'Foo'), (2, 'Bar') ..
..

Import database

$ gluesql --path ~/new_data --execute ./dump.sql

What's Changed

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.13.0...v0.13.1

v0.13.0

1 year ago

🌊 Breaking Changes

🌟 AST Builder

AST Builder is now ready to be used! GlueSQL AST builder provides iterator chaining experience to manipulate data which is similar to array chaining methods or DataFrame syntax. For someone who is already familiar with SQL, then there would be almost no extra learning cost to use GlueSQL AST builder. AST builder accepts various sets of params - not only the expression built by its own expr builder, but also it even accepts raw SQL text and prebuilt ASTs.

e.g.

table("Item")
    .select()
    .join("Category")
    .on(col("Category.id").eq("Item.category_id"))
    .group_by("Item.category_id")
    .having("SUM(Item.price) > 80")
    .project("Category.name AS category")
    .project("SUM(Item.price) AS sum_price")
    .execute(glue)
    .await;
category sum_price
Meat 90
Drink 85

Usage code examples

SELECT queries INSERT queries UPDATE queries DELETE queries

  • Implement hash join support to AST builder @panarch (#916)
  • [AST-Builder] Impl Case @ding-young (#910)
  • [AST] Support ArrayIndexExpr @ding-young (#880)
  • Implement AST builder execute function @panarch (#879)
  • [Ast Builder] Implement join expression in select statement @seonghun-dev (#803)
  • [AST] Implement to_sql func for OrderByExpr @CEOJINSUNG (#812)
  • [AST Builder] Implement to_date and let format function to format date data type @ChobobDev (#858)
  • [AST Builder] Implement Lower function @ChobobDev (#853)
  • Implement order by ast builder @24seconds (#841)
  • [AST builder] Implement To_date and To_timestamp function @ChobobDev (#838)
  • [AST Builder] Implement format function @ChobobDev (#836)
  • [AST builder] Implement Insert statement @kim-seo-hyun (#802)
  • [AST Builder] Implement Alter table statement @ding-young (#813)
  • [AST-Builder] Create Table Statement @ding-young (#784)
  • [AST Builder] Implement EXISTS Expression @CEOJINSUNG (#790)
  • [AST Builder] Implement update Expression @seonghun-dev (#720)
  • [AST Builder] Implement Div, Mod Function @seonghun-dev (#760)
  • Add AST builder integration tests of SELECT, UPDATE, INSERT and DELET… @panarch (#955)
  • Update AST builder cast function unit test @zmrdltl (#957)
  • Expose AST builder unary_op methods to public, @panarch (#956)
  • Rename AST builder ExprNode::not to ExprNode::negate @sa1 (#953)
  • Add missing select nodes to ExprNode::InList and QueryNode in AST builder @panarch (#934)
  • Simplify ast_builder/ QueryNode codes using decl macro @panarch (#932)
  • Add from ProjectNode & QueryNode for InListNode in AST builder, @panarch (#925)
  • Update ast-builder function expr params to use Into<..Node> @panarch (#926)
  • Update AST builder between & hash_executor to accept different param … @panarch (#923)
  • Add ExprNode::subquery, @panarch (#922)
  • Add AST builder join nodes to query node conversion support @panarch (#921)
  • Add setting table_alias support to AST builder table init function @panarch (#920)
  • [AST Builder] Combine in_list and in_subquery into in_list @CEOJINSUNG (#808)
  • [AST-Builder] change error message in test functions @ding-young (#800)
  • Reformat : change ast builder function format @seonghun-dev (#796)

πŸš€ Features

πŸ“š New metadata tables - GLUE_TABLES, GLUE_TABLE_COLUMNS and GLUE_INDEXES

gluesql> SELECT * FROM GLUE_TABLES;
TABLE_NAME
Bar
Foo
gluesql> SELECT * FROM GLUE_TABLE_COLUMNS;
TABLE_NAME COLUMN_NAME COLUMN_ID
Bar id 1
Bar name 2
Bar type 3
Foo id 1
Foo name 2
gluesql> SELECT * FROM GLUE_INDEXES;
TABLE_NAME INDEX_NAME ORDER EXPRESSION UNIQUENESS
Foo PRIMARY BOTH id TRUE
Foo Foo_id_1 BOTH id + 1 FALSE
Foo Foo_name_concat BOTH name + "_" FALSE
  • Add support GLUE_INDEXES reserved table which provides all index info @devgony (#935)
  • Support Dictionary(Schema) view @devgony (#869)

🧭 ORDER BY enhancements

Support ORDER BY ALIAS clause like below

SELECT column_name AS alias_name FROM Table ORDER BY alias_name DESC
  • Currently, it throws [error] value not found: alias_name

Original column_name is still available at ORDER BY clause though SELECT clause uses alias_name

SELECT column_name AS alias_name FROM Table ORDER BY column_name DESC

Support ORDER BY COLUMN_INDEX

SELECT alpha, beta FROM Table ORDER BY 1 DESC
  • 1 means the column_index which is first column alpha

Support ORDER BY clause in VALUES list

gluesql> VALUES (1, 'a'), (2, 'b') ORDER BY column1 DESC;
 column1 | column2
---------+---------
       2 | b
       1 | a
  • Support ORDER BY ALIAS and COLUMN_INDEX @devgony (#805)
  • Support ORDER BY clause in VALUES list @devgony (#730)

πŸ“‹ ToSql trait for AST which provides AST to SQL text conversion for easier debugging

e.g. ToSql::to_sql from the below AST returns this simple SQL text.

  • Generated SQL text
CREATE TABLE Foo (id INT, num INT NULL, name TEXT);
  • Input AST
Statement::CreateTable {
    if_not_exists: false,
    name: "Foo".into(),
    columns: vec![
        ColumnDef {
            name: "id".to_owned(),
            data_type: DataType::Int,
            options: vec![]
        },
        ColumnDef {
            name: "num".to_owned(),
            data_type: DataType::Int,
            options: vec![ColumnOptionDef {
                name: None,
                option: ColumnOption::Null
            }]
        },
        ColumnDef {
            name: "name".to_owned(),
            data_type: DataType::Text,
            options: vec![]
        }
    ],
    source: None
}
.to_sql()
  • Implement to_sql func for SetExpr, Join @CEOJINSUNG (#898)
  • [AST] Implement to_sql func for Query, SetExpr, Select, SelectItem, TableWithJoins, IndexItem, TableFactor, TableAlias @CEOJINSUNG (#860)
  • [AST] To_sql for CREATE TABLE, ALTER TABLE @ding-young (#807)
  • [AST] to_sql for Function @ding-young (#931)
  • [AST] to_sql for STATEMENTS @ding-young (#824)
  • [AST] Implement to_sql for INSERT, UPDATE, DELETE @ding-young (#821)

🌳 New datatype and functions

New datatype - UINT8

  • [Data] add data type u8 @zmrdltl (#828)

New functions - ASCII, CHR, POSITION, TO_DATE, TO_TIMESTAMP and FORMAT

  • Implement ASCII, Chr functions @seonghun-dev (#881)
  • Implement function POSITION @zmrdltl (#862)
  • Implement str_position function under enum Value @zmrdltl (#875)
  • [Function] Implement TO_TIME function and let FORMAT get TIME data type @ChobobDev (#842)
  • [Function] Implement TO_DATE and TO_TIMESTAMP function @ChobobDev (#833)
  • [Function] Implement FORMAT function @ChobobDev (#818)

πŸ“ˆ CLI enhancements

Support .edit {fileName|None} in CLI @devgony (#871)

  1. Open temporary editor with last SQL
$> cargo run
gluesql> .run
[error] Nothing in SQL history to run.
gluesql> SELECT 1, 'a', true
1 'a' true
1 a TRUE
gluesql> .edit

=> open Editor with last command on temporary file like /tmp/Glue_****.sql

-- modify in editor
SELECT 1, 'a', true, 2, 'b'

If you want to fix editor type, run below command on OS

# (optional)
$> export EDITOR=vi
gluesql> .run
1 'a' true 2 'b'
1 a TRUE 2 b
  1. Open editor with physical file
gluesql> .edit foo.sql
-- modify in editor
SELECT 1 AS no, 'In physical file' AS name
gluesql> .execute foo.sql
no name
1 In physical file

New CLI print options

gluesql> .set tabular OFF
gluesql> .set colsep ,
gluesql> .set colwrap '
gluesql> .set heading OFF
gluesql> VALUES (1, 'a', true), (2, 'b', false)
'1','a','true'
'2','b','false'
  • Support CLI options @devgony (#820)

Change default print style to markdown

Set markdown as default print style like below

gluesql> SELECT * FROM (VALUES (1, 'a', true), (2, 'b', false)) AS Sub;
column1 column2 column3
1 a TRUE
2 b FALSE
(pasted from gluesql directly)
  • Replace crate::comfy-table with tabled @devgony (#830)

πŸ’‘ Improvements

Aggregation

  • Support Expr::Case in aggregate module @ever0de (#945)
  • Update aggregate functions to support Expr @zmrdltl (#749)

sqlparser-rs upgrades

  • Upgrade sqlparser-rs to v0.25 @panarch (#907)
  • Upgrade sqlparser-rs to v0.24, migrate Interval from Literal to Expr @panarch (#904)
  • Upgrade sqlparser-rs to v0.22 @panarch (#819)
  • Migrate sqlparser-rs from 0.18 to 0.19, @panarch (#817)

Tests

  • [FIx] add omitted uint8 integration test @ChobobDev (#951)
  • Rename showcolumns to show_columns @sa1 (#936)
  • Replace plan/join.rs unit tests to use AST builder! @panarch (#929)
  • Update test-suite select macros to support raw string literals for labels @panarch (#896)
  • [Test Suite] add null test in function position @zmrdltl (#901)
  • Update test-suite Tester trait to use Glue struct @panarch (#872)
  • Add cli/ print and command modules to code coverage tests @panarch (#866)
  • [Test suite] Add insert integration test @kim-seo-hyun (#826)
  • [Test Suite] unify order of test arguments @zmrdltl (#816)
  • [Test Suite] Change the structure of macros used & the order of arguments @zmrdltl (#804)
  • Enhance the coverage of operator.rs @ChobobDev (#783)
  • [Test Suite] rearrange error test cases to correct file @zmrdltl (#794)
  • [Test Suite] move top level test files to new tester folder @zmrdltl (#792)

Other improvements

  • Move Expr::Extract structure to Expr::Function::Extract @zmrdltl (#930)
  • Feat : Apply macros in i16 data type @ChobobDev (#940)
  • Bump uuid version to 1.2.1 @ever0de (#943)
  • Provide unsupported warning for select distinct @sa1 (#942)
  • Use decl macro to simplify codes in parser_sql module @sa1 (#937)
  • Expose Row to Payload::Select and add Row to core::prelude @panarch (#941)
  • Add firefox headless browser test to github action @panarch (#939)
  • Remove Option which wraps Row in FilterContext, @panarch (#933)
  • Add a new method to Row which finds value by ident, @panarch (#928)
  • Add /pkg/rust/data/ to .gitignore @panarch (#927)
  • Move Expr::Cast structure to Expr::Function::Cast @zmrdltl (#913)
  • Grouping GlueSQL projects into pkg/* per language @ever0de (#917)
  • Implement macro that implements TryBinaryOperator, @ever0de (#915)
  • Implement Key::to_be_bytes for Decimal variant @panarch (#906)
  • Add Send + Sync trait bounds to gluesql::Error::Storage variant @panarch (#903)
  • Enable str to string clippy options @ever0de (#900)
  • Use variable instead of closure in core/ evaluate function module @ever0de (#892)
  • Remove comment @ever0de (#891)
  • Update coverage.yml to ignore root examples @panarch (#887)
  • Update README.md; add await keyword. @24seconds (#889)
  • Add root workspace in members @ever0de (#885)
  • Auto Implement GStore, GStoreMut traits @ever0de (#884)
  • refactor: remove redundant TableFactor::Series.name @devgony (#878)
  • Remove unused comments in core/ ast/mod.rs @panarch (#877)
  • Remove Result from core/ table::get_alias return type @panarch (#876)
  • refactor: Replace ObjectName with String @devgony (#873)
  • [Style]remove unnecessary bracket @ChobobDev (#863)
  • Remove deprecated wee_alloc dependency use in gluesql-js/ @panarch (#856)
  • [Docs] update README @zmrdltl (#852)
  • [Data] modify uint8 to parse sql 'INT(8) UNSIGNED' format to 'UINT8' @zmrdltl (#851)
  • [Data] modify int128 to parse sql int(128) format to int128 @zmrdltl (#850)
  • [Data] remove data type int64 @zmrdltl (#849)
  • [Data] modify int32 to parse sql int(32) format to int32 @zmrdltl (#848)
  • [Data] modify int16 to parse sql int(16) format to int16 @zmrdltl (#847)
  • [Data] modify int8 to parse sql int(8) format to int8 @zmrdltl (#846)
  • Improvement validate_unique function when only PrimaryKey exists @ever0de (#832)
  • Simplify root doc comment code example @panarch (#831)
  • Small improvement: add clear guide for web example module @24seconds (#797)
  • Impl TryFrom<&Value> for usize @devgony (#795)

πŸ› Bug Fixes

  • Fix test-suite tester::test to properly print expected & found labels @panarch (#949)
  • fix: unmatced subquery should return Null (not error) @devgony (#948)
  • Fix COUNT aggregate to return 0 not 1 if no rows found @ever0de (#946)
  • Fix web/ payload data_type json serialization, @panarch (#938)
  • Set default-run to root workspace Cargo.toml @panarch (#888)
  • Update core/ chrono dependency version to 0.4.22, specify patch version @panarch (#840)

New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.12.0...v0.13.0

v0.12.0

1 year ago

🌊 Breaking Changes

⚑ Store trait changes

  1. Store traits no longer require generic T
// v0.11
pub trait Store<T: Debug> { .. }
pub trait StoreMut<T: Debug> where Self: Sized { .. }
pub trait Index<T: Debug> { .. }
pub trait IndexMut<T: Debug> where Self: Sized { .. }

// v0.12
pub trait Store { .. }
pub trait StoreMut where Self: Sized { .. }
pub trait Index { .. }
pub trait IndexMut where Self: Sized { .. }

Related PRs

  • Remove generic T from Store, StoreMut and Index traits, @panarch (#589)
  • Replace SledStorage generic key T from IVec to data::Key @panarch (#588)
  • Replace MemoryStorage Key to core::data::Key, @panarch (#577)
  1. Store::fetch_data is newly added, Store trait now requires three methods to implement
pub trait Store {
    async fn fetch_schema(&self, table_name: &str) -> Result<Option<Schema>>;
    async fn fetch_data(&self, table_name: &str, key: &Key) -> Result<Option<Row>>;
    async fn scan_data(&self, table_name: &str) -> Result<RowIter>;
}

Related PR

  • Implement primary key support, @panarch (#687)
  1. StoreMut trait method renamings - insert_data -> append_data and update_data -> insert_data
pub trait StoreMut where Self: Sized {
    ...
    async fn append_data(..) -> ..;
    async fn insert_data(..) -> ..;
}

Related PR

  • Rename StoreMut insert_data & update_data methods, @panarch (#774)

🌐 PRIMARY KEY support

GlueSQL now supports PRIMARY KEY!

CREATE TABLE Allegro (
    id INTEGER PRIMARY KEY,
    name TEXT,
);

more info - test-suite/primary_key

  • Implement primary key support, @panarch (#687)
  • Update Expr::CompoundIdentifier to have more accurate data format @devgony (#770)
  • Update SledStorage key.rs to use IVec::from_iter, not IVec::from @panarch (#765)
  • Update SledStorage scan_(indexed)_data key not to contain table prefix, @panarch (#762)
  • Update sled-storage::update_data not to return error on not-existing … @panarch (#717)

βš“ New queries support

Select query without table & support SERIES(N)

SELECT 1;
SELECT N FROM SERIES(10);

more info - test-suite/series

  • Support SELECT * FROM Series(N) and SELECT 1(without table) @devgony (#733)

VALUES support

VALUES (1, 'a'), (2, 'b');
VALUES (1, 'a'), (2, 'b') LIMIT 1;
VALUES (1, 'a'), (2, 'b') LIMIT 1 OFFSET 1;
SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS Derived;
SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS Derived(id, name);
CREATE TABLE TableFromValues AS VALUES (1, 'a', True, Null, Null), (2, 'b', False, 3, Null)

more info - test-suite/values

  • Support Derived VALUES @devgony (#731)
  • Support CTAV(Create Table As Values) @devgony (#704)
  • Enhance Values List to validate column type @devgony (#659)
  • Support VALUES List in select module @devgony (#648)

Inline view

SELECT * FROM (SELECT COUNT(*) FROM InnerTable) AS InlineView

more info - test-suite/inline_view

  • Support Inline view (FROM clause subquery) @devgony (#523)

πŸ’’ New storage - SharedMemoryStorage

Non-persistent storage engine which works in multi-threaded environment

  • Implement shared memory storage @ever0de (#500)

🌟 [Alpha Phase] AST Builder

Now, SQL is not the only language supported by GlueSQL! AST Builder generates GlueSQL AST directly from Rust codes.

e.g.

let actual = table("Bar")
    .select()
    .filter(col("id").is_null())
    .group_by("id, (a + name)")
    .build();
let expected = "
    SELECT * FROM Bar
    WHERE id IS NULL
    GROUP BY id, (a + name)
";  
let actual = table("Bar")
    .select()
    .group_by("city")
    .project("city, COUNT(name) as num")
    .build();
let expected = "
    SELECT
      city, COUNT(name) as num
    FROM Bar
    GROUP BY city
";
let actual = table("Person")
    .delete()
    .filter(col("name").is_null())
    .build();
let expected = "DELETE FROM Person WHERE name IS NULL";

more info - core/ AST Builder

Related PRs

  • Add in_subquery test case using QueryNode @CEOJINSUNG (#781)
  • Add QueryNode enum and test_query function @CEOJINSUNG (#777)
  • feat:[#756] implement Ltrim and Rtrim function @ChobobDev (#763)
  • [AST Builder] Implement substr Funciton @seonghun-dev (#758)
  • [AST Builder] Implement Exp Funciton @seonghun-dev (#753)
  • [AST Builder] Implement Lpad, Rpad Funciton @seonghun-dev (#752)
  • Implement cast function in AST builder @kim-seo-hyun (#759)
  • [AST Builder] Implement Concat Funciton @seonghun-dev (#750)
  • [AST Builder] Implement radians, degrees Funciton @seonghun-dev (#755)
  • [AST Builder] Implement Repeat Funciton @seonghun-dev (#742)
  • [AST Builder] Implement GenerateUuid Funciton @seonghun-dev (#740)
  • feat:[#732] Implement Gcd and Lcm function to ast_builder @ChobobDev (#734)
  • feat:[#728] Implement Logfunction to ast_builder @ChobobDev (#729)
  • feat:[#725] Implement Power and Sqrt function to ast_builder @ChobobDev (#726)
  • [AST Builder] Update FunctionNode structure @zmrdltl (#723)
  • [AST Builder] Implement InSubquery and QueryNode @CEOJINSUNG (#721)
  • [AST Builder] Implement Sign function @kim-seo-hyun (#711)
  • [AST Builder] Implement Transaction Statements @ding-young (#709)
  • [AST Builder] Implement AST builder InList function @CEOJINSUNG (#697)
  • [AST Builder] Implement Index Expr @seonghun-dev (#673)
  • [AST Builder] Implement drop_table Expr @seonghun-dev (#695)
  • implement now function in ast builder @kim-seo-hyun (#692)
  • [AST Builder] Implement show_columns Expr @seonghun-dev (#689)
  • Implement AST-builder between expression function @CEOJINSUNG (#672)
  • feat(ast_build): implement binary operations (modulo, like, ilike, not_like, not_ilike) @bugoverdose (#686)
  • refactor(ast_build): reorder binary_op functions and tests @bugoverdose (#681)
  • Implement ln in ast_builder @gimwonbae (#680)
  • Implement unary_op (+, -, NOT, !) in ast_builder @ding-young (#669)
  • Implement AST-builder extract functions @CEOJINSUNG (#666)
  • Implement round function in ast_builder @ding-young (#657)
  • [AST Builder] Implement Agggregate function COUNT @zmrdltl (#656)
  • Add more expression support to project, @panarch (#655)
  • Implement ast_builder binary::gte&lte&or @woojinnn (#654)
  • Enhance SelectNode::filter @woojinnn (#653)
  • Implement AST-builder log2, log10 function @CEOJINSUNG (#650)
  • implement ceil function @jaeyoung0909 (#645)
  • feat(ast_builder): Add Agggregate functions @zmrdltl (#635)
  • Implement add reverse func in ast_builder @seonghun-dev (#637)
  • implement ast_builder/expr/function/{Left, Right} @woojinnn (#626)
  • Implements trigonometric functions in ast_builder @nyeong (#627)
  • feat(ast_build): implement upper function @ChobobDev (#621)
  • feat(ast_build): implement ifnull function @bugoverdose (#620)
  • Add floor func in ast_builder @yujong-lee (#616)
  • Implement query builder base (AST builder) @panarch (#613)

πŸš€ Features

CLI updates

  • Support .spool FilePath command in CLI @devgony (#748)
  • Support .columns TABLE command in CLI @devgony (#736)

New data types

  • Add INT(16) data type @yujong-lee (#632)
  • Add data type i32 @bearney74 (#608)
  • Add BYTEA data type support @panarch (#586)
  • Add i128 (int128) data type @bearney74 (#563)

New aggregate function - STDEV & VARIANCE

  • Add STDEV aggregate funtion @zmrdltl (#684)
  • Support VARIANCE aggregate function & update aggregate test @zmrdltl (#598)
  • [Data] Add function sqrt for enum Value @zmrdltl (#675)

New function - IFNULL

  • Implement IFNull function @bearney74 (#569)

New statement - SHOW INDEXES FROM {table}

  • Add Description column to "show index from table" output @bearney74 (#600)
  • Show indexes from table... (resolves issue #520) @bearney74 (#551)

ToSql

  • Implement ToSql trait which displays AST as SQL text format @bearney74 (#554)

πŸ’‘ Improvements

  • Update rust.yml GitHub Action to handle sled_transaction_timeout_* te… @panarch (#772)
  • Remove clippy warning in mac os @24seconds (#715)
  • Run github action job parallel @24seconds (#699)
  • Update coverage action to use grcov & Coveralls @panarch (#647)
  • Simplify github rust action - Run tests & Run examples, @panarch (#594)

Test Suite refactoring

  • [Test Suite] Merge use crates into one @zmrdltl (#788)
  • [Test Suite] Refactor basic @zmrdltl (#785)
  • [Test Suite] delete unneccesary keyword vec!, iter() @zmrdltl (#775)
  • [Test Suite] Refactor arithmetic @zmrdltl (#773)
  • [Test Suite] Refactor aggregate @zmrdltl (#771)

rust-toolchain & sqlparser-rs migration

  • chore:[#700] rust version update @ChobobDev (#724)
  • upgrade to Sqlparser 0.18 @bearney74 (#612)
  • upgrade to rust 1.61 @bearney74 (#564)
  • Update rusttoolchain version to 1.60 and sqlparser-rs to 0.17 @bearney74 (#557)

Other improvements

  • Add Update integration test @seonghun-dev (#738)
  • Replace bool::then to bool::then_some @panarch (#727)
  • import only where you use Duration @ever0de (#722)
  • Remove unnecessary Box @ever0de (#716)
  • Add DROP TABLE multi object test case in integration test @seonghun-dev (#706)
  • Mark flaky test using target_os cfg @24seconds (#702)
  • Update aggregate structure @zmrdltl (#698)
  • Convert TryInto traits into TryFrom @nyeong (#682)
  • Add SharedMemoryStorage to the src documentation comment @kim-seo-hyun (#664)
  • Add missing test case in test-suite workspace @ever0de (#649)
  • Update data types in README.md @arsenkhy (#644)
  • Remove unnecessary Result @ever0de (#622)
  • Support Deserialize for Payload @ever0de (#607)
  • Migrate cli/ clap-rs version to v3.2.2 @panarch (#606)
  • Ambiguous column selection should be detected while joining @MRGRAVITY817 (#583)
  • Fix primitive numeric types cast not to panic @bearney74 (#573)
  • Specify importing modules explicitly in data/value/into.rs @panarch (#587)
  • Use const Dialect in parse_query @ever0de (#584)
  • Fix PartialEq between f64 and other numeric types @bearney74 (#585)
  • Update ast::DataType enum to use SCREAMING_SNAKE_CASE @bearney74 (#575)
  • Use checked_x functions for binary op between i8, i64 and decimal data types not to panic on overflow @bearney74 (#571)
  • Replace the to_string macro with the serialize_all macro @ever0de (#565)
  • Fix the link in gluesql-js/README.md Webpack example @MRGRAVITY817 (#559)
  • Unify GroupKey, HashKey(join) and UniqueKey into a single data::Key s… @panarch (#553)
  • Clean up gluesql-js/ build scripts, @panarch (#552)

πŸ› Bug Fixes

  • Fix CAST into i32 or i64 from numeric literals @bearney74 (#611)
  • Fix SledStorage export & import multiple times bug, @panarch (#605)
  • Fix gluesql-js build and tests @panarch (#591)
  • Fix core translate with metadata feature only @panarch (#590)
  • Fix sled_multi_threaded example code with threads of INSERT and SELECT, @ever0de (#580)
  • Fix rust clippy gh action to check optional features @panarch (#578)
  • Fix modulo binary op to handle zero divisor correctly @bearney74 (#576)
  • Fix divide by zero error in data::Value @bearney74 (#572)
  • Handle DROP INDEX invalid params @ever0de (#566)
  • Fix Glue::execute to run multiple sql query string @ming535 (#562)

πŸ‘ New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.11.0...v0.12

v0.11.0

2 years ago

🌊 Breaking Changes

🌈 GlueSQL.js

JavaScript interface for both web browsers and Node.js
GlueSQL works again in web browsers!

e.g.

import { gluesql } from 'gluesql';

const db = await gluesql();

db.query(`
  CREATE TABLE User (id INTEGER, name TEXT);
  INSERT INTO User VALUES (1, "Hello"), (2, "World");
`);

const [{ rows }] = await db.query('SELECT * FROM User;');
console.log(rows);

More Info

  • Implement TryFrom between Value and serde_json::Value @panarch (#501)
  • GlueSQL.js - support both web browsers and Node.js @panarch (#512)
  • Fix gluesql-js/package.json to publish files correctly, @panarch (#543)

πŸš€ Features

New functions - ABS, SIGN and CONCAT

  • Concat function implementation @earney (#521)
  • add ABS and SIGN functions @earney (#510)

SHOW COLUMNS

  • Implement SHOW COLUMNS @earney (#517)

SledStorage export and import

  • Implement SledStorage export & import features @panarch (#547)

CLI - SQL file read-and-execute

  • Add support SQL file read-and-execute @pythonbrad (#496)

Other new features

  • Implement cast to decimal @earney (#529)
  • More numeric binary operations with Decimal @earney (#530)
  • Implement hash join executor support @panarch (#494)
  • Feature implementation - Unary Factorial operation for (unsigned) INT8 type @MRGRAVITY817 (#477)
  • Support limit, offset clause in Insert into values ~ @devgony (#484)
  • Update evaluate_stateless to support all existing SQL functions, @panarch (#471)

πŸ’‘ Improvements

sqlparser-rs migration

  • Migrate code from sqlparser v14 to v16 @earney (#542)
  • Migrate sqlparser-rs version from v0.13 to v0.14, @panarch (#541)
  • Bump up sqlparser crate version from 0.11 to 0.13 @MRGRAVITY817 (#479)

Unit test

  • Add unit tests to data/value/into.rs module @pythonbrad (#518)
  • Add unit tests for data/value/literal.rs @pythonbrad (#497)

Error handling

  • Scalar subquery should throw Error when more than one row returned @devgony (#537)
  • Apply better names to numeric binary operation error names #424 @earney (#534)
  • cast 255 as int8, should return an error, but returns 127 instead (resolves issue #545) @earney (#546)

Other improvements

  • Fix typo (Tripple to Triple) @ever0de (#539)
  • Minor improvements @ever0de (#507)
  • Bump up toolchain ver. from 1.58 -> 1.59 @MRGRAVITY817 (#502)
  • Apply nit code improvements to core/ executor/join module @panarch (#498)
  • Simplify lifetime uses in data/literal binary operators @panarch (#495)
  • Add macos attributes in gitignore @ever0de (#492)
  • Fix typo @ever0de (#490)
  • Remove unused generic in IndexMut @ever0de (#488)
  • Remove Debug macro from the generic requirements for key @ever0de (#486)
  • Bump rust version 1.58 @ever0de (#487)
  • Update Join::apply to take the whole table(rows) as a stream iterator @MRGRAVITY817 (#472)

πŸ› Bug Fixes

  • Fix CLI --execute {file}.sql option to support CRLF line break, @panarch (#519)
  • Fix value/ big_endian module to handle negative integers correctly, @panarch (#505)

πŸ‘ New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.10.2...v0.11.0

v0.10.2

2 years ago

πŸ› Bug Fixes

# Cargo.toml

[dependencies.gluesql]
version = "0.10.2"
default-features = false
features = ["memory-storage"]
# or features = ["sled-storage"]

Configuration above now works. memory-storage or sled-storage features were not working in v0.10.1 and it is fixed in v0.10.2.

  • Remove gluesql prefix in dependencies and features @ever0de (#465)
  • Fix src/lib.rs doc comment, @panarch (#469)

πŸ’‘ Improvements

  • Add --all-targets to cargo test in github rust action @panarch (#467)
  • Support limit, offset clause in Insert into Table Select ~ @devgony (#466)

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.10.1...v0.10.2

v0.10.1

2 years ago

🌊 Breaking Changes

🌈 CLI Support

$ cargo install gluesql

image

  • Implement CLI application @panarch (#440)
  • Add [[bin]] to Cargo.toml, update cli and storage workspace versions, @panarch (#451)
  • Update cli/ clap version to 3.0.1 @panarch (#449)
  • Change from cli/target to <general>/target in ignore, @ever0de (#443)

πŸŽ‰ New Data Types

  • INT(8) Add int8 data type @ever0de (#407)
  • DECIMAL Adding data type: Decimal @boomkim (#377)

πŸš€ Features

New Functions - EXTRACT & NOW

  • Implementing Extract() & now() Function @simple6192 (#379

CTAS (CREATE TABLE AS SELECT) support

  • Support CTAS(Create Table As Select ~) statement @devgony (#414)

Postfix factorial (3! = 6) operator support

  • 385 factorial operator @devil-k (#396)

SHOW TABLES & SHOW VERSION

  • Add Metadata optional store trait, @panarch (#438)

Convert the entire project code structure to workspace based

  • Convert gluesql workspace to root lib-package @ever0de (#446)
  • Refactor monorepo @ever0de (#442)

Changes

  • Update async-recursion & strum_macros versions @panarch (#460)
  • Remove duplicate action @ever0de (#459)
  • Apply Serde to MemoryStorage instance and make it public, @panarch (#453)
  • Remove sorter cfg feature, support all ORDER BY by default @panarch (#450)
  • Repair broken links in README @ever0de (#445)
  • Bump rust version to 1.57 @ever0de (#444)
  • Move join_columns argument from Join::apply() to Join::new() @MRGRAVITY817 (#441)
  • typo edit: bigedian -> bigendian resolves #399 @boomkim (#436)
  • Move order_by from query to select @devgony (#435)
  • Support arithmetic operations for decimal and null @ever0de (#433)

πŸ› Bug Fixes

  • Fill in the missing #446 @ever0de (#447)
  • Add missing assert macro @ever0de (#434)

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.9.0...v0.10.1

v0.9.0

2 years ago

🌊 Breaking Changes

🌈 New Reference Storage - MemoryStorage

Now GlueSQL supports two reference storages - SledStorage and MemoryStorage

  • In-memory storage support @panarch (#331)
  • Support AlterTable for MemoryStorage @ever0de (#376)

πŸŽ‰ New Data Types

  • UUID - add uuid data type @maruoovv (#360)
  • MAP - Add MAP data type and UNWRAP function @panarch (#367)
  • LIST - Add LIST data type, @panarch (#370)

✨ New Functions

  • SQRT, POWER - Add Sqrt, Power @simple6192 (#312)
  • RADIANS, DEGREES, PI - Implement radians, degrees, pi math functions #280 @devil-k (#322)
  • LTRIM, RTRIM - Implement Function: LTRIM, RTRIM @devgony (#294)
  • REVERSE - [ADD] - reverse function @zmrdltl (#327)
  • ASIN, ACOS, ATAN - Add functions: ASIN(), ACOS(), ATAN() @boomkim (#296)
  • TRIM - Implement TRIM function - Other features @ever0de (#307)
  • SUBSTR - Implement substr function @vbbono (#341)
  • LOG - Support function LOG @slhmy (#371)
  • REPEAT - Implement REPEAT Function @inhwa1025 (#352)
  • UUID - add function random generate uuid value @maruoovv (#372)
  • AVG - Support aggregation AVG @zmrdltl (#368)

πŸ’‘ New Expressions

  • % - Implement binary operator modulo % @MRGRAVITY817 (#319)
  • ILIKE & NOT ILIKE - Support ILIKE and NOT ILIKE operator @maruoovv (#334)
  • XOR - Support binary operator XOR, update data-type Int @zmrdltl (#359)
  • CASE - Support conditional function CASE @MRGRAVITY817 (#330)

πŸš€ Features

  • Apply bigdecimal feature (solved issue) @devgony (#380)
  • Implement CAST from string to DATE, TIME and TIMESTAMP @No-YE (#375)
  • support execute_async @24seconds (#366)
  • CAST from string to INTERVAL @devgony (#335)

Changes

  • Change tarpaulin version to latest @ever0de (#410)
  • Add PartialEq<Literal> for Value unit tests @yellowHSE (#413)
  • Add Divide unit tests @jiwon-dev (#408)
  • Add literal.rs subtract unit tests @kwon-heejeong (#409)
  • add Null unit case tests for literal.rs @hyangmin82 (#412)
  • Add literal.rs multiply unit tests @heej-ng (#411)
  • Implement prelude pattern to organize userside APIs @MRGRAVITY817 (#388)
  • Support unary operator(plus, minus) unit test @zmrdltl (#406)
  • Supplement remove static lifetime issue @ever0de (#403)
  • Remove 'static lifetime of generic types for GStore @ever0de (#400)
  • Implement SledStorage::check_retry wrapper function @ever0de (#392)
  • Remove explicit uses of TryFrom & TryInto, @panarch (#397)
  • Bump rust version to 1.56 & edition 2021 @ever0de (#395)
  • Apply toml formatting @ever0de (#391)
  • Fix UUID to Uuid to follow the naming convention of Enums @MRGRAVITY817 (#389)
  • Replace eval_to_* func to macro @vbbono (#374)
  • 328 replace macros to functions @devil-k (#365)
  • Remove AstLiteral use in data/row.rs @panarch (#363)
  • Implement implicit null insert. @boomkim (#361)
  • Bump rust version to 1.55 stable @ever0de (#358)
  • Add MemoryStorage integration tests to reach all storage impl codes @panarch (#355)
  • Simplify evaluate module codes by replacing from take(1).. to try_next() @panarch (#347)
  • Add Codecov badge on README @MRGRAVITY817 (#343)
  • Feature test partial @zmrdltl (#332)
  • Apply code coverage test to GitHub Action @MRGRAVITY817 (#326)
  • Update math function MOD to use modulo in Evaluated @MRGRAVITY817 (#321)

πŸ› Bug Fixes

  • Handle do not match columns and values @ever0de (#356)
  • [Fix, Update] - Partial_Eq error, unit test @zmrdltl (#353)
  • Raise error when column option PRIMARY KEY is used. @heka1024 (#339)

πŸ‘ New Contributors

Full Changelog: https://github.com/gluesql/gluesql/compare/v0.8.0...v0.9.0

v0.8.0

2 years ago

🌊 Breaking Changes

πŸŽ‰ Transaction Support

GlueSQL now supports "TRANSACTION"! New Transaction store trait with three interface methods: begin, rollback and commit is added. GlueSQL's default storage engine, SledStorage supports MVCC transaction using snapshot based internal data structure.

SledStorage transaction details

  • Transaction isolation level is SNAPSHOT ISOLATION or also known as REPEATABLE READ.
  • Concurrency support but only a single writer at the same time.
  • Read operations are not blocked by other read or write operations. (snapshot based)
  • Provides transaction timeout limit functionality.

Merged PRs

  • Implement MVCC transaction, @panarch (#257)
  • Implement SledStorage transaction timeout support, @panarch (#297)

✨ New Functions

Text Functions

  • TRIM, LPAD and RPAD

Math Functions

  • FLOOR, CEIL, ROUND, DIV, MOD, GCD, LCM, SIN, COS, TAN, EXP, LN, LOG2 and LOG10.

Merged PRs

  • Implement TRIM function @ever0de (#292)
  • Add Floor, Ceil, Round Function @tmdgusya (#291)
  • Add mathematical functions: DIV(), MOD(). @MRGRAVITY817 (#295)
  • Add support for gcd and lcm operator @genieCS (#290)
  • Support SIN, COS, TAN functions. @maruoovv (#289)
  • Lpad rpad @No-YE (#311)
  • Add Exp, Ln, Log2, Log10 @heka1024 (#305)

πŸš€ Features

  • Add support for like operaror @euiko (#252)

πŸ“š Changes

  • Resolve clippy error @ever0de (#261)
  • Support DivisorShouldNotBeZero error and Remove {number} / {interval} implementations @MRGRAVITY817 (#309)
  • Remove PRIMARY KEY uses in test codes @panarch (#315)
  • Extend sled_transaction_timeout_ tests timeout duration, @panarch (#316)
  • Replace binary op macro to normal function, @panarch (#304)
  • Add toolchain file that has version number 1.54 @MRGRAVITY817 (#303)
  • Reduce try_self! and try_into! macro uses, @panarch (#302)
  • Remove Row from Payload::Select, @panarch (#287)
  • Remove unnecessary IntoIterator call syntax @ever0de (#274)
  • Replace filter_map and next to find_map @ever0de (#271)
  • Chang unreachable code that was being treated as "unwrap" to return unreachable error @ever0de (#270)
  • Update deps: sqlparser, rust_decimal, indexmap and tokio @panarch (#263)
  • Add --all-targets option to clippy @panarch (#262)
  • Remove Boolinator crate dependency, @panarch (#254)

πŸ› Bug Fixes

  • renew Usage at README.md and Doc: executing multiple queries @devgony (#260)

πŸ‘ New Contributors

Welcome and thanks a lot to new contributors!

  • @euiko
  • @ever0de
  • @devgony
  • @tmdgusya
  • @MRGRAVITY817
  • @genieCS
  • @maruoovv
  • @No-YE
  • @heka1024