On Mar 18, 1:01 pm, Jason Thomas <[email protected]> wrote:
> I've been battling time since trying to use Sequel with Oracle and I
> think I finally found the issue. The ruby-oci8 gem handles all the
> ruby date / time creation from the database. Thus I think Sequel
> simply uses whatever the adapter returns. The problem is nothing you
> set in Sequel will affect what oci8 does. I was setting
> Sequel.default_timezone=:utc and expecting to get back UTC times but
> was always getting back local timezone times. I tracked this down to
> how oci8 is creating the times and it is using the Oracle session
> timezone. Thus to get it to return UTC times I had to do the
> following:
>
> DB.run "ALTER SESSION SET TIME_ZONE='-00:00'"
>
> Now all accesses from the DB instance return times with that timezone
> and everything works! I'd like to see this incorporated into Sequel
> such that setting Sequel.default_timezone does this.
That's unlikely to happen. It's too ugly to add adapter dependent
code to Sequel.default_timezone=. Connection-level settings like this
cannot be handled correctly by DB.run except in simple cases. You can
use the DB.run command safely only if you are single threaded and
never get disconnected.
> Obviously this is
> Oracle specific and when I looked at timezones.rb I didn't see
> anything specific to an adapter. Let me know the best way to make this
> patch and I'll be happy to implement and test it.
Currently, the best way to handle this is to use an after_connect
proc:
DB.connect(..., :after_connect=>proc{|c| c.exec("ALTER SESSION SET
TIME_ZONE='-00:00'")})
This is the only thread-safe and disconnect-handling friendly way to
change connection-level settings.
I would be willing to accept a patch to the Oracle adapter (inside
Database#connect) that checks the value of Sequel.database_timezone
and issues that query if it is :utc. That way, as long as the user
sets Sequel.default_timezone before a connection to the database is
made, it will use that.
Jeremy
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.