use strict;
use warnings;


use DBIx::Connection;
use Persistence::ValueGenerator::TableGenerator ':all';
use Persistence::Entity ':all';
use Persistence::Entity::Manager;

my $entity_manager = Persistence::Entity::Manager->new(name => 'my_manager', connection_name => 'test');

table_generator 'empno_generator' => (
    entity_manager_name      => "my_manager",
    table                    => 'seq_generator',
    primary_key_column_name  => 'pk_column',
    primary_key_column_value => 'empno',
    value_column             => 'value_column',
    allocation_size          =>  5,
);


$entity_manager->add_entities(Persistence::Entity->new(
    name                  => 'emp',
    unique_expression     => 'empno',
    primary_key           => ['empno'],
    columns               => [
        sql_column(name => 'ename'),
        sql_column(name => 'empno'),
        sql_column(name => 'deptno')
    ],
    value_generators => {empno => 'empno_generator'},
));

package Employee;
use Abstract::Meta::Class ':all';
use Persistence::ORM ':all';

entity 'emp';
column empno=> has('$.id');
column ename => has('$.name');
column job => has '$.job';



my $connection = DBIx::Connection->new(
      name     => 'test',
      dsn      => $ENV{DB_TEST_CONNECTION},
      username => $ENV{DB_TEST_USERNAME},
      password => $ENV{DB_TEST_PASSWORD},
);

$entity_manager->begin_work;
eval {
    my $emp = Employee->new(name => 'Scott');
    $entity_manager->insert($emp);
    $entity_manager->commit;
};

$entity_manager->rollback if $@;