chirpnest/sql.go
2019-05-02 18:22:00 +08:00

80 lines
1.5 KiB
Go

package main
import (
"log"
)
func initDB() {
log.Println("Setting up database...")
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
defer tx.Rollback()
_, err = tx.Exec("set foreign_key_checks = 0")
if err != nil {
log.Fatal(err)
}
var name string
rows, err := db.Query("show tables")
if err != nil {
log.Fatal(err)
}
for rows.Next() {
err = rows.Scan(&name)
if err != nil {
log.Fatal(err)
}
_, err = tx.Exec("drop table " + name)
if err != nil {
log.Fatal(err)
}
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
rows.Close()
_, err = tx.Exec("set foreign_key_checks = 1")
if err != nil {
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
log.Println("Database cleaned up")
_, err = db.Exec( `CREATE TABLE user (
id BIGINT UNSIGNED NOT NULL,
user_id VARCHAR(32) NOT NULL,
name VARCHAR(80) NOT NULL,
guild_id SMALLINT(5),
PRIMARY KEY (id),
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`)
if err != nil {
log.Fatal(err)
}
_, err = db.Exec( `CREATE TABLE msg (
id BIGINT UNSIGNED NOT NULL,
user_id BIGINT UNSIGNED NOT NULL,
direction ENUM('incoming', 'outgoing'),
text VARCHAR(4096) NOT NULL,
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`)
if err != nil {
log.Fatal(err)
}
log.Println("Database set up")
}