Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

PostgreSQL: correct binary escaping. References #8049, closes #10176

…[jbasdf, tmacedo]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8185 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit dd27c4e5fb338e2571e691c23b39cdd857eca7cd 1 parent ec93d61
@jeremy jeremy authored
View
4 activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -75,7 +75,7 @@ def self.binary_to_string(value)
if PGconn.respond_to?(:unescape_bytea)
self.class.module_eval do
define_method(:binary_to_string) do |value|
- if value =~ /\\\\\d{3}/
+ if value =~ /\\\d{3}/
PGconn.unescape_bytea(value)
else
value
@@ -85,7 +85,7 @@ def self.binary_to_string(value)
else
self.class.module_eval do
define_method(:binary_to_string) do |value|
- if value =~ /\\\\\d{3}/
+ if value =~ /\\\d{3}/
result = ''
i, max = 0, value.size
while i < max
View
49 activerecord/test/binary_test.rb
@@ -1,37 +1,32 @@
require 'abstract_unit'
-require 'fixtures/binary'
-class BinaryTest < Test::Unit::TestCase
- BINARY_FIXTURE_PATH = File.dirname(__FILE__) + '/fixtures/flowers.jpg'
+# Without using prepared statements, it makes no sense to test
+# BLOB data with SQL Server, because the length of a statement is
+# limited to 8KB.
+#
+# Without using prepared statements, it makes no sense to test
+# BLOB data with DB2 or Firebird, because the length of a statement
+# is limited to 32KB.
+unless current_adapter?(:SQLServerAdapter, :SybaseAdapter, :DB2Adapter, :FirebirdAdapter)
+ require 'fixtures/binary'
- def setup
- Binary.connection.execute 'DELETE FROM binaries'
- @data = File.read(BINARY_FIXTURE_PATH).freeze
- end
-
- def test_truth
- assert true
- end
+ class BinaryTest < Test::Unit::TestCase
+ FIXTURES = %w(flowers.jpg example.log)
- # Without using prepared statements, it makes no sense to test
- # BLOB data with SQL Server, because the length of a statement is
- # limited to 8KB.
- #
- # Without using prepared statements, it makes no sense to test
- # BLOB data with DB2 or Firebird, because the length of a statement
- # is limited to 32KB.
- unless current_adapter?(:SQLServerAdapter, :SybaseAdapter, :DB2Adapter, :FirebirdAdapter)
def test_load_save
- bin = Binary.new
- bin.data = @data
+ Binary.delete_all
+
+ FIXTURES.each do |filename|
+ data = File.read("#{File.dirname(__FILE__)}/fixtures/#{filename}").freeze
+
+ bin = Binary.new(:data => data)
+ assert_equal data, bin.data, 'Newly assigned data differs from original'
- assert @data == bin.data, 'Newly assigned data differs from original'
-
- bin.save
- assert @data == bin.data, 'Data differs from original after save'
+ bin.save!
+ assert_equal data, bin.data, 'Data differs from original after save'
- db_bin = Binary.find(bin.id)
- assert @data == db_bin.data, 'Reloaded data differs from original'
+ assert_equal data, bin.reload.data, 'Reloaded data differs from original'
+ end
end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.