Class: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
- Inherits:
-
Object
- Object
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
- Defined in:
- lib/enum_column/postgresql_adapter.rb
Instance Method Summary collapse
- #__native_database_types_enum ⇒ Object
- #add_column_options!(sql, options) ⇒ Object
-
#column_definitions(table_name) ⇒ Object
Add constraints to the list of columns.
-
#columns(table_name, name = nil) ⇒ Object
:nodoc:.
-
#native_database_types ⇒ Object
:nodoc.
Instance Method Details
#__native_database_types_enum ⇒ Object
4 |
# File 'lib/enum_column/postgresql_adapter.rb', line 4 alias __native_database_types_enum native_database_types |
#add_column_options!(sql, options) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/enum_column/postgresql_adapter.rb', line 42 def (sql, ) unless sql =~ /\(32\)\('[^']+'/ super(sql, ) else sql.gsub!(/("[^"]+")([^3]+32\))(.+)/, '\1\2 CHECK(\1 in \3)') super(sql, ) end end |
#column_definitions(table_name) ⇒ Object
Add constraints to the list of columns. This will only pick up check constraints. We’ll filter the constraint for the column type and ANY ((ARRAY[ type.
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/enum_column/postgresql_adapter.rb', line 29 def column_definitions(table_name) query <<-end_sql SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull, c.consrc FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum LEFT JOIN pg_constraint c ON a.attrelid = c.conrelid AND c.contype = 'c' AND c.conkey[1] = a.attnum WHERE a.attrelid = '#{table_name}'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum end_sql end |
#columns(table_name, name = nil) ⇒ Object
:nodoc:
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/enum_column/postgresql_adapter.rb', line 12 def columns(table_name, name = nil)#:nodoc: column_definitions(table_name).collect do |name, type, default, notnull, consrc| values = nil if consrc and consrc =~ /ANY \(\(ARRAY(\[[^]]+\])/o and type == native_database_types[:enum][:name] values = eval $1.gsub(/::character varying/, '') type = 'enum' end # typmod now unused as limit, precision, scale all handled by superclass PostgreSQLColumnWithEnum.new(name, default_value(default), translate_field_type(type), notnull == "f", values) end end |
#native_database_types ⇒ Object
:nodoc
6 7 8 9 10 |
# File 'lib/enum_column/postgresql_adapter.rb', line 6 def native_database_types #:nodoc types = __native_database_types_enum types[:enum] = { :name => "character varying(32)" } types end |