Andrew Libby
10/30/2006 9:51:00 PM
Robert, Jaccob you two nailed it. Thanks a bunch.
It's subtle, the difference between a list and an array
especially with a perl background.
Thanks!
Andy
Jacob Fugal wrote:
> On 10/30/06, Andrew Libby <alibby@tangeis.com> wrote:
>> I come from a Perl DBI and JDBC world, and would like to use
>> prepared statements. So I've gotten the underlying Mysql
>> connection (using ActiveRecord::Base.connection.raw_connection).
>
> My guess is that prepared statements are indeed the source of your
> performance problems. IIRC, ActiveRecord does not cache prepared
> statements by default (and if there's an option for it, I do not know
> of it) so you're essentially calling prepare once for each INSERT! For
> most Rails applications this is a space for improvement but not a show
> stopper. For importing loads of data, it's simply unacceptable.
>
>> When I have code like
>>
>> stmt = conn.prepare(%Q/
>> INSERT INTO sometable (t1,t2,t3,t4)
>> VALUES (?,?,?,?)
>> /)
>>
>> bind_params = [1,2,3,4]
>>
>> stmt.execute(bind_params)
>>
>> I get an error on the execute statement. It claims I need
>> to send it 4 parameters.
>
> Unlike in perl (which I'm assuming you're used to from the symptoms
> here), arrays and lists are not *quite* the same thing in Ruby. When
> you call stmt.execute(bind_params), you are not passing a list of four
> parameters to execute (as you might expect), but just one parameter
> that is an array. Fortunately, Ruby does provide a mechanism for
> "splatting" an array into a list of parameters:
>
> stmt.execute(*bind_params) # note the star
>
> Let us know if this takes care of it for you!
>
> Jacob Fugal
>
--
Andrew Libby
Tangeis, LLC
Innovative IT Management Solutions
alibby@tangeis.com