Releases: FerretDB/FerretDB
v1.12.1
What's Changed
New PostgreSQL backend
The new PostgreSQL backend is ready for testing. Enable it with --postgresql-new
flag or FERRETDB_POSTGRESQL_NEW=true
environment variable. The next FerretDB version will enable it by default.
Docker images changes
Production Docker images use scratch
as a base Docker image. The only file present in the image is a FerretDB binary (with root TLS certificates embedded).
arm64
binaries
In addition to linux/arm64
Docker images, we now provide linux/arm64
binaries and .deb
/ .rpm
packages.
New Features 🎉
- Build
arm64
binaries and packages by @AlekSi in #3477 - Implement metrics collection by @Mihai22125 in #3430
- Implement
RenameCollection
by @AlekSi in #3440 - Implement
InsertAll
by @chilagrow in #3419 - Implement
DeleteAll
by @chilagrow in #3441 - Implement
DropDatabase
andStatus
by @chilagrow in #3451 - Implement
UpdateAll
by @chilagrow in #3449 - Implement
ListCollections
,CreateCollection
andDropCollection
by @chilagrow in #3444 - Implement
explain
by @noisersup in #3465 - Implement
database.Stats
by @chilagrow in #3464 - Implement
collection.Stats
by @chilagrow in #3478 - Implement
CreateIndexes
,DropIndexes
,ListIndexes
by @rumyantseva in #3468 - Implement filter pushdown by @noisersup in #3482
- Add info about indexes to
dbStats
response by @rumyantseva in #3534
Fixed Bugs 🐛
- Verify that client metadata not being mutated by @kropidlowsky in #3194
- Relax restrictions when _id is not the first field in projection by @princejha95 in #3491
- Fix
_id
restriction in aggregation$project
stage by @chilagrow in #3508
Enhancements 🛠
- Implement validation for
createIndexes
anddropIndexes
commands for SQLite by @rumyantseva in #3373 - Use
Ping
for checking connection by @AlekSi in #3519
Documentation 📄
- Update Writing Guide by @Fashander in #3424
- Add blog post on Using MajorM as MongoDB GUI for FerretDB by @Fashander in #3387
- Add release blog post for FerretDB v1.11.0 by @Fashander in #3439
- Fix RSS feed issue with images by @Fashander in #3417
- Republish Hacktobest blog post by @Fashander in #3429
- Add blog post on Enmeshed by @Fashander in #3448
- Add
$project
and$unset
to aggregation stages section by @Akhaled19 in #3450 - Add operation mode definition to Glossary by @rohitkbc in #3472
- Improve definitions for aggregation stages by @Fashander in #3499
- Add TODOs for capped collections by @AlekSi in #3461
- Fix blog post formatting by @Fashander in #3515
- Fix typo in contributing documentation by @jrmanes in #3507
- Add mermaid diagrams by @AlekSi in #3524
- Update documentation by @AlekSi in #3530
Other Changes 🤖
- Add CI configurations by @AlekSi in #3423
- Fix CI configuration and add TODOs by @AlekSi in #3436
- Add SAP HANA backend stub by @AlekSi in #3433
- Bump deps by @AlekSi in #3437
- Remove extra function by @AlekSi in #3447
- Fix fluky
TestRenameCollectionCompat
tests by @chilagrow in #3438 - Mark pushdown results based on tested backend by @noisersup in #3446
- Run tests with
envtool tests run
by @AlekSi in #3453 - Remove unused expected failures by @AlekSi in #3455
- Tweak SQLite backend tests by @AlekSi in #3460
- Add tests for backends contract by @AlekSi in #3456
- Speed-up Docker image building by @AlekSi in #3470
- Fix running a subset of tests by @AlekSi in #3479
- Add a workaround for Docker build failures by @AlekSi in #3480
- Add stubs for
Collection.Compact
by @AlekSi in #3485 - Process collection name param using
collection
tag by @adetunjii in #3476 - Revive logic of lower cased key for collection name by @chilagrow in #3494
- Add
RecordID
totypes.Document
by @AlekSi in #3495 - Extract
ReservedPrefix
constant by @AlekSi in #3497 - Fix stress tests by @AlekSi in #3502
- Fix concurrent Docker builds by @AlekSi in #3503
- Store indexes metadata by @rumyantseva in #3434
- Tweak tests timeouts by @AlekSi in #3514
- Bump Go version by @AlekSi in #3510
- Disallow importing handlers code from backends by @AlekSi in #3512
- Disable
auto_vacuum
for SQLite by @AlekSi in #3496 - Fix index name generation by @rumyantseva in #3511
- Fix unit tests for indexes by @rumyantseva in #3531
- Make new PostgreSQL backend tests pass by @rumyantseva in #3522
New Contributors
- @Mihai22125 made their first contribution in #3430
- @Akhaled19 made their first contribution in #3450
- @rohitkbc made their first contribution in #3472
- @princejha95 made their first contribution in #3491
- @jrmanes made their first contribution in #3507
v1.11.0
Fixed Bugs 🐛
- Fix
collStats
to return correct count of documents forSQLite
by @chilagrow in #3363 - Fix metadata updates for
dropIndexes
by @rumyantseva in #3358
Enhancements 🛠
- Return statistics of indexes for
collStats
anddbStats
for SQLite backend by @rumyantseva in #3361
Documentation 📄
- Improve blog format by @Fashander in #3359
- Add a blog post for v1.10 by @AlekSi in #3346
- Add docs for migrating to MongoDB from FerretDB by @Fashander in #3374
- Mention SQLite in docs by @ptrfarkas in #3408
Other Changes 🤖
- Add test for inserting different data types by @noisersup in #3345
- Recreate test directory by @AlekSi in #3364
- Use consistent spelling by @AlekSi in #3365
- Use filter and insert more documents in
BenchmarkReplaceSettingsDocument
by @chilagrow in #3343 - Replace deprecated Jaeger exporter by @adetunjii in #3368
- Remove the need to close
conninfo
by @AlekSi in #3376 - Add small tweaks by @AlekSi in #3377
- Add CI configuration for SQLite without pushdown by @AlekSi in #3381
- Enforce valid
types
usage by @AlekSi in #3384 - Reorder codebase in SQLite registry by @chilagrow in #3382
- Store
PostgreSQL
metadata by @chilagrow in #3356 - Add
TODO
s by @AlekSi in #3412 - Run new PostgreSQL backend tests by @AlekSi in #3407
- Implement
Query
in newPostgreSQL
backend by @chilagrow in #3411
v1.10.1
What's Changed
With this release, the SQLite backend support is officially out of beta, on par with our PostgreSQL backend, and fully supported!
New Features 🎉
- Implement
aggregate
for SQLite by @chilagrow in #3256 - Implement
collStats
for SQLite by @chilagrow in #3295 - Implement
createIndexes
for SQLite by @rumyantseva in #3304 - Implement
dbStats
for SQLite by @chilagrow in #3270 - Implement
distinct
for SQLite by @chilagrow in #3265 - Implement
dropIndexes
for SQLite by @rumyantseva in #3329 - Implement
explain
command for SQLite by @noisersup in #3264 - Implement
findAndModify
for SQLite by @chilagrow in #3302 - Implement
getLog
for SQLite by @rumyantseva in #3279 - Implement
listDatabases
for SQLite by @rumyantseva in #3269 - Implement
listIndexes
for SQLite by @rumyantseva in #3301 - Implement
renameCollection
for SQLite by @chilagrow in #3321 - Implement
serverStatus
anddataSize
commands for SQLite by @chilagrow in #3316 - Support
_id
implicit filter forObjectID
in SQLite by @chilagrow in #3330 - Support
$bit
bitwise update operator by @adetunjii in #3266 - Support
ordered
insert
s for SQLite by @AlekSi in #3223
Enhancements 🛠
- Make
delete
s atomic for SQLite by @AlekSi in #3291 - Make
update
s atomic for SQLite by @AlekSi in #3296 - Do not change
search_path
parameter by @AlekSi in #3299
Documentation 📄
- Cleanup
$bit
update operator by @chilagrow in #3315 - Document how to test for compatibility by @b1ron in #3268
- Update blog writing guide documentation by @chilagrow in #3209
- Update category links in writing guide by @Fashander in #3323
- Update deb.md - minor grammar correction by @athkishore in #3289
- Update the writing guide by @Fashander in #3311
Other Changes 🤖
- Add ability to freeze
*types.Document
and*types.Array
by @KrishnaSindhur in #3253 - Add backend decorators and OpLog stub by @AlekSi in #3303
- Add backend interface for
collStats
by @chilagrow in #3294 - Add backend interface for
dbStats
by @chilagrow in #3267 - Add more tests by @chilagrow in #3336
- Add new PostgreSQL backend stub by @AlekSi in #3319
- Add tests for accessing aggregation variable
$$ROOT
field by @chilagrow in #3254 - Add tests for validation bug by @AlekSi in #3286
- Add transactions to
fsql
by @AlekSi in #3278 - Bump deps by @AlekSi in #3284
- Clean-up
*types.Timestamp
a bit by @AlekSi in #3305 - Do not
ConsumeValues
in the$group
aggregation stage by @adetunjii in #3344 - Expand architecture docs, add comments by @AlekSi in #3288
- Fix params handling for
dropIndexes
implementation for SQLite by @rumyantseva in #3350 - Make registry return full collection info by @AlekSi in #3292
- Remove
Database.Close
by @AlekSi in #3327 - Remove duplicated
$expr
tests by @chilagrow in #3255 - Return correct response if unique index violation happened on SQLite backend by @rumyantseva in #3353
- Simplify and deprecate
commonerrors.WriteErrors
by @AlekSi in #3258 - Skip tests for
enable
setFreeMonitoring
for MongoDB by @chilagrow in #3318 - Tweak MongoDB initialization process by @AlekSi in #3307
- Update TODO comments by @noisersup in #3262
- Use
pkgsite
instead ofgodoc
by @AlekSi in #3326 - Use Go 1.21 by @AlekSi in #3324
New Contributors
- @athkishore made their first contribution in #3289
v1.9.0
Enhancements 🛠
- Add more metrics for
*sql.DB
by @slavabobik in #3230
Documentation 📄
- Fix typos in documentation by @pratikmota in #3217
- Make the writing guide accessible but unlisted by @AlekSi in #3221
- Add blog posts by @Fashander in #3198, #3153, #3210, and #3201
Other Changes 🤖
- Publish Docker images on quay.io by @AlekSi in #3250
- Add linter for issue comments by @KrishnaSindhur in #3154
- Improve building with test coverage information by @durgakiran in #3059
- Update
go-hdb
to v1.4.1 by @aenkya in #3213 - Configure repo settings with files by @AlekSi in #3208
- Bump deps by @AlekSi in #3215 and #3248
- Add another stress test for SQLite by @noisersup in #3195
- Fix concurrent SQLite tests by @AlekSi in #3222
- Refactor aggregation operators by @noisersup in #3188
- Add stubs for
renameCollection
by @AlekSi in #3233 - Update issue links by @AlekSi in #3234
- Add stubs for
explain
by @AlekSi in #3236 - Simplify
commonerrors
package by @AlekSi in #3227 - Refactor aggregation accumulators by @noisersup in #3203
- Add new PostgreSQL backend stub by @AlekSi in #3251
- Cleanup SQLite tests by @noisersup in #3246
New Contributors
- @aenkya made their first contribution in #3213
- @pratikmota made their first contribution in #3217
- @durgakiran made their first contribution in #3059
- @slavabobik made their first contribution in #3230
v1.8.0
New Features 🎉
- Implement
$group
stage_id
expression by @chilagrow in #3138 - Implement
$expr
evaluation query operator by @chilagrow in #3163
Fixed Bugs 🐛
- Do not return immutable
_id
error fromfindAndModify
for upserting same_id
by @chilagrow in #3171
Enhancements 🛠
Other Changes 🤖
- Make SQLite integration tests pass by @noisersup in #3150, #3151, #3152, #3159, #3173, #3174, #3182, #3184, #3185
- Expect some
aggregate
andinsert
tests to fail for SQLite by @AlekSi in #3147 - Bump deps by @AlekSi in #3142
- Improve MongoDB/FerretDB error checking in tests by @AlekSi in #3143
- Bump deps, including Go by @AlekSi in #3160
- Simplify tests a bit by @AlekSi in #3149
- Use one implementation for finding path values by @chilagrow in #3087
- Add tests for
$$ROOT
aggregation expression variable by @chilagrow in #3180 - Add tests for
$$ROOT
by @chilagrow in #3187
v1.7.0
New Features 🎉
- Implement
$sum
aggregation standard operator by @chilagrow in #3063
Fixed Bugs 🐛
Enhancements 🛠
- Add validating max nested document/array depth by @kropidlowsky in #2882
- Validate database and collection names for SQLite handler by @noisersup in #2868
- Add basic metrics, logging and tracing for SQLite by @AlekSi in #3123
- Tweak and document SQLite URI parameters by @AlekSi in #3128
Documentation 📄
- Add blog post for FerretDB v1.6.0 by @Fashander in #3058
- Update changelog by @AlekSi in #3072
- Update blog post for FerretDB v1.6.0 by @Fashander in #3073
- Tweak documentation and blog by @Fashander in #2992
- Add blog post on "Community matters: fireside chat with Artem Ervits, CockroachDB" by @Fashander in #3066
- Update Blog Post by @Fashander in #3086
- Update tags formatting in writing guide by @Fashander in #3097
- Add blog post on "Using Mingo with FerretDB" by @Fashander in #3074
- Simplify
checkdocs
linter by @AlekSi in #3104 - Update MongoDB comparision blog post by @ptrfarkas in #3117
- Update MongoDB comparision blog post by @ptrfarkas in #3119
- Add blog post on Grafana Monitoring for FerretDB by @Fashander in #3106
Other Changes 🤖
- Bump deps by @AlekSi in #3064
- Mark some tests as failing for SQLite by @AlekSi in #3051
- Improve sjson package fuzzing by @quasilyte in #3071
- Merges fuzztool into envtool by @Aditya1404Sal in #2645
- Do not import
commonerrors
in tests by @AlekSi in #3081 - Remove dead code by @AlekSi in #3093
- Allow to change SQLite URI in tests by @AlekSi in #3092
- Replace test doubles with constants by @noisersup in #3024
- Improve
checkdocs
linter by @KrishnaSindhur in #3095 - Add daily progress principle to
PROCESS.md
by @rumyantseva in #3098 - Support
_id
aggregation operators for$group
stage by @noisersup in #3096 - Bump the tools group in /tools with 1 update by @dependabot in #3109
- Backport v1.6.1 fixes by @AlekSi in #3107
- Support recursive operator calls for
$sum
aggregation accumulator by @noisersup in #3116
New Contributors
- @Aditya1404Sal made their first contribution in #2645
- @KrishnaSindhur made their first contribution in #3095
- @ptrfarkas made their first contribution in #3117
v1.6.1
Fixed Bugs 🐛
v1.6.0
New Features 🎉
- Implement
killCursors
command by @AlekSi in #2939 - Implement
ping
command for SQLite by @noisersup in #2965 - Implement
getParameter
method for SQLite by @chilagrow in #2985
Fixed Bugs 🐛
- Ignore
lsid
field in all commands by @b1ron in #3010 - Allow
$set
operator to update_id
by @chilagrow in #3009 - Apply pushdown for
limit
by @chilagrow in #2993 - Fix
update
with query operator forupsert
option by @chilagrow in #3028
Enhancements 🛠
- Add integration tests for
maxTimeMS
infind
,aggregate
andgetMore
by @chilagrow in #2953 - Remove double decoding in unmarshalSingleValue by @quasilyte in #3018
- Ignore
count.fields
argument by @AlekSi in #3048
Documentation 📄
- Add blog post on FerretDB release v1.5.0 by @Fashander in #2958
- Mention SQLite in README.md by @AlekSi in #2968
- Add blog post about using NoSQLBooster with FerretDB by @Fashander in #2962
- Update blog post image by @Fashander in #3029
- Add a note about setting the stable API version by @b1ron in #3035
- Add blog post on "How to run FerretDB on top of StackGres" by @Fashander in #2869
- Fix blog post formatting by @AlekSi in #3047
- Update database naming restrictions by @b1ron in #3042
Other Changes 🤖
- Move
find
andaggregation
cursor integration tests togetMore
by @chilagrow in #2952 - Make a copy of the
testing.TB
interface by @AlekSi in #2987 - Bump deps by @AlekSi in #2998
- Remove Tigris from documentation and builds by @AlekSi in #2999
- Remove Tigris code by @AlekSi in #3001
- Remove Tigris from tests by @AlekSi in #3002
- Crush PNG files to make them smaller by @AlekSi in #3020
- Update issue URL by @AlekSi in #3021
- Move
testutil.TB
totesttb.TB
by @AlekSi in #3022 - Move
logout
tocommoncommands
by @AlekSi in #3019 - Make
task all
run only unit tests by @AlekSi in #3023 - Update closed issue links by @chilagrow in #3027
- Unskip
findAndModify
$set
integration test for_id
by @chilagrow in #3025 - Expect
renameCollection
tests failures by @AlekSi in #3007 - Fix
killCursors
edge case by @AlekSi in #3030 - Fix error checking in backend contracts by @AlekSi in #3031
- Bump deps by @AlekSi in #3034
- Remove
Type()
interface from aggregation stage by @chilagrow in #3045 - Remove fixed issue link and clean up integration test provider setup by @chilagrow in #3052
- Prepare v1.6.0 release by @AlekSi in #3056
New Contributors
- @quasilyte made their first contribution in #3018
v1.5.0
What's Changed
This release provides beta-level support for the SQLite backend. There is some missing functionality, but it is ready for early adopters.
This release provides improved cursor support, enabling commands like find
and aggregate
to return large data sets much more effectively.
Tigris data users: Please note that this is the last release of FerretDB which includes support for the Tigris backend. Starting from FerretDB v1.6.0, Tigris will not be supported. If you wish to use Tigris, please do not update FerretDB beyond v1.5.0. This and earlier versions of FerretDB with Tigris support will still be available on GitHub.
New Features 🎉
- Implement
count
for SQLite by @AlekSi in #2865 - Enable cursor support for PostgreSQL and SQLite by @AlekSi in #2864
Enhancements 🛠
- Support
find
singleBatch
and validategetMore
parameters by @chilagrow in #2855 - Support cursors for aggregation pipelines by @chilagrow in #2861
- Fix collection name starting with dot validation by @noisersup in #2912
- Improve validation for
createIndexes
anddropIndexes
by @chilagrow in #2884 - Use cursors in
find
command by @AlekSi in #2933
Documentation 📄
- Add blogpost on FerretDB v1.4.0 by @Fashander in #2858
- Add blog post on "Meet FerretDB at Percona University in Casablanca and Belgrade" by @Fashander in #2870
- Update supported commands by @chilagrow in #2876
- Add blog post "FerretDB Demo: Launch and Test a Database in Minutes" by @Fashander in #2851
- Fix Github link for Dance repository by @Matthieu68857 in #2887
- Add blog post on "How to Configure FerretDB to work on Percona Distribution for PostgreSQL" by @Fashander in #2911
- Update incorrect blog post image by @Fashander in #2920
- Crush PNG images by @AlekSi in #2931
Other Changes 🤖
- Add more validation and tests for
$unset
by @chilagrow in #2853 - Make it easier to debug GitHub Actions by @AlekSi in #2860
- Unify tests for indexes by @AlekSi in #2866
- Bump deps by @AlekSi in #2875
- Fix fuzzing corpus collection by @AlekSi in #2879
- Add basic tests for iterators by @AlekSi in #2880
- Implement basic
insert
support for SAP HANA by @polyal in #2732 - Update contributing docs by @AlekSi in #2828
- Improve
wire
andsjson
fuzzing by @AlekSi in #2883 - Add operators support for
$addFields
by @noisersup in #2850 - Unskip test that passes now by @AlekSi in #2885
- Tweak contributing guidelines by @AlekSi in #2886
- Add handler's metrics registration by @AlekSi in #2895
- Clean-up some code and comments by @AlekSi in #2904
- Fix cancelation signals propagation by @AlekSi in #2908
- Bump deps, add permissions monitoring by @AlekSi in #2930
- Fix integration tests after bumping deps by @noisersup in #2934
- Update benchmark to use cursors by @AlekSi in #2932
- Set
minWireVersion
to 0 by @AlekSi in #2937 - Test
getMore
integration test using one connection pool by @chilagrow in #2878 - Add better metrics for connections by @AlekSi in #2938
- Use cursors with iterator in
aggregate
command by @chilagrow in #2929 - Implement proper response for
createIndexes
by @rumyantseva in #2936 - Re-implement
DELETE
for SQLite backend by @w84thesun in #2907 - Validate database names for SQLite handler by @noisersup in #2924
- Add
insert
documents type validation by @w84thesun in #2946 - Convert SQLite directory to URI by @w84thesun in #2922
- Do not break fuzzing initialization by @AlekSi in #2951
New Contributors
- @Matthieu68857 made their first contribution in #2887
v1.4.0
New Features 🎉
- Implement
$type
aggregation operator by @noisersup in #2789 - Implement
$unset
aggregation pipeline stage by @shibasisp in #2676 - Implement simple
$addFields/$set
aggregation pipeline stages by @shibasisp in #2783 - Implement
createIndexes
for unique indexes by @w84thesun in #2814
Documentation 📄
- Add blog post for FerretDB v1.3.0 by @Fashander in #2791
- Add
release
tag to release blog post by @AlekSi in #2792 - Add textlint rules for en dashes and em dashes by @AlekSi in #2823
- Add Blog Post on Document Databases by @Fashander in #2204
- Add user documentation about unique index creation by @rumyantseva in #2856
Other Changes 🤖
- Make
testutil.Logger
easier to use by @AlekSi in #2790 - Bump deps by @AlekSi in #2798
- Refactor SQLite handler by @AlekSi in #2731
- Merge test workflows to fix coverage calculation by @AlekSi in #2801
- Improve
testDistinctCompat
by @noisersup in #2782 - Use iterator in
$sum
aggregation accumulator by @chilagrow in #2799 - Bump Go to 1.20.5 by @AlekSi in #2810
- Fix free monitoring tests for MongoDB 6.0.6 by @jeremyphua in #2784
- Bump MongoDB to 6.0.6 by @AlekSi in #2727
- Bump MongoDB Go driver by @AlekSi in #2817
- Implement
envtool tests shard
command by @kropidlowsky in #2773 - Check error message in non compat integration tests by @chilagrow in #2806
- Shard integration tests by @AlekSi in #2820
- Describe current test naming conventions in the contributing guidelines by @rumyantseva in #2821
- Add tests for
find
/getMore
batchSize
by @chilagrow in #2825 - Add more test cases for index validation by @rumyantseva in #2752
- Fix running single test with
task
by @w84thesun in #2832 - Refactor
getWholeParamStrict
andGetScaleParam
functions by @w84thesun in #2831 - Prevent tests deadlock when backend is down by @AlekSi in #2846
- Fix
unimplemented-non-default
tag usages by @w84thesun in #2848 - Bump deps by @AlekSi in #2849
- Add more tests for
$set
and$addFields
aggregation stages by @chilagrow in #2844 - Improve benchmarks by @AlekSi in #2833
- Handle
$type
aggregation operator errors properly by @noisersup in #2829
New Contributors
- @shibasisp made their first contribution in #2676