From c62ed5d101a53b8b206133405a05f79bdfdedbee Mon Sep 17 00:00:00 2001 From: CPunch Date: Sat, 11 Mar 2023 02:06:39 -0600 Subject: [PATCH] db: GetPlayerInventorySlots() can just build the array the first pass, no? --- db/inventory.go | 25 ++++++++----------------- db/schema.go | 5 ----- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/db/inventory.go b/db/inventory.go index 0661809..dd89e23 100644 --- a/db/inventory.go +++ b/db/inventory.go @@ -17,33 +17,24 @@ type Inventory struct { // start && end are both inclusive func (db *DBHandler) GetPlayerInventorySlots(PlayerID int, start int, end int) ([]protocol.SItemBase, error) { - rows, err := db.Query("SELECT PlayerID, Slot, ID, Type, Opt, TimeLimit FROM Inventory WHERE Slot BETWEEN ? AND ? AND PlayerID = ?", start, end, PlayerID) + rows, err := db.Query("SELECT Slot, Type, ID, Opt, TimeLimit FROM Inventory WHERE Slot BETWEEN ? AND ? AND PlayerID = ?", start, end, PlayerID) if err != nil { return nil, err } - var inven []Inventory + items := make([]protocol.SItemBase, end-start) for rows.Next() { - item := Inventory{} + var slot int + item := protocol.SItemBase{} if err := rows.Scan( - &item.PlayerID, &item.Slot, &item.ID, &item.Type, &item.Opt, &item.TimeLimit); err != nil { + &slot, &item.IType, &item.IID, &item.IOpt, &item.ITimeLimit); err != nil { return nil, err } - inven = append(inven, item) + items[slot-start] = item } - // populate an SItemBase array - items := make([]protocol.SItemBase, end-start) - for _, item := range inven { - items[item.Slot-start] = protocol.SItemBase{ - IID: int16(item.ID), - IType: int16(item.Type), - IOpt: int32(item.Opt), - ITimeLimit: int32(item.TimeLimit), - } - } return items, nil } @@ -51,7 +42,7 @@ func (db *DBHandler) GetPlayerInventorySlots(PlayerID int, start int, end int) ( func (db *DBHandler) SetPlayerInventorySlots(PlayerID int, start int, items []protocol.SItemBase) error { return db.Transaction(func(tx *sql.Tx) error { // delete inventory slots - _, err := db.Query("DELETE FROM Inventory WHERE Slot BETWEEN ? AND ? AND PlayerID = ?", start, start+len(items)-1, PlayerID) + _, err := db.Exec("DELETE FROM Inventory WHERE Slot BETWEEN ? AND ? AND PlayerID = ?", start, start+len(items)-1, PlayerID) if err != nil { return err } @@ -59,7 +50,7 @@ func (db *DBHandler) SetPlayerInventorySlots(PlayerID int, start int, items []pr // insert inventory for i, item := range items { if item.IID != 0 { - _, err := db.Query("INSERT INTO Inventory (PlayerID, Slot, ID, Type, Opt, TimeLimit) VALUES (?, ?, ?, ?, ?, ?)", PlayerID, start+i, item.IID, item.IType, item.IOpt, item.ITimeLimit) + _, err := db.Exec("INSERT INTO Inventory (PlayerID, Slot, ID, Type, Opt, TimeLimit) VALUES (?, ?, ?, ?, ?, ?)", PlayerID, start+i, item.IID, item.IType, item.IOpt, item.ITimeLimit) if err != nil { return err } diff --git a/db/schema.go b/db/schema.go index f7b38a7..854b592 100644 --- a/db/schema.go +++ b/db/schema.go @@ -17,11 +17,6 @@ type DBHandler struct { db *sql.DB } -type DBQuery interface { - Query(query string, args ...any) (*sql.Rows, error) - Exec(query string, args ...any) (sql.Result, error) -} - //go:embed migrations/new.sql var createDBQuery string