'INTERSECT',
'EXCEPT',
'RETURNING',
+ 'ROW_NUMBER \s* \( \s* \) \s+ OVER',
);
# These are binary operator keywords always a single LHS and RHS
sub _binary_op_keywords { @binary_op_keywords }
+my %indents = (
+ select => 0,
+ where => 1,
+ from => 1,
+ join => 1,
+ on => 2,
+ 'group by' => 1,
+ 'order by' => 1,
+);
+
my %profiles = (
console => {
indent_string => ' ',
indent_amount => 2,
newline => "\n",
colormap => {},
- indentmap => {
- select => 0,
- where => 1,
- from => 1,
- },
+ indentmap => { %indents },
},
console_monochrome => {
indent_string => ' ',
indent_amount => 2,
newline => "\n",
colormap => {},
- indentmap => {
- select => 0,
- where => 1,
- from => 1,
+ indentmap => { %indents },
+ },
+ html => {
+ indent_string => ' ',
+ indent_amount => 2,
+ newline => "<br />\n",
+ colormap => {
+ select => ['<span class="select">' , '</span>'],
+ where => ['<span class="where">' , '</span>'],
+ from => ['<span class="from">' , '</span>'],
+ join => ['<span class="join">' , '</span>'],
+ on => ['<span class="on">' , '</span>'],
+ 'group by' => ['<span class="group-by">', '</span>'],
},
+ indentmap => { %indents },
},
none => {
colormap => {},
eval {
require Term::ANSIColor;
$profiles{console}->{colormap} = {
- select => [Term::ANSIColor::color('red'), Term::ANSIColor::color('reset')],
- where => [Term::ANSIColor::color('green'), Term::ANSIColor::color('reset')],
- from => [Term::ANSIColor::color('cyan'), Term::ANSIColor::color('reset')],
+ select => [Term::ANSIColor::color('red'), Term::ANSIColor::color('reset')],
+ where => [Term::ANSIColor::color('green'), Term::ANSIColor::color('reset')],
+ from => [Term::ANSIColor::color('cyan'), Term::ANSIColor::color('reset')],
+ join => [Term::ANSIColor::color('magenta'), Term::ANSIColor::color('reset')],
+ on => [Term::ANSIColor::color('blue'), Term::ANSIColor::color('reset')],
+ 'group by' => [Term::ANSIColor::color('cyan'), Term::ANSIColor::color('reset')],
+ 'order by' => [Term::ANSIColor::color('yellow'), Term::ANSIColor::color('reset')],
};
};
my ($self, $keyword, $depth) = @_;
my $before = '';
- my $after = ' ';
if (defined $self->indentmap->{lc $keyword}) {
$before = $self->newline . $self->indent($depth + $self->indentmap->{lc $keyword});
}
$before = '' if $depth == 0 and lc $keyword eq 'select';
- return [$before, $after];
+ return [$before, ' '];
}
sub indent { ($_[0]->indent_string||'') x ( ( $_[0]->indent_amount || 0 ) * $_[1] ) }
return '(' .
join(' ',
map $self->unparse($_, $depth + 2), @{$cdr}) .
- (_is_select($cdr)?( $self->newline||'' ).$self->indent($depth + 1):'') . ')';
+ (_is_select($cdr)?( $self->newline||'' ).$self->indent($depth + 1):'') . ') ';
}
elsif ($car eq 'OR' or $car eq 'AND' or (grep { $car =~ /^ $_ $/xi } @binary_op_keywords ) ) {
return join (" $car ", map $self->unparse($_, $depth), @{$cdr});