2026-04-06 00:20:51 -05:00

85 lines
2.1 KiB
Go

package database
import (
"database/sql"
"errors"
)
func (dbms *DBMS) DbExtenderDataSave(extenderName string, key string, value []byte) error {
ok := dbms.DatabaseExists()
if !ok {
return errors.New("database does not exist")
}
upsertQuery := `INSERT INTO ExtenderData (ExtenderName, Key, Value) VALUES (?, ?, ?)
ON CONFLICT(ExtenderName, Key) DO UPDATE SET Value = excluded.Value;`
_, err := dbms.database.Exec(upsertQuery, extenderName, key, value)
return err
}
func (dbms *DBMS) DbExtenderDataLoad(extenderName string, key string) ([]byte, error) {
ok := dbms.DatabaseExists()
if !ok {
return nil, errors.New("database does not exist")
}
var value []byte
query := `SELECT Value FROM ExtenderData WHERE ExtenderName = ? AND Key = ?;`
err := dbms.database.QueryRow(query, extenderName, key).Scan(&value)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err
}
return value, nil
}
func (dbms *DBMS) DbExtenderDataDelete(extenderName string, key string) error {
ok := dbms.DatabaseExists()
if !ok {
return errors.New("database does not exist")
}
deleteQuery := `DELETE FROM ExtenderData WHERE ExtenderName = ? AND Key = ?;`
_, err := dbms.database.Exec(deleteQuery, extenderName, key)
return err
}
func (dbms *DBMS) DbExtenderDataKeys(extenderName string) ([]string, error) {
ok := dbms.DatabaseExists()
if !ok {
return nil, errors.New("database does not exist")
}
var keys []string
query := `SELECT Key FROM ExtenderData WHERE ExtenderName = ?;`
rows, err := dbms.database.Query(query, extenderName)
if err != nil {
return nil, err
}
defer func(rows *sql.Rows) {
_ = rows.Close()
}(rows)
for rows.Next() {
var key string
if err := rows.Scan(&key); err != nil {
return nil, err
}
keys = append(keys, key)
}
return keys, nil
}
func (dbms *DBMS) DbExtenderDataDeleteAll(extenderName string) error {
ok := dbms.DatabaseExists()
if !ok {
return errors.New("database does not exist")
}
deleteQuery := `DELETE FROM ExtenderData WHERE ExtenderName = ?;`
_, err := dbms.database.Exec(deleteQuery, extenderName)
return err
}