--- db/prgsrc/updateindex.pl 2000/10/19 03:05:18 1.5 +++ db/prgsrc/updateindex.pl 2000/10/22 01:25:25 1.6 @@ -6,13 +6,12 @@ updateindex.pl - a script for creation o =head1 SYNOPSIS -updateind.pl [B<-i> I] +updateind.pl [B<-i> I] [B<-y>|B<-n>] =head1 DESCRIPTION -Upadets metainformation in the B databse. Uses file - L<./index> unless [B<-i>] option is used +Upadets metainformation in the B databse. An example of the index file follows: @@ -27,6 +26,22 @@ An example of the index file follows: burda12.txt Тренировки Бориса Бурды 12 +=head1 OPTIONS + +=over 4 + +=item B<-i> I + +The index file to read (Standard input by default) + +=item B<-y> + +Answer 'yes' to all questions + +=item B<-n> + +Answer 'no' to all questions + =head1 BUGS The database, user and password are hardcoded. @@ -39,32 +54,43 @@ createindex.pl(1) Boris Veytsman -=head1 $Id: updateindex.pl,v 1.5 2000/10/19 03:05:18 boris Exp $ +=head1 $Id: updateindex.pl,v 1.6 2000/10/22 01:25:25 boris Exp $ =cut use strict; -use vars qw($opt_i $opt_h); +use vars qw($opt_i $opt_h $opt_y $opt_n); use Getopt::Std; use DBI; MAIN: { - my $USAGE="Usage: updateindex.pl -i indexfile\n"; - getopts('hi:') or die $USAGE; + my $USAGE="Usage: updateindex.pl [-i indexfile] [-y|-n]\n"; + getopts('hi:yn') or die $USAGE; if ($opt_h) { print $USAGE; exit 0; } - my($source) = $opt_i || 'index'; + my $decision='askuser'; + if ($opt_y) { + $decision = 'yes'; + } + if ($opt_n ) { + $decision = 'no'; + } + my($source) = $opt_i; my($depth, @depthId); my $filename; my($dbh) = DBI->connect("DBI:mysql:chgk", "piataev", "") or die "Can't connect to DB chgk\n"; - open INFD, $source or die "Can't open input file: $!\n"; - while () { + if ($source) { + open INFO, $source or die "Can't open input file: $!\n"; + } else { + *INFO=*STDIN; + } + while () { chomp; s/ //; next if (/^\s*$/); @@ -84,19 +110,21 @@ MAIN: s/\s$//; my $title = $_; my $ParentId = ($depth) ? $depthId[$depth - 1] : 0; - my $Id = CheckId($dbh,$title,$ParentId,$filename); + my $Id = CheckId($dbh,$title,$ParentId,$decision,$filename); if (!$Id || $filename) { next; } $depthId[$depth] = $Id; } + print STDERR "Всего вопросов: ", + UpdateGroup($dbh,0),"\n"; $dbh->disconnect; } sub CheckId { - my ($dbh,$title,$ParentId,$filename) = @_; + my ($dbh,$title,$ParentId,$answer,$filename) = @_; my $type; my $key; my $value; @@ -116,12 +144,16 @@ sub CheckId { $sth->execute or die $dbh->errstr; my @arr = $sth->fetchrow; if (scalar @arr) { - print "$value is already in the DB!\n"; - print "Заменить новым значением? [y/N]\n"; - my $answer = ; + if ($answer eq 'askuser') { + print "$value is already in the DB!\n"; + print "Заменить новым значением? [y/N]\n"; + $answer = ; + } if ($answer !~ /^[yY]/) { + print STDERR "Не заменяем $value\n"; return 0; } else { + print STDERR "Заменяем $value\n"; $Id = $arr[0]; } } @@ -150,3 +182,38 @@ sub CheckId { } return $Id; } + +sub UpdateGroup { + my ($dbh,$Id) = @_; + my $sth = $dbh->prepare("SELECT COUNT(*) FROM Questions + WHERE ParentId=$Id"); + $sth->execute; + my @arr=$sth->fetchrow; + my $result=$arr[0]; + my @Tours = GetTours($dbh,$Id); + foreach my $TourId (@Tours) { + $result += UpdateGroup($dbh,$TourId); + } + $sth=$dbh->prepare("UPDATE Tournaments SET + QuestionsNum=$result + WHERE Id=$Id"); + $sth->execute; + return $result; +} + +sub GetTours { + my ($dbh, $ParentId) = @_; + my (@arr, @Tours); + + my ($sth) = $dbh->prepare("SELECT Id FROM Tournaments + WHERE ParentId=$ParentId ORDER BY Id"); + + $sth->execute; + + while (@arr = $sth->fetchrow) { + push @Tours, $arr[0]; + } + + return @Tours; +} +