Exemple #1
2
        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));
        }
Exemple #2
0
        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));
        }
Exemple #3
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));
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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));
            }
        }
Exemple #6
0
        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));
        }
Exemple #7
0
 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"));
 }