module ActiveRecord::PostgresEnum::PostgreSQLAdapter
Constants
- DEFINED_ENUMS_QUERY
Public Instance Methods
add_enum_value(name, value, after: nil, before: nil, if_not_exists: nil)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 66 def add_enum_value(name, value, after: nil, before: nil, if_not_exists: nil) if_not_exists_statement = "IF NOT EXISTS" if if_not_exists sql = "ALTER TYPE #{name} ADD VALUE #{if_not_exists_statement} #{quote value}" if after sql += " AFTER #{quote after}" elsif before sql += " BEFORE #{quote before}" end execute sql end
create_enum(name, values, force: false, if_not_exists: nil)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 45 def create_enum(name, values, force: false, if_not_exists: nil) return if if_not_exists && enums.include?(name.to_sym) drop_enum(name, cascade: force == :cascade, if_exists: true) if force values = values.map { |v| quote v } execute "CREATE TYPE #{name} AS ENUM (#{values.join(", ")})" end
drop_enum(name, cascade: nil, if_exists: nil)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 54 def drop_enum(name, cascade: nil, if_exists: nil) if_exists_statement = "IF EXISTS" if if_exists cascade_statement = "CASCADE" if cascade sql = "DROP TYPE #{if_exists_statement} #{name} #{cascade_statement}" execute sql end
enums()
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 39 def enums select_all(DEFINED_ENUMS_QUERY).each_with_object({}) do |row, memo| memo[row["typname"].to_sym] = row["enumlabels"].split("\t\t") end end
migration_keys()
click to toggle source
Calls superclass method
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 93 def migration_keys super + [:enum_name] end
prepare_column_options(column, types)
click to toggle source
Calls superclass method
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 97 def prepare_column_options(column, types) spec = super(column, types) spec[:enum_name] = column.cast_type.enum_name.inspect if column.type == :enum spec end
remove_enum_value(name, value)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 78 def remove_enum_value(name, value) sql = %{ DELETE FROM pg_enum WHERE enumlabel=#{quote value} AND enumtypid=(SELECT oid FROM pg_type WHERE typname='#{name}') } execute sql end
rename_enum(name, new_name)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 62 def rename_enum(name, new_name) execute "ALTER TYPE #{name} RENAME TO #{new_name}" end
rename_enum_value(name, existing_value, new_value)
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 87 def rename_enum_value(name, existing_value, new_value) raise "Renaming enum values is only supported in PostgreSQL 10.0+" unless rename_enum_value_supported? execute "ALTER TYPE #{name} RENAME VALUE #{quote existing_value} TO #{quote new_value}" end
rename_enum_value_supported?()
click to toggle source
# File lib/active_record/postgres_enum/postgresql_adapter.rb, line 103 def rename_enum_value_supported? ActiveRecord::Base.connection.send(:postgresql_version) >= 100_000 end