module Torque::PostgreSQL::Adapter::SchemaStatements

Constants

TableDefinition

Public Instance Methods

add_enum_values(name, values, options = {}) click to toggle source

Changes the enumerator by adding new values

Example:

add_enum_values 'status', ['baz']
add_enum_values 'status', ['baz'], before: 'bar'
add_enum_values 'status', ['baz'], after: 'foo'
add_enum_values 'status', ['baz'], prepend: true
# File lib/torque/postgresql/adapter/schema_statements.rb, line 50
        def add_enum_values(name, values, options = {})
          before = options.fetch(:before, false)
          after  = options.fetch(:after,  false)

          before = enum_values(name).first if options.key? :prepend
          before = quote(before) unless before == false
          after  = quote(after)  unless after == false

          quote_enum_values(name, values, options).each do |value|
            reference = "BEFORE #{before}" unless before == false
            reference = "AFTER  #{after}"  unless after == false
            execute <<-SQL.squish
              ALTER TYPE #{quote_type_name(name, options[:schema])}
              ADD VALUE #{value} #{reference}
            SQL

            before = false
            after  = value
          end
        end
create_enum(name, values, options = {}) click to toggle source

Creates a new PostgreSQL enumerator type

Example:

create_enum 'status', ['foo', 'bar']
create_enum 'status', ['foo', 'bar'], prefix: true
create_enum 'status', ['foo', 'bar'], suffix: 'test'
create_enum 'status', ['foo', 'bar'], force: true
# File lib/torque/postgresql/adapter/schema_statements.rb, line 35
        def create_enum(name, values, options = {})
          drop_type(name, options) if options[:force]
          execute <<-SQL.squish
            CREATE TYPE #{quote_type_name(name, options[:schema])} AS ENUM
            (#{quote_enum_values(name, values, options).join(', ')})
          SQL
        end
create_table(table_name, **options, &block) click to toggle source

Rewrite the method that creates tables to easily accept extra options

Calls superclass method
# File lib/torque/postgresql/adapter/schema_statements.rb, line 81
def create_table(table_name, **options, &block)
  options[:id] = false if options[:inherits].present? &&
    options[:primary_key].blank? && options[:id].blank?

  super table_name, **options, &block
end
drop_type(name, options = {}) click to toggle source

Drops a type.

# File lib/torque/postgresql/adapter/schema_statements.rb, line 11
        def drop_type(name, options = {})
          force = options.fetch(:force, '').upcase
          check = 'IF EXISTS' if options.fetch(:check, true)
          execute <<-SQL.squish
            DROP TYPE #{check}
            #{quote_type_name(name, options[:schema])} #{force}
          SQL
        end
enum_values(name) click to toggle source

Returns all values that an enum type can have.

# File lib/torque/postgresql/adapter/schema_statements.rb, line 72
        def enum_values(name)
          select_values(<<-SQL.squish, 'SCHEMA')
            SELECT enumlabel FROM pg_enum
            WHERE enumtypid = #{quote(name)}::regtype::oid
            ORDER BY enumsortorder
          SQL
        end
rename_type(type_name, new_name) click to toggle source

Renames a type.

# File lib/torque/postgresql/adapter/schema_statements.rb, line 21
        def rename_type(type_name, new_name)
          execute <<-SQL.squish
            ALTER TYPE #{quote_type_name(type_name)}
            RENAME TO #{Quoting::Name.new(nil, new_name.to_s).quoted}
          SQL
        end

Private Instance Methods

quote_enum_values(name, values, options) click to toggle source
# File lib/torque/postgresql/adapter/schema_statements.rb, line 90
def quote_enum_values(name, values, options)
  prefix = options[:prefix]
  prefix = name if prefix === true

  suffix = options[:suffix]
  suffix = name if suffix === true

  values.map! do |value|
    quote([prefix, value, suffix].compact.join('_'))
  end
end