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("    INSERT INTO \#{quoted_table}\n      (\#{quoted_column(\"version\")}, \#{quoted_column(\"name\")}, \#{quoted_column(\"database\")},\n       \#{quoted_column(\"schema\")}, \#{quoted_column(\"branch\")}, \#{quoted_column(\"manual_mode\")},\n       \#{quoted_column(\"created_at\")})\n    VALUES\n      (\#{connection.quote(payload[:version].to_s)}, \#{connection.quote(payload[:name].to_s)},\n       \#{connection.quote(payload[:database].to_s)}, \#{connection.quote((payload[:schema] || \"default\").to_s)},\n       \#{connection.quote(payload[:branch].to_s)}, \#{connection.quote(!!payload[:manual_mode])},\n       \#{connection.quote(Time.current)})\n  SQL\nend\n".squish)

.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("    SELECT COUNT(*) FROM \#{quoted_table}\n  SQL\nend\n".squish).to_i