drop sqlite

This commit is contained in:
JurajKubrican
2025-08-04 15:22:34 +02:00
parent 73b2e445b4
commit a393b03d98
6 changed files with 26 additions and 192 deletions

View File

@@ -1,86 +1,38 @@
package boxes
import (
"database/sql"
"github.com/labstack/gommon/log"
_ "modernc.org/sqlite" // Import the SQLite driver
"fmt"
"math/rand"
"time"
)
func initDb() *sql.DB {
var (
random = rand.New(rand.NewSource(time.Now().UnixNano()))
store = initStore()
)
db, err := sql.Open("sqlite", "./data/data.db?_pragma=journal_mode(WAL)&_pragma=synchronous(NORMAL)&_pragma=foreign_keys(ON)")
if err != nil {
log.Fatal(err)
func initStore() []Box {
store := make([]Box, 1024)
for i := 0; i < 1024; i++ {
state := random.Intn(2) == 1
fmt.Println(Box{i, state})
store[i] = Box{i, state}
}
// Create a table
sqlStmt := `CREATE TABLE IF NOT EXISTS boxes (id INTEGER PRIMARY KEY, value BOOLEAN);`
return store
_, err = db.Exec(sqlStmt)
if err != nil {
log.Fatalf("%q: %s\n", err, sqlStmt)
}
return db
}
func GetBoxes() []Box {
rows, err := db.Query("SELECT id, value FROM boxes")
if err != nil {
log.Fatal(err)
}
boxes := make([]Box, 1024)
for i := 0; i < 1024; i++ {
boxes[i] = Box{i, false}
}
for rows.Next() {
var id int
var value bool
err = rows.Scan(&id, &value)
if err != nil {
log.Fatal(err)
}
boxes[id].Value = value
}
defer rows.Close()
return boxes
return store
}
func (box Box) persist() {
stmt, err := db.Prepare("INSERT OR REPLACE INTO boxes(id, value) VALUES(?, ?)")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(box.Id, box.Value)
if err != nil {
log.Fatal(err)
}
stmt.Close()
store[box.Id] = box
}
func getBox(id int) (Box, error) {
var value bool
func getBox(id int) Box {
box := store[id]
stmt, err := db.Prepare("SELECT value FROM boxes WHERE id = ?")
if err != nil {
return Box{}, err
}
defer stmt.Close()
err = stmt.QueryRow(id).Scan(&value)
if err != nil {
if err == sql.ErrNoRows {
return Box{}, nil
}
return Box{}, err
}
return Box{id, value}, nil
return box
}

View File

@@ -2,11 +2,9 @@ package boxes
import (
"fmt"
"math/rand"
"strconv"
"strings"
"sync"
"time"
"github.com/labstack/echo/v4"
"github.com/labstack/gommon/log"
@@ -16,8 +14,6 @@ import (
var (
wsConnections = make(map[*websocket.Conn]bool)
wsMutex sync.Mutex
db = initDb()
random = rand.New(rand.NewSource(time.Now().UnixNano()))
)
type Box struct {
@@ -69,10 +65,7 @@ func randomizeBoxes(count int) []Box {
boxes := make([]Box, count)
for i := 0; i < count; i++ {
index := random.Int() % 1000
box, err := getBox(index)
if err != nil {
log.Fatal(err)
}
box := getBox(index)
box.Value = !box.Value
box.persist()
boxes[i] = box

View File

@@ -54,6 +54,8 @@ func main() {
e.Static("/css", "css")
e.Static("/js", "js")
e.Logger.Info(boxes.GetBoxes())
e.GET("/", func(c echo.Context) error {
return c.Render(200, "index", newPage(boxes.GetBoxes()))
})