Save lost storage.go file

This commit is contained in:
Felix Niederwanger 2024-02-17 15:07:50 +01:00
parent 3ca1f29272
commit 34c64210a2
Signed by: phoenix
GPG key ID: 6E77A590E3F6D71C

View file

@ -14,14 +14,21 @@ func (stor *Storage) init() error {
// initialization
sql_table := `
CREATE TABLE IF NOT EXISTS geopoints (
device VARCHAR(256), timestamp INTEGER, lon REAL, lat REAL, alt REAL, acc REAL, velocity REAL, bearing REAL, PRIMARY KEY(owner, timestamp)
device VARCHAR(256), timestamp INTEGER, lon REAL, lat REAL, alt REAL, acc REAL, velocity REAL, bearing REAL, PRIMARY KEY(device, timestamp)
);
`
if _, err := stor.db.Exec(sql_table); err != nil {
tx, err := stor.db.Begin()
if err != nil {
return err
}
if _, err := tx.Exec(sql_table); err != nil {
return err
}
return tx.Commit()
}
return nil
func (stor *Storage) IsReady() bool {
return stor.db != nil
}
func CreateDatabase(filename string) (Storage, error) {
@ -40,13 +47,37 @@ func (stor *Storage) InsertLocation(device string, loc Location) error {
if err != nil {
return err
}
sql := "INSERT INTO geopoints (device, timestamp, lon, lat, alt, acc, velocity, bearing) VALUES (?,?,?,?,?,?,?)"
sql := "INSERT INTO geopoints (device, timestamp, lon, lat, alt, acc, velocity, bearing) VALUES (?,?,?,?,?,?,?,?)"
stmt, err := tx.Prepare(sql)
if err != nil {
return err
}
defer stmt.Close()
stmt.Exec(device, loc.Timestamp, loc.Lon, loc.Lat, loc.Alt, loc.Velocity, loc.Bearing)
_, err = stmt.Exec(device, loc.Timestamp, loc.Lon, loc.Lat, loc.Alt, loc.Acc, loc.Velocity, loc.Bearing)
if err != nil {
stmt.Close()
return err
}
if err := stmt.Close(); err != nil {
return err
}
return tx.Commit()
}
func (stor *Storage) GetLastLocation(device string) (Location, error) {
var loc Location
sql := "SELECT timestamp, lon, lat, alt, acc, velocity, bearing FROM geopoints WHERE device LIKE ? ORDER BY timestamp DESC LIMIT 1"
stmt, err := stor.db.Prepare(sql)
if err != nil {
return loc, err
}
defer stmt.Close()
rows, err := stmt.Query(device)
if err != nil {
return loc, err
}
defer rows.Close()
if rows.Next() {
err := rows.Scan(&loc.Timestamp, &loc.Lon, &loc.Lat, &loc.Alt, &loc.Acc, &loc.Velocity, &loc.Bearing)
return loc, err
}
return loc, nil
}