NAME
DBIx::Custom::Mapper - Mapper of parameter
SYNOPSYS
my
$mapper
=
$dbi
->mapper(
param
=>
$param
);
my
$new_param
=
$mapper
->
map
(
title
=>
'book.title'
,
# Key
author
=>
sub
{
'%'
.
$_
[0] .
'%'
}
# Value
price
=> [
'book.price'
=>
sub
{
'%'
.
$_
[0] .
'%'
}],
# Key and value
);
ATTRIBUTES
param
my
$param
=
$mapper
->param;
$mapper
=
$mapper
->param({
title
=>
'Perl'
,
author
=>
'Ken'
});
Parameter.
pass
my
$pass
=
$mapper
->pass;
$mapper
=
$mapper
->pass([
qw/title author/
]);
the key and value is copied without change when map
method is executed.
condition
my
$condition
=
$mapper
->condition;
$mapper
=
$mapper
->condition(
'exists'
);
Mapping condtion, default to length
.
You can set the following values to condition
.
exists
condition
=>
'exists'
If key exists, key and value is mapped.
defined
condition
=>
'defined'
;
If value is defined, key and value is mapped.
length
condition
=>
'length'
;
If value is defined and has length, key and value is mapped.
code reference
condition
=>
sub
{
defined
$_
[0] }
You can set code reference to
condtion
. The subroutine return true, key and value is mapped.
METHODS
DBIx::Custom::Mapper inherits all methods from Object::Simple and implements the following new ones.
map
my
$new_param
=
$mapper
->
map
(
price
=> {
key
=>
'book.price'
}
title
=> {
value
=>
'%<value>%'
}
author
=> [
'book.author'
=>
'%<value>%'
]
);
my
$new_param
=
$mapper
->
map
(
price
=> {
key
=>
'book.price'
}
title
=> {
value
=>
sub
{
'%'
.
shift
.
'%'
}}
author
=> [
'book.author'
=>
sub
{
'%'
.
shift
.
'%'
}]
);
Map parameter in param
attribute into new parameter.
For example, if param
is set to
{
price
=> 1900,
title
=>
'Perl'
,
author
=>
'Ken'
,
issue_date
=>
'2010-11-11'
}
The following hash reference is returned.
{
'book.price'
=> 1900,
title
=>
'%Perl%'
,
'book.author'
=>
'%Ken%'
,
}
Syntax:
* String => Hash reference
# String => Hash reference
price
=> {
key
=>
'book.price'
}
title
=> {
value
=>
'%<value>%'
}
title
=> {
value
=>
sub
{
'%'
.
shift
.
'%'
}}
If key
is used, only key name is mapped to new parameter
# Rule
price
=> {
key
=>
'book.price'
}
# Parameter
price
=> 1900,
# New parameter
'book.price'
=> 1900,
If value
is used, only value is mapped to new parameter
# Rule
title
=> {
value
=>
'%<value>%'
}
title
=> {
value
=>
sub
{
'%'
.
shift
.
'%'
}}
# Parameter
title
=>
'Perl'
,
# New parameter
title
=>
'%Perl%'
,
<
value>> is replaced by original value. You can use code reference to convert original value.
* String => Array reference
# String => Array reference
author
=> [
'book.author'
=>
'%<value>%'
]
Both key name and value is mapped to new parameter. This is same as the following syntax.
# Rule
{
key
=>
'book.author'
,
value
=>
'%<value>%'
}
By default, If the value has length, key and value is mapped.
title
=>
'Perl'
# Mapped
{
title
=>
''
}
# Not mapped
{
title
=>
undef
}
# Not mapped
{}
# Not mapped
You can set change mapping condition by condition
attribute.
$mapper
->condition(
'defined'
);
Or you can set condition
option for each key.
my
$new_param
=
$mapper
->
map
(
price
=> {
key
=>
'book.price'
,
condition
=>
'defined'
}]
title
=> {
value
=>
sub
{
'%'
.
$_
[0] .
'%'
},
condition
=>
'defined'
}
author
=> [
'book.author'
,
sub
{
'%'
.
$_
[0] .
'%'
},
'exists'
]
);
If pass
attribute is set, the keys and value is copied without change.
$mapper
->pass([
qw/title author/
]);
my
$new_param
=
$mapper
->
map
(
price
=> {
key
=>
'book.price'
});
The following hash reference
{
title
=>
'Perl'
,
author
=>
'Ken'
,
price
=> 1900}
is mapped to
{
title
=>
'Perl'
,
author
=>
'Ken'
,
'book.price'
=> 1900}
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 201:
You forgot a '=back' before '=head1'
- Around line 239:
You can't have =items (as at line 243) unless the first thing after the =over is an =item