1
0
Fork 0

Add database management

This commit is contained in:
Chteufleur 2016-04-11 22:49:07 +02:00
parent 24f1a6d7a2
commit 651cc738ad
1 changed files with 113 additions and 0 deletions

113
database/database.go Normal file
View File

@ -0,0 +1,113 @@
package database
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"log"
)
const (
databaseFile = "go_xmpp4steam.db"
createDatabaseStmt = "create table if not exists users (jid text not null primary key, steamLogin text, steamPwd text);"
insertDatabaseStmt = "insert into users (jid, steamLogin, steamPwd) values(?, ?, ?)"
deleteDatabaseStmt = "delete from users where jid = ?"
selectDatabaseStmt = "select jid, steamLogin, steamPwd from users where jid = ?"
LogInfo = "\t[SQLITE INFO]\t"
LogError = "\t[SQLITE ERROR]\t"
LogDebug = "\t[SQLITE DEBUG]\t"
)
type DatabaseLine struct {
Jid string
SteamLogin string
SteamPwd string
}
var (
db = new(sql.DB)
)
func init() {
d, err := sql.Open("sqlite3", databaseFile)
if err != nil {
log.Printf("%sError on openning database", LogError, err)
}
db = d
_, err = db.Exec(createDatabaseStmt)
if err != nil {
log.Printf("%sFailed to create table", LogError, err)
}
}
func Close() {
db.Close()
}
func (newLine *DatabaseLine) AddLine() bool {
log.Printf("%sAdd new line %v", LogInfo, newLine)
stmt, err := db.Prepare(insertDatabaseStmt)
if err != nil {
log.Printf("%sError on insert jid %s", LogError, newLine.Jid, err)
return false
}
defer stmt.Close()
_, err = stmt.Exec(newLine.Jid, newLine.SteamLogin, newLine.SteamPwd)
if err != nil {
log.Printf("%sError on creating SQL statement", LogError, err)
return false
}
return true
}
func RemoveLine(jid string) bool {
// FIXME not working
log.Printf("%sRemove line %s", LogInfo, jid)
stmt, err := db.Prepare(deleteDatabaseStmt)
if err != nil {
log.Printf("%sError on delete jid %s", LogError, jid, err)
return false
}
defer stmt.Close()
res, err := stmt.Exec(jid)
if err != nil {
log.Printf("%sError on delete SQL statement", LogError, err)
return false
}
affect, err := res.RowsAffected()
if err != nil {
log.Printf("%sError on delete SQL statement", LogError, err)
return false
}
if affect == 0 {
return false
}
return true
}
func GetLine(jid string) (*DatabaseLine) {
log.Printf("%sGet line %s", LogInfo, jid)
ret := new(DatabaseLine)
stmt, err := db.Prepare(selectDatabaseStmt)
if err != nil {
log.Printf("%sError on select line", LogError, err)
return nil
}
defer stmt.Close()
err = stmt.QueryRow(jid).Scan(&ret.Jid, &ret.SteamLogin, &ret.SteamPwd)
if err != nil {
log.Printf("%sError on select scan", LogError, err)
}
return ret
}