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



119
120
121
122
123
124
# File 'lib/schema_comments/connection_adapters.rb', line 119

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



126
127
128
129
130
131
132
133
134
# File 'lib/schema_comments/connection_adapters.rb', line 126

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

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



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/schema_comments/connection_adapters.rb', line 75

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



88
89
90
91
92
# File 'lib/schema_comments/connection_adapters.rb', line 88

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



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/schema_comments/connection_adapters.rb', line 100

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



136
137
138
139
140
141
142
# File 'lib/schema_comments/connection_adapters.rb', line 136

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



94
95
96
97
98
# File 'lib/schema_comments/connection_adapters.rb', line 94

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