Releases: scylladb/gocqlx
Release 2.8.0
The release adds support for schemagen to generate structs in table model, as well as username/password authentication to schemagen.
What's Changed
- Force metadata retrieval for CAS queries by @Drahflow in #221
- Fix typo in test by @Bobochka in #223
- fix using timeout order in select stmt by @YeminLi in #229
- update documentation with examples of non-persisted fields by @slycrel in #226
- queryx: add note to ExecCAS docs by @kevinbarbour in #231
- Update GH actions by @mrwormhole in #233
- add user password authentication to schemagen by @niklassemmler in #236
- Structs tables by @pavle995 in #212
New Contributors
- @YeminLi made their first contribution in #229
- @slycrel made their first contribution in #226
- @kevinbarbour made their first contribution in #231
- @mrwormhole made their first contribution in #233
- @niklassemmler made their first contribution in #236
- @pavle995 made their first contribution in #212
Full Changelog: v2.7.0...v2.8.0
Release 2.7.0
What's Changed
- migrate: add CallbackRegister::Find by @mmatczuk in #210
- dbutil: RewriteTable add possibility to skip rows by @mmatczuk in #211
- Added test database name flag by @spolischook in #209
- Make qb.DESC of type qb.Order, not bool by @Drahflow in #218
- avoid DATA RACE if reusing query builder by @tehsphinx in #220
- Add TupleNamed for two-sided range-queries on tuples by @Drahflow in #219
New Contributors
- @spolischook made their first contribution in #209
- @Drahflow made their first contribution in #218
- @tehsphinx made their first contribution in #220
Full Changelog: v2.6.0...v2.7.0
Release 2.6.0
This release adds automatic support for gocql.UnsetValue
.
This is a special value representing not set
i.e. not resulting in any change to the existing value.
This is great for PATCHING entities, you can have a single prepared statement that can be reused to update any combination of the fields.
Example:
The following example upserts Operation
not changing the Fee
field.
// Insert operation with empty fee.
insertQuery = insertOperation.Query(session).
WithBindTransformer(gocqlx.UnsetEmptyTransformer).
BindStruct(Operation{
ID: "2",
ClientID: "42",
Type: "Input",
PaymentID: "1",
Fee: nil,
})
if err := insertQuery.ExecRelease(); err != nil {
t.Fatal("ExecRelease() failed:", err)
}
Also, the bind transformer can be set globally for the whole application.
// Set default transformer to avoid setting it for each query.
gocqlx.DefaultBindTransformer = gocqlx.UnsetEmptyTransformer
What's Changed
- qb: add named limit and per partition limit clauses by @N1cOs in #208
- queryx: unset empty values by @N1cOs in #206
New Contributors
Full Changelog: v2.5.0...v2.6.0
Release 2.5.0
Schemagen 🥇
This release adds schemagen
tool that generates goclqx table
models based on database schema.
Example:
Running the following command for examples
keyspace:
$GOBIN/schemagen -cluster="127.0.0.1:9042" -keyspace="examples" -output="models" -pkgname="models"
Generates models/models.go
as follows:
// Code generated by "gocqlx/cmd/schemagen"; DO NOT EDIT.
package models
import "github.com/scylladb/gocqlx/v2/table"
// Table models.
var (
Playlists = table.New(table.Metadata{
Name: "playlists",
Columns: []string{
"album",
"artist",
"id",
"song_id",
"title",
},
PartKey: []string{
"id",
},
SortKey: []string{
"title",
"album",
"artist",
},
})
Songs = table.New(table.Metadata{
Name: "songs",
Columns: []string{
"album",
"artist",
"data",
"id",
"tags",
"title",
},
PartKey: []string{
"id",
},
SortKey: []string{},
})
)
Installation
go get -u "github.com/scylladb/gocqlx/v2/cmd/schemagen"
What's Changed
- GetCAS: check if the query has a build error before trying to execute it by @ok32 in #187
- Correctly state in the GetQuery comment that it gets by primary key by @alfa-alex in #190
- Update godoc badge link by @quenbyako in #193
- qb: add support for USING TIMEOUT clause by @mmatczuk in #195
- schemagen cli by @Bobochka in #201
- schemagen refactoring by @mmatczuk in #203
New Contributors
- @ok32 made their first contribution in #187
- @alfa-alex made their first contribution in #190
- @quenbyako made their first contribution in #193
- @Bobochka made their first contribution in #201
Full Changelog: v2.4.0...v2.5.0
Release 2.4.0
This release adds support for embedding migration files inside binary with go:embed
.
It requires go 1.16+.
Example:
Embed all cql files in your migration directory.
//go:embed *.cql
var Files embed.FS
Pass the FS to migration function.
if err := migrate.FromFS(context.Background(), session, cql.Files); err != nil {
// handle error
}
The migrate.Migrate function is now deprecated.
Release 2.3.0
This release:
- Adds
dbutil
packages that will contain auxiliary tools built on top of gocqlx and its sub packages - Adds
dbutil.RewriteTable
a generalization oftable.RewriteRows
that can clone a table and apply a data transformation for each row - Adds
migrate.CallbackRegister
to simplify usage of migration callback - Adds support for in CQL file callbacks with a CQL comment
-- CALL MyCallbackName;
INSERT INTO bar (id) VALUES (1);
-- CALL MyCallbackName;
INSERT INTO bar (id) VALUES (2);
See the complete example in migrate/example dir.
Release 2.2.0
This release:
- Adds
InsertBuilder
andSelectAll
functions to table module - Adds
RewriteRows
function to table module, it sequentially rewrites all data in a table, this is useful for updating TTLs on small or medium sized tables - Migrates CI from Travis to GH actions
2.1.0
This release adds Query
and QueryContext
functions to query builder and table modules.
It simplifies query creation, instead of
stmt, names := qb.Select("cluster").Columns("id").ToCql()
q := gocqlx.Query(session.Query(stmt), names)
one can now write
q := qb.Select("cluster").Columns("id").Query(session)