use
open
qw( :std :utf8 )
;
if
(
grep
/\P{ASCII}/ =>
@ARGV
) {
@ARGV
=
map
{ decode(
'UTF-8'
,
$_
) }
@ARGV
;
}
use
Carp
qw( carp croak confess cluck )
;
local
$SIG
{ __DIE__ } =
sub
{
confess
"Uncaught exception: @_"
unless
$^S;
};
local
$SIG
{ __WARN__ } =
sub
{
if
( $^S ) { cluck
"Trapped warning: @_"
}
else
{ confess
"Deadly warning: @_"
}
};
sub
new {
my
$class
=
shift
;
my
$self
=
$class
->SUPER::new(
@_
);
bless
$self
,
$class
;
croak(
'Multiple RangeFunctions not yet handled'
)
if
1 !=
scalar
@{
$self
->{
'functions'
} };
$self
->objectify(
'functions'
, [
'alias'
,
'colnames'
] );
croak(
'Invalid object inside RangeFunction'
)
unless
$self
->{
'functions'
}->[ 0 ]->isa(
'Pg::SQL::PrettyPrinter::Node::List'
);
croak(
'Multiple RangeFunctions not yet handled (#2)'
)
if
1 !=
scalar
@{
$self
->{
'functions'
}->[ 0 ]->{
'items'
} };
return
$self
;
}
sub
as_text {
my
$self
=
shift
;
my
$full_name
=
$self
->{
'functions'
}->[ 0 ]->{
'items'
}->[ 0 ]->as_text;
$full_name
.=
' WITH ORDINALITY'
if
$self
->{
'ordinality'
};
my
$A
=
$self
->{
'alias'
};
return
$full_name
unless
$A
;
my
$base_with_alias
=
sprintf
(
'%s AS %s'
,
$full_name
,
$self
->quote_ident(
$A
->{
'aliasname'
} ) );
return
$base_with_alias
unless
$A
->{
'colnames'
};
return
sprintf
(
'%s ( %s )'
,
$base_with_alias
,
join
(
', '
,
map
{
$_
->as_ident } @{
$A
->{
'colnames'
} } ) );
}
1;