| [reply] |
I wanted to take a moment to say thanks, so, "Thanks!". I appreciate all the help that is given on this site...
#!perl -w
use strict;
no utf8;
use Encode;
use Unicode::String;
use XML::Simple;
my %primKeys;
my $schema = XMLin("./TEST_Baseline_0.99.xml",
forcearray => [ qw(zsql:database zsql:table zsql:col
+umn zsql:index) ],
keyattr => { "zsql:database" => 'name',
"zsql:table" => 'name',
"zsql:column" => 'name',
"zsql:index" => 'name'}
);
foreach my $db_table (sort keys %{$schema->{"zsql:table"}} ) {
if ($db_table ne '') {
#print "\t\t$table\n";
my $create_statement = "create table $db_table (";
my $primarykey= ", PRIMARY KEY (";
my $counter = 1;
my $countto = keys %{$schema->{"zsql:table"}->{$db_table}->{'zsql:
+column'}};
#print "Counter = $counter, count-to = $countto\n";
foreach my $tableColumn (sort keys %{$schema->{"zsql:table"}->{$db
+_table}->{'zsql:column'}} ) {
my $col_name = remCol($tableColumn);
my $col_type = $schema->{'zsql:table'}->{$db_table}->{'zsql:colu
+mn'}->{$tableColumn}->{type};
$create_statement .= "$col_name $col_type";
if (defined $schema->{"zsql:table"}->{$db_table}->{'zsql:column'
+}->{$tableColumn}->{notnull} ) {
$create_statement .= " NOT NULL";
} else {
$create_statement .= " NULL";
}
$counter++;
if ( $counter <= $countto ) {
$create_statement .= ", ";
}
if (defined $schema->{"zsql:table"}->{$db_table}->{'zsql:column'
+}->{$tableColumn}->{primarykey} ) {
push (@{$primKeys{$db_table}{key}}, $col_name);
if (length($primarykey) > 15) {
$primarykey .= ", $col_name";
} else {
$primarykey .= "$col_name";
}
}
}
if (length($primarykey) > 15) {
$primarykey .= " )";
$create_statement .= $primarykey;
}
$create_statement .= ")";
print "Creating table $db_table with statement\n\t$create_statemen
+t\n\n";
foreach my $db_index (sort keys %{$schema->{'zsql:table'}{$db_tabl
+e}->{'zsql:index'}} ){
if (exists $schema->{"zsql:table"}->{$db_table}->{'zsql:index'}-
+>{$db_index}->{'zsql:field'}) {
#print $schema->{"zsql:table"}->{$db_table}->{'zsql:index'}->{
+$db_index}->{'zsql:field'} ."\n";
my @thisIndex;
my $fld_add = 1;
my $sqlStatemnt = "CREATE INDEX $db_index on $db_table (";
my (@columns, $fld_cnt);
if (ref($schema->{"zsql:table"}->{$db_table}->{'zsql:index'}->
+{$db_index}->{'zsql:field'}) eq "ARRAY") {
foreach my $field (@{$schema->{"zsql:table"}->{$db_table}->{
+'zsql:index'}->{$db_index}->{'zsql:field'}}) {
foreach (keys(%{$field}) ) { push @columns, ${$field}{$_};
+ }
}
} elsif (ref($schema->{"zsql:table"}->{$db_table}->{'zsql:inde
+x'}->{$db_index}->{'zsql:field'}) eq "HASH") {
foreach (keys(%{$schema->{"zsql:table"}->{$db_table}->{'zsql
+:index'}->{$db_index}->{'zsql:field'}})) {
push @columns, ${$schema->{'zsql:table'}->{$db_table}->{'z
+sql:index'}->{$db_index}->{'zsql:field'}}{$_};
}
}
$fld_cnt = scalar(@columns);
if ($fld_cnt) {
foreach my $index_col (@columns ) {
my $col_name = remCol($index_col);
push (@thisIndex, $col_name);
$sqlStatemnt .= "$col_name";
if ($fld_add < $fld_cnt) { $sqlStatemnt .= ", "; }
else { $sqlStatemnt .= ") "; }
$fld_add++;
}
if (@thisIndex ne @{$primKeys{$db_table}{key}}) {
print "Adding index $db_index to table $db_table with \n";
print "\t$sqlStatemnt\n\n";
}
}
}
}
}
}
sub remCol {
my ($retval) = @_;
$retval =~ s/Col\d+\-\-//;
return $retval;
}
Again, thanks,
amonotod
| [reply] [d/l] |