Bot releases are hidden (Show)
A name change that comes with a change in objectives: ChaiSQL strives to become a modern SQL embedded database.
The goal is to follow the SQL standard as much as possible, without sacrificing schema flexibility.
TIMESTAMP
typeDOCUMENT
type is now OBJECT
Full Changelog: https://github.com/chaisql/chai/compare/v0.15.3...v0.16.0
Published by asdine 10 months ago
Published by asdine over 1 year ago
This release contains one bug fix:
Published by asdine over 2 years ago
This release contains a few bug fixes:
NotFoundError
or an AlreadyExists
error. 492cdbe26b2f2f415a37912f291e552af7484eaaPublished by asdine over 2 years ago
Genji v0.15.0
is out and comes a few big architectural changes 🚀
Historically, Genji started as a layer on top of the amazing Bolt and Badger.
As features were being added, Genji is pretending to become more and more like a full featured SQL database, and thus needed more flexibility than what Bolt and Badger could offer.
Things like custom key comparators (to control how keys are organized in the tree), snapshots, concurrent read/writes (in Bolt only), were missing greatly. Both came with their own transaction mechanism which were a bit limiting for Genji (limited number of writes per transaction, no support for transaction promotion, etc.).
Also, having to maintain both data layers came with lots of challenges that we believe wasn't worth it.
That's why we decided to use a single backend: Pebble.
Pebble comes with lots of nice features, here are the ones we consider particularly interesting for Genji:
Pebble doesn't come with its own transactions mechanism, so we had to implement our own, which comes will lots of advantages:
The CREATE TABLE
statement introduces new rules for table creation that gives much more control.
By default, a table now only inserts fields that have been declared. Any other field will be ignored and not inserted.
CREATE TABLE foo (a INTEGER, b TEXT);
INSERT INTO foo (a, b, c) VALUES (1, 'hello', 'not inserted');
INSERT INTO foo VALUES {a: 2, b: 'bye', c: 'not inserted'};
SELECT * FROM foo;
{
"a": 1,
"b": "hello"
}
{
"a": 2,
"b": "bye"
}
If you want to insert any field, and only care about declaring a few ones, you can use the ...
notation.
CREATE TABLE foo (a INTEGER, b TEXT, ...);
INSERT INTO foo (a, b, c) VALUES (1, 'hello', 'inserted');
SELECT * FROM foo;
{
"a": 1,
"b": "hello"
"c": "inserted"
}
Nested fields are now declared like this:
CREATE TABLE user (
name TEXT,
address (
number INTEGER,
street TEXT,
zipcode TEXT NOT NULL
)
);
INSERT INTO user (name, address) VALUES (
"Ilias",
{
number: 10,
street: "rue de la paix",
zipcode: "12345"
}
);
Historically, Genji has invested a lot of efforts in supporting TinyGo in the hopes of being compiled in WASM and being used in the browser.
However, because of the lack of support for certain packages of the standard library (like reflect
, fmt
, encoding/jsom
, etc.), it was very difficult for us to keep maintaining compatibility across different releases.
Even when we managed to compile, TinyGo would produce very large files (> 3MB), which defeats the purpose of using it.
We may reconsider this in the future as the support for Wasm in TinyGo becomes more mature.
⚠️ This release introduces a big refactoring and thus is not compatible with previous versions.
⚠️ It also only support Go 1.18+ as it relies on the new generics feature introduced in Go 1.18.
However, the database format is almost stable and future releases should not introduce any breaking changes.
If that happens, we will over communicate and provide ways to make it transparent as much as possible.
Our goal is to reach v1 very soon 🚀
genji restore
command with certains whitespace characters by @tzzed in https://github.com/genjidb/genji/pull/439
.timer
shell command by @tzzed in https://github.com/genjidb/genji/pull/445
genji insert
by @tzzed in https://github.com/genjidb/genji/commit/b4606f7cdfd9c025b83b85e1c3c28f05b277a56a
UPDATE
behavior with primary keys by @asdine in https://github.com/genjidb/genji/commit/f81f3f18f04df59fd6fa0c13b8c97e38bb3a1228
LIMIT
and OFFSET
by @asdine in https://github.com/genjidb/genji/commit/6178d1acfb341950f83631a48132fde3b78382bf
Full Changelog: https://github.com/genjidb/genji/compare/v0.14.0...v0.15.0
Published by asdine almost 3 years ago
Published by asdine almost 3 years ago
typeof
function by @asdine in bba4c0a63006e936644301483d6f7a0d29283f37bench
command by @asdine in 74603aa55e815bc97dd5d5aca5a9fea9fc8f78edFull Changelog: https://github.com/genjidb/genji/compare/v0.13.0...v0.14.0
Published by asdine over 3 years ago
__genji_catalog
table and drop __genji_table
and __genji_indexes
This release also contains various bug fixes.
Published by asdine over 3 years ago
UNIQUE
table constraint #387PRIMARY KEY
table constraint #333INSERT ... SELECT
#385time.Time
with driver.Scanner
#258.schema
command #339 @tzzedPublished by asdine over 3 years ago
OFFSET
, LIMIT
and ORDER BY
to DELETE statement #318 #319 #320 @jhchabranORDER BY
with sql/driver
implementation #352 @tzzedBLOB
to byte array decoding #305genji dump
command #315 @tzzedgenji restore
command #321 @tzzedDEFAULT
clause #329 @jhchabrangenji insert
when specified engine doesn't exist #331Published by asdine over 3 years ago
COUNT(*)
with empty set #284.save
command #311 @jhchabranPublished by asdine almost 4 years ago
__genji_indexes
table #214 @tzzedALTER TABLE ... ADD FIELD ...
#96 @tdakkotaLIKE
operator #241 @tdakkotaSELECT DISTINCT
#264 @tdakkotaIN
operator behavior with parentheses #207 @tdakkotaSELECT
with LIMIT
min(0)
/max(0)
#257 @goku321document.NewFromStruct
#225 @tzzedNO_COLOR
and NO_HISTORY
environment variables #215 @tie.dump
command #181 @tzzedversion
command #184 @cvhariharanexit
and help
commands without leading dot #180 @Amirhossein2000Published by asdine almost 4 years ago
Published by asdine about 4 years ago
BEGIN
, ROLLBACK
, and COMMIT
statements #78UPDATE
statement #84GROUP BY
clause #6COUNT
aggregator #5MIN
aggregator #165MAX
aggregator #166SUM
aggregator #4encoding/json
dependency and use jsonparser instead #203MapScan
now decodes nested documents #191Published by asdine about 4 years ago
__genji_tables
primary key #173Published by asdine about 4 years ago
REINDEX
statement #72ALTER TABLE ... RENAME TO ...
statement #95__genji_tables
table #152float64
type to double
#130badgerengine
into its own module #140memoryengine
with custom implementation #139time.Time
in document.StructScan
.help
command #160.indexes
command #100UPDATE ... SET
clause setting the wrong array indexes #91CAST
behavior #138Published by asdine over 4 years ago
IS
and IS NOT
#75IN
and NOT IN
#76 #81UPDATE ... UNSET
#68EXPLAIN
#102UPDATE ... SET
set a field to every matching document #82ORDER BY
is used with an indexed field #71DROP TABLE
behavior that used to remove all database indexes #99Published by asdine over 4 years ago
NOT NULL
field constraintsSELECT
without table referenceAS
CAST
Published by asdine almost 5 years ago
database
packageORDER BY
Published by asdine almost 5 years ago
(db/tx).QueryRecord
method to query a single recorddb.SQLDB
method that wraps the db into a database/sql
dbtx.ListTables
methodtx.ReIndex
methodtx.ReIndexAll
methodrecordutil
to record
record.Scan
methodkey()
function to return the primary key!=
operator==
operator as an alias for =
engine/memory
to engine/memoryengine
engine/bolt
to engine/boltengine
engine/badger
to engine/badgerengine
genji generate
commandgenji:"pk"
removed$HOME/.genji_history
record.Scanner
as a scan target