Class: ActiveRecord::Tasks::SpannerDatabaseTasks

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/tasks/spanner_database_tasks.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ SpannerDatabaseTasks

Returns a new instance of SpannerDatabaseTasks.



12
13
14
15
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 12

def initialize config
  config = config.symbolize_keys
  @connection = ActiveRecordSpannerAdapter::Connection.new config
end

Instance Method Details

#charsetObject



36
37
38
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 36

def charset
  nil
end

#collationObject



40
41
42
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 40

def collation
  nil
end

#createObject



17
18
19
20
21
22
23
24
25
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 17

def create
  @connection.create_database
rescue Google::Cloud::Error => error
  if error.instance_of? Google::Cloud::AlreadyExistsError
    raise ActiveRecord::DatabaseAlreadyExists
  end

  raise error
end

#dropObject



27
28
29
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 27

def drop
  @connection.database.drop
end

#purgeObject



31
32
33
34
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 31

def purge
  drop
  create
end

#structure_dump(filename, _extra_flags) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 44

def structure_dump filename, _extra_flags
  file = File.open filename, "w"
  ignore_tables = ActiveRecord::SchemaDumper.ignore_tables

  if ignore_tables.any?
    index_regx = /^CREATE(.*)INDEX(.*)ON (#{ignore_tables.join "|"})\(/
    table_regx = /^CREATE TABLE (#{ignore_tables.join "|"})/
  end

  @connection.database.ddl(force: true).each do |statement|
    next if ignore_tables.any? &&
            (table_regx =~ statement || index_regx =~ statement)
    file.write statement
    file.write "\n"
  end
ensure
  file.close
end

#structure_load(filename, _extra_flags) ⇒ Object



63
64
65
66
# File 'lib/active_record/tasks/spanner_database_tasks.rb', line 63

def structure_load filename, _extra_flags
  statements = File.read(filename).split(/(?=^CREATE)/)
  @connection.execute_ddl statements
end