Forum: Ruby on Rails Problem: Null values in a CSV format fixture show up a 0 in

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9b17cbd73ecb022881801e0486f7c932?d=identicon&s=25 Steven Chanin (Guest)
on 2006-02-22 17:55
(Received via mailing list)
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."
	http://manuals.rubyonrails.com/read/chapter/26


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
This topic is locked and can not be replied to.