---
name: "SQL::Abstract::Tree"
section: "3pm"
platform: "linux"
package: "libsql-abstract-perl"
version: "2.000001-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SQL::Abstract::Tree"
---

# SQL::Abstract::Tree(3pm)

Represent SQL as an AST

## NAME

SQL::Abstract::Tree - Represent SQL as an AST

## SYNOPSIS

```
 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
```

## METHODS

### new

```
 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.

*profiles*

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.

### format

```
 $sqlat->format('SELECT * FROM bar WHERE x = ?', [1])
```

Takes `$sql` and `"\@bindargs"`.

Returns a formatting string based on the string passed in

### parse

```
 $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.

### unparse

```
 $sqlat->unparse($tree_structure, \@bindargs)
```

Transform "tree" into SQL, applying various transforms on the way.

### format\_keyword

```
 $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.

### pad\_keyword

```
 my ($before, $after) = @{$sqlat->pad_keyword('SELECT')};
```

Returns whitespace to be inserted around a keyword.

### fill\_in\_placeholder

```
 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.

### indent

Returns as many indent strings as indent amounts times the first argument.

## ACCESSORS

### colormap

See "new"

### fill\_in\_placeholders

See "new"

### indent\_amount

See "new"

### indent\_string

See "new"

### indentmap

See "new"

### newline

See "new"

### placeholder\_surround

See "new"
