drop sqlite
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()))
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user