Class: Dbsketch::Rendering::SQL::DatabaseRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/dbsketch/rendering/sql/database_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(index_renderer: nil, operation_renderer: nil, table_renderer: nil, trigger_renderer: nil, view_renderer: nil, options: {}) ⇒ DatabaseRenderer

Returns a new instance of DatabaseRenderer.

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/dbsketch/rendering/sql/database_renderer.rb', line 19

def initialize index_renderer: nil, operation_renderer: nil, table_renderer: nil, trigger_renderer: nil, view_renderer: nil, options: {}
  ### Preconditions

  raise ArgumentError, "index_renderer is not a Dbsketch::Rendering::SQL::IndexRenderer" unless nil == index_renderer or index_renderer.is_a? IndexRenderer
  raise ArgumentError, "operation_renderer is not a Dbsketch::Rendering::SQL::OperationRenderer" unless nil == operation_renderer or operation_renderer.is_a? OperationRenderer
  raise ArgumentError, "table_renderer is not a Dbsketch::Rendering::SQL::TableRenderer" unless nil == table_renderer or table_renderer.is_a? TableRenderer
  raise ArgumentError, "trigger_renderer is not a Dbsketch::Rendering::SQL::TriggerRenderer" unless nil == trigger_renderer or trigger_renderer.is_a? TriggerRenderer
  raise ArgumentError, "view_renderer is not a Dbsketch::Rendering::SQL::ViewRenderer" unless nil == view_renderer or view_renderer.is_a? ViewRenderer
  raise ArgumentError, "options is not a Hash" unless options.is_a? Hash
  raise ArgumentError, "options[:drop_if_exists] has not a value in [:before, :inline]" unless [nil, :before, :inline].include? options[:drop_if_exists]
  raise ArgumentError, "options[:order_by_dependencies] == true is not compatible with options[:drop_if_exists] == :inline" if options[:order_by_dependencies] and :inline == options[:drop_if_exists]
  ###

  @options = {
    :drop_if_exists     => nil,
    :go_statements      => true,
    :order_by_dependencies  => true,
    :pretty         => false,
  }.merge options
  @index_renderer = (nil == index_renderer ? IndexRenderer.new : index_renderer)
  @operation_renderer = (nil == operation_renderer ? OperationRenderer.new : operation_renderer)
  @table_renderer = (nil == table_renderer ? TableRenderer.new(:options => @options) : table_renderer)
  @trigger_renderer = (nil == trigger_renderer ? TriggerRenderer.new : trigger_renderer)
  @view_renderer = (nil == view_renderer ? ViewRenderer.new : view_renderer)
end

Instance Method Details

#alter(database_diff) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/dbsketch/rendering/sql/database_renderer.rb', line 57

def alter database_diff
  ### Preconditions

  raise ArgumentError, "database_diff is not a Dbsketch::Comparison::DatabaseDiff" unless database_diff.is_a? Dbsketch::Comparison::DatabaseDiff
  ###

  separator = ";\n" + (@options[:go_statements] ? "go\n" : '')

  diffs = database_diff.indexes + database_diff.operations + database_diff.tables + database_diff.triggers + database_diff.views
  deletions = diffs.select { |d| d.deletion? }.map { |i| drop_item i.old_value }
  changes = diffs.select { |d| d.change? }.map { |i| alter_item(i) }
  creations = diffs.select { |d| d.addition? }.map { |i| create_item i.new_value }

  (deletions + changes + creations).flatten.compact.join(separator) + separator
end

#create(database) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/dbsketch/rendering/sql/database_renderer.rb', line 43

def create database
  ### Preconditions

  raise ArgumentError, "database is not a Dbsketch::Model::Database" unless database.is_a? Dbsketch::Model::Database
  ###

  database.order_items! if @options[:order_by_dependencies]
  if :before == @options[:drop_if_exists]
    drop_before_and_create database
  elsif :inline == @options[:drop_if_exists]
    drop_inline_and_create database
  else
    only_create database
  end
end