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") }