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