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