Table Models
The table package provides an abstraction to define your table schema once and reuse it for creating efficient CRUD queries.
Definition
Define the metadata matching your database schema:
import "github.com/scylladb/gocqlx/v3/table"
var playerMetadata = table.Metadata{
Name: "players",
Columns: []string{"id", "name", "score", "team"},
PartKey: []string{"team"},
SortKey: []string{"score"}, // implicitly ordered descending by schema definition
}
var playerTable = table.New(playerMetadata)
Operations
Once defined, you can generate queries easily.
Insert
Generates an insert statement for all defined columns.
q := playerTable.InsertQuery(session).BindStruct(player)
err := q.ExecRelease()
Get (Primary Key)
Generates a SELECT statement using the full Primary Key (Partition Key + Sort Key).
// SELECT * FROM players WHERE team=? AND score=?
q := playerTable.GetQuery(session).BindStruct(player)
err := q.Get(&player)
Select (Partition Key)
Generates a SELECT statement using only the Partition Key.
// SELECT * FROM players WHERE team=?
q := playerTable.SelectQuery(session).BindStruct(player)
err := q.Select(&players)
Update
Generates an update for specific columns, keyed by the Primary Key.
// UPDATE players SET name=? WHERE team=? AND score=?
q := playerTable.UpdateQuery(session, "name").BindStruct(player)
err := q.ExecRelease()