Silence is Foo Mental notes on Ruby, Git, Rails and whatever geeky thing

20Feb/10Off

Adding a :noselect option to ActiveRecord (Rails 2.3.x)

Let's say you have an users table with the following columns

firstname, lastname, email, crypted_password and salt

so you get all the records with:

User.find(:all)
User.all #it calls find internally

well, you should know that ActiveRecord creates one instance of the User model for every record it founds and that every column of such records is stored in a instance variable of the User model instance.

now, let's say your table stores 2,000 users, ActiveRecord would create 2,000 instances of the User model and let's say your table have 15 columns, so each of this 2,000 instances of the User model will have 15 instances variables and at least 30 dynamic methods (setters and getters), so, it'd be a good idea if we can reduce, at least, the quantity of instance variables and setters and getters, don't you think?

well, for me, the first approach would be to check if I need all the columns, once I realize that I am not, I'd change the call, let's say I don't need the salt column:

User.all(:select => "firstname, lastname, email, crypted_password")
let's benchmark! I'll use a table with 130 users.
the results are:
Only :all (3528.6ms)
:all with :select (3439.1ms)
3439.1ms is less than 3528.6ms!! yes, milliseconds, but what about a table with thousands and thousands of users?
ok, now let's say you have a table with 20 or 30 columns, can you imagine?
User.all(:select => "col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_n")
all of this just because you don't want one or two columns???
well, I made a patch to add a :noselect option:
User.all(:noselect => "salt")
and it'll result in the same SQL query than
User.find(:all, :select => "firstname, lastname, email, crypted_password")
which means:
SELECT firstname, lastname, email, crypted_password FROM users

And here is the link to the patch:

https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4012-patch-add-noselect-option-to-activerecordfind
Filed under: rails, ruby 4 Comments
12Feb/10Off

Last time I use Google Chrome

ok, I can't manage my bookmarks with Google Chrome on Mac OS, google_chrome_helper eats almost 100% of my cpu on a MacBook 5.1 with 4Gb (in some cases), yesterday I tried to attach a file in gmail using Chrome,  you know what? I couldn't, and now this?????

Chrome cannot open html documents

Filed under: Mac 8 Comments