Geoffrey-Converter-Pg
view release on metacpan or search on metacpan
lib/Geoffrey/Converter/Pg/Index.pm view on Meta::CPAN
package Geoffrey::Converter::Pg::Index;
use utf8;
use 5.016;
use strict;
use warnings;
$Geoffrey::Converter::Pg::Index::VERSION = '0.000204';
use parent 'Geoffrey::Role::ConverterType';
sub add {
my ( $self, $params ) = @_;
if ( !$params ) {
require Geoffrey::Exception::General;
Geoffrey::Exception::General::throw_no_params();
}
if ( !$params->{table} ) {
require Geoffrey::Exception::RequiredValue;
Geoffrey::Exception::RequiredValue::throw_table_name();
}
if ( !$params->{column} ) {
require Geoffrey::Exception::RequiredValue;
Geoffrey::Exception::RequiredValue::throw_refcolumn_missing();
}
require Ref::Util;
require Geoffrey::Utils;
return Geoffrey::Utils::replace_spare(
q~CREATE INDEX {0} ON {1} ({2})~,
[
Geoffrey::Utils::add_name(
{
prefix => 'ix',
name => $params->{name},
context => $params->{table}
}
),
$params->{table},
(
join ', ', Ref::Util::is_arrayref( $params->{column} )
? @{ $params->{column} }
: ( $params->{column} )
)
]
);
}
sub drop {
my ( $self, $name ) = @_;
if ( !$name ) {
require Geoffrey::Exception::RequiredValue;
Geoffrey::Exception::RequiredValue::throw_index_name();
}
return qq~DROP INDEX $name~;
}
sub list {
my ( $self, $schema ) = @_;
require Geoffrey::Utils;
return q~SELECT
U.usename AS user_name,
ns.nspname AS schema_name,
idx.indrelid :: REGCLASS AS table_name,
i.relname AS index_name,
am.amname AS index_type,
idx.indkey,
ARRAY(
SELECT
pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
FROM
generate_subscripts(idx.indkey, 1) AS k
ORDER BY k
) AS index_keys,
(idx.indexprs IS NOT NULL) OR (idx.indkey::int[] @> array[0]) AS is_functional,
idx.indpred IS NOT NULL AS is_partial
FROM
pg_index AS idx
JOIN pg_class AS i ON i.oid = idx.indexrelid
JOIN pg_am AS am ON i.relam = am.oid
JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
JOIN pg_user AS U ON i.relowner = U.usesysid
WHERE
NOT nspname LIKE 'pg%'
AND NOT idx.indisprimary
AND NOT idx.indisunique~;
}
1; # End of Geoffrey::Converter::Pg::Index
__END__
=pod
=head1 NAME
Geoffrey::Converter::Pg::Index - SQLite converter type for indexes!
=head1 VERSION
Version 0.000204
( run in 3.028 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )