Handle field with NULL value

v2.x_pg_PrepStmtBase_240714
Rahim Kanji 2 years ago
parent d6159e68a9
commit 349d992e69

@ -1320,9 +1320,8 @@ unsigned int PgSQL_Protocol::copy_row_description_to_PgSQL_Query_Result(bool sen
size += strlen(PQfname(result, i)) + 1 + 18; // null terminator, name, reloid, colnr, oid, typsize, typmod, fmt
}
unsigned char* _ptr = NULL;
bool alloced_new_buffer = false;
_ptr = pg_query_result->buffer_reserve_space(size);
unsigned char* _ptr = pg_query_result->buffer_reserve_space(size);
// buffer is not enough to store the new row description. Remember we have already pushed data to PSarrayOUT
if (_ptr == NULL) {
@ -1382,9 +1381,8 @@ unsigned int PgSQL_Protocol::copy_row_to_PgSQL_Query_Result(bool send, PgSQL_Que
}
total_size += size;
unsigned char* _ptr = NULL;
bool alloced_new_buffer = false;
_ptr = pg_query_result->buffer_reserve_space(size);
unsigned char* _ptr = pg_query_result->buffer_reserve_space(size);
// buffer is not enough to store the new row. Remember we have already pushed data to PSarrayOUT
if (_ptr == NULL) {
@ -1400,8 +1398,13 @@ unsigned int PgSQL_Protocol::copy_row_to_PgSQL_Query_Result(bool send, PgSQL_Que
int column_value_len = 0;
for (unsigned int j = 0; j < pg_query_result->num_fields; j++) {
column_value_len = PQgetlength(result, i, j);
if (column_value_len == 0 && PQgetisnull(result, i, j) == 1) {
column_value_len = -1; /*0xFFFFFFFF*/
}
pgpkt.put_uint32(column_value_len);
pgpkt.put_bytes(PQgetvalue(result, i, j), column_value_len);
if (column_value_len > 0) {
pgpkt.put_bytes(PQgetvalue(result, i, j), column_value_len);
}
}
if (send == true) {
@ -1435,11 +1438,11 @@ unsigned int PgSQL_Protocol::copy_command_completion_to_PgSQL_Query_Result(bool
const unsigned int tag_len = strlen(tag) + 1;
unsigned int size = 1 + 4 + tag_len + 1 + 4 + 1; // 'C', length, tag, Z, length, I
unsigned char* _ptr = NULL;
bool alloced_new_buffer = false;
_ptr = pg_query_result->buffer_reserve_space(size);
unsigned char* _ptr = pg_query_result->buffer_reserve_space(size);
// buffer is not enough to store the new row. Remember we have already pushed data to PSarrayOUT
if (_ptr == NULL) {
_ptr = (unsigned char*)l_alloc(size);
@ -1515,11 +1518,9 @@ unsigned int PgSQL_Protocol::copy_error_to_PgSQL_Query_Result(bool send, PgSQL_Q
if (source_line) size += strlen(source_line) + 1 + 1;
if (source_function) size += strlen(source_function) + 1 + 1;
unsigned char* _ptr = NULL;
bool alloced_new_buffer = false;
_ptr = pg_query_result->buffer_reserve_space(size);
unsigned char* _ptr = pg_query_result->buffer_reserve_space(size);
// buffer is not enough to store the new row. Remember we have already pushed data to PSarrayOUT
if (_ptr == NULL) {
_ptr = (unsigned char*)l_alloc(size);
@ -1679,7 +1680,7 @@ unsigned int PgSQL_Query_Result::add_row(PGresult* result) {
}
unsigned int PgSQL_Query_Result::add_error(PgSQL_Data_Stream* _myds, PGresult* result) {
unsigned int size = 0;
if (_myds && _myds->killed_at) { // see case #750
PtrSize_t pkt;
@ -1694,9 +1695,10 @@ unsigned int PgSQL_Query_Result::add_error(PgSQL_Data_Stream* _myds, PGresult* r
PSarrayOUT.add(pkt.ptr, pkt.size);
resultset_size += pkt.size;
size = pkt.size;
} else if (result) {
proto->copy_error_to_PgSQL_Query_Result(false, this, result);
size = proto->copy_error_to_PgSQL_Query_Result(false, this, result);
// get error from connection
//proto->generate_error_packet(false, true, "Unknown error", sqlstate, false, &pkt);
// TODO: Check this is a mysql error
@ -1707,6 +1709,7 @@ unsigned int PgSQL_Query_Result::add_error(PgSQL_Data_Stream* _myds, PGresult* r
buffer_to_PSarrayOut();
resultset_completed = true;
return size;
}
bool PgSQL_Query_Result::get_resultset(PtrSizeArray* PSarrayFinal) {

Loading…
Cancel
Save