Очистить макет столбца CREATE TABLE - PullRequest
0 голосов
/ 16 августа 2010

У меня есть серия сценариев sql, которые выглядят так:

CREATE TABLE table_one
(
    column_one            int   not null,
    column_two    varchar(100)               not null,
    column_three_four_five int,
    column_six    decimal(16,4) null,
    PRIMARY KEY ( column_one, column_three_four_five)
);

Я бы хотел очистить макет, чтобы его было легче сканировать, что-то вроде этого:

CREATE TABLE table_one
(
    column_one             int          not null,
    column_two             varchar(100) not null,
    column_three_four_five int,
    column_six             decimal(16,4)     null,
    PRIMARY KEY
    (
        column_one,
        column_three_four_five
    )
);

Точная компоновка менее важна, чем возможность создать чистый внешний вид для улучшения читабельности. (читайте: пожалуйста, не используйте форматирование) -grin-

Что было бы хорошим способом написать это (я смотрю на тебя, боги Perl ...)?

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Хммммм, я не могу сказать, что это будет работать для всех ваших файлов, но что-то вроде этого подойдет ...

#!/usr/bin/perl
use strict; 
use warnings;

my $default_padding = 30;
my $my_file = 'data.sql';
my $my_new_file = 'data_new.sql';

open (my $fh, '<', $my_file) or die $!;
my @sql = <$fh>;
close($fh);

open (my $fhsave, '>>', $my_new_file) or die $!;
foreach my $line (@sql) {
    print $fhsave "$line" if ($line !~ /^\s+/);
    $line =~ s/\s+/ /ig;
    print $fhsave sprintf("   %-*s %s\n", $default_padding, $1, $2) if ($line =~ /^\s+(.+?)\s+(.+)/);
}
close ($fhsave);

образец файла data.sql

CREATE TABLE table_one
(
    column_one            int   not null,
    column_two    varchar(100)               not null,
    column_three_four_five int,
    column_six    decimal(16,4) null
);

вывод:

CREATE TABLE table_one
(
   column_one                     int not null, 
   column_two                     varchar(100) not null, 
   column_three_four_five         int, 
   column_six                     decimal(16,4) null 
);
1 голос
/ 16 августа 2010

Я не пробовал ни один, но CPAN имеет SQL :: Beautify и SQL :: QueryBuilder :: Pretty .

0 голосов
/ 16 августа 2010

http://www.dpriver.com/pp/sqlformat.htm

Не сценарий. Но я не хочу ничего сейчас кодировать.

Для подобных вещей на любом языке ищите форматеры или слово «pretty» для готового мусора.

...