Module: SchemaComments::ConnectionAdapters::ConcreteAdapter

Defined in:
lib/schema_comments/connection_adapters.rb

Instance Method Summary collapse

Instance Method Details

#add_column(table_name, column_name, type, options = {}) ⇒ Object



133
134
135
136
137
138
# File 'lib/schema_comments/connection_adapters.rb', line 133

def add_column(table_name, column_name, type, options = {})
  comment = options.delete(:comment)
  result = super(table_name, column_name, type, options)
  column_comment(table_name, column_name, comment) if comment
  result
end

#change_column(table_name, column_name, type, options = {}) ⇒ Object



140
141
142
143
144
145
146
147
148
# File 'lib/schema_comments/connection_adapters.rb', line 140

def change_column(table_name, column_name, type, options = {})
  comment = options.delete(:comment)
  @ignore_drop_table = true
  result = super(table_name, column_name, type, options)
  column_comment(table_name, column_name, comment) if comment
  result
ensure
  @ignore_drop_table = false
end

#columns(table_name, name = nil, &block) ⇒ Object

TODO: columnsメソッドに第二引数移行がないので本来は消すべき?



80
81
82
83
84
85
86
87
# File 'lib/schema_comments/connection_adapters.rb', line 80

def columns(table_name, name = nil, &block)
  result = super(table_name)
  column_comment_hash = column_comments(table_name)
  result.each do |column|
    column.comment = column_comment_hash[column.name]
  end
  result
end

#create_table(table_name, options = {}, &block) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/schema_comments/connection_adapters.rb', line 89

def create_table(table_name, options = {}, &block)
  table_def = nil
  result = super(table_name, options) do |t|
    table_def = t
    yield(t)
  end
  table_comment(table_name, options[:comment]) unless options[:comment].blank?
  table_def.columns.each do |col|
    column_comment(table_name, col.name, col.comment) unless col.comment.blank?
  end
  result
end

#drop_table(table_name, *args, &block) ⇒ Object



102
103
104
105
106
# File 'lib/schema_comments/connection_adapters.rb', line 102

def drop_table(table_name, *args, &block)
  result = super(table_name, *args)
  delete_schema_comments(table_name) unless @ignore_drop_table
  result
end

#remove_column(table_name, *column_names) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/schema_comments/connection_adapters.rb', line 114

def remove_column(table_name, *column_names)
  # sqlite3ではremove_columnがないので、以下のフローでスキーマ更新します。
  # 1. CREATE TEMPORARY TABLE "altered_xxxxxx" (・・・)
  # 2. PRAGMA index_list("xxxxxx")
  # 3. DROP TABLE "xxxxxx"
  # 4. CREATE TABLE "xxxxxx"
  # 5. PRAGMA index_list("altered_xxxxxx")
  # 6. DROP TABLE "altered_xxxxxx"
  #
  # このdrop tableの際に、schema_commentsを変更しないようにフラグを立てています。
  @ignore_drop_table = true
  super(table_name, *column_names)
  column_names.each do |column_name|
    delete_schema_comments(table_name, column_name)
  end
ensure
  @ignore_drop_table = false
end

#rename_column(table_name, column_name, new_column_name, options = {}) ⇒ Object



150
151
152
153
154
155
156
# File 'lib/schema_comments/connection_adapters.rb', line 150

def rename_column(table_name, column_name, new_column_name, options = {})
  comment = options.delete(:comment)
  result = super(table_name, column_name, new_column_name)
  update_schema_comments_column_name(table_name, column_name, new_column_name)
  column_comment(table_name, new_column_name, comment) if comment
  result
end

#rename_table(table_name, new_name) ⇒ Object



108
109
110
111
112
# File 'lib/schema_comments/connection_adapters.rb', line 108

def rename_table(table_name, new_name)
  result = super(table_name, new_name)
  update_schema_comments_table_name(table_name, new_name)
  result
end