use strict;
use warnings;

use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;

use Test::More;

my ($node, $result);

$node = PostgreSQL::Test::Cluster->new('test');
$node->init;
$node->append_conf('postgresql.conf', "
log_connections = on
log_disconnections = on
autovacuum = off
fsync = off
max_prepared_transactions = 10
");
$node->start;
$node->safe_psql('postgres', 'CREATE DATABASE regress001');
$node->safe_psql('postgres', 'CREATE DATABASE regress002');
$node->safe_psql('regress001', 'CREATE EXTENSION pageinspect');
$node->command_checks_all(['pg_amcheck', '-d', 'regress001', '--install-missing', '--heapallindexed', '--rootdescend' ],
    0, [qr/^$/], [qr/^$/], 'pg_amcheck before manipulations');


my $bsession1 = $node->background_psql('regress001');
$bsession1->query_safe("create temp table t1(a int)");
my $bsession2 = $node->background_psql('regress002');
$bsession2->query_safe("begin transaction");
$bsession2->query_safe("prepare transaction 'pt1'");
$bsession1->quit;
my $bsession3 = $node->background_psql('regress001');
$bsession3->query_safe("create temp table t1(a int)");
$bsession3->query_safe("vacuum t1");
$bsession2->quit;
$bsession3->quit;

my $pd_pages = $node->safe_psql('regress001', "SELECT pg_relation_size('pg_depend')/8192");
print("pd_pages: $pd_pages\n");

my $pd_page_13 = $node->safe_psql('regress001', "\\pset format aligned
\\pset tuples_only off
SELECT * FROM heap_page_item_attrs(get_raw_page('pg_depend', 13), 'pg_depend'::regclass), LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2);");
print("pg_depend page 13:\n$pd_page_13");

my $pdri_pages = $node->safe_psql('regress001', "SELECT pg_relation_size('pg_catalog.pg_depend_reference_index')/8192");
print("pdri_pages: $pdri_pages\n");
for (my $i = 1; $i < $pdri_pages; $i++) {
  my $pdri_page = $node->safe_psql('regress001', "\\pset format aligned
\\pset tuples_only off
SELECT * FROM bt_page_items('pg_depend_reference_index', $i)");
  print("pg_depend_reference_index page $i:\n$pdri_page");
}

print($node->safe_psql('regress001', "
SELECT ctid, * FROM pg_depend WHERE refclassid = 0x0a37 AND refobjid = 0x4036 AND refobjsubid = 0"));

$node->command_checks_all(['pg_amcheck', '-d', 'regress001', '--heapallindexed', '--rootdescend' ],
    0, [qr/^$/], [qr/^$/], 'pg_amcheck after manipulations');

ok(1);
done_testing();
