class Dbsketch::Rendering::Meta::TableRenderer
Public Class Methods
new(column_renderer: nil, fk_renderer: nil, options: {})
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 16 def initialize column_renderer: nil, fk_renderer: nil, options: {}, keywords: {} ### Preconditions raise ArgumentError, "options is not a Hash" unless options.is_a? Hash raise ArgumentError, "keywords is not a Hash" unless keywords.is_a? Hash ### @options = { :pretty => false, }.merge options @keywords = { :check_constraint => "Dbsketch::Model::CheckConstraint.new", :primary_key => "Dbsketch::Model::PrimaryKey.new", :foreign_key => "Dbsketch::Model::ForeignKey.new", :table => "Dbsketch::Model::Table.new", :unique_constraint => "Dbsketch::Model::UniqueConstraint.new" }.merge keywords @column_renderer = (nil == column_renderer ? ColumnRenderer.new(:keywords => @keywords) : column_renderer) @fk_renderer = (nil == fk_renderer ? ForeignKeyRenderer.new(:foreign_key_keyword => @keywords[:foreign_key] ) : fk_renderer) end
Public Instance Methods
alter(table_diff)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 57 def alter table_diff ### Preconditions raise ArgumentError, "table_diff is not a Dbsketch::Comparison::TableDiff" unless table_diff.is_a? Dbsketch::Comparison::TableDiff ### queries = [] # Columns deleted_columns = table_diff.columns.select { |d| d.deletion? } if not deleted_columns.empty? queries << "Table.alter #{table_diff.new_table.name} drop column\n\t#{deleted_columns.map { |d| d.old_column.name }.join("\n\t")}" end added_columns = table_diff.columns.select { |d| d.addition? } if not added_columns.empty? queries << "Table.alter #{table_diff.new_table.name} add column\n\t#{added_columns.map { |d| @column_renderer.create d.new_column }.join("\n\t")}" end changed_columns = table_diff.columns.select { |d| d.change? } if not changed_columns.empty? queries << "Table.alter #{table_diff.new_table.name} alter column\n\t#{changed_columns.map { |d| @column_renderer.create d.new_column }.join("\n\t")}" end # Primary key if nil != table_diff.primary_key queries << "Table.alter #{table_diff.new_table.name} drop primary key #{table_diff.primary_key.old_key.name}" if table_diff.primary_key.deletion? queries << "Table.alter #{table_diff.new_table.name} alter #{create_primary_key table_diff.new_table, table_diff.primary_key.new_key}" if table_diff.primary_key.change? queries << "Table.alter #{table_diff.new_table.name} add #{create_primary_key table_diff.new_table, table_diff.primary_key.new_key}" if table_diff.primary_key.addition? end # Check constraints deleted = table_diff.check_constraints.select { |d| d.deletion? } if not deleted.empty? queries << "Table.alter #{table_diff.new_table.name} drop check constraint\n\t#{deleted.map { |d| d.old_constraint.name }.join("\n\t")}" end added = table_diff.check_constraints.select { |d| d.addition? } if not added.empty? queries << "Table.alter #{table_diff.new_table.name} add\n\t#{added.map { |d| create_check_constraint d.new_constraint }.join("\n\t")}" end changed = table_diff.check_constraints.select { |d| d.change? } if not changed.empty? queries << "Table.alter #{table_diff.new_table.name} alter\n\t#{changed.map { |d| create_check_constraint d.new_constraint }.join("\n\t")}" end queries.flatten.join("\n") # Foreign keys deleted = table_diff.foreign_keys.select { |d| d.deletion? } if not deleted.empty? queries << "Table.alter #{table_diff.new_table.name} drop foreign key\n\t#{deleted.map { |d| d.old_key.name }.join("\n\t")}" end added = table_diff.foreign_keys.select { |d| d.addition? } if not added.empty? queries << "Table.alter #{table_diff.new_table.name} add\n\t#{added.map { |d| @fk_renderer.create d.new_key }.join("\n\t")}" end changed = table_diff.foreign_keys.select { |d| d.change? } if not changed.empty? queries << "Table.alter #{table_diff.new_table.name} alter\n\t#{changed.map { |d| @fk_renderer.create d.new_key }.join("\n\t")}" end queries.flatten.join("\n") # Unique constraints deleted = table_diff.unique_constraints.select { |d| d.deletion? } if not deleted.empty? queries << "Table.alter #{table_diff.new_table.name} drop unique constraint\n\t#{deleted.map { |d| d.old_constraint.name }.join("\n\t")}" end added = table_diff.unique_constraints.select { |d| d.addition? } if not added.empty? queries << "Table.alter #{table_diff.new_table.name} add\n\t#{added.map { |d| create_unique_constraint d.new_constraint, table_diff.new_table }.join("\n\t")}" end changed = table_diff.unique_constraints.select { |d| d.change? } if not changed.empty? queries << "Table.alter #{table_diff.new_table.name} alter\n\t#{changed.map { |d| create_unique_constraint d.new_constraint, table_diff.new_table }.join("\n\t")}" end queries.flatten.join("\n") end
create(table)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 35 def create table ### Preconditions raise ArgumentError, "table is not a Dbsketch::Model::Table" unless table.is_a? Dbsketch::Model::Table ### columns = collect_columns table str = "#{@keywords[:table]}(\"#{table.name}\"" str << ", :meaning => \"#{table.meaning}\"" if nil != table.meaning str << ", :comment => \"#{table.comment}\"" if nil != table.comment str << ", #{columns}" if not columns.empty? str << ")" constraints = collect_constraints table str << "\n#{constraints.join("\n")}" if not constraints.empty? str end
drop(table)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 50 def drop table ### Preconditions raise ArgumentError, "table is not a Dbsketch::Model::Table" unless table.is_a? Dbsketch::Model::Table ### "Table.drop #{table.name}" end
Private Instance Methods
collect_columns(table)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 149 def collect_columns table columns = table.columns.sort { |a,b| a.order <=> b.order }.map { |c| @column_renderer.create c } if columns.count > 1 if @options[:pretty] ":columns => [\n\t#{columns.join(",\n\t")}\n]" else ":columns => [#{columns.join(", ")}]" end elsif columns.count > 0 ":columns => #{columns.first}" else "" end end
collect_constraints(table)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 164 def collect_constraints table items = [] if nil != table.primary_key then items << "#{table.name.downcase}.add(#{create_primary_key(table)})" end items << table.check_constraints.map { |c| "#{table.name.downcase}.add(#{create_check_constraint c})" } items << table.unique_constraints.map { |c| "#{table.name.downcase}.add(#{create_unique_constraint c, table})" } items << table.foreign_keys.map { |k| "#{table.name.downcase}.add(#{@fk_renderer.create k})" } items.flatten.compact end
create_check_constraint(constraint)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 139 def create_check_constraint constraint "#{@keywords[:check_constraint]}(\"#{constraint.name}\", \"#{constraint.condition}\")" end
create_primary_key(table, primary_key = nil)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 132 def create_primary_key table, primary_key = nil primary_key = table.primary_key if nil == primary_key columns = primary_key.columns.map {|c| "#{table.name.downcase}['#{c.name}']" } columns = columns.count > 1 ? "[#{columns.join(", ")}]" : columns.first "#{@keywords[:primary_key]}(\"#{primary_key.name}\", #{columns})" end
create_unique_constraint(constraint, table)
click to toggle source
# File lib/dbsketch/rendering/meta/table_renderer.rb, line 143 def create_unique_constraint constraint, table columns = constraint.columns.map {|c| "#{table.name.downcase}['#{c.name}']" } columns = columns.count > 1 ? "[#{columns.join(", ")}]" : columns.first "#{@keywords[:unique_constraint]}(\"#{constraint.name}\", #{columns})" end