From 2045a75d6849b4abaa8a3a07ea74bc8e5b6bc71e Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 19 Jun 2025 15:05:09 -0400 Subject: [PATCH] [fix] bugfixes from testing - sqlite wrapper func context bug --- cmd/server/active.go | 3 ++ cmd/server/add.go | 1 + cmd/server/view.go | 2 +- database/sqlx.go | 119 ++++++++++++++++++++++++------------------- model/data.go | 2 +- 5 files changed, 73 insertions(+), 54 deletions(-) diff --git a/cmd/server/active.go b/cmd/server/active.go index 58763c0..9d780da 100644 --- a/cmd/server/active.go +++ b/cmd/server/active.go @@ -5,6 +5,7 @@ package server import ( "errors" + "fmt" "code.jakeyoungdev.com/jake/mctl/database" "github.com/spf13/cobra" @@ -21,6 +22,8 @@ var activeCmd = &cobra.Command{ err = db.SetActiveServer(args[0]) cobra.CheckErr(err) + + fmt.Println("Active server updated") }, PreRunE: func(cmd *cobra.Command, args []string) error { if len(args) == 0 { diff --git a/cmd/server/add.go b/cmd/server/add.go index 27c2d89..a8db7ee 100644 --- a/cmd/server/add.go +++ b/cmd/server/add.go @@ -47,6 +47,7 @@ var addCmd = &cobra.Command{ fmt.Printf("Password: ") ps, err := term.ReadPassword(int(os.Stdin.Fd())) cobra.CheckErr(err) + fmt.Println() db, err := database.New() cobra.CheckErr(err) diff --git a/cmd/server/view.go b/cmd/server/view.go index f54c5ed..630a5d3 100644 --- a/cmd/server/view.go +++ b/cmd/server/view.go @@ -28,7 +28,7 @@ var viewCmd = &cobra.Command{ fmt.Printf("Address: %s\n", s.Server) fmt.Printf("Port: %d\n", s.Port) fmt.Println("Password: [REDACTED]") - fmt.Printf("Default: %t\n", s.Default) + fmt.Printf("Default: %t\n", s.Active) } }, } diff --git a/database/sqlx.go b/database/sqlx.go index 3d6a392..e0b0070 100644 --- a/database/sqlx.go +++ b/database/sqlx.go @@ -2,7 +2,6 @@ package database import ( "context" - "database/sql" "fmt" "os" "time" @@ -32,9 +31,6 @@ type Database interface { Close() error //internals timeout() (context.Context, context.CancelFunc) - query(query string, args ...any) (*sqlx.Rows, error) - queryRow(query string, args ...any) *sqlx.Row - exec(query string, args ...any) (sql.Result, error) //command methods GetCmd(name string) (string, error) GetAllCmds() ([]model.Command, error) @@ -84,8 +80,10 @@ func (d *database) Init() error { active INTEGER NOT NULL DEFAULT 0 ); ` - - _, err := d.exec(query) + // _, err := d.exec(query) + ctx, cl := d.timeout() + defer cl() + _, err := d.ExecContext(ctx, query) return err } @@ -96,7 +94,9 @@ func (d *database) Destroy() error { DROP TABLE servers; ` - _, err := d.exec(query) + ctx, cl := d.timeout() + defer cl() + _, err := d.ExecContext(ctx, query) return err } @@ -108,27 +108,6 @@ func (d *database) timeout() (context.Context, context.CancelFunc) { return context.WithTimeout(context.Background(), DB_TIMEOUT) } -func (d *database) query(query string, args ...any) (*sqlx.Rows, error) { - ctx, cl := d.timeout() - defer cl() - - return d.QueryxContext(ctx, query, args...) -} - -func (d *database) queryRow(query string, args ...any) *sqlx.Row { - ctx, cl := d.timeout() - defer cl() - - return d.QueryRowxContext(ctx, query, args...) -} - -func (d *database) exec(query string, args ...any) (sql.Result, error) { - ctx, cl := d.timeout() - defer cl() - - return d.ExecContext(ctx, query, args...) -} - // gets command using name func (d *database) GetCmd(name string) (string, error) { query := ` @@ -141,7 +120,9 @@ func (d *database) GetCmd(name string) (string, error) { ` var cmd string - err := d.queryRow(query, name).Scan(&cmd) + ctx, cl := d.timeout() + defer cl() + err := d.QueryRowxContext(ctx, query, name).Scan(&cmd) if err != nil { return "", err } @@ -159,7 +140,9 @@ func (d *database) GetAllCmds() ([]model.Command, error) { commands ` - rows, err := d.query(query) + ctx, cancel := d.timeout() + defer cancel() + rows, err := d.QueryxContext(ctx, query) if err != nil { return nil, err } @@ -186,7 +169,9 @@ func (d *database) SaveCmd(name, cmd string) error { VALUES(?, ?) ` - _, err := d.exec(query, name, cmd) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, name, cmd) return err } @@ -201,7 +186,9 @@ func (d *database) UpdateCmd(name, cmd string) error { name = ? ` - _, err := d.exec(query, cmd, name) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, cmd, name) return err } @@ -211,7 +198,9 @@ func (d *database) DeleteCmd(name string) error { WHERE name = ? ` - _, err := d.exec(query, name) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, name) return err } @@ -221,15 +210,18 @@ func (d *database) GetServer(name string) (model.Server, error) { name, server, password, - port + port, + active FROM servers WHERE name = ? ` + ctx, cancel := d.timeout() + defer cancel() var s model.Server - err := d.queryRow(query, name).StructScan(&s) + err := d.QueryRowxContext(ctx, query, name).StructScan(&s) if err != nil { return model.Server{}, err } @@ -242,15 +234,18 @@ func (d *database) GetActiveServer() (model.Server, error) { name, server, password, - port + port, + active FROM servers WHERE active = 1 ` + ctx, cancel := d.timeout() + defer cancel() var s model.Server - err := d.queryRow(query).StructScan(&s) + err := d.QueryRowxContext(ctx, query).StructScan(&s) return s, err } @@ -260,12 +255,15 @@ func (d *database) GetAllServers() ([]model.Server, error) { name, server, password, - port + port, + active FROM servers ` - rows, err := d.query(query) + ctx, cancel := d.timeout() + defer cancel() + rows, err := d.QueryxContext(ctx, query) if err != nil { return nil, err } @@ -291,26 +289,39 @@ func (d *database) SaveServer(srv model.Server) error { VALUES(?, ?, ?, ?) ` - _, err := d.exec(query, srv.Name, srv.Server, srv.Password, srv.Port) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, srv.Name, srv.Server, srv.Password, srv.Port) return err } func (d *database) SetActiveServer(name string) error { - query := ` + clear := ` UPDATE servers SET - active = 0; - - UPDATE - servers - SET - active = 1 - WHERE - name = ?; + active = 0 ` - _, err := d.exec(query, name) + clrctx, clrcancel := d.timeout() + _, err := d.ExecContext(clrctx, clear) + if err != nil { + return err + } + defer clrcancel() + + update := ` + UPDATE + servers + SET + active = 1 + WHERE + name = ? + ` + + ctx, cancel := d.timeout() + defer cancel() + _, err = d.ExecContext(ctx, update) return err } @@ -324,7 +335,9 @@ func (d *database) UpdateServer(name, password string) error { name = ? ` - _, err := d.exec(query, password, name) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, password, name) return err } @@ -335,6 +348,8 @@ func (d *database) DeleteServer(name string) error { name = ? ` - _, err := d.exec(query, name) + ctx, cancel := d.timeout() + defer cancel() + _, err := d.ExecContext(ctx, query, name) return err } diff --git a/model/data.go b/model/data.go index ae87d52..fb02169 100644 --- a/model/data.go +++ b/model/data.go @@ -10,5 +10,5 @@ type Server struct { Server string `db:"server"` Password string `db:"password"` Port int `db:"port"` - Default bool `db:"active"` + Active bool `db:"active"` }