Module: SchemaPlus::Enums::ActiveRecord::ConnectionAdapters::PostgresqlAdapter
- Defined in:
- lib/schema_plus/enums/active_record.rb
Instance Method Summary collapse
- #alter_enum(name, value, options = {}) ⇒ Object
- #create_enum(name, *values) ⇒ Object
- #drop_enum(name, options = {}) ⇒ Object
- #enums ⇒ Object
Instance Method Details
#alter_enum(name, value, options = {}) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/schema_plus/enums/active_record.rb', line 37 def alter_enum(name, value, = {}) opts = case when [:before] then "BEFORE #{escape_enum_value(options[:before])}" when [:after] then "AFTER #{escape_enum_value(options[:after])}" else '' end execute "ALTER TYPE #{enum_name(name, options[:schema])} ADD VALUE #{escape_enum_value(value)} #{opts}" end |
#create_enum(name, *values) ⇒ Object
31 32 33 34 35 |
# File 'lib/schema_plus/enums/active_record.rb', line 31 def create_enum(name, *values) = values. list = values.map { |value| escape_enum_value(value) } execute "CREATE TYPE #{enum_name(name, options[:schema])} AS ENUM (#{list.join(',')})" end |
#drop_enum(name, options = {}) ⇒ Object
47 48 49 |
# File 'lib/schema_plus/enums/active_record.rb', line 47 def drop_enum(name, = {}) execute "DROP TYPE #{enum_name(name, options[:schema])}" end |
#enums ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/schema_plus/enums/active_record.rb', line 6 def enums result = query(" SELECT\n N.nspname AS schema_name,\n T.typname AS enum_name,\n E.enumlabel AS enum_label,\n E.enumsortorder AS enum_sort_order\n --array_agg(E.enumlabel ORDER BY enumsortorder) AS labels\n FROM pg_type T\n JOIN pg_enum E ON E.enumtypid = T.oid\n JOIN pg_namespace N ON N.oid = T.typnamespace\n ORDER BY 1, 2, 4\n SQL\n\n result.reduce([]) do |res, row|\n last = res.last\n if last && last[0] == row[0] && last[1] == row[1]\n last[2] << row[2]\n else\n res << (row[0..1] << [row[2]])\n end\n res\n end\nend\n") |