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.



65
66
67
# File 'lib/sequel/extensions/pg_enum.rb', line 65

def self.extended(db)
  db.send(:parse_enum_labels)
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.



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/sequel/extensions/pg_enum.rb', line 74

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
  run sql
  parse_enum_labels
  nil
end

#create_enum(enum, values) ⇒ Object

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



88
89
90
91
92
93
# File 'lib/sequel/extensions/pg_enum.rb', line 88

def create_enum(enum, values)
  sql = "CREATE TYPE #{quote_schema_table(enum)} AS ENUM (#{values.map{|v| literal(v.to_s)}.join(', ')})"
  run sql
  parse_enum_labels
  nil
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



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

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