You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.4 KiB
77 lines
1.4 KiB
package sqlite
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
|
|
// sqlite driver
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
var db *sqlx.DB
|
|
|
|
// Initialize sets up the sqlite database.
|
|
func Initialize(filename string) (err error) {
|
|
if db != nil {
|
|
panic("sqlite.Initialize called twice!")
|
|
}
|
|
|
|
db, err = sqlx.Open("sqlite3", filename)
|
|
if err != nil {
|
|
db = nil
|
|
return err
|
|
}
|
|
|
|
err = db.Ping()
|
|
if err != nil {
|
|
db.Close()
|
|
db = nil
|
|
return err
|
|
}
|
|
|
|
tableDefs := strings.Split(tableDefStr, ";")
|
|
for _, tableDef := range tableDefs {
|
|
_, err := db.Exec(strings.Trim(tableDef, "\n "))
|
|
if err != nil {
|
|
db.Close()
|
|
db = nil
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
const tableDefStr = `
|
|
|
|
CREATE TABLE IF NOT EXISTS "user" (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(64) NOT NULL UNIQUE,
|
|
hash VARCHAR(128) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "session" (
|
|
id CHAR(64) PRIMARY KEY,
|
|
user_id INTEGER NOT NULL,
|
|
expire_date DATE NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "bridge" (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
internal_id VARCHAR(255) NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
driver VARCHAR(255) NOT NULL,
|
|
addr VARCHAR(255) NOT NULL,
|
|
key BLOB NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS "light" (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
bridge_id INTEGER NOT NULL,
|
|
internal_id VARCHAR(255) NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
'on' BOOLEAN NOT NULL,
|
|
color VARCHAR(255) NOT NULL
|
|
)
|
|
`
|