From: Arthur Axel "fREW" Schmidt Date: Sat, 4 Sep 2010 02:05:47 +0000 (+0000) Subject: add html profile X-Git-Tag: v1.70~91^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7e5600e994c4f4f7958a19cc246d43bdee9d3890;p=dbsrgits%2FSQL-Abstract.git add html profile --- diff --git a/lib/SQL/Abstract/Tree.pm b/lib/SQL/Abstract/Tree.pm index 1c04069..ce36f30 100644 --- a/lib/SQL/Abstract/Tree.pm +++ b/lib/SQL/Abstract/Tree.pm @@ -77,28 +77,37 @@ my $tokenizer_re = qr/ \s* ( $tokenizer_re_str | \( | \) | \? ) \s* /xi; sub _binary_op_keywords { @binary_op_keywords } +my %indents = ( + select => 0, + where => 1, + from => 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 => "
\n", + colormap => { + select => ['', ''], + where => ['', ''], + from => ['', ''], }, + indentmap => { %indents }, }, none => { colormap => {}, diff --git a/t/11unparse.t b/t/11unparse.t index edad5ee..a91b88d 100644 --- a/t/11unparse.t +++ b/t/11unparse.t @@ -82,9 +82,100 @@ subtest console_monochrome => sub { done_testing; }; +subtest html => sub { + my $sqlat = SQL::Abstract::Tree->new({ + profile => 'html', + }); + + { + my $sql = "SELECT a, b, c FROM foo WHERE foo.a =1 and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT a, b, c
\n} . + qq{  FROM foo
\n} . + qq{  WHERE foo.a = 1 AND foo.b LIKE 'station' }; + is($sqlat->format($sql), $expected_sql, + 'simple statement formatted correctly' + ); + } + + { + my $sql = "SELECT * FROM (SELECT * FROM foobar) WHERE foo.a =1 and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT *
\n} . + qq{  FROM (
\n} . + qq{    SELECT *
\n} . + qq{      FROM foobar
\n} . + qq{  )
\n} . + qq{  WHERE foo.a = 1 AND foo.b LIKE 'station' }; + + is($sqlat->format($sql), $expected_sql, + 'subquery statement formatted correctly' + ); + } + + { + my $sql = "SELECT * FROM lolz WHERE ( foo.a =1 ) and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT *
\n} . + qq{  FROM lolz
\n} . + qq{  WHERE (foo.a = 1) AND foo.b LIKE 'station' }; + + is($sqlat->format($sql), $expected_sql, + 'simple statement with parens in where formatted correctly' + ); + } + done_testing; +}; + +subtest configuration => sub { + my $sqlat = SQL::Abstract::Tree->new({ + profile => 'console_monochrome', + indent_string => "\t", + indent_amount => 1, + newline => "\r\n", + }); + + { + my $sql = "SELECT a, b, c FROM foo WHERE foo.a =1 and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT a, b, c \r\n} . + qq{\tFROM foo \r\n} . + qq{\tWHERE foo.a = 1 AND foo.b LIKE 'station' }; + is($sqlat->format($sql), $expected_sql, + 'simple statement formatted correctly' + ); + } + + { + my $sql = "SELECT * FROM (SELECT * FROM foobar) WHERE foo.a =1 and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT * \r\n} . + qq{\tFROM (\r\n} . + qq{\t\tSELECT * \r\n} . + qq{\t\t\tFROM foobar \r\n} . + qq{\t) \r\n} . + qq{\tWHERE foo.a = 1 AND foo.b LIKE 'station' }; + + is($sqlat->format($sql), $expected_sql, + 'subquery statement formatted correctly' + ); + } + + { + my $sql = "SELECT * FROM lolz WHERE ( foo.a =1 ) and foo.b LIKE 'station'"; + my $expected_sql = + qq{SELECT * \r\n} . + qq{\tFROM lolz \r\n} . + qq{\tWHERE (foo.a = 1) AND foo.b LIKE 'station' }; + + is($sqlat->format($sql), $expected_sql, + 'simple statement with parens in where formatted correctly' + ); + } + done_testing; +}; + done_testing; # stuff we want: -# Nested indentation # Max Width -# Color coding (console) # Color coding (html)