#!/usr/local/bin/perl -T

use lib './module/';
use strict;
use Tie;
use CGI; my $q=new CGI;

#############################################

my( $tab,%TAB,%UP )=( 0 );

open OP, './dbm/tables' or die 'no file /dbm/tables\n';
while( <OP> ){
	s/\s*\#+.*$//;
	next if !$_ || /^\r?\n$/;

	if( /^\>(.*)/ ){ $UP{$tab}.=" $1"; next }

	0=~/(.)/; /^\=+\s?([^\s\=]+)/;
	if( $1 ){ $tab=lc $1; next }
	if( $tab ){ $TAB{$tab}.=$_ }
}
close OP;

#############################################

print $q->header( -type=>'text/html', -charset=>'WINDOWS-1251' );
print $q->start_html( -title=>'Обновления данных таблиц', -style=>$STYLE, "leftmargin=0 topmargin=0 marginwidth=0 marginheight=0" );

my $db= $dbSQL->selectrow_array("SELECT DATABASE()");
print "<div align=center><div style='border:1px solid #BBB;width:550px;color:#006;background-color:#FFF;font-size:14;padding:2'>";

print "<a href=update.cgi?3 title='В начало'>Обновления таблиц в БД <u>$db</u></a><hr size=1 width=100%>";

my $table= $q->param('table');
Update( $table ) if $table;

my $view= $q->param('view');
View( $view ) if $view;


print "В реестре следующие таблицы:<ul style='text-align:left'>";

for( sort{ $a cmp $b } keys %TAB ){
	print "<li><a href=update.cgi?view=$_ title='Предварительный просмотр'>$_</a>";
}

print "</ul></body></html>";
exit(0);

#############################################

sub View{

	my $table= shift;
	my( $UPDATE,$questPre )=( "1968-03-14" );
	my $quest= defined $UP{$table} ? $UP{$table} : "SELECT * FROM $table";

	print "<br> Просмотр таблицы <u>$view</u> <ul style='text-align:left'>";
	for( split/\,\r?\n/,$TAB{$table} ){ print "<li> $_" }
	print "</ul>";

	$UPDATE=( map{ /COMMENT=.(\d\d\d\d-\d\d?-\d\d?)/ } $dbSQL->selectrow_array("SHOW CREATE TABLE $table") )[0] || "1968-03-14";
	$quest=~ s/\$UPDATE/\'$UPDATE\'/;

	$questPre= $quest;
	$questPre=~ s/^\s*SELECT\s+\*/SELECT COUNT\(\*\)/i;

	print "<span style='font-size:12'>";
	print "Последнее обновление таблицы проводилось: $UPDATE";
	print "<p>Обновление таблицы будет производиться по запросу:<br><code>$quest</code>";
	print "<p>Предварительный запрос (без обновления):<br><code>$questPre</code>";

	$Q->param(Q=>$questPre);
	Tie();

	my $size= $A->param('A'); $size=~ s/[^\d]//g;
	print "<p>Число строк для обновления: $size";
	print "<p><a href=update.cgi?table=$table&size=$size onClick=\"return confirm('Обновить таблицу $table?')\">ОБНОВИТЬ?</a>";

	print "</span><hr size=1 width=100%>";
}

#############################################

sub Update{

	my $table= shift;
	my( $rezS,$UPDATE )=( 0,"1968-03-14" );
	my $quest= defined $UP{$table} ? $UP{$table} : "SELECT * FROM $table";

	$UPDATE=( map{ /COMMENT=.(\d\d\d\d-\d\d?-\d\d?)/ } $dbSQL->selectrow_array("SHOW CREATE TABLE $table") )[0] || "1968-03-14";
	my $delete= $quest=~ s/\$UPDATE/\'$UPDATE\'/ ? 0 : 1;

	$dbSQL->do("DELETE FROM $table") if $delete==1;

	my $size= $q->param('size') || 0;
	my $portion= $size>0 ? int($size/1000) : 0; 

	for( 0..$portion ){

		my $limit= $_*1000;
		$quest=~ s/LIMIT\s+([\d\,])//;
		$Q->param(Q=>"$quest LIMIT $limit,1000");
		$Q->param(TYPE=>'VALUES');
		Tie();

		my $rezult= $dbSQL->do("REPLACE INTO $table VALUES".$A->param('A'));
		print "<br>Порция обновила $rezult строк";
		$rezS+= $rezult;
	}

	my $curdate= $dbSQL->selectrow_array("SELECT CURDATE()");
	$dbSQL->do("ALTER TABLE $table COMMENT='$curdate'");

	print "<p>Обновление таблицы $table произведено";
	print "<br>Всего обновлено: $rezS строк";
	print "<br>Дата обновления: $curdate";
	print "</span><hr size=1 width=100%>";
}
