diff options
author | EuAndreh <eu@euandre.org> | 2024-09-02 11:03:10 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-09-12 12:06:36 -0300 |
commit | 72a43414fe6b6451d0587ad29d65129b4782a3b7 (patch) | |
tree | c795625415a0cc5b0f1a30a95b4bf465bd92b866 /src | |
parent | Initial empty commit (diff) | |
download | fiinha-72a43414fe6b6451d0587ad29d65129b4782a3b7.tar.gz fiinha-72a43414fe6b6451d0587ad29d65129b4782a3b7.tar.xz |
Init Go project skeleton with golite init
Diffstat (limited to 'src')
-rw-r--r-- | src/liteq.go | 117 | ||||
-rw-r--r-- | src/main.go | 7 |
2 files changed, 124 insertions, 0 deletions
diff --git a/src/liteq.go b/src/liteq.go new file mode 100644 index 0000000..2eeff34 --- /dev/null +++ b/src/liteq.go @@ -0,0 +1,117 @@ +package liteq + +import ( + "database/sql" + "flag" + "io/ioutil" + "log/slog" + "os" + "sort" + + g "gobang" + "golite" +) + + + +func InitMigrations(db *sql.DB) { + _, err := db.Exec(` + CREATE TABLE IF NOT EXISTS migrations ( + filename TEXT PRIMARY KEY + ); + `) + g.FatalIf(err) +} + +const MIGRATIONS_DIR = "src/sql/migrations/" +func PendingMigrations(db *sql.DB) []string { + files, err := ioutil.ReadDir(MIGRATIONS_DIR) + g.FatalIf(err) + + set := make(map[string]bool) + for _, file := range files { + set[file.Name()] = true + } + + rows, err := db.Query(`SELECT filename FROM migrations;`) + g.FatalIf(err) + defer rows.Close() + + for rows.Next() { + var filename string + err := rows.Scan(&filename) + g.FatalIf(err) + delete(set, filename) + } + g.FatalIf(rows.Err()) + + difference := make([]string, 0) + for filename := range set { + difference = append(difference, filename) + } + + sort.Sort(sort.StringSlice(difference)) + return difference +} + +func RunMigrations(db *sql.DB) { + InitMigrations(db) + + stmt, err := db.Prepare(`INSERT INTO migrations (filename) VALUES (?);`) + g.FatalIf(err) + defer stmt.Close() + + for _, filename := range PendingMigrations(db) { + g.Info("Running migration file", "exec-migration-file", + "filename", filename, + ) + + tx, err := db.Begin() + g.FatalIf(err) + + sql, err := os.ReadFile(MIGRATIONS_DIR + filename) + g.FatalIf(err) + + _, err = tx.Exec(string(sql)) + g.FatalIf(err) + + _, err = tx.Stmt(stmt).Exec(filename) + g.FatalIf(err) + + err = tx.Commit() + g.FatalIf(err) + } +} + +func initDB(databasePath string) *sql.DB { + db, err := sql.Open("sqlite3", databasePath) + g.FatalIf(err) + RunMigrations(db) + return db +} + +func run(db *sql.DB) { +} + + + +var ( + databasePath = flag.String( + "f", + "q.db", + "The path to the database file", + ) +) + + +func Main() { + g.Init(slog.Group( + "versions", + "gobang", g.Version, + "golite", golite.Version, + "this", version, + )) + flag.Parse() + db := initDB(*databasePath) + run(db) +} diff --git a/src/main.go b/src/main.go new file mode 100644 index 0000000..8d9a05e --- /dev/null +++ b/src/main.go @@ -0,0 +1,7 @@ +package main + +import "liteq" + +func main() { + liteq.Main() +} |