Compare commits

..

2 Commits
0.3.0 ... main

Author SHA1 Message Date
2dbe3ea07c Update for Nim 2.x 2024-12-28 11:07:50 -06:00
9acbc27710 Add debug logging for migration diff. 2021-08-07 23:54:10 -05:00
2 changed files with 20 additions and 6 deletions

View File

@ -1,7 +1,7 @@
# Package # Package
bin = @["db_migrate"] bin = @["db_migrate"]
version = "0.3.0" version = "0.3.2"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Simple tool to handle database migrations." description = "Simple tool to handle database migrations."
license = "BSD" license = "BSD"
@ -9,4 +9,4 @@ srcDir = "src/main/nim"
# Dependencies # Dependencies
requires: @["nim >= 1.4.0", "docopt >= 0.1.0"] requires: @["nim >= 2.0.0", "docopt >= 0.1.0", "db_connector"]

View File

@ -3,8 +3,10 @@
## ##
## Simple tool to manage database migrations. ## Simple tool to manage database migrations.
import algorithm, db_postgres, docopt, json, logging, os, sequtils, sets, import std/[algorithm, json, logging, os, sequtils, sets, strutils, tables,
strutils, tables, times times]
import db_connector/db_postgres
import docopt
type type
DbMigrateConfig* = object DbMigrateConfig* = object
@ -89,6 +91,9 @@ proc diffMigrations*(
run: seq[string], run: seq[string],
notRun, missing: seq[MigrationEntry] ] = notRun, missing: seq[MigrationEntry] ] =
debug "diffMigrations: inspecting database and configured directories " &
"for migrations"
# Query the database to find out what migrations have been run. # Query the database to find out what migrations have been run.
var migrationsRun = initHashSet[string]() var migrationsRun = initHashSet[string]()
@ -98,7 +103,9 @@ proc diffMigrations*(
# Inspect the filesystem to see what migrations are available. # Inspect the filesystem to see what migrations are available.
var migrationsAvailable = newTable[string, MigrationEntry]() var migrationsAvailable = newTable[string, MigrationEntry]()
for sqlDir in config.sqlDirs: for sqlDir in config.sqlDirs:
debug "Looking in " & sqlDir
for filePath in walkFiles(joinPath(sqlDir, "*.sql")): for filePath in walkFiles(joinPath(sqlDir, "*.sql")):
debug "Saw migration file: " & filePath
var migrationName = filePath.extractFilename var migrationName = filePath.extractFilename
migrationName.removeSuffix("-up.sql") migrationName.removeSuffix("-up.sql")
migrationName.removeSuffix("-down.sql") migrationName.removeSuffix("-down.sql")
@ -125,11 +132,18 @@ proc diffMigrations*(
missingMigrations.add(migrationsNotRun) missingMigrations.add(migrationsNotRun)
migrationsNotRun = newSeq[MigrationEntry]() migrationsNotRun = newSeq[MigrationEntry]()
return (available: migrationsAvailable, result = (available: migrationsAvailable,
run: toSeq(migrationsRun.items).sorted(system.cmp), run: toSeq(migrationsRun.items).sorted(system.cmp),
notRun: migrationsNotRun, notRun: migrationsNotRun,
missing: missingMigrations) missing: missingMigrations)
debug "diffMigration: Results" &
"\n\tavailable: " & $toSeq(result[0].keys) &
"\n\trun: " & $result[1] &
"\n\tnotRun: " & $(result[2].mapIt(it.name)) &
"\n\tmissing: " & $(result[3].mapIt(it.name))
proc readStatements*(filename: string): seq[SqlQuery] = proc readStatements*(filename: string): seq[SqlQuery] =
result = @[] result = @[]
var stmt: string = "" var stmt: string = ""
@ -235,7 +249,7 @@ Options:
""" """
# Parse arguments # Parse arguments
let args = docopt(doc, version = "db-migrate (Nim) 0.3.0\nhttps://git.jdb-software.com/jdb/db-migrate") let args = docopt(doc, version = "db-migrate (Nim) 0.3.2\nhttps://git.jdb-software.com/jdb/db-migrate")
let exitErr = proc(msg: string): void = let exitErr = proc(msg: string): void =
fatal("db_migrate: " & msg) fatal("db_migrate: " & msg)