commit 22696fba3c4ba75efa05c613841fb7b5b9cc9538
parent 50a04ddb520fbd12866e3b10ada4f31b61649eb9
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Sun, 15 Feb 2026 08:56:46 +0100
move DBInit logic out to taler-go
Diffstat:
5 files changed, 33 insertions(+), 91 deletions(-)
diff --git a/cmd/taldir-dbinit/main.go b/cmd/taldir-dbinit/main.go
@@ -28,7 +28,7 @@ import (
"strings"
"rsc.io/getopt"
- "taler.net/taldir/pkg/taldir"
+ talerutil "github.com/schanzen/taler-go/pkg/util"
"gopkg.in/ini.v1"
)
@@ -112,7 +112,7 @@ func main() {
log.Panic(err)
}
defer db.Close()
- err = taldir.DBInit(db, taldirdatahome, dbName)
+ err = talerutil.DBInit(db, taldirdatahome, dbName, "taler-directory")
if err != nil {
log.Fatalf("%v\n", err)
}
diff --git a/cmd/taldir-server/main_test.go b/cmd/taldir-server/main_test.go
@@ -36,6 +36,7 @@ import (
_ "taler.net/taldir/cmd/taldir-server"
"taler.net/taldir/internal/util"
taldir "taler.net/taldir/pkg/taldir"
+ talerutil "github.com/schanzen/taler-go/pkg/util"
)
var t taldir.Taldir
@@ -112,7 +113,7 @@ func TestMain(m *testing.M) {
log.Panic(err)
}
defer db.Close()
- err = taldir.DBInit(db, "../..", dbName)
+ err = talerutil.DBInit(db, "../..", dbName, "taler-directory")
if err != nil {
log.Fatalf("Failed to apply versioning or patches: %v", err)
}
diff --git a/go.mod b/go.mod
@@ -8,20 +8,20 @@ require (
github.com/kataras/i18n v0.0.8
github.com/lib/pq v1.11.2
github.com/mattn/go-sqlite3 v1.14.34
- github.com/schanzen/taler-go v1.1.1
+ github.com/schanzen/taler-go v1.2.1
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
- gopkg.in/ini.v1 v1.67.0
+ gopkg.in/ini.v1 v1.67.1
rsc.io/getopt v0.0.0-20170811000552-20be20937449
)
require (
- github.com/BurntSushi/toml v1.5.0 // indirect
+ github.com/BurntSushi/toml v1.6.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
- golang.org/x/net v0.48.0 // indirect
- golang.org/x/text v0.32.0 // indirect
+ golang.org/x/net v0.50.0 // indirect
+ golang.org/x/text v0.34.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
@@ -1,6 +1,9 @@
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
+github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
+github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA=
@@ -26,16 +29,28 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/schanzen/taler-go v1.1.1 h1:No/N8Wa9CZjwLDqS47sdSLtWno08I7B43OKOUNpzjgg=
-github.com/schanzen/taler-go v1.1.1/go.mod h1:+l2TVAPZkF2d15X/XPLYZI5R6PdW6gc6Wft12jrl7tA=
+github.com/schanzen/taler-go v1.2.0 h1:WGUKxiM/EubADwJQs3yn1irz2gxKcess9iBFkBw/m9w=
+github.com/schanzen/taler-go v1.2.0/go.mod h1:bMpS4SS4jI5DyCbJqcy2J2O81OM5N57mVH+B+yJP1Xg=
+github.com/schanzen/taler-go v1.2.1 h1:K6ANhXb8ThsLs26ToXi7hD3pliqH1jAWI5UImNlr7Io=
+github.com/schanzen/taler-go v1.2.1/go.mod h1:bMpS4SS4jI5DyCbJqcy2J2O81OM5N57mVH+B+yJP1Xg=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
-golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
-golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
+golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60=
+golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM=
+golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
+golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
@@ -43,6 +58,9 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.67.1 h1:tVBILHy0R6e4wkYOn3XmiITt/hEVH4TFMYvAX2Ytz6k=
+gopkg.in/ini.v1 v1.67.1/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
rsc.io/getopt v0.0.0-20170811000552-20be20937449 h1:UukjJOsjQH0DIuyyrcod6CXHS6cdaMMuJmrt+SN1j4A=
diff --git a/pkg/taldir/db.go b/pkg/taldir/db.go
@@ -23,9 +23,6 @@ import (
"database/sql"
"errors"
"fmt"
- "os"
- "os/exec"
- "path/filepath"
"time"
)
@@ -485,7 +482,7 @@ func UpdateEntryInDatabase(db *sql.DB, e *Entry) error {
return nil
}
-// Insert new Entry into database
+// InsertEntryIntoDatabase inserts new Entry into database
func InsertEntryIntoDatabase(db *sql.DB, e *Entry) error {
e.CreatedAt = time.Now().UnixMicro()
query := `INSERT INTO taler_directory.entries
@@ -498,77 +495,3 @@ func InsertEntryIntoDatabase(db *sql.DB, e *Entry) error {
return nil
}
-func CheckVersioning(db *sql.DB) (bool, error) {
- rows, err := db.Query(`SELECT schema_name FROM information_schema.schemata WHERE schema_name='_v';`)
- if err != nil {
- return false, err
- }
- defer rows.Close()
- if rows.Next() {
- fmt.Println("Versioning applied")
- return true, nil
- }
- return false, nil
-}
-
-func CheckPatch(db *sql.DB, patchName string) (bool, error) {
- rows, err := db.Query(`SELECT applied_by FROM _v.patches WHERE patch_name=$1 LIMIT 1;`, patchName)
- if err != nil {
- return false, err
- }
- defer rows.Close()
- if rows.Next() {
- return true, nil
- }
- return false, nil
-}
-
-func RunSQL(db *sql.DB, patchName string, dbName string) error {
- path, err := exec.LookPath("psql")
- if err != nil {
- return err
- }
- _, err = exec.Command(path, dbName, "-f", patchName, "-q", "--set", "ON_ERROR_STOP=1").Output()
- fmt.Printf("Running: %s %s %s %s %s %s %s\n", path, dbName, "-f", patchName, "-q", "--set", "ON_ERROR_STOP=1")
- if err != nil {
- return err
- }
- return nil
-
-}
-
-func DBInit(db *sql.DB, datahome string, dbName string) error {
- applied, err := CheckVersioning(db)
- loadSuffix := filepath.Join(datahome, "sql")
- if err != nil {
- fmt.Printf("%v\n", err)
- }
- if !applied {
- err := RunSQL(db, filepath.Join(loadSuffix, "versioning.sql"), dbName)
- if err != nil {
- return err
- }
- }
- for i := range 10000 {
- patchName := fmt.Sprintf("taler-directory-%04d", i+1)
- applied, err := CheckPatch(db, patchName)
- if err != nil {
- return err
- }
- if applied {
- fmt.Printf("Patch %s already applied\n", patchName)
- continue
- }
- patchFile := fmt.Sprintf("%s.sql", filepath.Join(loadSuffix, patchName))
- if _, err := os.Stat(patchFile); err != nil {
- fmt.Printf("Patch %s not found, up-to-date.\n", patchFile)
- break
- }
- fmt.Printf("Applying patch %s\n", patchName)
- err = RunSQL(db, patchFile, dbName)
- if err != nil {
- return err
- }
- }
- return nil
-}