DBIx::Class::Storage::DBI::MSSQL
/
;
__PACKAGE__->datetime_parser_type(
'DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::DateTime::Format'
);
sub
_rebless {
my
$self
=
shift
;
my
$dbh
=
$self
->_get_dbh;
return
if
ref
$self
ne __PACKAGE__;
if
(not
$self
->_use_typeless_placeholders) {
carp_once
<<'EOF' unless $ENV{DBIC_MSSQL_FREETDS_LOWVER_NOWARN};
Placeholders do not seem to be supported in your configuration of
DBD::Sybase/FreeTDS.
This means you are taking a large performance hit, as caching of prepared
statements is disabled.
Make sure to configure your server with "tds version" of 8.0 or 7.0 in
/etc/freetds/freetds.conf .
To turn off this warning, set the DBIC_MSSQL_FREETDS_LOWVER_NOWARN environment
variable.
EOF
require
DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars;
bless
$self
,
'DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars'
;
$self
->_rebless;
}
}
sub
_init {
my
$self
=
shift
;
$self
->
next
::method(
@_
);
if
(
$self
->_using_freetds and (
my
$ver
=
$self
->_using_freetds_version||999) > 0.82) {
carp_once(
"Your DBD::Sybase was compiled against buggy FreeTDS version $ver. "
.
'Statement caching does not work and will be disabled.'
);
$self
->_identity_method(
'@@identity'
);
$self
->_no_scope_identity_query(1);
$self
->disable_sth_caching(1);
}
}
sub
_set_autocommit_stmt {
my
(
$self
,
$on
) =
@_
;
return
'SET IMPLICIT_TRANSACTIONS '
. (
$on
?
'OFF'
:
'ON'
);
}
sub
_get_server_version {
my
$self
=
shift
;
my
$product_version
=
$self
->_get_dbh->selectrow_hashref(
'master.dbo.xp_msver ProductVersion'
);
if
((
my
$version
=
$product_version
->{Character_Value}) =~ /^(\d+)\./) {
return
$version
;
}
else
{
$self
->throw_exception(
"MSSQL Version Retrieval Failed, Your ProductVersion's Character_Value is missing or malformed!"
);
}
}
sub
connect_call_datetime_setup {
my
$self
=
shift
;
my
$dbh
=
$self
->_get_dbh;
if
(
$dbh
->can(
'syb_date_fmt'
)) {
$dbh
->syb_date_fmt(
'ISO_strict'
);
}
else
{
carp_once
'Your DBD::Sybase is too old to support '
.
'DBIx::Class::InflateColumn::DateTime, please upgrade!'
;
}
}
package
DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::DateTime::Format;
my
$datetime_parse_format
=
'%Y-%m-%dT%H:%M:%S.%3NZ'
;
my
$datetime_format_format
=
'%Y-%m-%d %H:%M:%S.%3N'
;
my
(
$datetime_parser
,
$datetime_formatter
);
sub
parse_datetime {
shift
;
$datetime_parser
||= DateTime::Format::Strptime->new(
pattern
=>
$datetime_parse_format
,
on_error
=>
'croak'
,
);
return
$datetime_parser
->parse_datetime(
shift
);
}
sub
format_datetime {
shift
;
$datetime_formatter
||= DateTime::Format::Strptime->new(
pattern
=>
$datetime_format_format
,
on_error
=>
'croak'
,
);
return
$datetime_formatter
->format_datetime(
shift
);
}
1;