class PGTrunk::Operations::Domains::CreateDomain

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/domains/create_domain.rb, line 91
def invert
  DropDomain.new(**to_h)
end
to_sql(_version) click to toggle source
# File lib/pg_trunk/operations/domains/create_domain.rb, line 87
def to_sql(_version)
  [create_domain, *create_comment, register_domain].join(" ")
end

Private Instance Methods

create_comment() click to toggle source
# File lib/pg_trunk/operations/domains/create_domain.rb, line 109
def create_comment
  return if comment.blank?

  "COMMENT ON DOMAIN #{name.to_sql} IS $comment$#{comment}$comment$;"
end
create_domain() click to toggle source
# File lib/pg_trunk/operations/domains/create_domain.rb, line 97
def create_domain
  sql = "CREATE DOMAIN #{name.to_sql} AS #{type.to_sql}"
  sql << " COLLATE #{collation.to_sql}" if collation.present?
  sql << " DEFAULT #{default_sql}" if default_sql.present?
  sql << " NOT NULL" if null == false
  constraints&.each do |c|
    sql << " CONSTRAINT #{c.name.inspect}" if c.name.present?
    sql << " CHECK (#{c.check})"
  end
  sql << ";"
end
register_domain() click to toggle source
# File lib/pg_trunk/operations/domains/create_domain.rb, line 115
    def register_domain
      <<~SQL.squish
        INSERT INTO pg_trunk (oid, classid)
          SELECT oid, 'pg_type'::regclass
          FROM pg_type
          WHERE typname = #{name.quoted}
            AND typnamespace = #{name.namespace}
            AND typtype = 'd'
        ON CONFLICT DO NOTHING;
      SQL
    end