X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase%2FASE.pm;h=2fae10fe41055230c7746b7e28d55804b46a87ed;hb=2b8cc2f27d0dc881059e55dd6462bb28b7b8e414;hp=1022cc21539d92620654a9e394603b3359305457;hpb=3f52831919a64ea6fb3269e41c547bc42e8db2fd;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm index 1022cc2..2fae10f 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm @@ -16,6 +16,9 @@ use Data::Dumper::Concise 'Dumper'; use Try::Tiny; use namespace::clean; +__PACKAGE__->sql_limit_dialect ('RowCountOrGenericSubQ'); +__PACKAGE__->sql_quote_char ([qw/[ ]/]); + __PACKAGE__->mk_group_accessors('simple' => qw/_identity _blob_log_on_update _writer_storage _is_extra_storage _bulk_storage _is_bulk_storage _began_bulk_work @@ -83,8 +86,8 @@ To turn off this warning set the DBIC_SYBASE_FREETDS_NOWARN environment variable. EOF - if (not $self->_typeless_placeholders_supported) { - if ($self->_placeholders_supported) { + if (not $self->_use_typeless_placeholders) { + if ($self->_use_placeholders) { $self->auto_cast(1); } else { @@ -102,7 +105,7 @@ EOF $self->_rebless; } # this is highly unlikely, but we check just in case - elsif (not $self->_typeless_placeholders_supported) { + elsif (not $self->_use_typeless_placeholders) { $self->auto_cast(1); } } @@ -152,16 +155,6 @@ for my $method (@also_proxy_to_extra_storages) { }; } -sub _sql_maker_opts { - my ( $self, $opts ) = @_; - - if ( $opts ) { - $self->{_sql_maker_opts} = { %$opts }; - } - - return { limit_dialect => 'RowCountOrGenericSubQ', %{$self->{_sql_maker_opts}||{}} }; -} - sub disconnect { my $self = shift; @@ -241,12 +234,6 @@ sub connect_call_blob_setup { if exists $args{log_on_update}; } -sub _is_lob_type { - my $self = shift; - my $type = shift; - $type && $type =~ /(?:text|image|lob|bytea|binary|memo)/i; -} - sub _is_lob_column { my ($self, $source, $column) = @_; @@ -268,9 +255,13 @@ sub _prep_for_execute { first { $bind_info->{$_}{is_auto_increment} } keys %$bind_info ; + + my $columns_info = blessed $ident && $ident->columns_info; + my $identity_col = - blessed $ident && - first { $ident->column_info($_)->{is_auto_increment} } $ident->columns + $columns_info && + first { $columns_info->{$_}{is_auto_increment} } + keys %$columns_info ; if (($op eq 'insert' && $bound_identity_col) || @@ -358,8 +349,11 @@ sub insert { my $self = shift; my ($source, $to_insert) = @_; + my $columns_info = $source->columns_info; + my $identity_col = - (first { $source->column_info($_)->{is_auto_increment} } $source->columns) + (first { $columns_info->{$_}{is_auto_increment} } + keys %$columns_info ) || ''; # check for empty insert @@ -437,14 +431,15 @@ sub update { my $self = shift; my ($source, $fields, $where, @rest) = @_; - my $wantarray = wantarray; - my $blob_cols = $self->_remove_blob_cols($source, $fields); my $table = $source->name; + my $columns_info = $source->columns_info; + my $identity_col = - first { $source->column_info($_)->{is_auto_increment} } $source->columns; + first { $columns_info->{$_}{is_auto_increment} } + keys %$columns_info; my $is_identity_update = $identity_col && defined $fields->{$identity_col}; @@ -473,10 +468,10 @@ sub update { my @res; if (%$fields) { - if ($wantarray) { + if (wantarray) { @res = $self->next::method(@_); } - elsif (defined $wantarray) { + elsif (defined wantarray) { $res[0] = $self->next::method(@_); } else { @@ -486,15 +481,18 @@ sub update { $guard->commit; - return $wantarray ? @res : $res[0]; + return wantarray ? @res : $res[0]; } sub insert_bulk { my $self = shift; my ($source, $cols, $data) = @_; + my $columns_info = $source->columns_info; + my $identity_col = - first { $source->column_info($_)->{is_auto_increment} } $source->columns; + first { $columns_info->{$_}{is_auto_increment} } + keys %$columns_info; my $is_identity_insert = (first { $_ eq $identity_col } @{$cols}) ? 1 : 0; @@ -654,15 +652,12 @@ EOF DBD::Sybase::set_cslib_cb($orig_cslib_cb); if ($exception =~ /-Y option/) { - carp <<"EOF"; - -Sybase bulk API operation failed due to character set incompatibility, reverting -to regular array inserts: + my $w = 'Sybase bulk API operation failed due to character set incompatibility, ' + . 'reverting to regular array inserts. Try unsetting the LANG environment variable' + ; + $w .= "\n$exception" if $self->debug; + carp $w; -*** Try unsetting the LANG environment variable. - -$exception -EOF $self->_bulk_storage(undef); unshift @_, $self; goto \&insert_bulk; @@ -1160,7 +1155,7 @@ Real limits and limited counts using stored procedures deployed on startup. =item * -Adaptive Server Anywhere (ASA) support, with possible SQLA::Limit support. +Adaptive Server Anywhere (ASA) support =item *