From 0141dd37be1bbca8f3f08f8e3602a2530ed76239 Mon Sep 17 00:00:00 2001 From: kennyj Date: Tue, 16 Apr 2013 03:02:06 +0900 Subject: Revert "fixing bit string test" This reverts commit cdd293cb963b895ff580eb20d10f5d56ecb3d447. Reason: This wasn't properly fix. --- activerecord/test/cases/adapters/postgresql/datatype_test.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'activerecord') diff --git a/activerecord/test/cases/adapters/postgresql/datatype_test.rb b/activerecord/test/cases/adapters/postgresql/datatype_test.rb index 1e6ae85a25..13731beb01 100644 --- a/activerecord/test/cases/adapters/postgresql/datatype_test.rb +++ b/activerecord/test/cases/adapters/postgresql/datatype_test.rb @@ -545,13 +545,13 @@ _SQL def test_update_bit_string new_bit_string = '11111111' - new_bit_string_varying = '11111110' + new_bit_string_varying = 'FF' assert @first_bit_string.bit_string = new_bit_string assert @first_bit_string.bit_string_varying = new_bit_string_varying assert @first_bit_string.save assert @first_bit_string.reload - assert_equal new_bit_string, @first_bit_string.bit_string - assert_equal new_bit_string_varying, @first_bit_string.bit_string_varying + assert_equal @first_bit_string.bit_string, new_bit_string + assert_equal @first_bit_string.bit_string, @first_bit_string.bit_string_varying end def test_update_oid -- cgit v1.2.3 From 9339005bb5504839e2a868f9510f0610da657400 Mon Sep 17 00:00:00 2001 From: kennyj Date: Tue, 16 Apr 2013 03:05:47 +0900 Subject: Add OID::Bit for supporting bit string. --- .../active_record/connection_adapters/postgresql/cast.rb | 7 +++++++ .../active_record/connection_adapters/postgresql/oid.rb | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/cast.rb b/activerecord/lib/active_record/connection_adapters/postgresql/cast.rb index 14ef07a75e..5789a2ae5f 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/cast.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/cast.rb @@ -26,6 +26,13 @@ module ActiveRecord end end + def string_to_bit(value) + case value + when /^[01]*$/ then value # Bit-string notation + when /^[0-9A-F]*$/i then value.hex.to_s(2) # Hexadecimal notation + end + end + def hstore_to_string(object) if Hash === object object.map { |k,v| diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb index 14c97dcefc..1be116ce10 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb @@ -18,6 +18,16 @@ module ActiveRecord end end + class Bit < Type + def type_cast(value) + if String === value + ConnectionAdapters::PostgreSQLColumn.string_to_bit value + else + value + end + end + end + class Bytea < Type def type_cast(value) return if value.nil? @@ -323,14 +333,14 @@ module ActiveRecord # FIXME: why are we keeping these types as strings? alias_type 'tsvector', 'text' alias_type 'interval', 'text' - alias_type 'bit', 'text' - alias_type 'varbit', 'text' alias_type 'macaddr', 'text' alias_type 'uuid', 'text' register_type 'money', OID::Money.new register_type 'bytea', OID::Bytea.new register_type 'bool', OID::Boolean.new + register_type 'bit', OID::Bit.new + register_type 'varbit', OID::Bit.new register_type 'float4', OID::Float.new alias_type 'float8', 'float4' -- cgit v1.2.3