public void Prepare()
{
using (var conn = OpenConnection())
{
conn.ExecuteNonQuery("CREATE TEMP TABLE data (name TEXT)");
Assert.That(conn.ExecuteScalar("SELECT COUNT(*) FROM pg_prepared_statements"), Is.EqualTo(0));
using (var cmd = new NpgsqlCommand("INSERT INTO data (name) VALUES (:p0);", conn))
{
cmd.Parameters.Add(new NpgsqlParameter("p0", NpgsqlDbType.Text));
cmd.Prepare();
Assert.That(cmd.IsPrepared, Is.True);
cmd.Parameters["p0"].Value = "test";
using (var dr = cmd.ExecuteReader())
{
dr.Close();
Assert.That(dr.RecordsAffected, Is.EqualTo(1));
}
Assert.That(conn.ExecuteScalar("SELECT COUNT(*) FROM pg_prepared_statements"), Is.EqualTo(1));
}
Assert.That(conn.ExecuteScalar("SELECT COUNT(*) FROM data WHERE name = 'test'"), Is.EqualTo(1));
Assert.That(conn.ExecuteScalar("SELECT COUNT(*) FROM pg_prepared_statements"), Is.EqualTo(0), "Prepared statements are being leaked");
// Another prepared statement, this time with a resultset
using (var cmd = new NpgsqlCommand("SELECT 8", conn))
{
cmd.Prepare();
using (var dr = cmd.ExecuteReader())
{
dr.Read();
Assert.That(dr.GetInt32(0), Is.EqualTo(8));
}
}
}
}