Module: ActiveRecord::LogDeleted::PostgreSQLAdapter

Defined in:
lib/active_record/log_deleted/postgresql_adapter.rb

Instance Method Summary collapse

Instance Method Details

#create_deleted_row_trigger(table_name) ⇒ Object



39
40
41
42
43
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 39

def create_deleted_row_trigger(table_name)
  execute "    create trigger \#{log_deleted_row_trigger_name} after delete on \#{ActiveRecord::Base.sanitize_sql(table_name)} for each row execute procedure \#{log_deleted_row_function_name}();\n  SQL\nend\n"

#create_deleted_rows_tableObject



6
7
8
9
10
11
12
13
14
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 6

def create_deleted_rows_table
  old_primary_key_type = configuration.support_uuids ? :string : :bigint
  create_table deleted_rows_table_name do |t|
    t.datetime :created_at, comment: 'The datetime at which the record was created.'
    t.text :old_row_json, comment: 'JSON with the entire row that was hard deleted.'
    t.send old_primary_key_type, :primary_key, comment: 'The primary key of the row which was hard deleted.'
    t.string :table_name, limit: 255, comment: 'The table name from which the row was hard deleted.'
  end
end

#create_log_deleted_row_functionObject



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 20

def create_log_deleted_row_function
  execute "    CREATE OR REPLACE FUNCTION \#{log_deleted_row_function_name}() RETURNS trigger AS $$\n      BEGIN\n        INSERT INTO\n          deleted_rows(table_name, primary_key, old_row_json, created_at)\n            VALUES (TG_TABLE_NAME, \#{old_primary_key('OLD')}, ROW_TO_JSON(OLD), now());\n        RETURN OLD;\n      END;\n    $$ LANGUAGE plpgsql;\n  SQL\nend\n"

#drop_deleted_row_trigger(table_name) ⇒ Object



45
46
47
48
49
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 45

def drop_deleted_row_trigger(table_name)
  execute "    drop trigger if exists \#{log_deleted_row_trigger_name} on \#{ActiveRecord::Base.sanitize_sql(table_name)};\n  SQL\nend\n"

#drop_deleted_rows_tableObject



16
17
18
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 16

def drop_deleted_rows_table
  drop_table deleted_rows_table_name
end

#drop_log_deleted_row_functionObject



33
34
35
36
37
# File 'lib/active_record/log_deleted/postgresql_adapter.rb', line 33

def drop_log_deleted_row_function
  execute "    DROP FUNCTION IF EXISTS \#{log_deleted_row_function_name}();\n  SQL\nend\n"