Sorts by ancestral relationship of FKs. Minor optimisation similar to orcish manoevre: only search a csv array for FK entries once.my $csvQ = {}; for my $csv ($obj->_globcsv) { my $base = basename $csv; $base =~ s/\.txt$//; $base = lc($base); $obj->_csv2arr($csv); $csvQ->{$base}{table} = $obj->_getset('ar'); } $obj->_getset('csvQ', $csvQ); for my $table ( sort _DBsort4create keys %$csvQ ) { $obj->_getset('ar', $csvQ->{$table}{table}); $obj->_arr2db; # process the csv into the db } sub _DBsort4create { my $obj = shift; my $csvQ = $obj->_getset('csvQ'); for my $ab ($a, $b) { unless(exists($csvQ->{$ab}{ancestor})) { $csvQ->{$ab}{ancestor} = {}; ROWDBS4C: for (my $row=1; $row <= $#{$csvQ->{$ab}{table}}; $ro +w++) { # avoid first row, which is a header not csv data ($csvQ->{$ab}{table}[$row][0] eq '__COLUMNS__') and last ROWDBS4C; if ($csvQ->{$ab}{table}[$row][0] eq 'FK') { $csvQ->{$ab}{ancestor}{$csvQ->{$ab}{table}[$row][2]}=' +'; } } } } if (exists($csvQ->{$a}{ancestor}{$b})) { return 1; } elsif (exists($csvQ->{$b}{ancestor}{$a})) { return -1; } return 0; }
One world, one people
In reply to Re: Sort mechanics problems with objects and potentially contradicting comparisons (would cause infinite loop)
by anonymized user 468275
in thread Sort mechanics problems with objects and potentially contradicting comparisons (would cause infinite loop)
by anonymized user 468275
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |