Add init ddl
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
.env
|
||||
main.log
|
||||
jysk.db
|
||||
*.db
|
||||
*.db-shm
|
||||
*.db-wal
|
||||
|
4
db.ddl
Normal file
4
db.ddl
Normal file
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE price (
|
||||
price int NOT NULL,
|
||||
date date default current_timestamp
|
||||
)
|
56
db.go
56
db.go
@@ -62,6 +62,60 @@ func (db *DB) Open() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) Init(ddl string) error {
|
||||
if !db.Ready {
|
||||
return fmt.Errorf("database not ready")
|
||||
}
|
||||
|
||||
var rows map[string]struct{} = make(map[string]struct{})
|
||||
var expected = map[string]struct{}{
|
||||
"price": {},
|
||||
}
|
||||
|
||||
res, err := db.readConn.Query("SELECT name FROM sqlite_master WHERE type='table';")
|
||||
if err != nil {
|
||||
Error.Printf("%++v", err)
|
||||
return err
|
||||
}
|
||||
defer res.Close()
|
||||
for res.Next() {
|
||||
var name string
|
||||
err := res.Scan(&name)
|
||||
if err != nil {
|
||||
Error.Printf("%++v", err)
|
||||
return err
|
||||
}
|
||||
rows[name] = struct{}{}
|
||||
}
|
||||
|
||||
var needsInit bool
|
||||
for table := range expected {
|
||||
if _, ok := rows[table]; !ok {
|
||||
log.Printf("Table %s not found, initializing", table)
|
||||
needsInit = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !needsInit {
|
||||
log.Printf("Database already initialized")
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err = db.writeConn.Exec(ddl)
|
||||
if err != nil {
|
||||
Error.Printf("%++v", err)
|
||||
log.Printf("%#v", "Rolling back")
|
||||
_, err2 := db.writeConn.Exec("ROLLBACK;")
|
||||
if err2 != nil {
|
||||
Error.Printf("Error rollingback! %++v", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) Close() error {
|
||||
err := db.writeConn.Close()
|
||||
if err != nil {
|
||||
@@ -74,4 +128,4 @@ func (db *DB) Close() error {
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
9
main.go
9
main.go
@@ -9,6 +9,7 @@ import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"time"
|
||||
_ "embed"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
@@ -38,6 +39,9 @@ var priceRegex = regexp.MustCompile(`\d+`)
|
||||
|
||||
const url = "https://jysk.hr/spavaca-soba/madraci/madraci-s-oprugama/madrac-s-oprugama-140x200-gold-s110-dreamzone"
|
||||
|
||||
//go:embed db.ddl
|
||||
var ddl string
|
||||
|
||||
func main() {
|
||||
db := DB{path: "jysk.db"}
|
||||
err := db.Open()
|
||||
@@ -46,6 +50,11 @@ func main() {
|
||||
return
|
||||
}
|
||||
defer db.Close()
|
||||
err = db.Init(ddl)
|
||||
if err != nil {
|
||||
Error.Fatalf("Error initializing database: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
price := Price{
|
||||
Price: 100,
|
||||
|
Reference in New Issue
Block a user