Class: CaptureMigrationSql::SqlSubscriber

Inherits:
ActiveSupport::Subscriber
  • Object
show all
Defined in:
lib/capture_migration_sql/sql_subscriber.rb

Constant Summary collapse

IGNORE_PAYLOAD_NAMES =
["SCHEMA", "EXPLAIN"]
SHOW_STATEMENT =
/\ASHOW\b/i
EXPLAIN_STATEMENT =
/\AEXPLAIN\b/i
SELECT_INFORMATION_SCHEMA =
/\ASELECT.*information_schema/im
SQLLITE_VERSION =
/\ASELECT sqlite_version\(/i
IGNORE_STATEMENTS =
Regexp.union(SHOW_STATEMENT, EXPLAIN_STATEMENT, SELECT_INFORMATION_SCHEMA, SQLLITE_VERSION)
ATTACH_MUTEX =
Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.attach_if_necessaryObject



20
21
22
23
24
25
26
27
# File 'lib/capture_migration_sql/sql_subscriber.rb', line 20

def attach_if_necessary
  ATTACH_MUTEX.synchronize do
    unless defined?(@attached) && @attached
      attach_to(:active_record)
      @attached = true
    end
  end
end

Instance Method Details

#sql(event) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/capture_migration_sql/sql_subscriber.rb', line 30

def sql(event)
  stream = CaptureMigrationSql.capture_stream
  return unless stream && CaptureMigrationSql.capture_enabled?

  payload = event.payload
  return if IGNORE_PAYLOAD_NAMES.include?(payload[:name])
  sql = payload[:sql]
  return if sql.nil?

  sql = sql.strip
  return if IGNORE_STATEMENTS.match(sql)
  return if schema_migrations_query?(sql)

  sql = "#{sql};" unless sql.end_with?(";")
  stream.write("#{sql}\n\n")
end