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()