mirror of
https://github.com/github/rails.git
synced 2026-02-01 17:54:59 -05:00
PostgreSQL: return array fields as strings. Closes #4664.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4605 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* PostgreSQL: return array fields as strings. #4664 [Robby Russell]
|
||||
|
||||
* SQLServer: added tests to ensure all database statements are closed, refactored identity_insert management code to use blocks, removed update/delete rowcount code out of execute and into update/delete, changed insert to go through execute method, removed unused quoting methods, disabled pessimistic locking tests as feature is currently unsupported, fixed RakeFile to load sqlserver specific tests whether running in ado or odbc mode, fixed support for recently added decimal types, added support for limits on integer types. #5670 [Tom Ward]
|
||||
|
||||
* SQLServer: fix db:schema:dump case-sensitivity. #4684 [Will Rogers]
|
||||
|
||||
@@ -515,6 +515,8 @@ module ActiveRecord
|
||||
def translate_field_type(field_type)
|
||||
# Match the beginning of field_type since it may have a size constraint on the end.
|
||||
case field_type
|
||||
# PostgreSQL array data types.
|
||||
when /\[\]$/i then 'string'
|
||||
when /^timestamp/i then 'datetime'
|
||||
when /^real|^money/i then 'float'
|
||||
when /^interval/i then 'string'
|
||||
|
||||
52
activerecord/test/datatype_test_postgresql.rb
Normal file
52
activerecord/test/datatype_test_postgresql.rb
Normal file
@@ -0,0 +1,52 @@
|
||||
require 'abstract_unit'
|
||||
|
||||
class PostgresqlDatatype < ActiveRecord::Base
|
||||
end
|
||||
|
||||
class PGDataTypeTest < Test::Unit::TestCase
|
||||
self.use_transactional_fixtures = false
|
||||
|
||||
TABLE_NAME = 'postgresql_datatypes'
|
||||
COLUMNS = [
|
||||
'id SERIAL PRIMARY KEY',
|
||||
'commission_by_quarter INTEGER[]',
|
||||
'nicknames TEXT[]'
|
||||
]
|
||||
|
||||
def setup
|
||||
@connection = ActiveRecord::Base.connection
|
||||
@connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
|
||||
@connection.execute "INSERT INTO #{TABLE_NAME} (commission_by_quarter, nicknames) VALUES ( '{35000,21000,18000,17000}', '{foo,bar,baz}' )"
|
||||
@first = PostgresqlDatatype.find( 1 )
|
||||
end
|
||||
|
||||
def teardown
|
||||
@connection.execute "DROP TABLE #{TABLE_NAME}"
|
||||
end
|
||||
|
||||
def test_data_type_of_array_types
|
||||
assert_equal :string, @first.column_for_attribute("commission_by_quarter").type
|
||||
assert_equal :string, @first.column_for_attribute("nicknames").type
|
||||
end
|
||||
|
||||
def test_array_values
|
||||
assert_equal '{35000,21000,18000,17000}', @first.commission_by_quarter
|
||||
assert_equal '{foo,bar,baz}', @first.nicknames
|
||||
end
|
||||
|
||||
def test_update_integer_array
|
||||
new_value = '{32800,95000,29350,17000}'
|
||||
assert @first.commission_by_quarter = new_value
|
||||
assert @first.save
|
||||
assert @first.reload
|
||||
assert_equal @first.commission_by_quarter, new_value
|
||||
end
|
||||
|
||||
def test_update_text_array
|
||||
new_value = '{robby,robert,rob,robbie}'
|
||||
assert @first.nicknames = new_value
|
||||
assert @first.save
|
||||
assert @first.reload
|
||||
assert_equal @first.nicknames, new_value
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user