Add init ddl
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
.env
|
.env
|
||||||
main.log
|
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
|
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 {
|
func (db *DB) Close() error {
|
||||||
err := db.writeConn.Close()
|
err := db.writeConn.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -74,4 +128,4 @@ func (db *DB) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
9
main.go
9
main.go
@@ -9,6 +9,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
"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"
|
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() {
|
func main() {
|
||||||
db := DB{path: "jysk.db"}
|
db := DB{path: "jysk.db"}
|
||||||
err := db.Open()
|
err := db.Open()
|
||||||
@@ -46,6 +50,11 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
err = db.Init(ddl)
|
||||||
|
if err != nil {
|
||||||
|
Error.Fatalf("Error initializing database: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
price := Price{
|
price := Price{
|
||||||
Price: 100,
|
Price: 100,
|
||||||
|
Reference in New Issue
Block a user