Alzabo
view release on metacpan or search on metacpan
eg/convert.pl view on Meta::CPAN
#!/usr/bin/perl -w
use strict;
use Alzabo::Create;
use ExtUtils::MakeMaker qw(prompt);
use Getopt::Long;
my $V = $Alzabo::VERSION;
use vars qw($name);
unless (@ARGV)
{
@ARGV = Alzabo::Config::available_schemas();
print "No arguments given. Converting all schemas\n\n";
}
my @eval;
foreach my $s_name (@ARGV)
{
@eval = ();
my $s = Alzabo::Create::Schema->load_from_file( name => $s_name );
push @eval, "use strict;\n\nuse Alzabo::Create::Schema;\n\n";
push @eval, "my (\$t, \$d);\n";
dump_schema($s, 'schema');
push @eval, "\$schema->save_to_file;\n";
print <<"EOF";
The code necessary to recreate the $s_name schema has been created.
EOF
save_schema($s_name);
}
sub dump_schema
{
my $s = shift;
local $name = shift;
my $recursed = shift;
push @eval, "my \$$name = Alzabo::Create::Schema->new(";
my $n = $s->name;
$n =~ s/'/\\'/g;
push @eval, "\tname => '$n',";
my $rdbms;
if ($V > 0.20)
{
$rdbms = $s->rules->rules_id;
}
else
{
($rdbms) = (split /::/, ref $s->rules)[2];
}
push @eval, "\trdbms => '$rdbms',";
push @eval, ");\n";
eg/convert.pl view on Meta::CPAN
foreach my $key ( $V < 0.25 ? qw( column_from column_to ) : qw( columns_from columns_to ) )
{
my ($table, $columns);
if ( $V < 0.25 )
{
$table = $fk->$key()->table->name;
$columns = $fk->$key()->name;
$columns = "'$columns'";
}
else
{
$table = ($fk->$key())[0]->table->name;
$columns = join ', ', map { "'$_'" } map { $_->name } $fk->$key();
}
$key =~ s/_/s_/ if $V < 0.25;
push @eval, "\t$key => [ \$$name\->table('$table')->columns($columns) ],";
}
my ($cardinality, $from_is_dependent, $to_is_dependent);
if ($V < 0.52)
{
# reverses cardinality for older schemas
$cardinality = join ', ', map { $_ =~ /\D/ ? "'$_'" : $_ } ($fk->min_max_to)[1], ($fk->min_max_from)[1];
$from_is_dependent = ($fk->min_max_from)[0] ? 1 : 0;
$to_is_dependent = ($fk->min_max_to)[0] ? 1 : 0;
}
else
{
$cardinality = join ', ', $fk->cardinality;
$from_is_dependent = $fk->from_is_dependent ? 1 : 0;
$to_is_dependent = $fk->to_is_dependent ? 1 : 0;
}
push @eval, "\tcardinality => [ $cardinality ],";
push @eval, "\tfrom_is_dependent => $from_is_dependent,";
push @eval, "\tto_is_dependent => $to_is_dependent,";
push @eval, ");\n";
$fk{$id1} = $fk{$id2} = 1;
}
sub dump_column_ownership
{
my $c = shift;
return if $c eq $c->definition->owner;
my $table = $c->table->name;
my $column = $c->name;
my $owner = $c->definition->owner->name;
my $owner_table = $c->definition->owner->table->name;
push @eval, "\$d = \$$name\->table('$owner_table')->column('$owner')->definition;";
push @eval, "\$$name\->table('$table')->column('$column')->set_definition( \$d );\n";
}
sub save_schema
{
my $s_name = shift;
my $file = prompt( "File to which schema should be written?", "${s_name}_schema.pl" );
local *S;
open S, ">$file" or die "Cannot open file '$file': $!\n";
unless ( print S (join "\n", @eval) ) { die "Cannot write to file '$file': $!\n"; }
close S or die "Cannot close file '$file': $!\n";
print <<"EOF";
The schema has been saved to $file.
To use this file, you will first have to install the version of Alzabo
that includes this script. Then you can simply run:
$^X $file
This will overwrite the existing files for the $s_name schema
EOF
}
( run in 1.664 second using v1.01-cache-2.11-cpan-6aa56a78535 )