Class: ActualDbSchema::RollbackStatsRepository

Inherits:
Object
  • Object
show all
Defined in:
lib/actual_db_schema/rollback_stats_repository.rb

Overview

Persists rollback events in DB.

Constant Summary collapse

TABLE_NAME =
"actual_db_schema_rollback_events"

Class Method Summary collapse

Class Method Details

.record(payload) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/actual_db_schema/rollback_stats_repository.rb', line 9

def record(payload)
  ensure_table!
  connection.execute(<<~SQL.squish)
    INSERT INTO #{quoted_table}
      (#{quoted_column("version")}, #{quoted_column("name")}, #{quoted_column("database")},
       #{quoted_column("schema")}, #{quoted_column("branch")}, #{quoted_column("manual_mode")},
       #{quoted_column("created_at")})
    VALUES
      (#{connection.quote(payload[:version].to_s)}, #{connection.quote(payload[:name].to_s)},
       #{connection.quote(payload[:database].to_s)}, #{connection.quote((payload[:schema] || "default").to_s)},
       #{connection.quote(payload[:branch].to_s)}, #{connection.quote(!!payload[:manual_mode])},
       #{connection.quote(Time.current)})
  SQL
end

.reset!Object



43
44
45
46
47
# File 'lib/actual_db_schema/rollback_stats_repository.rb', line 43

def reset!
  return unless table_exists?

  connection.execute("DELETE FROM #{quoted_table}")
end

.statsObject



24
25
26
27
28
29
30
31
32
33
# File 'lib/actual_db_schema/rollback_stats_repository.rb', line 24

def stats
  return empty_stats unless table_exists?

  {
    total: total_rollbacks,
    by_database: aggregate_by(:database),
    by_schema: aggregate_by(:schema),
    by_branch: aggregate_by(:branch)
  }
end

.total_rollbacksObject



35
36
37
38
39
40
41
# File 'lib/actual_db_schema/rollback_stats_repository.rb', line 35

def total_rollbacks
  return 0 unless table_exists?

  connection.select_value(<<~SQL.squish).to_i
    SELECT COUNT(*) FROM #{quoted_table}
  SQL
end