Class | DataMapper::Adapters::Sql::Mappings::Column |
In: |
lib/data_mapper/adapters/sql/mappings/column.rb
lib/data_mapper/adapters/sql/mappings/column.rb |
Parent: | Object |
TODO: There are of course many more options to add here. Ordinal, Length/Size, Nullability are just a few.
check | [R] | |
check | [R] | |
default | [R] | |
default | [R] | |
index | [W] | |
index | [W] | |
lazy | [W] | |
lazy | [W] | |
name | [R] | |
name | [R] | |
options | [RW] | |
options | [RW] | |
ordinal | [R] | |
ordinal | [R] | |
size | [R] | |
size | [R] | |
table | [RW] | |
table | [RW] | |
type | [R] | |
type | [R] | |
unique | [W] | |
unique | [W] |
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 13 13: def initialize(adapter, table, name, type, ordinal, options = {}) 14: @adapter = adapter 15: @table = table 16: @name, self.type, @options = name.to_sym, type, options 17: @ordinal = ordinal 18: parse_options! 19: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 13 13: def initialize(adapter, table, name, type, ordinal, options = {}) 14: @adapter = adapter 15: @table = table 16: @name, self.type, @options = name.to_sym, type, options 17: @ordinal = ordinal 18: parse_options! 19: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 228 228: def <=>(other) 229: ordinal <=> other.ordinal 230: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 228 228: def <=>(other) 229: ordinal <=> other.ordinal 230: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 166 166: def alter! 167: flush_sql_caches! 168: @adapter.connection do |db| 169: command = db.create_command(to_alter_sql) 170: command.execute_non_query 171: end 172: true 173: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 166 166: def alter! 167: flush_sql_caches! 168: @adapter.connection do |db| 169: command = db.create_command(to_alter_sql) 170: command.execute_non_query 171: end 172: true 173: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 109 109: def column_name 110: @column_name || (@column_name = (@options.has_key?(:column) ? @options[:column].to_s : name.to_s.gsub(/\?$/, '')).freeze) 111: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 109 109: def column_name 110: @column_name || (@column_name = (@options.has_key?(:column) ? @options[:column].to_s : name.to_s.gsub(/\?$/, '')).freeze) 111: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 144 144: def create! 145: @table.columns << self 146: flush_sql_caches! 147: 148: @adapter.connection do |db| 149: command = db.create_command(to_create_sql) 150: command.execute_non_query 151: end 152: true 153: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 144 144: def create! 145: @table.columns << self 146: flush_sql_caches! 147: 148: @adapter.connection do |db| 149: command = db.create_command(to_create_sql) 150: command.execute_non_query 151: end 152: true 153: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 92 92: def default=(value) 93: self.flush_sql_caches! 94: @default = value 95: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 92 92: def default=(value) 93: self.flush_sql_caches! 94: @default = value 95: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 46 46: def defaulted?() instance_variables.include?("@default") end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 46 46: def defaulted?() instance_variables.include?("@default") end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 155 155: def drop! 156: @table.columns.delete(self) 157: flush_sql_caches! 158: 159: @adapter.connection do |db| 160: command = db.create_command(to_drop_sql) 161: command.execute_non_query 162: end 163: true 164: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 155 155: def drop! 156: @table.columns.delete(self) 157: flush_sql_caches! 158: 159: @adapter.connection do |db| 160: command = db.create_command(to_drop_sql) 161: command.execute_non_query 162: end 163: true 164: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 236 236: def eql?(other) 237: name == other.name 238: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 236 236: def eql?(other) 237: name == other.name 238: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 232 232: def hash 233: @hash || @hash = to_sql(true).hash 234: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 232 232: def hash 233: @hash || @hash = to_sql(true).hash 234: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 128 128: def inspect 129: "#<%s:0x%x @name=%s, @type=%s, @options=%s>" % [self.class.name, (object_id * 2), to_sql, type.inspect, options.inspect] 130: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 128 128: def inspect 129: "#<%s:0x%x @name=%s, @type=%s, @options=%s>" % [self.class.name, (object_id * 2), to_sql, type.inspect, options.inspect] 130: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 101 101: def instance_variable_name 102: @instance_variable_name || (@instance_variable_name = "@#{@name.to_s.gsub(/\?$/, '')}".freeze) 103: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 101 101: def instance_variable_name 102: @instance_variable_name || (@instance_variable_name = "@#{@name.to_s.gsub(/\?$/, '')}".freeze) 103: end
Determines if the field should be lazy loaded. You can set this explicitly, or accept the default, which is false for all but text fields.
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 68 68: def lazy? 69: @lazy 70: end
Determines if the field should be lazy loaded. You can set this explicitly, or accept the default, which is false for all but text fields.
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 68 68: def lazy? 69: @lazy 70: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 60 60: def name=(value) 61: flush_sql_caches! 62: @name = value 63: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 60 60: def name=(value) 61: flush_sql_caches! 62: @name = value 63: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 72 72: def nullable? 73: @nullable 74: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 72 72: def nullable? 73: @nullable 74: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 21 21: def parse_options! 22: @key = @options[:key] == true || @options[:serial] == true 23: @nullable = @options.has_key?(:nullable) ? @options[:nullable] : !@key 24: @lazy = @options.has_key?(:lazy) ? @options[:lazy] : (@type == :text && !@key) 25: @serial = @options[:serial] == true 26: @default = @options[:default] 27: 28: @unique = if @options[:index] == :unique then @options.delete(:index); true else false end 29: @index = @options[:index] 30: @check = @options[:check] # only for postgresql 31: 32: @size = if @options.has_key?(:size) 33: @options[:size] 34: elsif @options.has_key?(:length) 35: @options[:length] 36: else 37: case type 38: when :integer then 11 39: when :string, :class then 50 40: else nil 41: end 42: end 43: @size = @size.last if @size.is_a?(Range) 44: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 21 21: def parse_options! 22: @key = @options[:key] == true || @options[:serial] == true 23: @nullable = @options.has_key?(:nullable) ? @options[:nullable] : !@key 24: @lazy = @options.has_key?(:lazy) ? @options[:lazy] : (@type == :text && !@key) 25: @serial = @options[:serial] == true 26: @default = @options[:default] 27: 28: @unique = if @options[:index] == :unique then @options.delete(:index); true else false end 29: @index = @options[:index] 30: @check = @options[:check] # only for postgresql 31: 32: @size = if @options.has_key?(:size) 33: @options[:size] 34: elsif @options.has_key?(:length) 35: @options[:length] 36: else 37: case type 38: when :integer then 11 39: when :string, :class then 50 40: else nil 41: end 42: end 43: @size = @size.last if @size.is_a?(Range) 44: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 175 175: def rename!(new_name) 176: old_name = name # Store the old_name 177: 178: new_column = @table.add_column(new_name, self.type, self.options.merge(:ordinal => self.ordinal)) 179: 180: # Create the new column 181: new_column.create! 182: 183: # Copy the data from one column to the other. 184: @adapter.connection do |db| 185: command = db.create_command "UPDATE \#{@table.to_sql} SET\n\#{new_column.to_sql} = \#{to_sql}\n".compress_lines 186: command.execute_non_query 187: end 188: 189: self.drop! 190: new_column 191: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 175 175: def rename!(new_name) 176: old_name = name # Store the old_name 177: 178: new_column = @table.add_column(new_name, self.type, self.options.merge(:ordinal => self.ordinal)) 179: 180: # Create the new column 181: new_column.create! 182: 183: # Copy the data from one column to the other. 184: @adapter.connection do |db| 185: command = db.create_command "UPDATE \#{@table.to_sql} SET\n\#{new_column.to_sql} = \#{to_sql}\n".compress_lines 186: command.execute_non_query 187: end 188: 189: self.drop! 190: new_column 191: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 123 123: def size=(val) 124: self.flush_sql_caches! 125: @size = val 126: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 123 123: def size=(val) 124: self.flush_sql_caches! 125: @size = val 126: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 136 136: def to_alter_sql 137: "ALTER TABLE " << table.to_sql << " MODIFY COLUMN " << to_long_form 138: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 136 136: def to_alter_sql 137: "ALTER TABLE " << table.to_sql << " MODIFY COLUMN " << to_long_form 138: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 132 132: def to_create_sql 133: "ALTER TABLE " << table.to_sql << " ADD " << to_long_form 134: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 132 132: def to_create_sql 133: "ALTER TABLE " << table.to_sql << " ADD " << to_long_form 134: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 140 140: def to_drop_sql 141: "ALTER TABLE " << table.to_sql << " DROP COLUMN " << to_sql 142: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 140 140: def to_drop_sql 141: "ALTER TABLE " << table.to_sql << " DROP COLUMN " << to_sql 142: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 197 197: def to_long_form 198: @to_long_form || begin 199: @to_long_form = "#{to_sql} #{type_declaration}" 200: 201: unless nullable? || not_null_declaration.blank? 202: @to_long_form << " #{not_null_declaration}" 203: end 204: 205: # NOTE: We only do inline PRIMARY KEY declarations 206: # if the column is also serial since we know 207: # "there can be only one". 208: if key? && serial? && !primary_key_declaration.blank? 209: @to_long_form << " #{primary_key_declaration}" 210: end 211: 212: if serial? && !serial_declaration.blank? 213: @to_long_form << " #{serial_declaration}" 214: end 215: 216: unless default.nil? || (value = default_declaration).blank? 217: @to_long_form << " #{value}" 218: end 219: 220: if unique? && !unique_declaration.blank? 221: @to_long_form << " #{unique_declaration}" 222: end 223: 224: @to_long_form 225: end 226: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 197 197: def to_long_form 198: @to_long_form || begin 199: @to_long_form = "#{to_sql} #{type_declaration}" 200: 201: unless nullable? || not_null_declaration.blank? 202: @to_long_form << " #{not_null_declaration}" 203: end 204: 205: # NOTE: We only do inline PRIMARY KEY declarations 206: # if the column is also serial since we know 207: # "there can be only one". 208: if key? && serial? && !primary_key_declaration.blank? 209: @to_long_form << " #{primary_key_declaration}" 210: end 211: 212: if serial? && !serial_declaration.blank? 213: @to_long_form << " #{serial_declaration}" 214: end 215: 216: unless default.nil? || (value = default_declaration).blank? 217: @to_long_form << " #{value}" 218: end 219: 220: if unique? && !unique_declaration.blank? 221: @to_long_form << " #{unique_declaration}" 222: end 223: 224: @to_long_form 225: end 226: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 105 105: def to_s 106: @name.to_s 107: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 105 105: def to_s 106: @name.to_s 107: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 113 113: def to_sql(include_table_name = false) 114: if include_table_name 115: @to_sql_with_table_name || @to_sql_with_table_name = begin 116: (@table.to_sql + '.' + @adapter.quote_column_name(column_name)).freeze 117: end 118: else 119: @to_sql || (@to_sql = @adapter.quote_column_name(column_name).freeze) 120: end 121: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 113 113: def to_sql(include_table_name = false) 114: if include_table_name 115: @to_sql_with_table_name || @to_sql_with_table_name = begin 116: (@table.to_sql + '.' + @adapter.quote_column_name(column_name)).freeze 117: end 118: else 119: @to_sql || (@to_sql = @adapter.quote_column_name(column_name).freeze) 120: end 121: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 48 48: def type=(value) 49: self.flush_sql_caches! 50: @type = value 51: (class << self; self end).class_eval "def type_cast_value(value)\n@adapter.type_cast_\#{@type}(value)\nend\n" 52: @type 53: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 48 48: def type=(value) 49: self.flush_sql_caches! 50: @type = value 51: (class << self; self end).class_eval "def type_cast_value(value)\n@adapter.type_cast_\#{@type}(value)\nend\n" 52: @type 53: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 264 264: def default_declaration 265: @adapter.connection { |db| db.create_command("DEFAULT ?").escape_sql([default]) } 266: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 264 264: def default_declaration 265: @adapter.connection { |db| db.create_command("DEFAULT ?").escape_sql([default]) } 266: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 268 268: def flush_sql_caches! 269: @to_long_form = nil 270: @to_sql = nil 271: @to_sql_with_table_name = nil 272: @column_name = nil 273: @table.flush_sql_caches!(false) 274: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 268 268: def flush_sql_caches! 269: @to_long_form = nil 270: @to_sql = nil 271: @to_sql_with_table_name = nil 272: @column_name = nil 273: @table.flush_sql_caches!(false) 274: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 252 252: def not_null_declaration 253: "NOT NULL" 254: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 252 252: def not_null_declaration 253: "NOT NULL" 254: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 242 242: def primary_key_declaration 243: "PRIMARY KEY" 244: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 242 242: def primary_key_declaration 243: "PRIMARY KEY" 244: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 256 256: def serial_declaration 257: "AUTO_INCREMENT" 258: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 256 256: def serial_declaration 257: "AUTO_INCREMENT" 258: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 246 246: def type_declaration 247: sql = "#{@adapter.class::TYPES[type] || type}" 248: sql << "(#{size})" unless size.nil? 249: sql 250: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 246 246: def type_declaration 247: sql = "#{@adapter.class::TYPES[type] || type}" 248: sql << "(#{size})" unless size.nil? 249: sql 250: end
# File lib/data_mapper/adapters/sql/mappings/column.rb, line 260 260: def unique_declaration 261: "UNIQUE" 262: end