mdb: package for interacting with game's local database

This commit is contained in:
2026-06-02 12:39:58 -04:00
parent 96503e40f6
commit f40fea0ec5
28 changed files with 2906 additions and 3 deletions

61
mdb/race.go Normal file
View File

@@ -0,0 +1,61 @@
package mdb
import (
"context"
_ "embed"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
"git.sunturtle.xyz/zephyr/horse"
)
var (
//go:embed sql/race.sql
raceSQL string
//go:embed sql/saddle.sql
saddleSQL string
//go:embed sql/scenario.sql
scenarioSQL string
)
// Races retrieves all races.
func Races(ctx context.Context, db *sqlitex.Pool) ([]horse.Race, error) {
return load(ctx, db, nil, raceSQL, func(s *sqlite.Stmt) horse.Race {
return horse.Race{
ID: horse.RaceID(s.ColumnInt(0)),
Name: s.ColumnText(1),
// TODO(zeph): grade
Thumbnail: s.ColumnInt(3),
Primary: horse.RaceID(s.ColumnInt(4)),
}
})
}
// Saddles retrieves all saddles.
func Saddles(ctx context.Context, db *sqlitex.Pool) ([]horse.Saddle, error) {
return load(ctx, db, nil, saddleSQL, func(s *sqlite.Stmt) horse.Saddle {
return horse.Saddle{
ID: horse.SaddleID(s.ColumnInt(0)),
Name: s.ColumnText(1),
Races: trimZeros(
horse.RaceID(s.ColumnInt(2)),
horse.RaceID(s.ColumnInt(3)),
horse.RaceID(s.ColumnInt(4)),
),
Type: horse.SaddleType(s.ColumnInt(5)),
Primary: horse.SaddleID(s.ColumnInt(6)),
}
})
}
// Scenarios retrieves all scenarios.
func Scenarios(ctx context.Context, db *sqlitex.Pool) ([]horse.Scenario, error) {
return load(ctx, db, nil, scenarioSQL, func(s *sqlite.Stmt) horse.Scenario {
return horse.Scenario{
ID: horse.ScenarioID(s.ColumnInt(0)),
Name: s.ColumnText(1),
Title: s.ColumnText(2),
}
})
}