NAME
SQL::QueryBuilder::Pretty - Perl extension to beautify SQL.
VERSION
Version 0.01
SYNOPSIS
use SQL::QueryBuilder::Pretty;
my $pretty = SQL::QueryBuilder::Pretty->new(
'-indent_ammount' => 4,
'-indent_char' => ' ',
'-new_line' => "\n",
);
print $pretty->print('SELECT * FROM table WHERE col1 = NOW()');
DESCRIPTION
The main goal of this Module was not the beautify mechanism, wich is allready well implemented in SQL::Beautify, but to provide a easy way to add new SQL languages, and related rules, in a modular and independent fashion.
METHODS
OPTIONS
- -database
-
The database rules to apply to the query.
SQL::QueryBuilder::Pretty->new( '-database' =
'MySQL' )> is the same asSQL::QueryBuilder::Pretty::Database::MySQL->new()
>. Default is none. - -handler
-
The database rules to apply to the query.
SQL::QueryBuilder::Pretty->new( '-handler' =
$dbh_mysql )> is the same asSQL::QueryBuilder::Pretty::Handler::DBD::db::mysql->new()
>. Default is none. - -indent_amount
-
The number of time '-indent_char' is repeated for each indentation. Default is 4.
- -indent_char
-
Indent char used. Default is ' '.
- -new_line
-
New line char used. default is "\n",
ADDING RULES FOR A SPECIFIC DATABASE
If the database option is not set, SQL::QueryBuilder::Pretty will use ANSI rules to beautify the query. This rules can be found in SQL/QueryBuilder/Pretty/Database/ANSI/*.
Let's imagine we wanted to create the rules for Oracle database:
In SQL/QueryBuilder/Pretty/Database we should add the file Oracle.pm with the following code:
#!/usr/bin/perl
package SQL::QueryBuilder::Pretty::Database::Oracle;
use base qw(SQL::QueryBuilder::Pretty);
SQL::QueryBuilder::Pretty->search_path(
add => 'SQL::QueryBuilder::Pretty::Database::Oracle'
);
1;
Create the Oracle's rules directory SQL/QueryBuilder/Pretty/Database/Oracle and add the necessary rules. See SUBCLASSING in SQL::QueryBuilder::Pretty::Rule.
ADDING A NEW HANDLER SUPPORT
TO add a new handler support we need to first add the related database. See ADDING RULES FOR A SPECIFIC DATABASE.
Let's imagine we wanted to create the support for DBI::oracle handler:
Get the reference of the handler. In DBI's case it's DBI::db.
If not exists, create the directory SQL/QueryBuilder/Pretty/Handler/DBI and add the file db.pm with the following code:
#!/usr/bin/perl
package SQL::QueryBuilder::Pretty::Handler::DBI::db;
sub new {
my $class = shift;
my %self = @_;
if ( $self->{'handler'}->{'Driver'}->{'Name'} eq 'oracle' ) {
return SQL::QueryBuilder::Pretty::Database::Oracle->( %self );
}
}
1;
This is just an example of what can be done.
ACKNOWLEDGEMENTS
Although SQL::QueryBuilder::Pretty have a differente approach, some ideas where "borrowed" from other projects. That said ,I would like to thank to:
Igor Sutton Lopes, for SQL::Tokenizer, where I got must of the regular expressions used in SQL::QueryBuilder::Pretty's rules;
Jonas Kramer, for SQL::Beautify, where I got the idea for the output manipultaion system used in SQL::QueryBuilder::Pretty::Print.
A special thank to Marco Neves who encourage me to make this distribuition available in CPAN.
SEE ALSO
SQL::QueryBuilder, Module::Pluggable, SQL::Tokenizer and SQL::Beautify.
AUTHOR
André Rivotti Casimiro, <rivotti at cpan.org>
BUGS
Please report any bugs or feature requests to bug-sql-querybuilder-pretty at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SQL-QueryBuilder-Pretty. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc SQL::QueryBuilder::Pretty
You can also look for information at:
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=SQL-QueryBuilder-Pretty
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
COPYRIGHT AND LICENSE
Copyright (C) 2009 by André Rivotti Casimiro. Published under the terms of the Artistic License 2.0.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 222:
Non-ASCII character seen before =encoding in 'André'. Assuming UTF-8