Hi all,
I’m running into a strange problem. I’m trying to get null values to
load from a fixture in CSV form into my test database, but they show
up as 0 (zero).
I have a table people (simplified version below)
create table people (
id int not null auto_increment,
target int null default null,
name varchar(50) not null,
primary key(id)
);
that has a column target which can be null. In my development
database many people have null values for target.
In my unit tests, I want to be able to use all the people (a couple
of hundred), so I exported people from MySQL 4.1.12-standard in CSV
format using the following command:
select * into outfile '/tmp/people.csv' fields terminated by ','
optionally enclosed by ‘"’ lines terminated by ‘\n’ from people;
That gives me a CSV file with null values represented as \N
According to the fixtures documentation, to get a null value inserted
into your test database from a CSV, you should have nothing between
the commas.
"nulls can be achived by just placing a comma, for example,
(1,sclaus,false,) minus the parenthesis of course."
Peak Obsession
So I went through and replaced \N with nothing … as a result rows
that previously looked like:
7,\N,"Steve"
now look like
7,,"Steve"
The rails unit test libraries load the fixture without any complaints.
BUT…
wherever I had a null for target in my development database, I now
have a 0 my test database.
This is a problem because 0 is an illegal value for a target…
targets must be positive or non-existant. As a result, the
validation on my model (person.rb::validate) is failing and my unit
tests are throwing errors.
As a work around, I commented out my validate, but I’d like to turn
it back on.
I’m running the following:
Mac OSX 10.4.5
Ruby 1.8.2 (2004-12-25) [powerpc-darwin8.0]
Rails 1.0.0
Thanks for any help.
-Steve