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.1KB

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