public void CancelRawBinaryImport() { var garbage = new byte[] { 1, 2, 3, 4 }; using (var s = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) FROM STDIN BINARY")) { s.Write(garbage, 0, garbage.Length); s.Cancel(); } Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void DisposeInMiddleOfRawBinaryImport() { var inStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) FROM STDIN BINARY"); inStream.Write(NpgsqlRawCopyStream.BinarySignature, 0, NpgsqlRawCopyStream.BinarySignature.Length); Assert.That(() => inStream.Dispose(), Throws.Exception .TypeOf <NpgsqlException>() .With.Property("Code").EqualTo("22P04") ); Assert.That(ExecuteScalar("SELECT 1"), Is.EqualTo(1)); }
public void RawBinaryRoundtrip() { ExecuteNonQuery("CREATE TEMP TABLE data (field_text TEXT, field_int2 SMALLINT, field_int4 INTEGER)", Conn); //var iterations = Conn.BufferSize / 10 + 100; //var iterations = Conn.BufferSize / 10 - 100; var iterations = 500; // Preload some data into the table using (var cmd = new NpgsqlCommand("INSERT INTO data (field_text, field_int4) VALUES (@p1, @p2)", Conn)) { cmd.Parameters.AddWithValue("p1", NpgsqlDbType.Text, "HELLO"); cmd.Parameters.AddWithValue("p2", NpgsqlDbType.Integer, 8); cmd.Prepare(); for (var i = 0; i < iterations; i++) { cmd.ExecuteNonQuery(); } } var data = new byte[10000]; int len = 0; using (var outStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) TO STDIN BINARY")) { StateAssertions(Conn); while (true) { var read = outStream.Read(data, len, data.Length - len); if (read == 0) { break; } len += read; } Assert.That(len, Is.GreaterThan(Conn.BufferSize) & Is.LessThan(data.Length)); Console.WriteLine("Exported binary dump, length=" + len); } ExecuteNonQuery("TRUNCATE data"); using (var outStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) FROM STDIN BINARY")) { StateAssertions(Conn); outStream.Write(data, 0, len); } Assert.That(ExecuteScalar("SELECT COUNT(*) FROM DATA"), Is.EqualTo(iterations)); }
public void DisposeInMiddleOfRawBinaryExport() { ExecuteNonQuery("INSERT INTO data (field_text, field_int4) VALUES ('HELLO', 8)", Conn); var data = new byte[3]; using (var inStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) TO STDIN BINARY")) { // Read some bytes var len = inStream.Read(data, 0, data.Length); Assert.That(len, Is.EqualTo(data.Length)); } Assert.That(ExecuteScalar("SELECT 1"), Is.EqualTo(1)); }
public void RawBinaryRoundtrip() { //var iterations = Conn.BufferSize / 10 + 100; //var iterations = Conn.BufferSize / 10 - 100; var iterations = 500; // Preload some data into the table using (var cmd = new NpgsqlCommand("INSERT INTO data (field_text, field_int4) VALUES (@p1, @p2)", Conn)) { cmd.Parameters.Add(new NpgsqlParameter("p1", "HELLO")); cmd.Parameters.Add(new NpgsqlParameter("p2", 8)); cmd.Prepare(); for (var i = 0; i < iterations; i++) { cmd.ExecuteNonQuery(); } } var data = new byte[10000]; int len; using (var inStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) TO STDIN BINARY")) { StateAssertions(); len = inStream.Read(data, 0, data.Length); Assert.That(len, Is.GreaterThan(Conn.BufferSize) & Is.LessThan(data.Length)); Console.WriteLine("Exported binary dump, length=" + len); } ExecuteNonQuery("TRUNCATE data"); using (var outStream = Conn.BeginRawBinaryCopy("COPY data (field_text, field_int4) FROM STDIN BINARY")) { StateAssertions(); outStream.Write(data, 0, len); } Assert.That(ExecuteScalar("SELECT COUNT(*) FROM DATA"), Is.EqualTo(iterations)); }
public void ImportLargeValueRaw() { ExecuteNonQuery("CREATE TEMP TABLE data (blob BYTEA)", Conn); var data = new byte[Conn.BufferSize + 10]; var dump = new byte[Conn.BufferSize + 200]; var len = 0; // Insert a blob with a regular insert using (var cmd = new NpgsqlCommand("INSERT INTO data (blob) VALUES (@p)", Conn)) { cmd.Parameters.AddWithValue("p", data); cmd.ExecuteNonQuery(); } // Raw dump out using (var outStream = Conn.BeginRawBinaryCopy("COPY data (blob) TO STDIN BINARY")) { while (true) { var read = outStream.Read(dump, len, dump.Length - len); if (read == 0) { break; } len += read; } Assert.That(len < dump.Length); } ExecuteNonQuery("TRUNCATE data"); // And raw dump back in using (var inStream = Conn.BeginRawBinaryCopy("COPY data (blob) FROM STDIN BINARY")) { inStream.Write(dump, 0, len); } }