SQL::Abstract::Tree - Represent SQL as an AST
my $sqla_tree = SQL::Abstract::Tree->new({ profile => 'console' }); print $sqla_tree->format('SELECT * FROM foo WHERE foo.a > 2'); # SELECT * # FROM foo # WHERE foo.a > 2
my $sqla_tree = SQL::Abstract::Tree->new({ profile => 'console' }); $args = { profile => 'console', # predefined profile to use (default: 'none') fill_in_placeholders => 1, # true for placeholder population placeholder_surround => # The strings that will be wrapped around [GREEN, RESET], # populated placeholders if the above is set indent_string => ' ', # the string used when indenting indent_amount => 2, # how many of above string to use for a single # indent level newline => "\n", # string for newline colormap => { select => [RED, RESET], # a pair of strings defining what to surround # the keyword with for colorization # ... }, indentmap => { select => 0, # A zero means that the keyword will start on # a new line from => 1, # Any other positive integer means that after on => 2, # said newline it will get that many indents # ... }, }
Returns a new SQL::Abstract::Tree object. All arguments are optional.
There are four predefined profiles, none
, console
, console_monochrome
, and html
. Typically a user will probably just use console
or console_monochrome
, but if something about a profile bothers you, merely use the profile and override the parts that you don't like.
$sqlat->format('SELECT * FROM bar WHERE x = ?', [1])
Takes $sql
and \@bindargs
.
Returns a formatting string based on the string passed in
$sqlat->parse('SELECT * FROM bar WHERE x = ?')
Returns a "tree" representing passed in SQL. Please do not depend on the structure of the returned tree. It may be stable at some point, but not yet.
$sqlat->unparse($tree_structure, \@bindargs)
Transform "tree" into SQL, applying various transforms on the way.
$sqlat->format_keyword('SELECT')
Currently this just takes a keyword and puts the colormap
stuff around it. Later on it may do more and allow for coderef based transforms.
my ($before, $after) = @{$sqlat->pad_keyword('SELECT')};
Returns whitespace to be inserted around a keyword.
my $value = $sqlat->fill_in_placeholder(\@bindargs)
Removes last arg from passed arrayref and returns it, surrounded with the values in placeholder_surround, and then surrounded with single quotes.
Returns as many indent strings as indent amounts times the first argument.