Module: Aidp::Database::Migrations

Defined in:
lib/aidp/database/migrations.rb

Overview

Migration runner for SQLite database Applies pending schema migrations in order

Class Method Summary collapse

Class Method Details

.pending?(project_dir = Dir.pwd) ⇒ Boolean

Check if database needs migrations

Parameters:

  • project_dir (String) (defaults to: Dir.pwd)

    Project directory path

Returns:

  • (Boolean)

    True if migrations are pending



44
45
46
47
48
# File 'lib/aidp/database/migrations.rb', line 44

def pending?(project_dir = Dir.pwd)
  db = Database.connection(project_dir)
  current = current_schema_version(db)
  current < Schema.latest_version
end

.pending_versions(project_dir = Dir.pwd) ⇒ Array<Integer>

Get list of pending migration versions

Parameters:

  • project_dir (String) (defaults to: Dir.pwd)

    Project directory path

Returns:

  • (Array<Integer>)

    Pending migration versions



54
55
56
57
# File 'lib/aidp/database/migrations.rb', line 54

def pending_versions(project_dir = Dir.pwd)
  db = Database.connection(project_dir)
  pending_migrations(current_schema_version(db))
end

.run!(project_dir = Dir.pwd) ⇒ Array<Integer>

Run all pending migrations

Parameters:

  • project_dir (String) (defaults to: Dir.pwd)

    Project directory path

Returns:

  • (Array<Integer>)

    List of applied migration versions



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/aidp/database/migrations.rb', line 15

def run!(project_dir = Dir.pwd)
  db = Database.connection(project_dir)
  applied = []

  current_version = current_schema_version(db)
  pending = pending_migrations(current_version)

  return applied if pending.empty?

  Aidp.log_debug("migrations", "running_migrations",
    current: current_version,
    pending_count: pending.size)

  pending.each do |version|
    apply_migration!(db, version)
    applied << version
  end

  Aidp.log_debug("migrations", "migrations_complete",
    applied_count: applied.size,
    new_version: Schema.latest_version)

  applied
end