class Dbsketch::Rendering::SQL::TableRenderer
Public Class Methods
new(column_renderer: nil, fk_renderer: nil, options: {})
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 16 def initialize column_renderer: nil, fk_renderer: nil, options: {} ### Preconditions raise ArgumentError, "options is not a Hash" unless options.is_a? Hash ### @options = { :pretty => false }.merge options @column_renderer = (nil == column_renderer ? ColumnRenderer.new(:options => options) : column_renderer) @fk_renderer = (nil == fk_renderer ? ForeignKeyRenderer.new : fk_renderer) end
Public Instance Methods
alter(table_diff)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 45 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 << "alter table #{table_diff.new_table.name} drop column #{deleted_columns.map { |d| d.old_column.name }.join(", ")}" end added_columns = table_diff.columns.select { |d| d.addition? } if not added_columns.empty? queries << "alter table #{table_diff.new_table.name} add #{added_columns.map { |d| @column_renderer.create d.new_column }.join(", ")}" end queries << table_diff.columns.select { |d| d.change? }.map { |d| "alter table #{table_diff.new_table.name} alter column #{@column_renderer.create d.new_column}" } # Primary key if nil != table_diff.primary_key queries << "alter table #{table_diff.new_table.name} drop constraint #{table_diff.primary_key.old_key.name}" if table_diff.primary_key.deletion? or table_diff.primary_key.change? queries << "alter table #{table_diff.new_table.name} add #{create_primary_key table_diff.primary_key.new_key}" if table_diff.primary_key.addition? or table_diff.primary_key.change? end # Check constraints deleted_and_changed = table_diff.check_constraints.select { |chk_diff| chk_diff.deletion? or chk_diff.change? } if not deleted_and_changed.empty? queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_constraint.name }.join(", ")}" end added_and_changed = table_diff.check_constraints.select { |chk_diff| chk_diff.addition? or chk_diff.change? } if not added_and_changed.empty? queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| create_check_constraint d.new_constraint }.join(", ")}" end queries.flatten.join("\n") # Foreign keys deleted_and_changed = table_diff.foreign_keys.select { |d| d.deletion? or d.change? } if not deleted_and_changed.empty? queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_key.name }.join(", ")}" end added_and_changed = table_diff.foreign_keys.select { |d| d.addition? or d.change? } if not added_and_changed.empty? queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| @fk_renderer.create d.new_key }.join(", ")}" end queries.flatten.join("\n") # Unique constraints deleted_and_changed = table_diff.unique_constraints.select { |d| d.deletion? or d.change? } if not deleted_and_changed.empty? queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_constraint.name }.join(", ")}" end added_and_changed = table_diff.unique_constraints.select { |d| d.addition? or d.change? } if not added_and_changed.empty? queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| create_unique_constraint d.new_constraint }.join(", ")}" end queries.flatten.join("\n") end
create(table)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 27 def create table ### Preconditions raise ArgumentError, "table is not a Dbsketch::Model::Table" unless table.is_a? Dbsketch::Model::Table ### if @options[:pretty] create_pretty table else create_brief table end end
drop(table)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 38 def drop table ### Preconditions raise ArgumentError, "table is not a Dbsketch::Model::Table" unless table.is_a? Dbsketch::Model::Table ### "if object_id('#{table.name}', 'U') is not null drop table #{table.name}" end
Private Instance Methods
collect_items(table)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 116 def collect_items table items = table.columns.sort { |a,b| a.order <=> b.order }.map { |c| @column_renderer.create c } if nil != table.primary_key then items << create_primary_key(table.primary_key) end items << table.check_constraints.map { |c| create_check_constraint c } items << table.unique_constraints.map { |c| create_unique_constraint c } items << table.foreign_keys.map { |k| @fk_renderer.create k } items.flatten end
create_brief(table)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 125 def create_brief table items = collect_items table "create table #{table.name} (#{items.join(', ')})" end
create_check_constraint(constraint)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 108 def create_check_constraint constraint "constraint #{constraint.name} check (#{constraint.condition})" end
create_pretty(table)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 130 def create_pretty table items = collect_items table sql = "" if nil != table.meaning or nil != table.comment sql << "-- " sql << table.meaning if nil != table.meaning sql << "\n-- " if nil != table.meaning and nil != table.comment sql << table.comment if nil != table.comment sql << "\n" end sql << "create table #{table.name} (\n\t#{items.join(",\n\t")}\n)" sql end
create_primary_key(primary_key)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 104 def create_primary_key primary_key "constraint #{primary_key.name} primary key (#{primary_key.columns.map {|c| c.name }.join(", ")})" end
create_unique_constraint(constraint)
click to toggle source
# File lib/dbsketch/rendering/sql/table_renderer.rb, line 112 def create_unique_constraint constraint "constraint #{constraint.name} unique (#{constraint.columns.map {|c| c.name }.join(", ")})" end