X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FUTF8Columns.pm;h=db571a69cd5f2054fe5b475e8ce5578b50e5118e;hb=d2308dde5718dc0f828584c3fa24d7417c484040;hp=a25ac39b0ab4b40fbd5abe82b7a40d044aa227f7;hpb=2ba92e450d43b9a1a247c807c7bc18edcfacf77d;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/UTF8Columns.pm b/lib/DBIx/Class/UTF8Columns.pm index a25ac39..db571a6 100644 --- a/lib/DBIx/Class/UTF8Columns.pm +++ b/lib/DBIx/Class/UTF8Columns.pm @@ -3,11 +3,11 @@ use strict; use warnings; use base qw/DBIx::Class/; -__PACKAGE__->mk_classdata( '_utf8_columns' ); +__PACKAGE__->mk_group_accessors( inherited => '_utf8_columns' ); =head1 NAME -DBIx::Class::UTF8Columns - Force UTF8 (Unicode) flag on columns +DBIx::Class::UTF8Columns - Force UTF8 (Unicode) flag on columns (DEPRECATED) =head1 SYNOPSIS @@ -23,9 +23,54 @@ DBIx::Class::UTF8Columns - Force UTF8 (Unicode) flag on columns =head1 DESCRIPTION -This module allows you to get columns data that have utf8 (Unicode) flag. +This module allows you to get and store utf8 (unicode) column data +in a database that does not natively support unicode. It ensures +that column data is correctly serialised as a byte stream when +stored and de-serialised to unicode strings on retrieval. -=head2 Warning + THE USE OF THIS MODULE (AND ITS COUSIN DBIx::Class::ForceUTF8) IS VERY + STRONGLY DISCOURAGED, PLEASE READ THE WARNINGS BELOW FOR AN EXPLANATION. + +If you want to continue using this module and do not want to receive +further warnings set the environment variable C +to a true value. + +=head2 Warning - Module does not function properly on create/insert + +Recently (April 2010) a bug was found deep in the core of L +which affects any component attempting to perform encoding/decoding by +overloading L and +L. As a result of this problem +L sends the original column values +to the database, while L sends the +encoded values. L and L +are both affected by this bug. + +It is unclear how this bug went undetected for so long (it was +introduced in March 2006), No attempts to fix it will be made while the +implications of changing such a fundamental behavior of DBIx::Class are +being evaluated. However in this day and age you should not be using +this module anyway as Unicode is properly supported by all major +database engines, as explained below. + +If you have specific questions about the integrity of your data in light +of this development - please +L +to further discuss your concerns with the team. + +=head2 Warning - Native Database Unicode Support + +If your database natively supports Unicode (as does SQLite with the +C connect flag, MySQL with C +connect flag or Postgres with the C connect flag), +then this component should B be used, and will corrupt unicode +data in a subtle and unexpected manner. + +It is far better to do Unicode support within the database if +possible rather than converting data to and from raw bytes on every +database round trip. + +=head2 Warning - Component Overloading Note that this module overloads L in a way that may prevent other components overloading the same method from working @@ -49,7 +94,7 @@ sub utf8_columns { if (@_) { foreach my $col (@_) { $self->throw_exception("column $col doesn't exist") - unless $self->has_column($col); + unless $self->result_source->has_column($col); } return $self->_utf8_columns({ map { $_ => 1 } @_ }); } else { @@ -98,7 +143,7 @@ sub get_columns { sub store_column { my ( $self, $column, $value ) = @_; - # the dirtyness comparison must happen on the non-encoded value + # the dirtiness comparison must happen on the non-encoded value my $copy; if ( defined $value and $self->_is_utf8_column($column) and utf8::is_utf8($value) ) { @@ -117,13 +162,16 @@ sub _is_utf8_column { return ($_[0]->utf8_columns || {})->{$_[1]}; } -=head1 AUTHORS +=head1 FURTHER QUESTIONS? -See L. +Check the list of L. -=head1 LICENSE +=head1 COPYRIGHT AND LICENSE -You may distribute this code under the same terms as Perl itself. +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. =cut