Npgsql.NpgsqlCopySerializer.AddString C# (CSharp) Method

AddString() public method

Add string.
public AddString ( String fieldValue ) : void
fieldValue String
return void
        public void AddString(String fieldValue)
        {
            PrefixField();
            int bufferedUpto = 0;
            while (bufferedUpto < fieldValue.Length)
            {
                int escapeAt = fieldValue.Length;
                byte[] escapeSequence = null;

                // choose closest instance of strings to escape in fieldValue
                for (int eachEscapeable = 0; eachEscapeable < StringsToEscape.Length; eachEscapeable++)
                {
                    int i = fieldValue.IndexOf(StringsToEscape[eachEscapeable], bufferedUpto);
                    if (i > -1 && i < escapeAt)
                    {
                        escapeAt = i;
                        escapeSequence = EscapeSequenceBytes[eachEscapeable];
                    }
                }

                // some, possibly all of fieldValue string does not require escaping and can be buffered for output
                if (escapeAt > bufferedUpto)
                {
//                    int encodedLength = BackendEncoding.UTF8Encoding.GetByteCount(fieldValue.ToCharArray(bufferedUpto, escapeAt));
//                    MakeRoomForBytes(encodedLength);
//                    _sendBufferAt += BackendEncoding.UTF8Encoding.GetBytes(fieldValue, bufferedUpto, escapeAt, _sendBuffer, _sendBufferAt);
//                    bufferedUpto = escapeAt;
                    int encodedLength = BackendEncoding.UTF8Encoding.GetByteCount(fieldValue.ToCharArray(bufferedUpto, escapeAt - bufferedUpto));
                    MakeRoomForBytes(encodedLength);
                    _sendBufferAt += BackendEncoding.UTF8Encoding.GetBytes(fieldValue, bufferedUpto, escapeAt - bufferedUpto, _sendBuffer, _sendBufferAt);
                    bufferedUpto = escapeAt;
                }

                // now buffer the escape sequence for output
                if (escapeSequence != null)
                {
                    AddBytes(EscapeBytes);
                    AddBytes(escapeSequence);
                    bufferedUpto++;
                }
            }
            FieldAdded();
        }

Usage Example

示例#1
0
        public void Bug188BufferNpgsqlCopySerializer()
        {
            var cmd = new NpgsqlCommand("COPY data (field_int4, field_text) FROM STDIN", Conn);
            var npgsqlCopySerializer = new NpgsqlCopySerializer(Conn);
            var npgsqlCopyIn = new NpgsqlCopyIn(cmd, Conn, npgsqlCopySerializer.ToStream);

            string str = "Very long string".PadRight(NpgsqlCopySerializer.DEFAULT_BUFFER_SIZE, 'z');

            npgsqlCopyIn.Start();
            npgsqlCopySerializer.AddInt32(12345678);
            npgsqlCopySerializer.AddString(str);
            npgsqlCopySerializer.EndRow();
            npgsqlCopySerializer.Flush();
            npgsqlCopyIn.End();



            NpgsqlDataReader dr = new NpgsqlCommand("select field_int4, field_text from data", Conn).ExecuteReader();
            dr.Read();

            Assert.AreEqual(12345678, dr[0]);
            Assert.AreEqual(str, dr[1]);
        }
All Usage Examples Of Npgsql.NpgsqlCopySerializer::AddString