The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use SQL::DB::Schema;

my $schema = SQL::DB::Schema->new( name => 'test' );
isa_ok $schema, 'SQL::DB::Schema';

#is $schema, SQL::DB::Schema::load_schema('test'), 'load_schema()';
#is SQL::DB::Schema::load_schema('unknown'), undef, 'load_schema(unknown)';

ok $schema->not_known('unknown'), 'not_known()';

eval { $schema->srows('unknown') };
ok $@, 'Bombs on unknown tables';

$schema->define(
    [
        [ undef, undef, 'users', 'name', undef, 'varchar' ],
        [ undef, undef, 'users', 'dob',  undef, 'TIMESTAMP' ],
    ]
);

ok !$schema->not_known('users'), 'table users is NOT not_known()';

my ($irow) = $schema->irows('users');
isa_ok $irow, 'CODE';
is $irow->( 'col1', 'col2' ), 'users(col1,col2)', 'irow expansion';

my ($srow) = $schema->srows('users');
isa_ok $srow, 'SQL::DB::Schema::test::Srow::users';
isa_ok $srow, 'SQL::DB::Expr';
can_ok $srow, 'name', 'dob';
is $srow->name->_type,      'varchar',     'name is varchar';
is $srow->dob->_type,       'timestamp',   'dob is timestamp';
is $srow->name->_as_string, 'users0.name', 'as string';
my $sx = $srow->name == 'mark';
like $sx->_as_string, qr/^users0.name = bv{mark}::varchar/, $sx->_as_string;

my ($urow) = $schema->urows('users');
isa_ok $urow, 'SQL::DB::Schema::test::Urow::users';
isa_ok $urow, 'SQL::DB::Expr';
can_ok $urow, 'name', 'dob';
is $urow->name->_type,      'varchar',   'name is varchar';
is $urow->dob->_type,       'timestamp', 'dob is timestamp';
is $urow->name->_as_string, 'name',      'as string';
my $ux = $urow->name == 'mark';
like $ux->_as_string, qr/^name = bv{mark}::varchar/, $ux->_as_string;

done_testing;