Module: Sequel::Postgres::EnumDatabaseMethods

Defined in:
lib/sequel/extensions/pg_enum.rb

Overview

Methods enabling Database object integration with enum types.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(db) ⇒ Object

Parse the available enum values when loading this extension into your database.



78
79
80
81
82
83
# File 'lib/sequel/extensions/pg_enum.rb', line 78

def self.extended(db)
  db.instance_exec do
    @enum_labels = {}
    parse_enum_labels
  end
end

Instance Method Details

#add_enum_value(enum, value, opts = OPTS) ⇒ Object

Run the SQL to add the given value to the existing enum type. Options:

:after

Add the new value after this existing value.

:before

Add the new value before this existing value.

:if_not_exists

Do not raise an error if the value already exists in the enum.



90
91
92
93
94
95
96
97
98
99
# File 'lib/sequel/extensions/pg_enum.rb', line 90

def add_enum_value(enum, value, opts=OPTS)
  sql = String.new
  sql << "ALTER TYPE #{quote_schema_table(enum)} ADD VALUE#{' IF NOT EXISTS' if opts[:if_not_exists]} #{literal(value.to_s)}"
  if v = opts[:before]
    sql << " BEFORE #{literal(v.to_s)}"
  elsif v = opts[:after]
    sql << " AFTER #{literal(v.to_s)}"
  end
  _process_enum_change_sql(sql)
end

#create_enum(enum, values) ⇒ Object

Run the SQL to create an enum type with the given name and values.



102
103
104
# File 'lib/sequel/extensions/pg_enum.rb', line 102

def create_enum(enum, values)
  _process_enum_change_sql("CREATE TYPE #{quote_schema_table(enum)} AS ENUM (#{values.map{|v| literal(v.to_s)}.join(', ')})")
end

#drop_enum(enum, opts = OPTS) ⇒ Object

Run the SQL to drop the enum type with the given name. Options:

:if_exists

Do not raise an error if the enum type does not exist

:cascade

Also drop other objects that depend on the enum type



122
123
124
# File 'lib/sequel/extensions/pg_enum.rb', line 122

def drop_enum(enum, opts=OPTS)
  _process_enum_change_sql("DROP TYPE#{' IF EXISTS' if opts[:if_exists]} #{quote_schema_table(enum)}#{' CASCADE' if opts[:cascade]}")
end

#rename_enum(enum, new_name) ⇒ Object

Run the SQL to rename the enum type with the given name to the another given name.



108
109
110
# File 'lib/sequel/extensions/pg_enum.rb', line 108

def rename_enum(enum, new_name)
  _process_enum_change_sql("ALTER TYPE #{quote_schema_table(enum)} RENAME TO #{quote_schema_table(new_name)}")
end

#rename_enum_value(enum, old_name, new_name) ⇒ Object

Run the SQL to rename the enum value with the given name to the another given name.



114
115
116
# File 'lib/sequel/extensions/pg_enum.rb', line 114

def rename_enum_value(enum, old_name, new_name)
  _process_enum_change_sql("ALTER TYPE #{quote_schema_table(enum)} RENAME VALUE #{literal(old_name.to_s)} TO #{literal(new_name.to_s)}")
end