NAME

DBIx::Custom::Result - Result of select statement

SYNOPSIS

# Result
my $result = $dbi->select(table => 'book');

# Fetch a row and put it into array reference
while (my $row = $result->fetch) {
  my $author = $row->[0];
  my $title  = $row->[1];
}

# Fetch only a first row and put it into array reference
my $row = $result->fetch_one;

# Fetch all rows and put them into array of array reference
my $rows = $result->fetch_all;

# Fetch a row and put it into hash reference
while (my $row = $result->fetch_hash) {
  my $title  = $row->{title};
  my $author = $row->{author};
}

# Fetch only a first row and put it into hash reference
my $row = $result->fetch_hash_one;
my $row = $result->one; # Alias for "fetch_hash_one"

# Fetch all rows and put them into array of hash reference
my $rows = $result->fetch_hash_all;
my $rows = $result->all; # Alias for "fetch_hash_all"

ATTRIBUTES

dbi

my $dbi = $result->dbi;
$result = $result->dbi($dbi);

DBIx::Custom object.

sth

my $sth = $reuslt->sth
$result = $result->sth($sth);

Statement handle of DBI.

METHODS

DBIx::Custom::Result inherits all methods from Object::Simple and implements the following new ones.

all

my $rows = $result->all;

Same as fetch_hash_all.

fetch

my $row = $result->fetch;

Fetch a row and put it into array reference.

fetch_all

my $rows = $result->fetch_all;

Fetch all rows and put them into array of array reference.

fetch_one

my $row = $result->fetch_one;

Fetch only a first row and put it into array reference, and finish statment handle.

fetch_hash

my $row = $result->fetch_hash;

Fetch a row and put it into hash reference.

fetch_hash_all

my $rows = $result->fetch_hash_all;

Fetch all rows and put them into array of hash reference.

fetch_hash_one

my $row = $result->fetch_hash_one;

Fetch only a first row and put it into hash reference, and finish statment handle.

fetch_hash_multi

my $rows = $result->fetch_hash_multi(5);

Fetch multiple rows and put them into array of hash reference.

fetch_multi

my $rows = $result->fetch_multi(5);

Fetch multiple rows and put them into array of array reference.

filter

$result->filter(title  => sub { uc $_[0] }, author => 'to_upper');
$result->filter([qw/title author/] => 'to_upper');

Set filter for column. You can use subroutine or filter name as filter. This filter is executed after type_rule filter.

flat

my $flat = $result->flat;

All value is flatten and added to one array reference.

my @flat = $dbi->select(['id', 'title'])->flat;

If fetch_all method return the following data

[
  [1, 'Perl'],
  [2, 'Ruby']
]

flat method return the following data.

(1, 'Perl', 2, 'Ruby')

You can create key-value pair easily.

my %titles = $dbi->select(['id', 'title'])->flat;

kv

my $key_value = $result->kv;
my $key_values = $result->kv(multi => 1);

Get key-value pairs.

my $books = $dbi->select(['id', 'title', 'author'])->kv;

If all method return the following data:

[
  {id => 1, title => 'Perl', author => 'Ken'},
  {id => 2, title => 'Ruby', author => 'Taro'}
]

kv method return the following data.

{
  1 => {title => 'Perl', author => 'Ken'},
  2 => {title => 'Ruby', author => 'Taro'}
}

First column value become key.

If value contains multipule data, you can push it to array refernce by multi option.

my $books = $dbi->select(['author', 'title', 'price'])->kv(multi => 1);

If all method return the following data:

[
  {author => 'Ken', title => 'Perl', price => 1000},
  {author => 'Ken', title => 'Good', price => 2000},
  {author => 'Taro', title => 'Ruby', price => 3000}
  {author => 'Taro', title => 'Sky', price => 4000}
]

kv method return the following data.

{
  Ken => [
    {title => 'Perl', price => 1000},
    {title => 'Good', price => 2000}
  ],
  Taro => [
    {title => 'Ruby', price => 3000},
    {title => 'Sky', price => 4000}
  ]
}
my $header = $result->header;

Get header column names.

one

my $row = $result->one;

Alias for fetch_hash_one.

stash

my $stash = $result->stash;
my $foo = $result->stash->{foo};
$result->stash->{foo} = $foo;

Stash is hash reference to save some data.

type_rule

# Merge type rule
$result->type_rule(
  # DATE
  9 => sub { ... },
  # DATETIME or TIMESTAMP
  11 => sub { ... }
);

# Replace type rule(by reference)
$result->type_rule([
  # DATE
  9 => sub { ... },
  # DATETIME or TIMESTAMP
  11 => sub { ... }
]);

This is same as DBIx::Custom's type_rule's <from>.

type_rule_off

$result = $result->type_rule_off;

Turn from1 and from2 type rule off. By default, type rule is on.

type_rule_on

$result = $result->type_rule_on;

Turn from1 and from2 type rule on. By default, type rule is on.

type_rule1_off

$result = $result->type_rule1_off;

Turn from1 type rule off. By default, type rule is on.

type_rule1_on

$result = $result->type_rule1_on;

Turn from1 type rule on. By default, type rule is on.

type_rule2_off

$result = $result->type_rule2_off;

Turn from2 type rule off. By default, type rule is on.

type_rule2_on

$result = $result->type_rule2_on;

Turn from2 type rule on. By default, type rule is on.

value

my $value = $result->value;

Get first column's first value.

my $count = $dbi->select('count(*)')->value;

values

my $values = $result->values;

Get first column's values.

my $names = $dbi->select('name', table => 'book')->values;