1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fixed a bug in the Ruby/MySQL that caused binary content to be escaped badly and come back mangled #405 [Tobias Luetke]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@301 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-01-01 18:34:39 +00:00
parent 07989b64f4
commit 3e0077f54d
9 changed files with 68 additions and 3 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Fixed a bug in the Ruby/MySQL that caused binary content to be escaped badly and come back mangled #405 [Tobias Luetke]
* Added block-style for callbacks #332 [bitsweat].
Before:

View file

@ -1091,7 +1091,7 @@ class << Mysql
when "\0" then "\\0"
when "\n" then "\\n"
when "\r" then "\\r"
when "\032" then "\Z"
when "\032" then "\\Z"
else "\\"+$1
end
end

View file

@ -0,0 +1,37 @@
require 'abstract_unit'
require 'fixtures/binary'
class BinaryTest < Test::Unit::TestCase
def setup
@data = create_data_fixture
end
def test_load_save
bin = Binary.new
bin.data = @data
assert bin.data == @data,
"Assigned data differs from file data"
bin.save
assert bin.data == @data,
"Assigned data differs from file data after save"
db_bin = Binary.find(bin.id)
assert db_bin.data == bin.data,
"Loaded binary data differes from memory version"
assert db_bin.data == File.new(File.dirname(__FILE__)+"/fixtures/associations.png","rb").read,
"Loaded binary data differes from file version"
end
private
def create_data_fixture
Binary.connection.execute("DELETE FROM binaries")
File.new(File.dirname(__FILE__)+"/fixtures/associations.png","rb").read
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

2
activerecord/test/fixtures/binary.rb vendored Normal file
View file

@ -0,0 +1,2 @@
class Binary < ActiveRecord::Base
end

View file

@ -116,3 +116,9 @@ CREATE TABLE `people` (
`first_name` VARCHAR(40) NOT NULL,
`lock_version` INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE `binaries` (
`id` int(11) NOT NULL auto_increment,
`data` mediumblob,
PRIMARY KEY (`id`)
);

View file

@ -134,3 +134,9 @@ CREATE TABLE people (
lock_version integer default 0,
PRIMARY KEY (id)
);
CREATE TABLE binaries (
id serial ,
data bytea,
PRIMARY KEY (id)
);

View file

@ -104,3 +104,8 @@ CREATE TABLE 'people' (
'first_name' VARCHAR(40) DEFAULT NULL,
'lock_version' INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE 'binaries' (
'id' INTEGER NOT NULL PRIMARY KEY,
'data' BLOB DEFAULT NULL
);

View file

@ -109,10 +109,17 @@ CREATE TABLE mixins (
PRIMARY KEY (id)
);
CREATE TABLE people (
id int NOT NULL IDENTITY(1, 1),
first_name varchar(40) NULL,
lock_version int default 0,
PRIMARY KEY (id)
);
CREATE TABLE binaries (
id int NOT NULL IDENTITY(1, 1),
data blob NULL,
PRIMARY KEY (id)
);