BEGIN {
if
($] <= 5.008000) {
}
else
{
}
}
__PACKAGE__->mk_classdata(
'_utf8_columns'
);
sub
utf8_columns {
my
$self
=
shift
;
if
(
@_
) {
foreach
my
$col
(
@_
) {
$self
->throw_exception(
"column $col doesn't exist"
)
unless
$self
->has_column(
$col
);
}
return
$self
->_utf8_columns({
map
{
$_
=> 1 }
@_
});
}
else
{
return
$self
->_utf8_columns;
}
}
sub
get_column {
my
(
$self
,
$column
) =
@_
;
my
$value
=
$self
->
next
::method(
$column
);
my
$cols
=
$self
->_utf8_columns;
if
(
$cols
and
defined
$value
and
$cols
->{
$column
} ) {
if
($] <= 5.008000) {
Encode::_utf8_on(
$value
)
unless
Encode::is_utf8(
$value
);
}
else
{
utf8::decode(
$value
)
unless
utf8::is_utf8(
$value
);
}
}
$value
;
}
sub
get_columns {
my
$self
=
shift
;
my
%data
=
$self
->
next
::method(
@_
);
foreach
my
$col
(
grep
{
defined
$data
{
$_
} }
keys
%{
$self
->_utf8_columns || {} }) {
if
($] <= 5.008000) {
Encode::_utf8_on(
$data
{
$col
})
unless
Encode::is_utf8(
$data
{
$col
});
}
else
{
utf8::decode(
$data
{
$col
})
unless
utf8::is_utf8(
$data
{
$col
});
}
}
%data
;
}
sub
store_column {
my
(
$self
,
$column
,
$value
) =
@_
;
my
$cols
=
$self
->_utf8_columns;
if
(
$cols
and
defined
$value
and
$cols
->{
$column
} ) {
if
($] <= 5.008000) {
Encode::_utf8_off(
$value
)
if
Encode::is_utf8(
$value
);
}
else
{
utf8::encode(
$value
)
if
utf8::is_utf8(
$value
);
}
}
$self
->
next
::method(
$column
,
$value
);
}
1;