The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vi:ft=

use strict;
use warnings;

use t::Cheater;

plan tests => 1 * blocks();
no_diff;

run_tests;

__DATA__

=== TEST 1: int ref
--- src
table dogs (
    id serial 1..50;
    age integer not null;
)
table cats (
    id serial;
    friend references dogs.id;
)
4 dogs;
7 cats;
--- out
cats
      id      friend
      96371   44
      170828  37
      577303  NULL
      692194  20
      749901  23
      785799  44
      870465  20
dogs
      id      age
      20      -224492
      23      -239639
      37      424094
      44      -64078



=== TEST 2: text ref
--- src
table dogs (
    id serial 1..50;
    grades text /[A-E]/ not null;
)
table cats (
    id serial;
    friend_grades references dogs.grades;
)
4 dogs;
8 cats;
--- out
cats
      id      friend_grades
      96371   B
      170828  B
      368766  D
      577303  D
      692194  B
      749901  NULL
      785799  B
      870465  D
dogs
      id      grades
      6       B
      16      D
      22      A
      27      B



=== TEST 3: text ref (not null on foreign keys)
--- src
table dogs (
    id serial 1..50;
    grades text /[A-E]/ not null;
)
table cats (
    id serial;
    friend_grades references dogs.grades not null;
)
4 dogs;
8 cats;
--- out
cats
      id      friend_grades
      96371   A
      170828  B
      368766  B
      577303  B
      692194  D
      749901  D
      785799  B
      870465  D
dogs
      id      grades
      7       B
      8       D
      44      A
      48      B



=== TEST 4: text refs in parallel
--- src
table dogs (
    id serial 1..50;
    grades text /[A-E]/ not null;
)
table cats (
    id serial;
    friend_grades references dogs.grades not null;
)
table birds (
    id serial;
    foo references dogs.grades not null;
);
4 dogs;
4 cats;
4 birds;
--- out
birds
      id      foo
      96371   B
      170828  B
      749901  D
      870465  B
cats
      id      friend_grades
      163189  B
      568585  B
      867719  A
      959066  B
dogs
      id      grades
      7       B
      8       B
      44      D
      48      A



=== TEST 5: text refs in series
--- src
table dogs (
    id serial 1..50;
    grades text /[A-E]/ not null;
)
table cats (
    id serial;
    friend_grades references dogs.grades not null;
)
table birds (
    id serial;
    foo references cats.friend_grades not null;
);
4 dogs;
4 cats;
4 birds;
--- out
birds
      id      foo
      96371   D
      170828  B
      749901  B
      870465  B
cats
      id      friend_grades
      260361  B
      275508  B
      435922  D
      924094  B
dogs
      id      grades
      7       B
      8       B
      44      D
      48      A



=== TEST 6: int ref
--- src
table dogs (
    id serial 1..50;
    self_id references dogs.id not null;
)
4 dogs;
--- out
dogs
      id      self_id
      19      44
      38      40
      40      38
      44      38