1 package DBIx::Class::Storage::DBI::Sybase;
6 use base qw/DBIx::Class::Storage::DBI/;
8 use Carp::Clan qw/^DBIx::Class/;
13 if (ref($self) eq 'DBIx::Class::Storage::DBI::Sybase') {
15 @{$self->dbh->selectrow_arrayref(qq{sp_server_info \@attribute_id=1})}[2]
20 my $subclass = "DBIx::Class::Storage::DBI::Sybase::${dbtype}";
22 if (!$exception && $dbtype && $self->load_optional_class($subclass)) {
23 bless $self, $subclass;
25 } elsif (not $self->dbh->{syb_dynamic_supported}) {
26 bless $self, 'DBIx::Class::Storage:DBI::Sybase::NoBindVars';
33 my $old_dbd_warned = 0;
37 $self->next::method(@_);
38 my $dbh = $self->_dbh;
40 if ($dbh->can('syb_date_fmt')) {
41 $dbh->syb_date_fmt('ISO_strict');
42 } elsif (not $old_dbd_warned) {
43 carp "Your DBD::Sybase is too old to support ".
44 "DBIx::Class::InflateColumn::DateTime, please upgrade!";
48 $dbh->do('set dateformat mdy');
54 sub _dbh_last_insert_id {
55 my ($self, $dbh, $source, $col) = @_;
57 # sorry, there's no other way!
58 my $sth = $dbh->prepare_cached("select max($col) from ".$source->from);
59 return ($dbh->selectrow_array($sth))[0];
62 sub datetime_parser_type { "DBIx::Class::Storage::DBI::Sybase::DateTime" }
68 DBIx::Class::Storage::DBI::Sybase - Storage::DBI subclass for Sybase
72 This subclass supports L<DBD::Sybase> for real Sybase databases. If
73 you are using an MSSQL database via L<DBD::Sybase>, see
74 L<DBIx::Class::Storage::DBI::Sybase::MSSQL>.
78 If your version of Sybase does not support placeholders, then this storage
79 driver uses L<DBIx::Class::Storage::DBI::NoBindVars> as a base,
81 In which case, bind variables will be interpolated (properly quoted of course)
82 into the SQL query itself, without using bind placeholders.
84 More importantly this means that caching of prepared statements is explicitly
85 disabled, as the interpolation renders it useless.
87 If your version of Sybase B<DOES> support placeholders (check
88 C<<$dbh->{syb_dynamic_supported}>> then unfortunately there's no way to get the
89 C<last_insert_id> without doing a C<select max(col)>.
91 But your queries will be cached.
95 On connection C<syb_date_fmt> is set to C<ISO_strict>, e.g.:
96 C<2004-08-21T14:36:48.080Z> and C<dateformat> is set to C<mdy>, e.g.:
99 You will need the L<DateTime::Format::Strptime> module if you are going to use
100 L<DBIx::Class::InflateColumn::DateTime>.
104 Brandon L Black <blblack@gmail.com>
106 Justin Hunter <justin.d.hunter@gmail.com>
108 Rafael Kitover <rkitover@cpan.org>
112 You may distribute this code under the same terms as Perl itself.