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](https://gluesql.org/docs/dev/sql-syntax/statements/querying/schemaless)**
sql
CREATE TABLE Bar;
To insert values,
sql
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.
sql
SELECT name, rate, list[0] FROM Bar WHERE name = 'glue';
e.g.
sql
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 | |
*/
- Schemaless data support [panarch](https://github.com/panarch) ([#1046](https://github.com/gluesql/gluesql/pull/1046))
π 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.
sql
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;
- Apply CompositeStorage to JS package [panarch](https://github.com/panarch) ([#1084](https://github.com/gluesql/gluesql/pull/1084))
π Data Types - `UINT32`, `UINT64`, `UINT128`, `POINT` and `FLOAT32`
- implement f32 data type [pythonbrad](https://github.com/pythonbrad) ([#1145](https://github.com/gluesql/gluesql/pull/1145))
- Implement geometric `POINT` Type and geometric functions [seonghun-dev](https://github.com/seonghun-dev) ([#1048](https://github.com/gluesql/gluesql/pull/1048))
- Add `UINT32`, `UINT64` and `UINT128` data types [ChobobDev](https://github.com/ChobobDev) ([#1019](https://github.com/gluesql/gluesql/pull/1019))
- Add inet datatype [pythonbrad](https://github.com/pythonbrad) ([#1080](https://github.com/gluesql/gluesql/pull/1080))
π Functions - `APPEND`, `PREPEND`, `RAND`, `FIND_IDX`, `INITCAP` and `CALC_DISTANCE`
- Feat : add calc\_distance function [seonghun-dev](https://github.com/seonghun-dev) ([#1153](https://github.com/gluesql/gluesql/pull/1153))
- Add `PREPEND` function for `LIST` data type [seonghun-dev](https://github.com/seonghun-dev) ([#1149](https://github.com/gluesql/gluesql/pull/1149))
- add initcap function [pythonbrad](https://github.com/pythonbrad) ([#1064](https://github.com/gluesql/gluesql/pull/1064))
- Implement `FIND_IDX` function [zmrdltl](https://github.com/zmrdltl) ([#1100](https://github.com/gluesql/gluesql/pull/1100))
- Implement Rand function [pythonbrad](https://github.com/pythonbrad) ([#1063](https://github.com/gluesql/gluesql/pull/1063))
- Add Append Function to LIST DataType [seonghun-dev](https://github.com/seonghun-dev) ([#1047](https://github.com/gluesql/gluesql/pull/1047))
π 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.
sql
CREATE FUNCTION ADD_ONE (n INT, x INT DEFAULT 1) RETURN n + x;
SELECT ADD_ONE(10) AS test;
DROP FUNCTION ADD_ONE;
- Support user level sql function [pythonbrad](https://github.com/pythonbrad) ([#1095](https://github.com/gluesql/gluesql/pull/1095))
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.
- Support Metadata trait [devgony](https://github.com/devgony) ([#1096](https://github.com/gluesql/gluesql/pull/1096))
π Storages
JSON Storage
- Add JsonStorage support to CLI [devgony](https://github.com/devgony) ([#1135](https://github.com/gluesql/gluesql/pull/1135))
- Rename `Jsonl`Storage to `Json`Storage [devgony](https://github.com/devgony) ([#1128](https://github.com/gluesql/gluesql/pull/1128))
- Support `JSON` format in `JSONL storage` [devgony](https://github.com/devgony) ([#1123](https://github.com/gluesql/gluesql/pull/1123))
- Support `Jsonl` Storage [devgony](https://github.com/devgony) ([#1053](https://github.com/gluesql/gluesql/pull/1053))
Composite Storage
- Add CompositeStorage which bundles multiple storages [panarch](https://github.com/panarch) ([#1068](https://github.com/gluesql/gluesql/pull/1068))
IndexedDB Storage
- Add IndexedDB storage support [panarch](https://github.com/panarch) ([#1067](https://github.com/gluesql/gluesql/pull/1067))
Web Storage
- Add WebStorage - support localStorage \& sessionStorage for web browsers [panarch](https://github.com/panarch) ([#1050](https://github.com/gluesql/gluesql/pull/1050))
π Other new features
- Wrap identifiers with double quote (`"`) at `to_sql` [devgony](https://github.com/devgony) ([#1130](https://github.com/gluesql/gluesql/pull/1130))
- Support Values Query at ASTBuilder [devgony](https://github.com/devgony) ([#1041](https://github.com/gluesql/gluesql/pull/1041))
- Support `Schema::from_ddl(ddl: &str) -> String` [devgony](https://github.com/devgony) ([#1089](https://github.com/gluesql/gluesql/pull/1089))
- Support column alias for Table, Derived Table [ding-young](https://github.com/ding-young) ([#1065](https://github.com/gluesql/gluesql/pull/1065))
- Support `TableFactor::{Derived, Dictionary, Series}` in AstBuilder [devgony](https://github.com/devgony) ([#1007](https://github.com/gluesql/gluesql/pull/1007))
π Interface Changes
- Remove Store trait related cfg features, [panarch](https://github.com/panarch) ([#1091](https://github.com/gluesql/gluesql/pull/1091))
- Refactor CreateTable.columns from `Vec<ColumnDef>` to `Option<Vec<ColumnDef>>` [devgony](https://github.com/devgony) ([#1086](https://github.com/gluesql/gluesql/pull/1086))
- Remove `MutResult` [panarch](https://github.com/panarch) ([#1073](https://github.com/gluesql/gluesql/pull/1073))
- Update all store mut trait methods to take \&mut self [panarch](https://github.com/panarch) ([#1072](https://github.com/gluesql/gluesql/pull/1072))
- Change StoreMut interface to use \&mut self, not to take ownership [panarch](https://github.com/panarch) ([#1071](https://github.com/gluesql/gluesql/pull/1071))
- Modify default ColumnOption from NOT NULL to NULL [devgony](https://github.com/devgony) ([#997](https://github.com/gluesql/gluesql/pull/997))
π Improvements
- Add a case for insert with source [devgony](https://github.com/devgony) ([#1211](https://github.com/gluesql/gluesql/pull/1211))
- Apply workspace inheritance to remaining Cargo.toml in storages/, [panarch](https://github.com/panarch) ([#1181](https://github.com/gluesql/gluesql/pull/1181))
- Add nullable, key, default to `GLUE_TABLE_COLUMNS` [devgony](https://github.com/devgony) ([#1177](https://github.com/gluesql/gluesql/pull/1177))
- Update core to bundle all errors using error module, [panarch](https://github.com/panarch) ([#1178](https://github.com/gluesql/gluesql/pull/1178))
- Update global Error enum to display with error module prefix [panarch](https://github.com/panarch) ([#1175](https://github.com/gluesql/gluesql/pull/1175))
- fix: typo [ever0de](https://github.com/ever0de) ([#1161](https://github.com/gluesql/gluesql/pull/1161))
- Move the SCHEMA\_PREFIX const into an impl in SledStorage [garypen](https://github.com/garypen) ([#1151](https://github.com/gluesql/gluesql/pull/1151))
- Merge evaluate\_stateless into evaluate, [panarch](https://github.com/panarch) ([#1132](https://github.com/gluesql/gluesql/pull/1132))
- Remove memory-storage dep from JsonStorage/ Cargo.toml [panarch](https://github.com/panarch) ([#1131](https://github.com/gluesql/gluesql/pull/1131))
- Simplify JsonlStorage codes [panarch](https://github.com/panarch) ([#1126](https://github.com/gluesql/gluesql/pull/1126))
- Bump rust version to 1.68 [ever0de](https://github.com/ever0de) ([#1125](https://github.com/gluesql/gluesql/pull/1125))
- Keep `Cargo.lock` [ever0de](https://github.com/ever0de) ([#1121](https://github.com/gluesql/gluesql/pull/1121))
- Replace closure to variable in `data/interval` module [ever0de](https://github.com/ever0de) ([#1118](https://github.com/gluesql/gluesql/pull/1118))
- Add `f64` support to `data::Key` [panarch](https://github.com/panarch) ([#1114](https://github.com/gluesql/gluesql/pull/1114))
- Add Ord impl for Key, [panarch](https://github.com/panarch) ([#1110](https://github.com/gluesql/gluesql/pull/1110))
- join\_expr when in\_subquery, exists expr in join constraint [ding-young](https://github.com/ding-young) ([#1112](https://github.com/gluesql/gluesql/pull/1112))
- Split JS related GitHub action, [panarch](https://github.com/panarch) ([#1109](https://github.com/gluesql/gluesql/pull/1109))
- Fix error handling for `ilike` function on `Literal` being treated as⦠[ever0de](https://github.com/ever0de) ([#1107](https://github.com/gluesql/gluesql/pull/1107))
- Remove `Rc` in `validate.rs` [ever0de](https://github.com/ever0de) ([#1106](https://github.com/gluesql/gluesql/pull/1106))
- Remove `Error::Storage` variant [ever0de](https://github.com/ever0de) ([#1105](https://github.com/gluesql/gluesql/pull/1105))
- Replace `Box::pin` to `futures_enum::Stream` [ever0de](https://github.com/ever0de) ([#1103](https://github.com/gluesql/gluesql/pull/1103))
- Remove stream unneeded map ok uses [panarch](https://github.com/panarch) ([#1104](https://github.com/gluesql/gluesql/pull/1104))
- Replace `TryStream` to `Stream` [ever0de](https://github.com/ever0de) ([#1102](https://github.com/gluesql/gluesql/pull/1102))
- Remove `Rc` from `ColumnValidation` [ever0de](https://github.com/ever0de) ([#1101](https://github.com/gluesql/gluesql/pull/1101))
- Remove unneeded Rc uses in fetch\_labels [panarch](https://github.com/panarch) ([#1098](https://github.com/gluesql/gluesql/pull/1098))
- Simplify TryStreamExt using codes in join executor, [panarch](https://github.com/panarch) ([#1097](https://github.com/gluesql/gluesql/pull/1097))
- Fix typo in plan/validate.rs [ever0de](https://github.com/ever0de) ([#1093](https://github.com/gluesql/gluesql/pull/1093))
- Update IdbStorage to use Schema::{to\_ddl, from\_ddl} to manage schema β¦ [panarch](https://github.com/panarch) ([#1090](https://github.com/gluesql/gluesql/pull/1090))
- Update Cargo.toml files to inherit workspace level configs, [panarch](https://github.com/panarch) ([#1088](https://github.com/gluesql/gluesql/pull/1088))
- Add Error enum to core::prelude [panarch](https://github.com/panarch) ([#1087](https://github.com/gluesql/gluesql/pull/1087))
- Update `StringExt` implementation to use `str` [ever0de](https://github.com/ever0de) ([#1082](https://github.com/gluesql/gluesql/pull/1082))
- Add enum `StrSlice` under enum `Evaluated` [zmrdltl](https://github.com/zmrdltl) ([#999](https://github.com/gluesql/gluesql/pull/999))
- refactor plan::validate::Context.labels from String to str [devgony](https://github.com/devgony) ([#1079](https://github.com/gluesql/gluesql/pull/1079))
- Replace `dyn object` to generic [ever0de](https://github.com/ever0de) ([#1075](https://github.com/gluesql/gluesql/pull/1075))
- Implement ValidationContext(schema\_map + alias) to enhance validation of ambiguous columns [devgony](https://github.com/devgony) ([#883](https://github.com/gluesql/gluesql/pull/883))
- Remove `clone` in `check_table_factor` [ever0de](https://github.com/ever0de) ([#1058](https://github.com/gluesql/gluesql/pull/1058))
- Bump rust-toolchain version to `1.66` [ever0de](https://github.com/ever0de) ([#1057](https://github.com/gluesql/gluesql/pull/1057))
- Bump `sqlparser` version to `0.30` [ever0de](https://github.com/ever0de) ([#1056](https://github.com/gluesql/gluesql/pull/1056))
- Replace `Box::pin` to `futures_enum` in aggregate module [ever0de](https://github.com/ever0de) ([#1055](https://github.com/gluesql/gluesql/pull/1055))
- Update js/ Cargo.toml to use gloo-utils for serde handling [panarch](https://github.com/panarch) ([#1049](https://github.com/gluesql/gluesql/pull/1049))
- Remove ast::ColumnOption and merge UNIQUE option to ColumnDef [panarch](https://github.com/panarch) ([#1044](https://github.com/gluesql/gluesql/pull/1044))
- Rewrite \& simplify plan/context.rs codes, [panarch](https://github.com/panarch) ([#1045](https://github.com/gluesql/gluesql/pull/1045))
- Move ast::ColumnOption::Default variant to ColumnDef [panarch](https://github.com/panarch) ([#1042](https://github.com/gluesql/gluesql/pull/1042))
- [AST-Builder] Remove unused prebuild nodes [ding-young](https://github.com/ding-young) ([#1043](https://github.com/gluesql/gluesql/pull/1043))
- Remove data::RowError, [panarch](https://github.com/panarch) ([#1040](https://github.com/gluesql/gluesql/pull/1040))
- Reorder project in ASTBuilder (project -> ordery\_by -> limit,offset) [devgony](https://github.com/devgony) ([#1039](https://github.com/gluesql/gluesql/pull/1039))
- Remove unused LimitOffsetNode in AST builder [panarch](https://github.com/panarch) ([#1038](https://github.com/gluesql/gluesql/pull/1038))
- Rename executor/ blend.rs module to project.rs [SaumyaBhushan](https://github.com/SaumyaBhushan) ([#1036](https://github.com/gluesql/gluesql/pull/1036))
- Add Debug to AST builder nodes [panarch](https://github.com/panarch) ([#1022](https://github.com/gluesql/gluesql/pull/1022))
- Bump rust toolchain version to 1.65 [ever0de](https://github.com/ever0de) ([#1035](https://github.com/gluesql/gluesql/pull/1035))
- Remove `Content::Shared` variant in executor/ `RowContext` [ever0de](https://github.com/ever0de) ([#1032](https://github.com/gluesql/gluesql/pull/1032))
- Merge insert logics in row.rs \& execute.rs into executor/insert.rs [panarch](https://github.com/panarch) ([#1031](https://github.com/gluesql/gluesql/pull/1031))
- Merge FilterContext and BlendContext into RowContext [panarch](https://github.com/panarch) ([#1029](https://github.com/gluesql/gluesql/pull/1029))
- Update `data::Row` to contain columns [panarch](https://github.com/panarch) ([#1026](https://github.com/gluesql/gluesql/pull/1026))
- Add LIST type support in CONCAT function [seonghun-dev](https://github.com/seonghun-dev) ([#1021](https://github.com/gluesql/gluesql/pull/1021))
- Remove LimitOffsetNode in AST builder [panarch](https://github.com/panarch) ([#1023](https://github.com/gluesql/gluesql/pull/1023))
- Fix typo [ever0de](https://github.com/ever0de) ([#1020](https://github.com/gluesql/gluesql/pull/1020))
- Add NumericNode to handle numeric value inputs in AST builder [panarch](https://github.com/panarch) ([#1017](https://github.com/gluesql/gluesql/pull/1017))
- Update ValueError::InvalidJsonString error to show input text [panarch](https://github.com/panarch) ([#1018](https://github.com/gluesql/gluesql/pull/1018))
- Add null() func which makes NULL value in AST builder [panarch](https://github.com/panarch) ([#1016](https://github.com/gluesql/gluesql/pull/1016))
- Add --all-targets option to cargo clippy rust gh-action [panarch](https://github.com/panarch) ([#1015](https://github.com/gluesql/gluesql/pull/1015))
- Move import `ColumnOption` used only by `alter-table` feature in ast-builder [ever0de](https://github.com/ever0de) ([#1014](https://github.com/gluesql/gluesql/pull/1014))
- Add value/ binary\_op `Parital{Ord,Cmp}` impl macro [ever0de](https://github.com/ever0de) ([#1013](https://github.com/gluesql/gluesql/pull/1013))
- Change to use internal chrono errors in parsing datetime [ever0de](https://github.com/ever0de) ([#1010](https://github.com/gluesql/gluesql/pull/1010))
- Resolve unreachable branch of `Value::position` [ever0de](https://github.com/ever0de) ([#1012](https://github.com/gluesql/gluesql/pull/1012))
- Apply binary\_op macros to existing data types [ChobobDev](https://github.com/ChobobDev) ([#987](https://github.com/gluesql/gluesql/pull/987))
- chore: Use rust-cache action to cache dependencies [jongwooo](https://github.com/jongwooo) ([#1006](https://github.com/gluesql/gluesql/pull/1006))
- Group the import statements [yugeeklab](https://github.com/yugeeklab) ([#1005](https://github.com/gluesql/gluesql/pull/1005))
- Make Tester::new async [ShaddyDC](https://github.com/ShaddyDC) ([#1004](https://github.com/gluesql/gluesql/pull/1004))
- Make MemoryStorage Store trait features optional, [panarch](https://github.com/panarch) ([#1003](https://github.com/gluesql/gluesql/pull/1003))
- Replace `double quotes` to `identifier` [devgony](https://github.com/devgony) ([#1001](https://github.com/gluesql/gluesql/pull/1001))
- Change chrono `from_*` methods to `from_*_opt` [ever0de](https://github.com/ever0de) ([#1000](https://github.com/gluesql/gluesql/pull/1000))
- Improve duplicate column names validation [devgony](https://github.com/devgony) ([#995](https://github.com/gluesql/gluesql/pull/995))
- Register `lock` when `fetch_all_schemas` face `idle` [devgony](https://github.com/devgony) ([#996](https://github.com/gluesql/gluesql/pull/996))
- Merge ColumnOption::{Null, NotNull} into a single option [devgony](https://github.com/devgony) ([#986](https://github.com/gluesql/gluesql/pull/986))
- Update rust.yml github action to test examples/ [panarch](https://github.com/panarch) ([#994](https://github.com/gluesql/gluesql/pull/994))
π³ Documentation
**We now provide an official documentation website at https://gluesql.org/docs**
- Add documentation for CLI [devgony](https://github.com/devgony) ([#1183](https://github.com/gluesql/gluesql/pull/1183))
- Add ast\_builder null handling doc [LEE026](https://github.com/LEE026) ([#1209](https://github.com/gluesql/gluesql/pull/1209))
- Add document of datetime current date and time for ast-builder [heewoneha](https://github.com/heewoneha) ([#1208](https://github.com/gluesql/gluesql/pull/1208))
- docs: write position and indexing docs [Bangseungjae](https://github.com/Bangseungjae) ([#1206](https://github.com/gluesql/gluesql/pull/1206))
- Add docs/formatting for ast\_builder [sooyeonyim-t](https://github.com/sooyeonyim-t) ([#1200](https://github.com/gluesql/gluesql/pull/1200))
- Update math basic arithmetic docs for ast\_builder [changi1122](https://github.com/changi1122) ([#1202](https://github.com/gluesql/gluesql/pull/1202))
- Add pattern-matching doc for ast\_builder [LEE026](https://github.com/LEE026) ([#1199](https://github.com/gluesql/gluesql/pull/1199))
- Add ast builder Trimming function docs [Bangseungjae](https://github.com/Bangseungjae) ([#1197](https://github.com/gluesql/gluesql/pull/1197))
- Add doc about the function Date \& Time Conversion [heewoneha](https://github.com/heewoneha) ([#1196](https://github.com/gluesql/gluesql/pull/1196))
- add Docs/case conversion(upper, lower, InitCap) in ast builder [sooyeonyim-t](https://github.com/sooyeonyim-t) ([#1195](https://github.com/gluesql/gluesql/pull/1195))
- Add math conversion docs for ast\_builder [changi1122](https://github.com/changi1122) ([#1192](https://github.com/gluesql/gluesql/pull/1192))
- Added documentation for the round, ceil, and floor functions in ast-builder [LEE026](https://github.com/LEE026) ([#1191](https://github.com/gluesql/gluesql/pull/1191))
- Add documentation layout for AstBuilder [devgony](https://github.com/devgony) ([#1184](https://github.com/gluesql/gluesql/pull/1184))
- Add documentation for Json Storage [devgony](https://github.com/devgony) ([#1170](https://github.com/gluesql/gluesql/pull/1170))
- Add documentation for math functions [panarch](https://github.com/panarch) ([#1173](https://github.com/gluesql/gluesql/pull/1173))
- Add doc for datetime, geometry, list \& map and other functions, [panarch](https://github.com/panarch) ([#1172](https://github.com/gluesql/gluesql/pull/1172))
- Add documentation for text functions in SQL [panarch](https://github.com/panarch) ([#1167](https://github.com/gluesql/gluesql/pull/1167))
- Write docs/ Supported Storages section contents, [panarch](https://github.com/panarch) ([#1165](https://github.com/gluesql/gluesql/pull/1165))
- Add SQL function list with categories to docs/ [panarch](https://github.com/panarch) ([#1166](https://github.com/gluesql/gluesql/pull/1166))
- Write docs/getting-started/javascript-web.md [panarch](https://github.com/panarch) ([#1159](https://github.com/gluesql/gluesql/pull/1159))
- Write docs/ Developing Custom Storages contents [panarch](https://github.com/panarch) ([#1155](https://github.com/gluesql/gluesql/pull/1155))
- docs: add newly added data type into README.md [ChobobDev](https://github.com/ChobobDev) ([#1137](https://github.com/gluesql/gluesql/pull/1137))
- docs(readme): add discord icon to chat badge [LeoDog896](https://github.com/LeoDog896) ([#1122](https://github.com/gluesql/gluesql/pull/1122))
- docs(javascript): update examples link [LeoDog896](https://github.com/LeoDog896) ([#1108](https://github.com/gluesql/gluesql/pull/1108))
Docs - setup
- Add gh-action for docs build - runs on both push \& pr [panarch](https://github.com/panarch) ([#1215](https://github.com/gluesql/gluesql/pull/1215))
- Setup blog based on docusaurus, [panarch](https://github.com/panarch) ([#1212](https://github.com/gluesql/gluesql/pull/1212))
- Remove mdbook which is replaced by docs/ (docusaurus based) [panarch](https://github.com/panarch) ([#1164](https://github.com/gluesql/gluesql/pull/1164))
- Add docusaurus deployment github action setup [panarch](https://github.com/panarch) ([#1163](https://github.com/gluesql/gluesql/pull/1163))
- Update coverage, javascript and rust gh action to ignore `docs/**` pa⦠[panarch](https://github.com/panarch) ([#1168](https://github.com/gluesql/gluesql/pull/1168))
- Update docs/ global styles, [panarch](https://github.com/panarch) ([#1156](https://github.com/gluesql/gluesql/pull/1156))
- Setup new documentation based on docusaurus [panarch](https://github.com/panarch) ([#1136](https://github.com/gluesql/gluesql/pull/1136))
π Tests
- Add ifnull test suite for ast\_builder [LEE026](https://github.com/LEE026) ([#1207](https://github.com/gluesql/gluesql/pull/1207))
- Add datetime current date and time test case for ast builder [heewoneha](https://github.com/heewoneha) ([#1205](https://github.com/gluesql/gluesql/pull/1205))
- Add Position and Indexing test code [Bangseungjae](https://github.com/Bangseungjae) ([#1203](https://github.com/gluesql/gluesql/pull/1203))
- Add math basic arithmetic test case for ast\_builder [changi1122](https://github.com/changi1122) ([#1201](https://github.com/gluesql/gluesql/pull/1201))
- Add testcase/formatting for ast\_builder [sooyeonyim-t](https://github.com/sooyeonyim-t) ([#1198](https://github.com/gluesql/gluesql/pull/1198))
- Add pattern\_matching test cases for ast\_builder [LEE026](https://github.com/LEE026) ([#1194](https://github.com/gluesql/gluesql/pull/1194))
- Add test code function / text / trimming [Bangseungjae](https://github.com/Bangseungjae) ([#1190](https://github.com/gluesql/gluesql/pull/1190))
- Add Testcase/case conversion [sooyeonyim-t](https://github.com/sooyeonyim-t) ([#1193](https://github.com/gluesql/gluesql/pull/1193))
- Add datetime conversion test cases for ast\_builder [heewoneha](https://github.com/heewoneha) ([#1187](https://github.com/gluesql/gluesql/pull/1187))
- Add math conversion test case for ast\_builder [changi1122](https://github.com/changi1122) ([#1189](https://github.com/gluesql/gluesql/pull/1189))
- Add rounding test cases for ast\_builder [LEE026](https://github.com/LEE026) ([#1186](https://github.com/gluesql/gluesql/pull/1186))
- Update delete and insert tests in test-suite/, [panarch](https://github.com/panarch) ([#1180](https://github.com/gluesql/gluesql/pull/1180))
- Remove gen-\_transaction\_dictionary\_tests! in test-suite, [panarch](https://github.com/panarch) ([#1179](https://github.com/gluesql/gluesql/pull/1179))
- Refactor geometry function tests in test-suite, [panarch](https://github.com/panarch) ([#1176](https://github.com/gluesql/gluesql/pull/1176))
- Refactor SQL function tests in test-suite, [panarch](https://github.com/panarch) ([#1174](https://github.com/gluesql/gluesql/pull/1174))
- fix : fix missing intg test for new data type [ChobobDev](https://github.com/ChobobDev) ([#1143](https://github.com/gluesql/gluesql/pull/1143))
- Add unit tests for `TryFrom<&Value> for Decimal` [ChobobDev](https://github.com/ChobobDev) ([#1139](https://github.com/gluesql/gluesql/pull/1139))
- Add "cli" unittest [pythonbrad](https://github.com/pythonbrad) ([#1094](https://github.com/gluesql/gluesql/pull/1094))
- Add `core/data` module unit tests [pythonbrad](https://github.com/pythonbrad) ([#1092](https://github.com/gluesql/gluesql/pull/1092))
π Bug Fixes
- Fix docusaurus pages/index broken link [panarch](https://github.com/panarch) ([#1214](https://github.com/gluesql/gluesql/pull/1214))
- Fix docs/ Discord GlueSQL channel invite link address [panarch](https://github.com/panarch) ([#1213](https://github.com/gluesql/gluesql/pull/1213))
- Fix InvalidJsonString error message replacing payload to fileName [devgony](https://github.com/devgony) ([#1185](https://github.com/gluesql/gluesql/pull/1185))
- Fix TryFrom `Value::Str` to `u128` not to use `parse_uuid` [ChobobDev](https://github.com/ChobobDev) ([#1134](https://github.com/gluesql/gluesql/pull/1134))
- Fix column alias with identifer for `TableFactor::Derived` [ding-young](https://github.com/ding-young) ([#1119](https://github.com/gluesql/gluesql/pull/1119))
- Pass data even when `deleted_by` is not present [ever0de](https://github.com/ever0de) ([#1117](https://github.com/gluesql/gluesql/pull/1117))
- Fix MemoryStorage \& WebStorage primary key support [panarch](https://github.com/panarch) ([#1115](https://github.com/gluesql/gluesql/pull/1115))
- Fix `plan::validate` to handle `CTAS` and `ITAS` adding unit test [devgony](https://github.com/devgony) ([#1074](https://github.com/gluesql/gluesql/pull/1074))
- Fix test-suite tester functions to show (found, expected) shape [panarch](https://github.com/panarch) ([#1028](https://github.com/gluesql/gluesql/pull/1028))
π New Contributors
* arbfay made their first contribution in https://github.com/gluesql/gluesql/pull/971
* ShaddyDC made their first contribution in https://github.com/gluesql/gluesql/pull/1004
* yugeeklab made their first contribution in https://github.com/gluesql/gluesql/pull/1005
* jongwooo made their first contribution in https://github.com/gluesql/gluesql/pull/1006
* SaumyaBhushan made their first contribution in https://github.com/gluesql/gluesql/pull/1036
* LeoDog896 made their first contribution in https://github.com/gluesql/gluesql/pull/1108
* garypen made their first contribution in https://github.com/gluesql/gluesql/pull/1151
* LEE026 made their first contribution in https://github.com/gluesql/gluesql/pull/1186
* changi1122 made their first contribution in https://github.com/gluesql/gluesql/pull/1192
* heewoneha made their first contribution in https://github.com/gluesql/gluesql/pull/1187
* sooyeonyim-t made their first contribution in https://github.com/gluesql/gluesql/pull/1193
* Bangseungjae made their first contribution in https://github.com/gluesql/gluesql/pull/1190
**Full Changelog**: https://github.com/gluesql/gluesql/compare/v0.13.1...v0.14.0