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