The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use UR;
use Test::More tests => 8;

note("*** class 1: like-clause ***");

class Acme::Foo { has => [qw/a b c/] };

sub Acme::Foo::__load__ {
    return 
        [qw/id a b c/],
        [
            [100, "a100", "b100", "c100"],
            [200, "a200", "b200", "c200"],
            [300, "a300", "b300", "c300"],
        ]
}

my @f = Acme::Foo->get("b like" => "%2%");
is(scalar(@f), 1, "got one object with a like-clause");
is($f[0]->id, 200, "it is correct");



note("*** class 2: in-clause ***");

class Acme::Bar { 
    has => [
        a => { is => 'Text' },
        b => { is => 'Text' },
        c => { is => 'Text' },
        foo => { is => "Acme::Foo", id_by => "foo_id" },
    ] 
};

sub Acme::Bar::__load__ {
    return 
        [qw/id a b c foo_id/],
        [
            [10, "a100", "b100", "c100", 100],
            [20, "a200", "b200", "c200", 200],
            [30, "a300", "b300", "c300", 300],
        ]
}

my @b = Acme::Bar->get("c" => ['c200', 'c300']);
is(scalar(@b), 2, "got two objects with an in-clause");
is($b[0]->id, 20, "first is correct");
is($b[1]->id, 30, "second is correct");



note("*** in-memory joins ***");

my @b2 = Acme::Bar->get("foo.a" => "a100");
is(scalar(@b2), 1, "got one object with a join to another class");
is($b2[0]->id, 10, "it is the correct object");
is($b2[0]->foo->a, "a100", "value is correct");