Files
box-box/internal/store/counts.go

51 lines
1.4 KiB
Go

package store
import "database/sql"
// SessionDatasetCounts holds row counts for session-scoped datasets.
type SessionDatasetCounts struct {
Drivers int
Results int
StartingGrid int
Stints int
PitStops int
Positions int
RaceControl int
Weather int
Laps int
}
// CountSessionDatasets returns row counts for ingested session datasets.
func (s *Store) CountSessionDatasets(sessionKey int) (SessionDatasetCounts, error) {
var c SessionDatasetCounts
err := s.db.QueryRow(`
SELECT
(SELECT COUNT(*) FROM session_drivers WHERE session_key = ?),
(SELECT COUNT(*) FROM session_results WHERE session_key = ?),
(SELECT COUNT(*) FROM starting_grid WHERE session_key = ?),
(SELECT COUNT(*) FROM stints WHERE session_key = ?),
(SELECT COUNT(*) FROM pit_stops WHERE session_key = ?),
(SELECT COUNT(*) FROM positions WHERE session_key = ?),
(SELECT COUNT(*) FROM race_control WHERE session_key = ?),
(SELECT COUNT(*) FROM weather WHERE session_key = ?),
(SELECT COUNT(*) FROM laps WHERE session_key = ?)
`,
sessionKey, sessionKey, sessionKey, sessionKey, sessionKey,
sessionKey, sessionKey, sessionKey, sessionKey,
).Scan(
&c.Drivers,
&c.Results,
&c.StartingGrid,
&c.Stints,
&c.PitStops,
&c.Positions,
&c.RaceControl,
&c.Weather,
&c.Laps,
)
if err == sql.ErrNoRows {
return SessionDatasetCounts{}, nil
}
return c, err
}