package Mojolicious::Plugin::RoutesAuthDBI::Model::Controllers; #~ use Mojo::Base 'DBIx::Mojo::Model'; use Mojo::Base 'Mojolicious::Plugin::RoutesAuthDBI::Model::Base'; #~ sub new { #~ state $self = shift->SUPER::new(@_); #~ } sub controller_ns { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('controller', where => "where controller=? and (namespace=? or (?::varchar is null and namespace is null))"), undef, @_); } sub controller_id_ns { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('controller', where=>"where (id=? or controller=?) and (namespace_id = ? or namespace = ? or (?::varchar is null and namespace is null))"), undef, (@_)); } sub new_controller { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectrow_hashref($self->sth('new controller'), undef, (@_)); } sub controllers { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectall_arrayref($self->sth('controllers'), { Slice => {} }, ); } sub controllers_ns_id { my $self = ref($_[0]) ? shift : shift->new; $self->dbh->selectall_arrayref($self->sth('controllers', where=>"where n.id=? or (?::int is null and n.id is null)"), { Slice => {} }, (@_)); } 1; __DATA__ @@ controller?cached=1 %# Не пустой namespace - четко привязанный контроллер, пустой - обязательно не привязанный контроллер select * from ( select c.*, n.namespace, n.id as namespace_id, n.descr as namespace_descr from "{%= $schema %}"."{%= $tables->{controllers} %}" c left join "{%= $schema %}"."{%= $tables->{refs} %}" r on c.id=r.id2 left join "{%= $schema %}"."{%= $tables->{namespaces} %}" n on n.id=r.id1 ) s {%= $where %} @@ new controller insert into "{%= $schema %}"."{%= $tables->{controllers} %}" (controller, descr) values (?,?) returning *; @@ controllers %# Контроллер либо привязан к спейсу или нет select c.*, n.namespace, n.id as namespace_id, n.descr as namespace_descr from "{%= $schema %}"."{%= $tables->{controllers} %}" c left join "{%= $schema %}"."{%= $tables->{refs} %}" r on c.id=r.id2 left join "{%= $schema %}"."{%= $tables->{namespaces} %}" n on n.id=r.id1 {%= $where %};