diff --git a/src/test/subscription/t/080_step_equalTupleDescs.pl b/src/test/subscription/t/080_step_equalTupleDescs.pl new file mode 100644 index 0000000..efa6dbd --- /dev/null +++ b/src/test/subscription/t/080_step_equalTupleDescs.pl @@ -0,0 +1,94 @@ +# run with: make -C src/test/subscription check PROVE_TESTS=t/080_step_equalTupleDescs.pl +# email src/test/subscription/tmp_check/log/regress_log_080_step_equalTupleDescs + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More tests => 1; +use IPC::Run; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->start; + +my $in = ''; +my $out = ''; +my $timer = IPC::Run::timeout(180); +my $psql = $node->background_psql('postgres', \$in, \$out, $timer, + on_error_stop => 0); + +$in .= q{ +SELECT pg_backend_pid(), 'after_pid'; +}; +$psql->pump until $out =~ /^([0-9]*)\|after_pid/m; +my $pid = $1; +print "backend pid: $pid\n"; + +my $gdb_cmd_file = $node->basedir . '/commands-gdb'; +PostgreSQL::Test::Utils::append_to_file($gdb_cmd_file, q{ +b equalTupleDescs +ignore 1 9 +set logging file } . $node->basedir . q{/gdb_started.txt +set logging on +set logging off +continue +p *tupdesc1 +p *tupdesc2 +p tupdesc1->attrs[0] +p tupdesc1->attrs[1] +p tupdesc1->attrs[2] +p tupdesc2->attrs[0] +p tupdesc2->attrs[1] +p tupdesc2->attrs[2] +backtrace full +set $loopvar = 25000 +while ($loopvar--) + stepi +end +quit +}); + +my $gdb = IPC::Run::start( + [qw(gdb --batch --nx --pid), $pid, '-x', $gdb_cmd_file], + $timer); +sleep .1 while !-f $node->basedir.'/gdb_started.txt'; + +# first 28 lines of src/test/regress/sql/alter_table.sql +$in .= q{ +-- +-- ALTER_TABLE +-- + +-- Clean up in case a prior regression run failed +SET client_min_messages TO 'warning'; +DROP ROLE IF EXISTS regress_alter_table_user1; +RESET client_min_messages; + +CREATE USER regress_alter_table_user1; + +-- +-- add attribute +-- + +CREATE TABLE attmp (initial int4); + +COMMENT ON TABLE attmp_wrong IS 'table comment'; +COMMENT ON TABLE attmp IS 'table comment'; +COMMENT ON TABLE attmp IS NULL; + +ALTER TABLE attmp ADD COLUMN xmin integer; -- fails + +ALTER TABLE attmp ADD COLUMN a int4 default 3; + +ALTER TABLE attmp ADD COLUMN b name; + +ALTER TABLE attmp ADD COLUMN c text; +}; + +$in .= q{ +\q +}; +$psql->finish; +$gdb->finish; +ok(1);