|
#!/usr/bin/perl -w
my %opt ;
BEGIN {
map { $opt { $_ } = 1 if s/^-// } @ARGV ;
}
use constant DEBUG => ( exists $opt {d} ? 1 : 0); BEGIN {
maybe_plan( undef , 'SQL::Translator::Parser::XML::SQLFairy' );
}
my $testschema = "$Bin/data/xml/schema.xml" ;
my $sqlt ;
$sqlt = SQL::Translator->new(
debug => DEBUG,
show_warnings => 1,
add_drop_table => 1,
);
die "Can't find test schema $testschema" unless -e $testschema ;
my $sql ;
{
my @w ;
local $SIG {__WARN__} = sub {
push @w , $_ [0]
if $_ [0] =~ /The database_event tag is deprecated - please use database_events/; };
$sql = $sqlt ->translate(
from => 'XML-SQLFairy' ,
to => 'MySQL' ,
filename => $testschema ,
) or die $sqlt ->error;
print $sql if DEBUG;
ok( @w , 'database_event deprecation warning issued' );
}
my $scma = $sqlt ->schema;
schema_ok(
$scma ,
{
tables => [
{
name => "Basic" ,
options => [ { ENGINE => 'InnoDB' } ],
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
fields => [
{
name => "id" ,
data_type => "int" ,
default_value => undef ,
is_nullable => 0,
size => 10,
is_primary_key => 1,
is_auto_increment => 1,
extra => { ZEROFILL => 1 },
},
{
name => "title" ,
data_type => "varchar" ,
is_nullable => 0,
default_value => "hello" ,
size => 100,
is_unique => 1,
},
{
name => "description" ,
data_type => "text" ,
is_nullable => 1,
default_value => "" ,
},
{
name => "email" ,
data_type => "varchar" ,
size => 500,
is_unique => 1,
default_value => undef ,
is_nullable => 1,
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
}
},
{
name => "explicitnulldef" ,
data_type => "varchar" ,
default_value => undef ,
is_nullable => 1,
size => 255,
},
{
name => "explicitemptystring" ,
data_type => "varchar" ,
default_value => "" ,
is_nullable => 1,
size => 255,
},
{
name => "emptytagdef" ,
data_type => "varchar" ,
default_value => "" ,
is_nullable => 1,
comments => "Hello emptytagdef" ,
size => 255,
},
{
name => "another_id" ,
data_type => "int" ,
size => "10" ,
default_value => 2,
is_nullable => 1,
is_foreign_key => 1,
},
{
name => "timest" ,
data_type => "timestamp" ,
size => "0" ,
is_nullable => 1,
},
],
constraints => [
{
type => PRIMARY_KEY,
fields => [ "id" ],
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
},
{
name => 'emailuniqueindex' ,
type => UNIQUE,
fields => [ "email" ],
},
{
name => 'very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms' ,
type => UNIQUE,
fields => [ "title" ],
},
{
type => FOREIGN_KEY,
fields => [ "another_id" ],
reference_table => "Another" ,
reference_fields => [ "id" ],
name => 'Basic_fk'
},
],
indices => [
{
name => "titleindex" ,
fields => [ "title" ],
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
},
],
},
{
name => "Another" ,
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
options => [ { ENGINE => 'InnoDB' } ],
fields => [
{
name => "id" ,
data_type => "int" ,
default_value => undef ,
is_nullable => 0,
size => 10,
is_primary_key => 1,
is_auto_increment => 1,
},
{
name => "num" ,
data_type => "numeric" ,
default_value => undef ,
size => '10,2' ,
},
],
},
],
views => [
{
name => 'email_list' ,
sql => "SELECT email FROM Basic WHERE (email IS NOT NULL)" ,
fields => [ 'email' ],
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
},
],
triggers => [
{
name => 'foo_trigger' ,
perform_action_when => 'after' ,
database_events => 'insert' ,
on_table => 'Basic' ,
action => 'update modified=timestamp();' ,
scope => 'row' ,
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
},
{
name => 'bar_trigger' ,
perform_action_when => 'before' ,
database_events => 'insert,update' ,
on_table => 'Basic' ,
action => 'update modified2=timestamp();' ,
scope => 'row' ,
extra => {
hello => "aliens" ,
},
},
],
procedures => [
{
name => 'foo_proc' ,
sql => 'select foo from bar' ,
parameters => [ 'foo' , 'bar' ],
owner => 'Nomar' ,
comments => 'Go Sox!' ,
extra => {
foo => "bar" ,
hello => "world" ,
bar => "baz" ,
},
},
],
}
);
done_testing;
|