public void ImportBytea() { ExecuteNonQuery("CREATE TEMP TABLE data (field BYTEA)", Conn); var data = new byte[] { 1, 5, 8 }; using (var writer = Conn.BeginBinaryImport("COPY data (field) FROM STDIN BINARY")) { writer.StartRow(); writer.Write(data, NpgsqlDbType.Bytea); } Assert.That(ExecuteScalar("SELECT field FROM data"), Is.EqualTo(data)); }
public void CancelBinaryImport() { using (var writer = Conn.BeginBinaryImport("COPY data (field_text, field_int4) FROM STDIN BINARY")) { writer.StartRow(); writer.Write("Hello"); writer.Write(8); writer.Cancel(); } Assert.That(ExecuteScalar(@"SELECT COUNT(*) FROM data"), Is.EqualTo(0)); }
public void ImportStringWithBufferLength() { ExecuteNonQuery("CREATE TEMP TABLE data (field TEXT)", Conn); var data = new string('a', Conn.BufferSize); using (var writer = Conn.BeginBinaryImport("COPY data (field) FROM STDIN BINARY")) { writer.StartRow(); writer.Write(data, NpgsqlDbType.Text); } Assert.That(Conn.Connector.Buffer.UsableSize, Is.EqualTo(Conn.Connector.Buffer.Size)); Assert.That(ExecuteScalar("SELECT field FROM data"), Is.EqualTo(data)); }
public void ImportStringArray() { ExecuteNonQuery("CREATE TEMP TABLE data (field TEXT[])", Conn); var data = new[] { "foo", "a", "bar" }; using (var writer = Conn.BeginBinaryImport("COPY data (field) FROM STDIN BINARY")) { writer.StartRow(); writer.Write(data, NpgsqlDbType.Array | NpgsqlDbType.Text); } Assert.That(ExecuteScalar("SELECT field FROM data"), Is.EqualTo(data)); }
public void BinaryRoundtrip() { ExecuteNonQuery("CREATE TEMP TABLE data (field_text TEXT, field_int2 SMALLINT, field_int4 INTEGER)", Conn); var longString = new StringBuilder(Conn.BufferSize + 50).Append('a').ToString(); using (var writer = Conn.BeginBinaryImport("COPY data (field_text, field_int2) FROM STDIN BINARY")) { StateAssertions(Conn); writer.StartRow(); writer.Write("Hello"); writer.Write(8, NpgsqlDbType.Smallint); writer.WriteRow("Something", (short)9); writer.StartRow(); writer.Write(longString); writer.WriteNull(); } using (var reader = Conn.BeginBinaryExport("COPY data (field_text, field_int2) TO STDIN BINARY")) { StateAssertions(Conn); Assert.That(reader.StartRow(), Is.EqualTo(2)); Assert.That(reader.Read <string>(), Is.EqualTo("Hello")); Assert.That(reader.Read <int>(NpgsqlDbType.Smallint), Is.EqualTo(8)); Assert.That(reader.StartRow(), Is.EqualTo(2)); Assert.That(reader.IsNull, Is.False); Assert.That(reader.Read <string>(), Is.EqualTo("Something")); reader.Skip(); Assert.That(reader.StartRow(), Is.EqualTo(2)); Assert.That(reader.Read <string>(), Is.EqualTo(longString)); Assert.That(reader.IsNull, Is.True); reader.Skip(); Assert.That(reader.StartRow(), Is.EqualTo(-1)); } }
public void ImportByteaMassive() { ExecuteNonQuery("CREATE TEMP TABLE data (field BYTEA)", Conn); const int iterations = 10000; var data = new byte[1024 * 1024]; using (var writer = Conn.BeginBinaryImport("COPY data (field) FROM STDIN BINARY")) { for (var i = 0; i < iterations; i++) { if (i % 100 == 0) { Console.WriteLine("Iteration " + i); } writer.StartRow(); writer.Write(data, NpgsqlDbType.Bytea); } } Assert.That(ExecuteScalar("SELECT COUNT(*) FROM data"), Is.EqualTo(iterations)); }
public void UndefinedTable() { Assert.That(() => Conn.BeginBinaryImport("COPY undefined_table (field_text, field_int2) FROM STDIN BINARY"), Throws.Exception.TypeOf <NpgsqlException>().With.Property("Code").EqualTo("42P01")); }