diff --git a/countersql/database.go b/countersql/database.go index 7411074..025b534 100644 --- a/countersql/database.go +++ b/countersql/database.go @@ -86,3 +86,31 @@ func (conf Configuration) Connect() (*Connection, error) { return conn, nil } + +// InitializeDatabase will check if tables exist in the database, and if not then create them. +func (conn Connection) InitializeDatabase() error { + rows, err := conn.DB.Query(`SHOW TABLES`) + if err != nil { + return fmt.Errorf("SHOW TABLES query failed: %v", err) + } + defer rows.Close() + + if rows.Next() { // Table already exists, leave with no error + return nil + } + + // Table does not exist, create it + _, err = conn.DB.Exec(`CREATE TABLE visit ( + id int(11) NOT NULL AUTO_INCREMENT, + ip_address varchar(15) NOT NULL, + visits int(11) NOT NULL, + last_visited datetime NOT NULL, + PRIMARY KEY (id) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1;`) + + if err != nil { + return fmt.Errorf("failed to create table: %v", err) + } + + return nil +} diff --git a/main.go b/main.go index 271543d..d2142d4 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,13 @@ func init() { log.Fatalf("failed to connect to database: %v", err) } + // Check if database needs to be initialized (create tables) + // does nothing if tables exist + err = dbConn.InitializeDatabase() + if err != nil { + log.Fatalf("failed to initialize database: %v", err) + } + uniqueVisits, err = dbConn.GetUniqueVisits() if err != nil { log.Fatalf("failed to get number of unique visits from database: %v", err)