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* *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]. * Added block-style for callbacks #332 [bitsweat].
Before: Before:

View file

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

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

View file

@ -133,4 +133,10 @@ CREATE TABLE people (
first_name text, first_name text,
lock_version integer default 0, lock_version integer default 0,
PRIMARY KEY (id) PRIMARY KEY (id)
);
CREATE TABLE binaries (
id serial ,
data bytea,
PRIMARY KEY (id)
); );

View file

@ -103,4 +103,9 @@ CREATE TABLE 'people' (
'id' INTEGER NOT NULL PRIMARY KEY, 'id' INTEGER NOT NULL PRIMARY KEY,
'first_name' VARCHAR(40) DEFAULT NULL, 'first_name' VARCHAR(40) DEFAULT NULL,
'lock_version' INTEGER NOT NULL DEFAULT 0 '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) PRIMARY KEY (id)
); );
CREATE TABLE people ( CREATE TABLE people (
id int NOT NULL IDENTITY(1, 1), id int NOT NULL IDENTITY(1, 1),
first_name varchar(40) NULL, first_name varchar(40) NULL,
lock_version int default 0, lock_version int default 0,
PRIMARY KEY (id) PRIMARY KEY (id)
); );
CREATE TABLE binaries (
id int NOT NULL IDENTITY(1, 1),
data blob NULL,
PRIMARY KEY (id)
);