DEV Community

Query Filter
Query Filter

Posted on

perl

!/usr/bin/perl

use strict;
use warnings;

Paste your SQL between the quotes

my $sql = <<'END_SQL';
PASTE_YOUR_SQL_HERE
END_SQL

my @keywords = qw(SELECT FROM WHERE JOIN ON AND OR ORDER BY GROUP BY HAVING LEFT RIGHT INNER OUTER);

Normalize spacing

$sql =~ s/\s+/ /g;

my @tokens = split(/ /, $sql);
my $indent = 0;
my $formatted = "";

foreach my $token (@tokens) {
my $upper = uc($token);
my $is_keyword = 0;
foreach my $kw (@keywords) {
if ($upper eq $kw || $upper =~ /^$kw$/i) {
$is_keyword = 1;
last;
}
}

if ($is_keyword) {
    $formatted .= "\n" . ("    " x $indent) . $token . " ";
    if ($upper =~ /^(SELECT|FROM|WHERE|ORDER|GROUP|HAVING)$/) {
        $indent = 1;
    }
} else {
    $formatted .= $token . " ";
}
Enter fullscreen mode Exit fullscreen mode

}

print $formatted, "\n";

Top comments (0)