private void ReadFromClientRowData()
        {
            for (var i = 0; i < m_driverRowData.NotNulls.Length; i++)
            {
                m_driverRowData.NotNulls[i] = m_readerBuffer.NotNulls[i];
            }

            for (var ordinal = 0; ordinal < m_readerBuffer.FieldTypes.Length; ordinal++)
            {
                var indexInArray = m_readerBuffer.GetIndexInArray(ordinal);

                if (!BitVector.Get(m_driverRowData.NotNulls, ordinal))
                {
                    continue;
                }

                switch (m_readerBuffer.FieldRepresentationTypes[ordinal])
                {
                case RowData.DataTypeRepresentation.ByteArray:
                {
                    var dest = m_driverRowData.BinaryData[indexInArray];
                    if (dest == null)
                    {
                        dest = new SizableArrayOfByte();
                        m_driverRowData.BinaryData[indexInArray] = dest;
                    }

                    var src = m_readerBuffer.BinaryData[indexInArray];
                    dest.SetLength(src.Length);
                    if (src.Length > 0)
                    {
                        Buffer.BlockCopy(src.Data, 0, dest.Data, 0, src.Length);
                    }
                }
                break;

                case RowData.DataTypeRepresentation.CharArray:
                {
                    var src = m_readerBuffer.StringData[indexInArray];
                    m_driverRowData.StringData[indexInArray] = src == null || src.Length == 0 ? string.Empty : new string(src.Data, 0, src.Length);
                }
                break;

                case RowData.DataTypeRepresentation.Value8Bytes:
                    m_driverRowData.ValueData8Bytes[indexInArray].AsInt64 = m_readerBuffer.ValueData8Bytes[indexInArray].AsInt64;
                    break;

                case RowData.DataTypeRepresentation.Value16Bytes:
                    m_driverRowData.ValueData16Bytes[indexInArray].Lo = m_readerBuffer.ValueData16Bytes[indexInArray].Lo;
                    m_driverRowData.ValueData16Bytes[indexInArray].Hi = m_readerBuffer.ValueData16Bytes[indexInArray].Hi;
                    break;

                default:
                    throw new InvalidOperationException("Invalid representation type: " + m_readerBuffer.FieldRepresentationTypes[ordinal]);
                }
            }
        }