<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Canclov%C3%A1n%C3%AD_dotazu_s_DBI_-_uk%C3%A1zka_testu</id>
	<title>Canclování dotazu s DBI - ukázka testu - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Canclov%C3%A1n%C3%AD_dotazu_s_DBI_-_uk%C3%A1zka_testu"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Canclov%C3%A1n%C3%AD_dotazu_s_DBI_-_uk%C3%A1zka_testu&amp;action=history"/>
	<updated>2026-05-30T19:34:50Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=Canclov%C3%A1n%C3%AD_dotazu_s_DBI_-_uk%C3%A1zka_testu&amp;diff=562&amp;oldid=prev</id>
		<title>imported&gt;Pavel: Založena nová stránka s textem „&lt;pre&gt; use DBI; use Perl::Unsafe::Signals;  use IO::Handle;  sub execute_with_reflect_term {     my ($dbh, $sql) = @_;      my $sth = $dbh-&gt;prepare( $sql );…“</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Canclov%C3%A1n%C3%AD_dotazu_s_DBI_-_uk%C3%A1zka_testu&amp;diff=562&amp;oldid=prev"/>
		<updated>2014-12-14T06:57:36Z</updated>

		<summary type="html">&lt;p&gt;Založena nová stránka s textem „&amp;lt;pre&amp;gt; use DBI; use Perl::Unsafe::Signals;  use IO::Handle;  sub execute_with_reflect_term {     my ($dbh, $sql) = @_;      my $sth = $dbh-&amp;gt;prepare( $sql );…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
use DBI;&lt;br /&gt;
use Perl::Unsafe::Signals;&lt;br /&gt;
&lt;br /&gt;
use IO::Handle;&lt;br /&gt;
&lt;br /&gt;
sub execute_with_reflect_term {&lt;br /&gt;
    my ($dbh, $sql) = @_;&lt;br /&gt;
&lt;br /&gt;
    my $sth = $dbh-&amp;gt;prepare( $sql );&lt;br /&gt;
    &lt;br /&gt;
    local $SIG{ TERM } = sub {&lt;br /&gt;
	print &amp;quot;sending cancel signal to database\n&amp;quot;;&lt;br /&gt;
	$sth-&amp;gt;cancel;&lt;br /&gt;
	print &amp;quot;cancel emmited\n&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    UNSAFE_SIGNALS { $sth-&amp;gt;execute };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub rows_exists {&lt;br /&gt;
    my ($dbh, $sql) = @_;&lt;br /&gt;
&lt;br /&gt;
    my $sth = $dbh-&amp;gt;prepare( $ sql );&lt;br /&gt;
&lt;br /&gt;
    $sth-&amp;gt;execute;&lt;br /&gt;
&lt;br /&gt;
    return $sth-&amp;gt;rows &amp;gt; 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub test {&lt;br /&gt;
&lt;br /&gt;
    close READER;&lt;br /&gt;
    &lt;br /&gt;
    my $dbh = DBI-&amp;gt;connect(&amp;quot;dbi:Pg:dbname=postgres host=localhost&amp;quot; .&lt;br /&gt;
			   &amp;quot; application_name=CANCEL_TEST&amp;quot;,&lt;br /&gt;
			   &amp;quot;pavel&amp;quot;,&amp;quot;&amp;quot;, &lt;br /&gt;
			   {RaiseError=&amp;gt;1, PrintError=&amp;gt;0});&lt;br /&gt;
&lt;br /&gt;
    if (!eval {&lt;br /&gt;
	&lt;br /&gt;
	execute_with_reflect_term ($dbh, &amp;quot;SELECT pg_sleep(1000)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	}) {&lt;br /&gt;
	if ($dbh-&amp;gt;state eq &amp;#039;57014&amp;#039;) {&lt;br /&gt;
	    print WRITER &amp;quot;*** Query cancelled ***&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
	    print WRITER &amp;quot;unexpected error: &amp;gt;&amp;gt;$DBI::state&amp;lt;&amp;lt; &amp;gt;&amp;gt;$DBI::err&amp;lt;&amp;lt; &amp;gt;&amp;gt;$DBI::errstr&amp;lt;&amp;lt;\n$@&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    close WRITER;&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$dbh_alfa = DBI-&amp;gt;connect(&amp;quot;dbi:Pg:dbname=postgres host=localhost application_name=test_parent&amp;quot;,&lt;br /&gt;
			 &amp;quot;pavel&amp;quot;,&amp;quot;&amp;quot;, &lt;br /&gt;
			 {RaiseError=&amp;gt;1, PrintError=&amp;gt;0});&lt;br /&gt;
&lt;br /&gt;
if (rows_exists($dbh_alfa,&lt;br /&gt;
		&amp;quot;SELECT * FROM pg_stat_activity WHERE application_name=&amp;#039;CANCEL_TEST&amp;#039;&amp;quot;)) {&lt;br /&gt;
    die &amp;quot;clean PostgreSQL connections first&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# close this connect before new fork,&lt;br /&gt;
# because killing child kills it too. It is available from child.&lt;br /&gt;
$dbh_alfa-&amp;gt;disconnect;&lt;br /&gt;
&lt;br /&gt;
pipe(READER, WRITER);&lt;br /&gt;
WRITER-&amp;gt;autoflush(1);&lt;br /&gt;
&lt;br /&gt;
my $pid = fork;&lt;br /&gt;
&lt;br /&gt;
if (!defined $pid) {&lt;br /&gt;
    die &amp;quot;Cannot fork: $!&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
elsif ($pid == 0) {&lt;br /&gt;
    # client process&lt;br /&gt;
&lt;br /&gt;
    test;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    # parent process&lt;br /&gt;
&lt;br /&gt;
    sleep 1;&lt;br /&gt;
&lt;br /&gt;
    close WRITER;&lt;br /&gt;
    &lt;br /&gt;
    $dbh_alfa = DBI-&amp;gt;connect(&amp;quot;dbi:Pg:dbname=postgres host=localhost application_name=test_parent&amp;quot;,&lt;br /&gt;
			     &amp;quot;pavel&amp;quot;,&amp;quot;&amp;quot;, &lt;br /&gt;
			     {RaiseError=&amp;gt;1, PrintError=&amp;gt;0});&lt;br /&gt;
&lt;br /&gt;
    if (! rows_exists($dbh_alfa,&lt;br /&gt;
		&amp;quot;SELECT * FROM pg_stat_activity WHERE application_name=&amp;#039;CANCEL_TEST&amp;#039;&amp;quot;)) {&lt;br /&gt;
	die &amp;quot;cannot start test&amp;quot;;&lt;br /&gt;
    }	      &lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;subprocess started corectly, sending SIGTERM\n&amp;quot;;&lt;br /&gt;
    kill(15, $pid);&lt;br /&gt;
    waitpid $pid, 0;&lt;br /&gt;
&lt;br /&gt;
    if (rows_exists($dbh_alfa,&lt;br /&gt;
		    &amp;quot;SELECT * FROM pg_stat_activity WHERE application_name=&amp;#039;CANCEL_TEST&amp;#039;&amp;quot;)) {&lt;br /&gt;
	die &amp;quot;subprocess didn&amp;#039;t cancel own long query&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;subprocess terminated long query corectly\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    chomp ($line = &amp;lt;READER&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
    if ($line eq &amp;quot;*** Query cancelled ***&amp;quot;) {&lt;br /&gt;
	print &amp;quot;subprocess returned expected result\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	die &amp;quot;unexpected result from subprocess: $line&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    close READER;&lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;test is complete.\n&amp;quot;   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Pavel</name></author>
	</entry>
</feed>