aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/dbx/mintages.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbx/mintages.go')
-rw-r--r--src/dbx/mintages.go182
1 files changed, 50 insertions, 132 deletions
diff --git a/src/dbx/mintages.go b/src/dbx/mintages.go
index 9b98bd6..2223eff 100644
--- a/src/dbx/mintages.go
+++ b/src/dbx/mintages.go
@@ -1,21 +1,22 @@
package dbx
import (
+ "context"
"database/sql"
"slices"
)
type CountryMintageData struct {
Standard []MSCountryRow
- Commemorative []MCCountryRow
+ Commemorative []MCommemorative
}
type YearMintageData struct {
Standard []MSYearRow
- Commemorative []MCYearRow
+ Commemorative []MCommemorative
}
-type msRowInternal struct {
+type msRow struct {
Country string
Type MintageType
Year int
@@ -25,47 +26,29 @@ type msRowInternal struct {
Reference sql.Null[string]
}
-type mcRowInternal struct {
- Country string
- Type MintageType
- Year int
- Name string
- Number int
- Mintmark sql.Null[string]
- Mintage sql.Null[int]
- Reference sql.Null[string]
-}
-
type MSCountryRow struct {
Year int
- Mintmark string
- Mintages [ndenoms]int
- References []string
-}
-
-type MCCountryRow struct {
- Year int
- Name string
- Number int
- Mintmark string
- Mintage int
- Reference string
+ Mintmark sql.Null[string]
+ Mintages [ndenoms]sql.Null[int]
+ References [ndenoms]sql.Null[string]
}
type MSYearRow struct {
Country string
- Mintmark string
- Mintages [ndenoms]int
- References []string
+ Mintmark sql.Null[string]
+ Mintages [ndenoms]sql.Null[int]
+ References [ndenoms]sql.Null[string]
}
-type MCYearRow struct {
- Country string
- Name string
+type MCommemorative struct {
+ Country string
+ Type MintageType
+ Year int
+ Name string
Number int
- Mintmark string
- Mintage int
- Reference string
+ Mintmark sql.Null[string]
+ Mintage sql.Null[int]
+ Reference sql.Null[string]
}
type MintageType int
@@ -77,12 +60,6 @@ const (
TypeProof
)
-/* DO NOT REORDER! */
-const (
- MintageUnknown = -iota - 1
- MintageInvalid
-)
-
const ndenoms = 8
func NewMintageType(s string) MintageType {
@@ -103,10 +80,10 @@ func GetMintagesByYear(year int, typ MintageType) (YearMintageData, error) {
var (
zero YearMintageData
xs []MSYearRow
- ys []MCYearRow
+ ys []MCommemorative
)
- rs, err := db.Queryx(`
+ rs, err := db.QueryxContext(context.TODO(), `
SELECT * FROM mintages_s
WHERE year = ? AND type = ?
ORDER BY country, mintmark, denomination
@@ -116,28 +93,22 @@ func GetMintagesByYear(year int, typ MintageType) (YearMintageData, error) {
}
for rs.Next() {
- var x msRowInternal
+ var x msRow
if err = rs.StructScan(&x); err != nil {
return zero, err
}
loop:
msr := MSYearRow{
- Country: x.Country,
- Mintmark: sqlOr(x.Mintmark, ""),
- References: make([]string, 0, ndenoms),
- }
- for i := range msr.Mintages {
- msr.Mintages[i] = MintageUnknown
- }
- msr.Mintages[denomToIdx(x.Denomination)] =
- sqlOr(x.Mintage, MintageUnknown)
- if x.Reference.Valid {
- msr.References = append(msr.References, x.Reference.V)
+ Country: x.Country,
+ Mintmark: x.Mintmark,
}
+ i := denomToIdx(x.Denomination)
+ msr.Mintages[i] = x.Mintage
+ msr.References[i] = x.Reference
for rs.Next() {
- var y msRowInternal
+ var y msRow
if err = rs.StructScan(&y); err != nil {
return zero, err
}
@@ -148,11 +119,9 @@ func GetMintagesByYear(year int, typ MintageType) (YearMintageData, error) {
goto loop
}
- msr.Mintages[denomToIdx(y.Denomination)] =
- sqlOr(y.Mintage, MintageUnknown)
- if y.Reference.Valid {
- msr.References = append(msr.References, y.Reference.V)
- }
+ i = denomToIdx(y.Denomination)
+ msr.Mintages[i] = y.Mintage
+ msr.References[i] = y.Reference
}
xs = append(xs, msr)
@@ -162,29 +131,11 @@ func GetMintagesByYear(year int, typ MintageType) (YearMintageData, error) {
return zero, err
}
- rs, err = db.Queryx(`
- SELECT * FROM mintages_c
- WHERE year = ? AND type = ?
- ORDER BY country, mintmark, number
+ db.SelectContext(context.TODO(), &ys, `
+ SELECT * FROM mintages_c
+ WHERE year = ? and type = ?
+ ORDER BY country, mintmark, number
`, year, typ)
- if err != nil {
- return zero, err
- }
-
- for rs.Next() {
- var y mcRowInternal
- if err = rs.StructScan(&y); err != nil {
- return zero, err
- }
- ys = append(ys, MCYearRow{
- Country: y.Country,
- Name: y.Name,
- Number: y.Number,
- Mintmark: sqlOr(y.Mintmark, ""),
- Mintage: sqlOr(y.Mintage, MintageUnknown),
- Reference: sqlOr(y.Reference, ""),
- })
- }
return YearMintageData{xs, ys}, nil
}
@@ -193,10 +144,10 @@ func GetMintagesByCountry(country string, typ MintageType) (CountryMintageData,
var (
zero CountryMintageData
xs []MSCountryRow
- ys []MCCountryRow
+ ys []MCommemorative
)
- rs, err := db.Queryx(`
+ rs, err := db.QueryxContext(context.TODO(), `
SELECT * FROM mintages_s
WHERE country = ? AND type = ?
ORDER BY year, mintmark, denomination
@@ -206,28 +157,22 @@ func GetMintagesByCountry(country string, typ MintageType) (CountryMintageData,
}
for rs.Next() {
- var x msRowInternal
+ var x msRow
if err = rs.StructScan(&x); err != nil {
return zero, err
}
loop:
msr := MSCountryRow{
- Year: x.Year,
- Mintmark: sqlOr(x.Mintmark, ""),
- References: make([]string, 0, ndenoms),
- }
- for i := range msr.Mintages {
- msr.Mintages[i] = MintageUnknown
- }
- msr.Mintages[denomToIdx(x.Denomination)] =
- sqlOr(x.Mintage, MintageUnknown)
- if x.Reference.Valid {
- msr.References = append(msr.References, x.Reference.V)
+ Year: x.Year,
+ Mintmark: x.Mintmark,
}
+ i := denomToIdx(x.Denomination)
+ msr.Mintages[i] = x.Mintage
+ msr.References[i] = x.Reference
for rs.Next() {
- var y msRowInternal
+ var y msRow
if err = rs.StructScan(&y); err != nil {
return zero, err
}
@@ -238,11 +183,9 @@ func GetMintagesByCountry(country string, typ MintageType) (CountryMintageData,
goto loop
}
- msr.Mintages[denomToIdx(y.Denomination)] =
- sqlOr(y.Mintage, MintageUnknown)
- if y.Reference.Valid {
- msr.References = append(msr.References, y.Reference.V)
- }
+ i = denomToIdx(y.Denomination)
+ msr.Mintages[i] = y.Mintage
+ msr.References[i] = y.Reference
}
xs = append(xs, msr)
@@ -252,40 +195,15 @@ func GetMintagesByCountry(country string, typ MintageType) (CountryMintageData,
return zero, err
}
- rs, err = db.Queryx(`
- SELECT * FROM mintages_c
- WHERE country = ? AND type = ?
- ORDER BY year, mintmark, number
+ db.SelectContext(context.TODO(), &ys, `
+ SELECT * FROM mintages_c
+ WHERE country = ? and type = ?
+ ORDER BY year, mintmark, number
`, country, typ)
- if err != nil {
- return zero, err
- }
-
- for rs.Next() {
- var y mcRowInternal
- if err = rs.StructScan(&y); err != nil {
- return zero, err
- }
- ys = append(ys, MCCountryRow{
- Year: y.Year,
- Name: y.Name,
- Number: y.Number,
- Mintmark: sqlOr(y.Mintmark, ""),
- Mintage: sqlOr(y.Mintage, MintageUnknown),
- Reference: sqlOr(y.Reference, ""),
- })
- }
return CountryMintageData{xs, ys}, rs.Err()
}
-func sqlOr[T any](v sql.Null[T], dflt T) T {
- if v.Valid {
- return v.V
- }
- return dflt
-}
-
func denomToIdx(d float64) int {
return slices.Index([]float64{
0.01, 0.02, 0.05, 0.10,