The main server, and probably only repository in this org.
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

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
)
`