File:  [Local Repository] / db / prgsrc / dbchgk.pm
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Wed Oct 31 03:07:18 2001 UTC (22 years, 6 months ago) by boris
Branches: MAIN
CVS tags: HEAD
KOIfication and Unixation...

    1: #!/usr/bin/perl
    2: package dbchgk;
    3: use DBI;
    4: use Exporter;
    5: use vars qw(@ISA @EXPORT);
    6: @ISA=qw(Exporter);
    7: 
    8: @EXPORT = qw(&getbase &getquestions &closebase &getrow $z &in2out &getall &addnf &out2in &mydo
    9:              &getequalto &forbidden &getquestion &checktable &addword2task &addnest &getwordkeys &getflag &addword2task &cformula
   10:              &updateword2question &knownword &incnf &searchmark &knownnf &getnests 
   11:              &packword &getnfnumbers &getword2question) ;
   12: 
   13: my $z;
   14: my $qbase;
   15: BEGIN {do "chgk.cnf"; 	
   16:           $qbase = DBI -> connect ("DBI:mysql:$base",'piataev',undef);
   17:       };
   18: 
   19: 
   20: 
   21: sub searchmark 
   22: {
   23:    my $a=$_[0];
   24:    $qbase->do ("UPDATE Questions SET ProcessedBySearch=1 WHERE QuestionId=$a")
   25: }
   26: 
   27: sub knownword
   28: {
   29:         my $a=$qbase ->quote (uc $_[0]);
   30:         my $select = "select distinct w2 from nests where w1=$a";
   31:         print "$select\n" if $debug;
   32: 	my $z=  $qbase -> prepare($select);
   33: 	$z -> execute;
   34: 	my @res;
   35: 	while ( my @ar=$z -> fetchrow)
   36:         {
   37:           push (@res,$ar[0])
   38:         }
   39:         return @res;
   40: 
   41: }
   42: 
   43: sub knownnf
   44: {
   45:         my $a=$qbase ->quote (uc $_[0]);
   46:         my $select = "select id from nf where word=$a";
   47:         print "$select\n" if $debug;
   48: 	my $z=  $qbase -> prepare($select);
   49: 	$z -> execute;
   50: 	my @ar=$z -> fetchrow;
   51:         return $ar[0];
   52: }
   53: 
   54: sub incnf
   55: {
   56:    my $a=$_[0];
   57:    my $b=$_[1]||1;
   58:    $qbase -> do ("UPDATE nf SET number=number+$b WHERE id=$a")
   59: }
   60: 
   61: sub getbase
   62: {    
   63:         my $a=join(", ",@_);
   64:         my $select="select $a FROM Questions WHERE QuestionId<=$qnumber";
   65:         print "$select\n" if $debug;
   66: 	$z=  $qbase -> prepare($select);
   67: 	$z -> execute;
   68: }
   69: 
   70: sub getquestions
   71: {    
   72:         my $cond=pop @_;
   73:         my $a=join(", ",@_);
   74:         my $select="select $a FROM Questions WHERE QuestionId<=$qnumber AND ($cond)";
   75:         print "$select\n" if $debug;
   76: 	$z=  $qbase -> prepare($select);
   77: 	$z -> execute;
   78: }
   79: 
   80: 
   81: sub getword2question
   82: {    
   83:         my $select='select word, questions FROM word2question';
   84: print "$select\n";
   85: 	$z=  $qbase -> prepare($select);
   86: 	$z -> execute;
   87: }
   88: 
   89: 
   90: sub addword2task
   91: {
   92:   ($w1,$w2)=@_;
   93:   $w2=$qbase -> quote ($w2);
   94:   $qbase -> do("insert into word2question (word,questions) values ($w1,$w2)");
   95: }
   96: 
   97: sub packword
   98: {
   99:   my ($fieldnumber,$id,$wordnumber)=@_;
  100: die "packword: fieldnumber is $fieldnumber! -- id=$id, word=$wordnumber\n" if $fieldnumber>6;
  101:   pack("CSC",$fieldnumber,$id,$wordnumber%256)
  102: }
  103: 
  104: sub updateword2question
  105: {
  106:   my ($n,$addstring,$was)=@_;
  107:   $addstring=$qbase->quote($addstring);
  108:   my ($z,@a); 
  109: 
  110:   if (!(defined $was))
  111:   {
  112:     $query="select word from word2question where word=$n";
  113: print "$query\n" if $debug;
  114:     $z=$qbase->prepare($query);
  115:     $z->execute;
  116:     @a=$z->fetchrow;
  117:     $was=$a[0];
  118:   }
  119:   my $select=$was ? "UPDATE word2question set questions = CONCAT(questions,$addstring)
  120:                               where word=$n"
  121:                  :
  122:                     "insert into word2question (word,questions) values 
  123:                     ($n,$addstring)";
  124: print "$select\n" if $debug;
  125:   $qbase->do ($select);      
  126: 
  127: }
  128: 
  129: 
  130: 
  131: sub addnest
  132: {
  133:   my ($w1,$w2)=@_;
  134:   $w1=$qbase -> quote($w1);
  135:   my $query="insert into nests (w1,w2) values ($w1,$w2)";
  136:   print $query if $debug;
  137:   $qbase -> do($query);
  138: }
  139: 
  140: sub addnf
  141: {
  142:   my ($w0,$w1,$w2,$w3)=@_;
  143:   $w1=$qbase -> quote($w1);
  144:   $w2=$qbase -> quote($w2);
  145:   my $query;
  146:   my $z=  $qbase -> prepare("select flag,id FROM nf WHERE word=$w1");
  147:   $z -> execute;
  148:   my @a=$z->fetchrow;
  149:   my $id;
  150:   if ($a[0]) 
  151:   { 
  152:     $query="update nf set flag=$w2, number=$w3 WHERE word=$w1";
  153:     print "$query\n" if $debug;
  154:     $qbase -> do($query); 
  155:     return $a[1];
  156:   }
  157:   else
  158:   { 
  159:     if ($w0)
  160:     {
  161:        $query="insert into nf (id,word,flag,number) values ($w0,$w1,$w2,$w3)";
  162:        $qbase -> do($query);
  163:        return $w0;
  164:     }
  165:     else
  166:     {
  167:        $query="insert into nf (word,flag,number) values ($w1,$w2,$w3)";
  168:        $qbase -> do($query);
  169:        $query="select id from nf where word=$w1";
  170: print "$query\n" if $debug;
  171:        $z=$qbase->prepare($query);
  172:        $z->execute;
  173:        ($id)=$z->fetchrow;
  174:        return $id;
  175:     }
  176:   } 
  177: }
  178: 
  179: sub getwordkeys
  180: {
  181: 	$z=  $qbase -> prepare("select word, flag FROM nf");
  182: 	$z -> execute;
  183: 	my %h;
  184: 	while ( my  ($first, $second)=$z -> fetchrow)
  185:         {
  186:             $h{$first}=$second;
  187:         }
  188:         $z -> finish;
  189:         %h;
  190: }
  191: 
  192: 
  193: sub getequalto
  194: {    
  195: 	$z=  $qbase -> prepare("select first, second FROM equalto");
  196: 	$z -> execute;
  197: 	my %h;
  198: 	while ( my  ($first, $second)=$z -> fetchrow)
  199:         {
  200:             $h{$first}=$second;
  201:         }
  202:         $z -> finish;
  203:         %h;
  204: }
  205: 
  206: sub getnfnumbers
  207: {    
  208: 	$z=  $qbase -> prepare("select word, id FROM nf");
  209: 	$z -> execute;
  210: 	my %h;
  211: 	while ( my  ($first, $second)=$z -> fetchrow)
  212:         {
  213:             $h{$first}=$second;
  214:         }
  215:         $z -> finish;
  216:         %h;
  217: }
  218: 
  219: 
  220: sub getnests
  221: {    
  222: 	$z=  $qbase -> prepare("select w1, w2 FROM nests");
  223: 	$z -> execute;
  224: 	my %h;
  225: 	while ( my  ($first, $second)=$z -> fetchrow)
  226:         {
  227:             $h{$first}.=" $second";
  228:         }
  229:         $z -> finish;
  230:         %h;
  231: }
  232: 
  233: 
  234: sub getflag
  235: {
  236:         $w=$qbase->quote($_[0]);
  237: 	$z=  $qbase -> prepare("select flag, id from nf where word=$w");
  238: 	$z -> execute;
  239: 	@res=$z->fetchrow();
  240: 
  241: 	@res;
  242: }
  243: 
  244: 
  245: sub closebase
  246: {
  247:     $z -> finish;
  248:     $qbase -> disconnect;
  249: }
  250: 
  251: sub getrow
  252: {
  253:   $z -> fetchrow
  254: }
  255: 
  256: sub mydo
  257: {
  258:   $qbase -> do (shift);
  259: }
  260: 
  261: sub getall
  262: {
  263:   $z -> fetchall_arrayref;
  264: }
  265: 
  266: sub forbidden
  267: {
  268:    keys %getequalto
  269: }
  270: 
  271: sub checktable # если $param='delete' удаляет существующую таблицу,
  272:                # если $param='ask' спрашивает, не удалить ли
  273:                # если $param не определено -- просто удаляет.
  274: {
  275: 	my ($TabName,$param) = @_;
  276: 	my ($ans);
  277: 	if (scalar(grep(/^$TabName$/i, &tablelist))) {
  278: 	        return 1 unless $param;
  279: 		if ($param eq 'delete') {$ans='y';}
  280:                    else {
  281:                            print "Table $TabName exists. Do you want to delete it? ";
  282:                            $ans = <STDIN>
  283:                         }
  284: 		if ($ans =~ /[yY]/) {
  285: 			$qbase->do("DROP TABLE $TabName");
  286: 			print "deleted table $TabName\n";
  287: 			return 0;
  288: 		} else {
  289: 			return 1
  290: 		}
  291: 	}
  292:  0	
  293: }
  294: 
  295: sub tablelist
  296: {
  297:      $qbase->func( '_ListTables' );
  298: }
  299: 
  300: sub in2out
  301: {
  302:    $qid=shift;
  303: 
  304:    my $z=  $qbase -> prepare ( "select t2.Id, t2.Number, t3.FileName 
  305:                 from Questions AS t1, Tournaments AS t2 ,  Tournaments AS t3
  306:                 where (t1.QuestionId = $qid)  && (t1.ParentId = t2.Id) && (t2.ParentId = t3.Id) ");
  307: 
  308:    $z -> execute;
  309:   ($tourid, $tourname, $filename)= $z -> fetchrow;
  310: 
  311: 
  312:    $z=  $qbase -> prepare("select QuestionId  from Questions  WHERE ParentId = $tourid");
  313: 
  314:     $z -> execute;
  315:     my $i;
  316:     for ($i=1;  ($q= $z->fetchrow) && $q!=$qid; $i++){};
  317: 
  318:    $_=lc $_;
  319:    $filename=~s/\.txt$//i;
  320:    "$filename\.$tourname\.$i";
  321: }
  322: 
  323: 
  324: 
  325: sub out2in
  326: {
  327:    @q= split(/\./, lc shift);
  328: 
  329:    $q[0].='.txt';
  330: 
  331: # 
  332: 
  333: 
  334:    $z=  $qbase -> prepare ( "select q.QuestionId  from Questions as q, 
  335:                 Tournaments as t1, Tournaments as t2
  336:                 where (t2.FileName= \"$q[0]\")  && 
  337:                       (t1.ParentId = t2.Id) && 
  338:                       (q.ParentId = t1.Id)  && 
  339:                       (t1.Number=\"$q[1]\")
  340:             ");
  341: 
  342:    $z -> execute;
  343: #   ($tourid)=$z -> fetchrow or die "Bad identifier". join (".", @q);
  344: 
  345: #   print "--$tourid--";
  346: 
  347: #   $z=  $qbase -> prepare("select QuestionId  from questions  WHERE ParentId = $tourid");
  348: 
  349:     my $i;
  350:     $z -> execute;
  351:     for ($i=1;  $i <= $q[2]; $i++){@qq= $z->fetchrow};
  352: 
  353:     $z -> finish;
  354:     $qq[0];
  355: }
  356: 
  357: 
  358: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>