=cut
use base qw/DBIx::Class::Storage::DBI/;
-use Carp::Clan qw/^DBIx::Class/;
+use mro 'c3';
# For ORA_BLOB => 113, ORA_CLOB => 112
use DBD::Oracle qw( :ora_types );
return $id;
}
-=head2 connected
-
-Returns true if we have an open (and working) database connection, false if it is not (yet)
-open (or does not work). (Executes a simple SELECT to make sure it works.)
-
-The reason this is needed is that L<DBD::Oracle>'s ping() does not do a real
-OCIPing but just gets the server version, which doesn't help if someone killed
-your session.
-
-=cut
-
-sub connected {
+sub _ping {
my $self = shift;
- if (not $self->next::method(@_)) {
- return 0;
- }
- else {
- my $dbh = $self->_dbh;
+ my $dbh = $self->_dbh or return 0;
- local $dbh->{RaiseError} = 1;
+ local $dbh->{RaiseError} = 1;
- eval {
- my $ping_sth = $dbh->prepare_cached("select 1 from dual");
- $ping_sth->execute;
- $ping_sth->finish;
- };
+ eval {
+ $dbh->do("select 1 from dual");
+ };
- return $@ ? 0 : 1;
- }
+ return $@ ? 0 : 1;
}
sub _dbh_execute {
sub datetime_parser_type { return "DateTime::Format::Oracle"; }
-=head2 connect_call_set_datetime_format
+=head2 connect_call_datetime_setup
Used as:
- on_connect_call => 'set_datetime_format'
+ on_connect_call => 'datetime_setup'
-In L<DBIx::Class::Storage::DBI/connect_info> to set the session nls date,
-and timestamp values for use with
-L<DBIx::Class::InflateColumn::DateTime>. As well as the necessary environment
-variables for L<DateTime::Format::Oracle>.
+In L<DBIx::Class::Storage::DBI/connect_info> to set the session nls date, and
+timestamp values for use with L<DBIx::Class::InflateColumn::DateTime> and the
+necessary environment variables for L<DateTime::Format::Oracle>, which is used
+by it.
-Maximum allowable precision is used.
+Maximum allowable precision is used, unless the environment variables have
+already been set.
-C<nls_timestamp_tz_format> is also initialized but is not currently used by
-L<DBIx::Class::InflateColumn::DateTime>.
+These are the defaults used:
+
+ $ENV{NLS_DATE_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS';
+ $ENV{NLS_TIMESTAMP_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF';
+ $ENV{NLS_TIMESTAMP_TZ_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF TZHTZM';
+
+To get more than second precision with L<DBIx::Class::InflateColumn::DateTime>
+for your timestamps, use something like this:
+
+ use Time::HiRes 'time';
+ my $ts = DateTime->from_epoch(epoch => time);
=cut
-sub connect_call_set_datetime_format {
+sub connect_call_datetime_setup {
my $self = shift;
my $dbh = $self->dbh;
$dbh->do("alter session set nls_date_format = '$date_format'");
$dbh->do("alter session set nls_timestamp_format = '$timestamp_format'");
- $dbh->do("alter session set nls_timestamp_tz_format = '$timestamp_tz_format'");
+ $dbh->do("alter session set nls_timestamp_tz_format='$timestamp_tz_format'");
}
sub _svp_begin {