It looks like I checked in the last change. I've noticed that this file changes a lot, often when no changes were made to the schema.

If making sure it gets generated with the :boolean type info solves this issue, I can be diligent about that (maybe even write a test for it!).

Thanks for digging into this!

Luke


On Mar 4, 2007, at 10:18 PM, James Kebinger wrote:

Apologies for replying to myself, but I'm just trying to understand the issue better. It appears that rake db:schema:load would be perfectly valid to code tests against if the schema.rb file were different than it is. Does anyone know how the one in SVN got generated? When I generate it (using MySQL) it has preserved the boolean type information. (i'll attach the svn diff). There are quite a few things that are subtly different about the two generated schemas, but the boolean vs int(4) thing is the biggest.

Snippet from contexts below in case this list doesn't like attachments:

 ActiveRecord::Schema.define(:version => 30) do

   create_table "contexts", :force => true do |t|
- t.column "name", :string, :default => "", :null => false - t.column "hide", :integer, :limit => 4, :default => 0, :null => false - t.column "position", :integer, :default => 0, :null => false - t.column "user_id", :integer, :default => 0, :null => false + t.column "name", :string, :default => "", :null => false + t.column "position", :integer, :null => false
+    t.column "hide",       :boolean,  :default => false
+    t.column "user_id",    :integer,  :default => 1
     t.column "created_at", :datetime
     t.column "updated_at", :datetime
   end



On 3/4/07, James Kebinger < [EMAIL PROTECTED]> wrote:
It appears to me that the underlying issue is that running using a database loaded using rake db:schema:load is not a valid configuration due to the information lost by round tripping the schema through the database - in this case its mysql losing the boolean attribute information but I'm sure that the true "intention" of the original schema would probably distorted by a trip through any database. The tests should be written to run against a database built by running rake db:migrate. (I originally couldn't get db:migrate to work until installing a newer sqllite and/or using the sqlite that came with locomotive's jan 2007 package) A less desirable alternative is to override to_xml and do our own xml serialization so that it is always in some canonical format. I was poking through the active record docs, and although one can override the getters and setters for model attributes, doing so doesn't change how to_xml works. I also noticed that the model automagically defines a "hide?" method that returns a boolean under any configuration, which is why the system works either way, except in the case of xml serialization. Any thoughts on either of these approaches (deprecating db:schema:load vs overriding to_xml) or another approach so that the tests work all of the time?



On 3/4/07, bsag <[EMAIL PROTECTED]> wrote:
On Fri Mar 02 14:32:46 UTC 2007, James Kebinger <[EMAIL PROTECTED]> wrote: > That is an interesting point Fred that I did not think of. If it is the case > that the xml api output differs between database types, then that would seem > to be an important problem to solve, because the model's "hidden" attribute > is boolean and it should look that way to the outside world, regardless of
> how the database represents it.

That's obviously where the test error comes from: I get the same error using MySQL as my test db, and the output clearly encodes hide as a boolean rather than an integer as it does on SQLite3.

However, this - if I understand it correctly - is a 'feature' of Rails, rather than a result of how it is coded in Tracks. I suspect that the Rails to_xml() method uses the same ActiveRecord functions to translate entities between the different database types that are used in the rest of the stack, and that (for some reason) converts a :boolean to an :integer when it's making a SQLite3 db. If you look at db/migrate/001_create_tracks_db.rb, you can see that the hide column is set as :boolean.

Preserving the format of the field as the database specific type probably has its advantages if you want to import data back, but I can see that it makes writing API scripts a bit more complicated.

cheers,

bsag

--
but she's a girl - the weblog of a female geek
http://www.rousette.org.uk
[EMAIL PROTECTED]


<schemadiff.txt>

_______________________________________________
Tracks-discuss mailing list
[email protected]
http://lists.rousette.org.uk/mailman/listinfo/tracks-discuss

Reply via email to