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 )