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:
parent
07989b64f4
commit
3e0077f54d
9 changed files with 68 additions and 3 deletions
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
37
activerecord/test/binary_test.rb
Normal file
37
activerecord/test/binary_test.rb
Normal 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
|
BIN
activerecord/test/fixtures/associations.png
vendored
Normal file
BIN
activerecord/test/fixtures/associations.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
2
activerecord/test/fixtures/binary.rb
vendored
Normal file
2
activerecord/test/fixtures/binary.rb
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
class Binary < ActiveRecord::Base
|
||||
end
|
|
@ -115,4 +115,10 @@ CREATE TABLE `people` (
|
|||
`id` INTEGER NOT NULL PRIMARY KEY,
|
||||
`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`)
|
||||
);
|
|
@ -133,4 +133,10 @@ CREATE TABLE people (
|
|||
first_name text,
|
||||
lock_version integer default 0,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
CREATE TABLE binaries (
|
||||
id serial ,
|
||||
data bytea,
|
||||
PRIMARY KEY (id)
|
||||
);
|
|
@ -103,4 +103,9 @@ CREATE TABLE 'people' (
|
|||
'id' INTEGER NOT NULL PRIMARY KEY,
|
||||
'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
|
||||
);
|
|
@ -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)
|
||||
);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue