horsegen: generate skill groups
This commit is contained in:
@@ -17,15 +17,26 @@ var characterAffinity2SQL string
|
||||
//go:embed character.affinity3.sql
|
||||
var characterAffinity3SQL string
|
||||
|
||||
type Character struct {
|
||||
//go:embed skill-group.sql
|
||||
var skillGroupSQL string
|
||||
|
||||
type (
|
||||
Character struct{}
|
||||
SkillGroup struct{}
|
||||
)
|
||||
|
||||
type NamedID[T any] struct {
|
||||
// Disallow conversions between NamedID types.
|
||||
_ [0]*T
|
||||
|
||||
ID int
|
||||
Name string
|
||||
// For internal use, the index of the character.
|
||||
// For internal use, the index of the identity, when it's needed.
|
||||
// We don't show this in public API, but it lets us use vectors for lookups.
|
||||
Index int
|
||||
}
|
||||
|
||||
func Characters(ctx context.Context, db *sqlitex.Pool) ([]Character, error) {
|
||||
func Characters(ctx context.Context, db *sqlitex.Pool) ([]NamedID[Character], error) {
|
||||
conn, err := db.Take(ctx)
|
||||
defer db.Put(conn)
|
||||
if err != nil {
|
||||
@@ -37,7 +48,7 @@ func Characters(ctx context.Context, db *sqlitex.Pool) ([]Character, error) {
|
||||
}
|
||||
defer stmt.Finalize()
|
||||
|
||||
var r []Character
|
||||
var r []NamedID[Character]
|
||||
for {
|
||||
ok, err := stmt.Step()
|
||||
if err != nil {
|
||||
@@ -46,7 +57,7 @@ func Characters(ctx context.Context, db *sqlitex.Pool) ([]Character, error) {
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
c := Character{
|
||||
c := NamedID[Character]{
|
||||
ID: stmt.ColumnInt(0),
|
||||
Name: stmt.ColumnText(1),
|
||||
Index: stmt.ColumnInt(2),
|
||||
@@ -133,3 +144,33 @@ func CharacterTrios(ctx context.Context, db *sqlitex.Pool) ([]AffinityRelation,
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func SkillGroups(ctx context.Context, db *sqlitex.Pool) ([]NamedID[SkillGroup], error) {
|
||||
conn, err := db.Take(ctx)
|
||||
defer db.Put(conn)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("couldn't get connection for skill groups: %w", err)
|
||||
}
|
||||
stmt, _, err := conn.PrepareTransient(skillGroupSQL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("couldn't prepare statement for skill groups: %w", err)
|
||||
}
|
||||
defer stmt.Finalize()
|
||||
|
||||
var r []NamedID[SkillGroup]
|
||||
for {
|
||||
ok, err := stmt.Step()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error stepping skill groups: %w", err)
|
||||
}
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
g := NamedID[SkillGroup]{
|
||||
ID: stmt.ColumnInt(0),
|
||||
Name: stmt.ColumnText(1),
|
||||
}
|
||||
r = append(r, g)
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user