|
@ -1,5 +1,60 @@ |
|
|
package sqlite |
|
|
package sqlite |
|
|
|
|
|
|
|
|
func Initialize() { |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
` |