The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
# NAME

Doodle

# ABSTRACT

Database DDL (= Data Definition Language) Statement Builder

# SYNOPSIS

    use Doodle;

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

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

    my $command = $table->create;
    my $grammar = $self->grammar('sqlite');
    my $statement = $grammar->execute($command);

    # say $statement->sql;

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

# DESCRIPTION

Doodle is a database
[DDL ("Data Definition Language" or "Data Description Language")](https://en.wikipedia.org/wiki/Data_definition_language)
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.

# INTEGRATES

This package integrates behaviors from:

[Doodle::Helpers](https://metacpan.org/pod/Doodle::Helpers)

# LIBRARIES

This package uses type constraints from:

[Doodle::Library](https://metacpan.org/pod/Doodle::Library)

# ATTRIBUTES

This package has the following attributes:

## commands

    commands(Commands)

This attribute is read-only, accepts `(Commands)` values, and is optional.

# METHODS

This package implements the following methods:

## build

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

Execute a given callback for each generated SQL statement.

- build example #1

        # given: synopsis

        $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 #1

        # given: synopsis

        my $type = 'sqlite';

        $grammar = $self->grammar($type);

## schema

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

Returns a new Schema object.

- schema example #1

        # given: synopsis

        my $name = 'app';

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

## statements

    statements(Grammar $g) : Statements

Returns a set of Statement objects for the given grammar.

- statements example #1

        # given: synopsis

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

## table

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

Return a new Table object.

- table example #1

        # given: synopsis

        my $name = 'users';

        $table = $self->table($name);

# AUTHOR

Al Newkirk, `awncorp@cpan.org`

# LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms
of the The Apache License, Version 2.0, as elucidated in the ["license
file"](https://github.com/iamalnewkirk/doodle/blob/master/LICENSE).

# PROJECT

[Wiki](https://github.com/iamalnewkirk/doodle/wiki)

[Project](https://github.com/iamalnewkirk/doodle)

[Initiatives](https://github.com/iamalnewkirk/doodle/projects)

[Milestones](https://github.com/iamalnewkirk/doodle/milestones)

[Contributing](https://github.com/iamalnewkirk/doodle/blob/master/CONTRIBUTE.md)

[Issues](https://github.com/iamalnewkirk/doodle/issues)