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.

database.go 1.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package irc
  2. import (
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/mattn/go-sqlite3"
  6. "log"
  7. "os"
  8. )
  9. func InitDB(path string) {
  10. os.Remove(path)
  11. db := OpenDB(path)
  12. defer db.Close()
  13. _, err := db.Exec(`
  14. CREATE TABLE channel (
  15. name TEXT NOT NULL UNIQUE,
  16. flags TEXT DEFAULT '',
  17. key TEXT DEFAULT '',
  18. topic TEXT DEFAULT '',
  19. user_limit INTEGER DEFAULT 0,
  20. ban_list TEXT DEFAULT '',
  21. except_list TEXT DEFAULT '',
  22. invite_list TEXT DEFAULT '')`)
  23. if err != nil {
  24. log.Fatal("initdb error: ", err)
  25. }
  26. }
  27. func UpgradeDB(path string) {
  28. db := OpenDB(path)
  29. alter := `ALTER TABLE channel ADD COLUMN %s TEXT DEFAULT ''`
  30. cols := []string{"ban_list", "except_list", "invite_list"}
  31. for _, col := range cols {
  32. _, err := db.Exec(fmt.Sprintf(alter, col))
  33. if err != nil {
  34. log.Fatal("updatedb error: ", err)
  35. }
  36. }
  37. }
  38. func OpenDB(path string) *sql.DB {
  39. db, err := sql.Open("sqlite3", path)
  40. if err != nil {
  41. log.Fatal("open db error: ", err)
  42. }
  43. return db
  44. }