NAME

    Mojo::DB::Results::Role::Struct - Database query results as structs

SYNOPSIS

      use Mojo::SQLite;
      my $sqlite = Mojo::SQLite->new(...);
      my $results = $sqlite->db->query('SELECT * FROM "table" WHERE "foo" = ?', 42);
      my $struct = $results->with_roles('Mojo::DB::Results::Role::Struct')->structs->first;
      my $bar = $struct->bar; # dies unless column "bar" exists
    
      use Mojo::Pg;
      my $pg = Mojo::Pg->new(...)->with_roles('Mojo::DB::Role::ResultsRoles');
      push @{$pg->results_roles}, 'Mojo::DB::Results::Role::Struct';
      my $results = $pg->db->query('SELECT "foo", "bar" FROM "table"');
      foreach my $row ($results->structs->each) {
        my $foo = $row->foo;
        my $bar = $row->baz; # dies
      }

DESCRIPTION

    This role can be applied to a results object for Mojo::Pg or similar
    database APIs. It provides "struct" and "structs" methods which return
    Struct::Dumb records, providing read-only accessors only for the
    expected column names. Note that a column name that is not a valid
    identifier is trickier to access in this manner.

      my $row = $results->struct;
      my $col_name = 'foo.bar';
      my $val = $row->$col_name;
      # or
      my $val = $row->${\'foo.bar'};

    You can apply the role to a results object using "with_roles" in
    Mojo::Base, or apply it to all results objects created by a database
    manager using Mojo::DB::Role::ResultsRoles as shown in the synopsis.

METHODS

    Mojo::DB::Results::Role::Struct composes the following methods.

 struct

      my $struct = $results->struct;

    Fetch next row from the statement handle with the result object's array
    method, and return it as a struct.

 structs

      my $collection = $results->structs;

    Fetch all rows from the statement handle with the result object's
    arrays method, and return them as a Mojo::Collection object containing
    structs.

BUGS

    Report any issues on the public bugtracker.

AUTHOR

    Dan Book <dbook@cpan.org>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2019 by Dan Book.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)

SEE ALSO

    Mojo::DB::Role::ResultsRoles, Mojo::Pg, Mojo::SQLite, Mojo::mysql