package SQL::Translator::Filter::AutoCRUD::ColumnsAndPKs;
{
$SQL::Translator::Filter::AutoCRUD::ColumnsAndPKs::VERSION = '2.143070';
}
use strict;
use warnings;
# PK can be FK so need to unique fields
use List::MoreUtils 'uniq';
sub filter {
my ($schema, @args) = @_;
foreach my $tbl ($schema->get_tables) {
# add an ordered list of columns, placing PKs first
$tbl->extra(fields => [
uniq map {$_->name}
(sort grep {$_->is_primary_key} $tbl->get_fields),
(sort grep {not $_->is_primary_key and not $_->extra('is_reverse')
and not $_->is_foreign_key} $tbl->get_fields),
(sort grep {$_->is_foreign_key and not $_->extra('is_reverse')
and not $_->extra('masked_by')} $tbl->get_fields),
(sort grep {$_->extra('is_reverse')
and $_->extra('rel_type') eq 'might_have'} $tbl->get_fields),
(sort grep {$_->extra('is_reverse')
and $_->extra('rel_type') eq 'has_many'} $tbl->get_fields),
(sort grep {$_->extra('is_reverse')
and $_->extra('rel_type') eq 'many_to_many'} $tbl->get_fields),
]);
# SQLT's primary_key() returns the constraint, not names
$tbl->extra(pks => [
sort map {$_->name}
grep {$_->is_primary_key} $tbl->get_fields,
]);
}
}
1;