--- db/prgsrc/dbchgk.pm 2008/02/08 22:49:12 1.12 +++ db/prgsrc/dbchgk.pm 2010/04/24 17:21:54 1.13 @@ -27,7 +27,7 @@ use vars qw(@ISA @EXPORT); @EXPORT = qw(&getbase &getquestions &closebase &getrow $z &in2out &getall &addnf &out2in &mydo &getequalto &forbidden &getquestion &checktable &addword2task &addnest &getwordkeys &getflag &addword2task &updateword2question &updatew2q &knownword &incnf &searchmark &knownnf &getnests - &packword &getnfnumbers &getword2question &addauthors) ; + &packword &getnfnumbers &getword2question &addauthors &addquestions2author &addtours2author &getalltours &tableexists) ; my $z; my $qbase; @@ -84,6 +84,18 @@ sub getbase my $select="select $a FROM Questions WHERE QuestionId<=$qnumber"; print "$select\n" if $debug; $z= $qbase -> prepare($select); + print "prepared\n" if $debug; + $result = $z -> execute; + print "executed\n" if $debug; + return $result; +} + +sub getalltours +{ + my $a=join(", ",@_); + my $select="select $a FROM Tournaments -- WHERE Type='Ч'"; + print "$select\n" if $debug; + $z= $qbase -> prepare($select); $z -> execute; } @@ -114,36 +126,58 @@ sub addword2task $qbase -> do("insert into word2question (word,questions) values ($w1,$w2)"); } -sub addauthors +sub authorexists { - my ($charid,$name,$surname,$questions,$nicks,$forbidden)=@_; - $_=$qbase -> - quote($_) foreach ($charid,$name,$surname,$nicks); - my $kvo=scalar grep {!$$forbidden{$_}} @$questions; -my $query="insert into Authors (CharId,name,surname,QNumber,Nicks) - values ($charid,$name,$surname,".$kvo.",$nicks)"; - - print $query if $debug; - - $qbase -> do($query); - $query="select id from Authors where CharId=$charid"; - print $query if $debug; - my $z= $qbase -> prepare($query); - $z -> execute; - my @ar=$z->fetchrow; - my $id=$ar[0]; - - + $textid = shift; + $sql = "select 1 from People Where CharId = ".$qbase->quote($textid); + $z = $qbase ->prepare($sql); + $z->execute; + return $z->rows; +} -foreach my $q (@{$questions}) +sub addauthor { - $query="insert into A2Q (Author,Question) - values ($id,$q)"; - print $query if $debug; - $qbase -> do($query) ; + my ($charid,$name,$surname,$nicks)=@_; + if (authorexists($charid)) { + return; + } else { + $_=$qbase ->quote($_) foreach ($charid,$name,$surname,$nicks); + my $query= + "insert into People (CharId,name,surname,Nicks) + values ($charid,$name,$surname,$nicks)"; + mydo($query); + } } +sub addquestions2author +{ + my ($charid,$name,$surname,$questions,$nicks,$forbidden)=@_; + + my $kvo=scalar grep {!$$forbidden{$_}} @$questions; + + addauthor($charid, $name, $surname, $nicks); + $qbase->do("UPDATE People SET QNumber=$kvo WHERE CharId=".$qbase->quote($charid)); + foreach my $q (@{$questions}) + { + $query="insert into P2Q (Author,Question) + values (".$qbase->quote($charid).",$q)"; + $qbase -> do($query) ; + } } +sub addtours2author +{ + my ($charid,$name,$surname,$tours,$nicks)=@_; + my $kvo= @$tours; + + addauthor($charid, $name, $surname, $nicks); + $qbase->do("UPDATE People SET TNumber=$kvo WHERE CharId=".$qbase->quote($charid)); + foreach my $t (@{$tours}) + { + $query="insert into P2T (Author,Tour) + values (".$qbase->quote($charid).",$t)"; + $qbase -> do($query) ; + } +} sub packword { @@ -328,14 +362,21 @@ sub forbidden keys %getequalto } +sub tableexists { + $TabName = shift; + return grep(/\`$TabName\`/i, &tablelist); +} + sub checktable # если $param='delete' удаляет существующую таблицу, # если $param='ask' спрашивает, не удалить ли # если $param не определено -- просто удаляет. # если $param='deletedata' -- удаляет из таблицы данные { +print "!"; my ($TabName,$param) = @_; my ($ans); - if (scalar(grep(/\`$TabName$\`/i, &tablelist))) { +print STDERR "!$TabName!\n"; + if (grep(/\`$TabName$\`/i, &tablelist)) { return 1 unless $param; if ($param =~ /delete/) {$ans='y';} else { @@ -360,7 +401,7 @@ sub checktable # если $param='delete' уд sub tablelist { - return $qbase->func('_ListTables'); + return $qbase->tables(); } sub in2out