# NAME

Doodle

# ABSTRACT

Database DDL Statement Builder

# SYNOPSIS

    use Doodle;

    my $d = Doodle->new;
    my $t = $d->table('users');

    $t->primary('id');
    $t->uuid('arid');
    $t->column('name');
    $t->string('email');
    $t->json('metadata');

    my $x = $t->create;
    my $g = $d->grammar('sqlite');
    my $s = $g->execute($x);

    say $s->sql;

    # create table "users" (
    #   "id" integer primary key,
    #   "arid" varchar,
    #   "name" varchar,
    #   "email" varchar,
    #   "metadata" text
    # )

# DESCRIPTION

Doodle is a database DDL statement builder and provides an object-oriented
abstraction for performing schema changes in various datastores. This class
consumes the [Doodle::Helpers](https://metacpan.org/pod/Doodle::Helpers) roles.

# METHODS

This package implements the following methods.

## build

    build(Grammar $grammar, CodeRef $callback) : ()

Execute a given callback for each generated SQL statement.

- build example

        $self->build($grammar, sub {
          my $statement = shift;

          # e.g. $db->do($statement->sql);
        });

## grammar

    grammar(Str $name) : Grammar

Returns a new Grammar object.

- grammar example

        my $grammar = $self->grammar('sqlite');

## schema

    schema(Str $name, Any %args) : Schema

Returns a new Schema object.

- schema example

        my $schema = $self->schema($name);

## statements

    statements(Grammar $g) : [Statement]

Returns a set of Statement objects for the given grammar.

- statements example

        my $statements = $self->statements($grammar);

## table

    table(Str $name, Any %args) : Table

Return a new Table object.

- table example

        my $table = $self->table('users');
