--- db/prgsrc/dbchgk.pm 2001/11/19 01:13:41 1.5 +++ db/prgsrc/dbchgk.pm 2008/02/08 22:49:12 1.12 @@ -2,7 +2,7 @@ =head1 NAME -dbchgk.pm +dbchgk.pm - модуль для работы с базой =head1 SYNOPSIS @@ -25,14 +25,15 @@ use vars qw(@ISA @EXPORT); @ISA=qw(Exporter); @EXPORT = qw(&getbase &getquestions &closebase &getrow $z &in2out &getall &addnf &out2in &mydo - &getequalto &forbidden &getquestion &checktable &addword2task &addnest &getwordkeys &getflag &addword2task &cformula - &updateword2question &knownword &incnf &searchmark &knownnf &getnests - &packword &getnfnumbers &getword2question) ; + &getequalto &forbidden &getquestion &checktable &addword2task &addnest &getwordkeys &getflag &addword2task + &updateword2question &updatew2q &knownword &incnf &searchmark &knownnf &getnests + &packword &getnfnumbers &getword2question &addauthors) ; my $z; my $qbase; BEGIN {do "chgk.cnf"; $qbase = DBI -> connect ("DBI:mysql:$base",'piataev',undef); + $qbase->do("SET NAMES koi8r"); }; @@ -113,11 +114,51 @@ sub addword2task $qbase -> do("insert into word2question (word,questions) values ($w1,$w2)"); } +sub addauthors +{ + 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]; + + + +foreach my $q (@{$questions}) +{ + $query="insert into A2Q (Author,Question) + values ($id,$q)"; + print $query if $debug; + $qbase -> do($query) ; +} +} + + sub packword { my ($fieldnumber,$id,$wordnumber)=@_; die "packword: fieldnumber is $fieldnumber! -- id=$id, word=$wordnumber\n" if $fieldnumber>6; - pack("CSC",$fieldnumber,$id,$wordnumber%256) + $r=pack("CSC",$fieldnumber|(($id >> 16) << 4),$id%65536,$wordnumber%256); +} + + +sub updatew2q { + my ($n,$fieldnumber, $id,$wordnumber)=@_; + my ($z,@a); + $query="replace into w2q (wordId,questionId,fieldNumber,wordNumber) values ($n,$id,$fieldnumber,$wordnumber)"; + print "$query\n" if $debug; + $qbase->do($query); } sub updateword2question @@ -290,20 +331,26 @@ sub forbidden sub checktable # если $param='delete' удаляет существующую таблицу, # если $param='ask' спрашивает, не удалить ли # если $param не определено -- просто удаляет. + # если $param='deletedata' -- удаляет из таблицы данные { my ($TabName,$param) = @_; my ($ans); - if (scalar(grep(/^$TabName$/i, &tablelist))) { + if (scalar(grep(/\`$TabName$\`/i, &tablelist))) { return 1 unless $param; - if ($param eq 'delete') {$ans='y';} + if ($param =~ /delete/) {$ans='y';} else { print "Table $TabName exists. Do you want to delete it? "; $ans = } if ($ans =~ /[yY]/) { + if ($param eq 'delete') { $qbase->do("DROP TABLE $TabName"); print "deleted table $TabName\n"; - return 0; + } else { + $qbase->do("DELETE FROM $TabName"); + print "Deleted everything from $TabName\n"; + } + return 0; } else { return 1 } @@ -313,7 +360,7 @@ sub checktable # если $param='delete' уд sub tablelist { - $qbase->func( '_ListTables' ); + return $qbase->func('_ListTables'); } sub in2out