[fix] bugfixes from testing

- sqlite wrapper func context bug
This commit is contained in:
jake 2025-06-19 15:05:09 -04:00
parent 473bebb04d
commit 2045a75d68
5 changed files with 73 additions and 54 deletions

View File

@ -5,6 +5,7 @@ package server
import ( import (
"errors" "errors"
"fmt"
"code.jakeyoungdev.com/jake/mctl/database" "code.jakeyoungdev.com/jake/mctl/database"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -21,6 +22,8 @@ var activeCmd = &cobra.Command{
err = db.SetActiveServer(args[0]) err = db.SetActiveServer(args[0])
cobra.CheckErr(err) cobra.CheckErr(err)
fmt.Println("Active server updated")
}, },
PreRunE: func(cmd *cobra.Command, args []string) error { PreRunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {

View File

@ -47,6 +47,7 @@ var addCmd = &cobra.Command{
fmt.Printf("Password: ") fmt.Printf("Password: ")
ps, err := term.ReadPassword(int(os.Stdin.Fd())) ps, err := term.ReadPassword(int(os.Stdin.Fd()))
cobra.CheckErr(err) cobra.CheckErr(err)
fmt.Println()
db, err := database.New() db, err := database.New()
cobra.CheckErr(err) cobra.CheckErr(err)

View File

@ -28,7 +28,7 @@ var viewCmd = &cobra.Command{
fmt.Printf("Address: %s\n", s.Server) fmt.Printf("Address: %s\n", s.Server)
fmt.Printf("Port: %d\n", s.Port) fmt.Printf("Port: %d\n", s.Port)
fmt.Println("Password: [REDACTED]") fmt.Println("Password: [REDACTED]")
fmt.Printf("Default: %t\n", s.Default) fmt.Printf("Default: %t\n", s.Active)
} }
}, },
} }

View File

@ -2,7 +2,6 @@ package database
import ( import (
"context" "context"
"database/sql"
"fmt" "fmt"
"os" "os"
"time" "time"
@ -32,9 +31,6 @@ type Database interface {
Close() error Close() error
//internals //internals
timeout() (context.Context, context.CancelFunc) 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 //command methods
GetCmd(name string) (string, error) GetCmd(name string) (string, error)
GetAllCmds() ([]model.Command, error) GetAllCmds() ([]model.Command, error)
@ -84,8 +80,10 @@ func (d *database) Init() error {
active INTEGER NOT NULL DEFAULT 0 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 return err
} }
@ -96,7 +94,9 @@ func (d *database) Destroy() error {
DROP TABLE servers; DROP TABLE servers;
` `
_, err := d.exec(query) ctx, cl := d.timeout()
defer cl()
_, err := d.ExecContext(ctx, query)
return err return err
} }
@ -108,27 +108,6 @@ func (d *database) timeout() (context.Context, context.CancelFunc) {
return context.WithTimeout(context.Background(), DB_TIMEOUT) 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 // gets command using name
func (d *database) GetCmd(name string) (string, error) { func (d *database) GetCmd(name string) (string, error) {
query := ` query := `
@ -141,7 +120,9 @@ func (d *database) GetCmd(name string) (string, error) {
` `
var cmd string 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 { if err != nil {
return "", err return "", err
} }
@ -159,7 +140,9 @@ func (d *database) GetAllCmds() ([]model.Command, error) {
commands commands
` `
rows, err := d.query(query) ctx, cancel := d.timeout()
defer cancel()
rows, err := d.QueryxContext(ctx, query)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -186,7 +169,9 @@ func (d *database) SaveCmd(name, cmd string) error {
VALUES(?, ?) VALUES(?, ?)
` `
_, err := d.exec(query, name, cmd) ctx, cancel := d.timeout()
defer cancel()
_, err := d.ExecContext(ctx, query, name, cmd)
return err return err
} }
@ -201,7 +186,9 @@ func (d *database) UpdateCmd(name, cmd string) error {
name = ? name = ?
` `
_, err := d.exec(query, cmd, name) ctx, cancel := d.timeout()
defer cancel()
_, err := d.ExecContext(ctx, query, cmd, name)
return err return err
} }
@ -211,7 +198,9 @@ func (d *database) DeleteCmd(name string) error {
WHERE name = ? WHERE name = ?
` `
_, err := d.exec(query, name) ctx, cancel := d.timeout()
defer cancel()
_, err := d.ExecContext(ctx, query, name)
return err return err
} }
@ -221,15 +210,18 @@ func (d *database) GetServer(name string) (model.Server, error) {
name, name,
server, server,
password, password,
port port,
active
FROM FROM
servers servers
WHERE WHERE
name = ? name = ?
` `
ctx, cancel := d.timeout()
defer cancel()
var s model.Server var s model.Server
err := d.queryRow(query, name).StructScan(&s) err := d.QueryRowxContext(ctx, query, name).StructScan(&s)
if err != nil { if err != nil {
return model.Server{}, err return model.Server{}, err
} }
@ -242,15 +234,18 @@ func (d *database) GetActiveServer() (model.Server, error) {
name, name,
server, server,
password, password,
port port,
active
FROM FROM
servers servers
WHERE WHERE
active = 1 active = 1
` `
ctx, cancel := d.timeout()
defer cancel()
var s model.Server var s model.Server
err := d.queryRow(query).StructScan(&s) err := d.QueryRowxContext(ctx, query).StructScan(&s)
return s, err return s, err
} }
@ -260,12 +255,15 @@ func (d *database) GetAllServers() ([]model.Server, error) {
name, name,
server, server,
password, password,
port port,
active
FROM FROM
servers servers
` `
rows, err := d.query(query) ctx, cancel := d.timeout()
defer cancel()
rows, err := d.QueryxContext(ctx, query)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -291,26 +289,39 @@ func (d *database) SaveServer(srv model.Server) error {
VALUES(?, ?, ?, ?) 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 return err
} }
func (d *database) SetActiveServer(name string) error { func (d *database) SetActiveServer(name string) error {
query := ` clear := `
UPDATE UPDATE
servers servers
SET SET
active = 0; active = 0
UPDATE
servers
SET
active = 1
WHERE
name = ?;
` `
_, 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 return err
} }
@ -324,7 +335,9 @@ func (d *database) UpdateServer(name, password string) error {
name = ? name = ?
` `
_, err := d.exec(query, password, name) ctx, cancel := d.timeout()
defer cancel()
_, err := d.ExecContext(ctx, query, password, name)
return err return err
} }
@ -335,6 +348,8 @@ func (d *database) DeleteServer(name string) error {
name = ? name = ?
` `
_, err := d.exec(query, name) ctx, cancel := d.timeout()
defer cancel()
_, err := d.ExecContext(ctx, query, name)
return err return err
} }

View File

@ -10,5 +10,5 @@ type Server struct {
Server string `db:"server"` Server string `db:"server"`
Password string `db:"password"` Password string `db:"password"`
Port int `db:"port"` Port int `db:"port"`
Default bool `db:"active"` Active bool `db:"active"`
} }