minor changes
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Sybase.pm
index e60b5e2..d92a60e 100644 (file)
@@ -29,7 +29,8 @@ sub _rebless {
         bless $self, 'DBIx::Class::Storage:DBI::Sybase::NoBindVars';
         $self->_rebless;
       }
-      $self->_init_date_fmt;
+      $self->connect_call_datetime_setup;
+      $self->connect_call_blob_setup;
     }
   }
 }
@@ -37,14 +38,53 @@ sub _rebless {
 sub _populate_dbh {
   my $self = shift;
   $self->next::method(@_);
-  $self->_init_date_fmt;
+  $self->connect_call_datetime_setup;
+  $self->connect_call_blob_setup;
   1;
 }
 
+=head2 connect_call_blob_setup
+
+Used as:
+
+  on_connect_call => 'blob_setup'
+
+Does C<< $dbh->{syb_binary_images} = 1; >> to return C<IMAGE> data as raw binary
+instead of as a hex string.
+
+Recommended.
+
+=cut
+
+sub connect_call_blob_setup {
+  my $self = shift;
+  my $dbh = $self->_dbh;
+  $dbh->{syb_binary_images} = 1;
+}
+
+=head2 connect_call_datetime_setup
+
+Used as:
+
+  on_connect_call => 'datetime_setup'
+
+In L<DBIx::Class::Storage::DBI/connect_info> to set:
+
+  $dbh->syb_date_fmt('ISO_strict'); # output fmt: 2004-08-21T14:36:48.080Z
+  $dbh->do('set dateformat mdy');   # input fmt:  08/13/1979 18:08:55.080
+
+On connection for use with L<DBIx::Class::InflateColumn::DateTime>, using
+L<DateTime::Format::Sybase>, which you will need to install.
+
+This works for both C<DATETIME> and C<SMALLDATETIME> columns, although
+C<SMALLDATETIME> columns only have minute precision.
+
+=cut
+
 {
   my $old_dbd_warned = 0;
 
-  sub _init_date_fmt {
+  sub connect_call_datetime_setup {
     my $self = shift;
     my $dbh = $self->_dbh;
 
@@ -62,6 +102,8 @@ sub _populate_dbh {
   }
 }
 
+sub datetime_parser_type { "DateTime::Format::Sybase" }
+
 sub _dbh_last_insert_id {
   my ($self, $dbh, $source, $col) = @_;
 
@@ -70,6 +112,15 @@ sub _dbh_last_insert_id {
   return ($dbh->selectrow_array($sth))[0];
 }
 
+=head2 count
+
+Counts for limited queries are emulated by executing select queries and
+returning the number of successful executions minus the offset.
+
+This is necessary due to the limitations of Sybase.
+
+=cut
+
 sub count {
   my $self = shift;
   my ($source, $attrs) = @_;
@@ -99,8 +150,6 @@ sub count {
   return $count - $offset;
 }
 
-sub datetime_parser_type { "DateTime::Format::Sybase" }
-
 1;
 
 =head1 NAME
@@ -124,17 +173,22 @@ without doing a C<select max(col)>.
 
 But your queries will be cached.
 
+A recommended L<DBIx::Class::Storage::DBI/connect_info> setting:
+
+  on_connect_call => [qw/datetime_setup blob_setup/]
+
 =head1 DATES
 
-On connection C<syb_date_fmt> is set to C<ISO_strict>, e.g.:
-C<2004-08-21T14:36:48.080Z> and C<dateformat> is set to C<mdy>, e.g.:
-C<08/13/1979 18:08:55.080>.
+See L</connect_call_datetime_setup> to setup date formats
+for L<DBIx::Class::InflateColumn::DateTime>.
 
-This works for both C<DATETIME> and C<SMALLDATETIME> columns, although
-C<SMALLDATETIME> columns only have minute precision.
+=head1 IMAGE AND TEXT COLUMNS
+
+See L</connect_call_blob_setup> for a L<DBIx::Class::Storage::DBI/connect_info>
+setting you need to work with C<IMAGE> columns.
 
-You will need the L<DateTime::Format::Sybase> module if you are going to use
-L<DBIx::Class::InflateColumn::DateTime>.
+Due to limitations in L<DBD::Sybase> and this driver, it is only possible to
+select one C<TEXT> or C<IMAGE> column at a time.
 
 =head1 AUTHORS