summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-09-02 11:03:10 -0300
committerEuAndreh <eu@euandre.org>2024-09-12 12:06:36 -0300
commit72a43414fe6b6451d0587ad29d65129b4782a3b7 (patch)
treec795625415a0cc5b0f1a30a95b4bf465bd92b866 /src
parentInitial empty commit (diff)
downloadfiinha-72a43414fe6b6451d0587ad29d65129b4782a3b7.tar.gz
fiinha-72a43414fe6b6451d0587ad29d65129b4782a3b7.tar.xz
Init Go project skeleton with golite init
Diffstat (limited to 'src')
-rw-r--r--src/liteq.go117
-rw-r--r--src/main.go7
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()
+}