Class: DataMapper::Adapters::PostgresAdapter

Inherits:
DataObjectsAdapter show all
Defined in:
lib/database_cleaner/data_mapper/truncation.rb

Overview

FIXME i don’t know if this works i basically just copied activerecord code to get a rough idea what they do. i don’t have postgres available, so i won’t be the one to write this. maybe codes below gets some postgres/datamapper user going, though.

Instance Method Summary collapse

Instance Method Details

#disable_referential_integrity(repository = :default) ⇒ Object

FIXME copied unchanged from activerecord



126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/database_cleaner/data_mapper/truncation.rb', line 126

def disable_referential_integrity(repository = :default)
  if supports_disable_referential_integrity? then
    execute(storage_names(repository).collect do |name|
      "ALTER TABLE #{quote_name(name)} DISABLE TRIGGER ALL"
    end.join(";"))
  end
  yield
ensure
  if supports_disable_referential_integrity? then
    execute(storage_names(repository).collect do |name|
      "ALTER TABLE #{quote_name(name)} ENABLE TRIGGER ALL"
    end.join(";"))
  end
end

#storage_names(repository = :default) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/database_cleaner/data_mapper/truncation.rb', line 103

def storage_names(repository = :default)
  sql = <<-SQL
    SELECT table_name FROM "information_schema"."tables"
    WHERE table_schema = current_schema() and table_type = 'BASE TABLE'
  SQL
  select(sql)
end

#supports_disable_referential_integrity?Boolean

FIXME copied from activerecord

Returns:

  • (Boolean)


117
118
119
120
121
122
# File 'lib/database_cleaner/data_mapper/truncation.rb', line 117

def supports_disable_referential_integrity?
  version = select("SHOW server_version")[0][0].split('.')
  (version[0].to_i >= 8 && version[1].to_i >= 1) ? true : false
rescue
  return false
end

#truncate_table(table_name) ⇒ Object



111
112
113
# File 'lib/database_cleaner/data_mapper/truncation.rb', line 111

def truncate_table(table_name)
  execute("TRUNCATE TABLE #{quote_name(table_name)} RESTART IDENTITY CASCADE;")
end