Ado

 view release on metacpan or  search on metacpan

lib/Ado/Model.pm  view on Meta::CPAN

package Ado::Model;    #The schema/base class
use 5.010001;
use strict;
use warnings;
use utf8;
use parent qw(DBIx::Simple::Class);
use Carp;
use DBIx::Simple::Class::Schema;

our $VERSION = '0.01';
sub is_base_class { return 1 }

sub dbix {

    # Singleton DBIx::Simple instance
    state $DBIx;

    # uncoverable statement
    return ($_[1] ? ($DBIx = $_[1]) : $DBIx)
      || Carp::croak('DBIx::Simple is not instantiated. Please first do '
          . $_[0]
          . '->dbix(DBIx::Simple->connect($DSN,$u,$p,{...})');
}


#The methods below are not generated but written additionally

sub select_range {
    my $class = shift;
    state $dbix = $class->dbix;
    my $SQL = $class->SQL('SELECT') . $class->SQL_LIMIT(@_);
    return $dbix->query($SQL)->objects($class);
}

# Generates classes from tables on the fly and returns the classname.
sub table_to_class {
    my ($class, $args) = shift->_get_obj_args(@_);
    state $tables = {};
    my $table = $args->{table};

    # already generated?
    return $tables->{$table} if (exists $tables->{$table});

    # uncoverable branch false
    $args->{namespace} //= $class;
    my $class_name = $args->{namespace} . '::' . Mojo::Util::camelize($table);

    # loaded from file?
    return $tables->{$table} = $class_name
      if $INC{Mojo::Util::class_to_path($class_name)};
    state $connected = DBIx::Simple::Class::Schema->dbix($class->dbix) && 1;
    my $perl_code = DBIx::Simple::Class::Schema->load_schema(
        namespace => $args->{namespace},
        table     => $table,
        type      => $args->{type} || "'TABLE','VIEW'",
    );
    Carp::croak($@) unless (eval "{$perl_code}");    ## no critic (ProhibitStringyEval)

    $tables->{$table} = $class_name;
    return $tables->{$table};
}


1;

__END__



( run in 0.551 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )