# File lib/baza/driver/pg/column.rb, line 55 def primarykey? autoincr? end
class Baza::Driver::Pg::Column
Attributes
name[R]
Public Class Methods
new(args)
click to toggle source
# File lib/baza/driver/pg/column.rb, line 4 def initialize(args) @db = args.fetch(:db) @data = args.fetch(:data) @name = @data.fetch(:column_name) end
Public Instance Methods
autoincr?()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 59 def autoincr? !@data.fetch(:column_default).to_s.match(/\Anextval\('#{Regexp.escape(table_name)}_#{Regexp.escape(name)}_seq'::regclass\)\Z/).nil? end
change(data)
click to toggle source
# File lib/baza/driver/pg/column.rb, line 79 def change(data) if data.key?(:name) && data.fetch(:name).to_s != name @db.query("#{alter_table_sql} RENAME #{@db.quote_column(name)} TO #{@db.quote_column(data.fetch(:name))}") @name = data.fetch(:name).to_s end change_type = true if data.key?(:type) && data.fetch(:type).to_s != type.to_s change_type = true if data.key?(:maxlength) && data.fetch(:maxlength) != maxlength if change_type type = data[:type].to_s || type.to_s if type == "int" using = " USING (trim(#{name})::integer)" else using = "" end @db.query("#{alter_column_sql} TYPE #{data.fetch(:type)}#{using}") @type = nil changed = true end if data.key?(:null) && data.fetch(:null) != null? if data.fetch(:null) @db.query("#{alter_column_sql} DROP NOT NULL") else @db.query("#{alter_column_sql} ADD NOT NULL") end changed = true end if data.key?(:default) && data.fetch(:default) != default if data.fetch(:default).nil? @db.query("#{alter_column_sql} DROP DEFAULT") else default = "'#{@db.esc(data.fetch(:default))}'" @db.query("#{alter_column_sql} SET DEFAULT #{default}") end changed = true end reload if changed self end
create_foreign_key(args)
click to toggle source
# File lib/baza/driver/pg/column.rb, line 14 def create_foreign_key(args) fk_name = args[:name] fk_name ||= "fk_#{table_name}_#{name}" other_column = args.fetch(:column) other_table = other_column.table sql = " ALTER TABLE #{@db.quote_table(table_name)} ADD CONSTRAINT #{@db.escape_table(fk_name)} FOREIGN KEY (#{@db.escape_table(name)}) REFERENCES #{@db.escape_table(other_table.name)} (#{@db.escape_column(other_column.name)}) " @db.query(sql) true end
default()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 63 def default return nil if autoincr? @data.fetch(:column_default) end
drop()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 68 def drop @db.query("ALTER TABLE #{@db.quote_table(table_name)} DROP COLUMN #{@db.quote_column(name)}") nil end
maxlength()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 47 def maxlength @data.fetch(:character_maximum_length) end
null?()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 51 def null? @data.fetch(:is_nullable) == "YES" end
primarykey?()
click to toggle source
reload()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 73 def reload data = @db.single([:information_schema, :columns], table_name: table_name, column_name: name) raise Baza::Errors::ColumnNotFound unless data @data = data end
table_name()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 10 def table_name @_table_name ||= @data.fetch(:table_name) end
type()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 33 def type unless @type type = @data.fetch(:udt_name) if type == "int4" @type = :int else @type = type.to_sym end end @type end
Private Instance Methods
alter_column_sql()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 133 def alter_column_sql "#{alter_table_sql} ALTER COLUMN #{@db.quote_column(name)}" end
alter_table_sql()
click to toggle source
# File lib/baza/driver/pg/column.rb, line 129 def alter_table_sql "ALTER TABLE #{@db.quote_table(table_name)}" end