/* {{{ ps_fetch_string */ static void ps_fetch_string(MYSQL_BIND *r_param, const MYSQL_FIELD *field, unsigned char **row) { /* C-API differs from PHP. While PHP just converts string to string, C-API needs to convert the string to the defined type with in the result bind buffer. */ ulong field_length= net_field_length(row); convert_froma_string(r_param, (char *)*row, field_length); (*row) += field_length; }
/* {{{ ps_fetch_bin */ static void ps_fetch_bin(MYSQL_BIND *r_param, const MYSQL_FIELD *field, unsigned char **row) { ulong field_length= net_field_length(row); size_t copylen; copylen= MIN(field_length, r_param->buffer_length); memcpy(r_param->buffer, *row, copylen); *r_param->error= copylen < field_length; *r_param->length= field_length; (*row) += field_length; }
/* {{{ ps_fetch_bin */ static void ps_fetch_bin(MYSQL_BIND *r_param, const MYSQL_FIELD *field, unsigned char **row) { ulong field_length; size_t copylen; /* If r_praram->buffer_type is not a binary type or binary_flag isn't set, we do conversion from string */ if (!(field->flags & BINARY_FLAG) || (r_param->buffer_type != MYSQL_TYPE_NEWDECIMAL && r_param->buffer_type != MYSQL_TYPE_DECIMAL && r_param->buffer_type != MYSQL_TYPE_GEOMETRY && r_param->buffer_type != MYSQL_TYPE_ENUM && r_param->buffer_type != MYSQL_TYPE_SET && r_param->buffer_type != MYSQL_TYPE_TINY_BLOB && r_param->buffer_type != MYSQL_TYPE_MEDIUM_BLOB && r_param->buffer_type != MYSQL_TYPE_LONG_BLOB && r_param->buffer_type != MYSQL_TYPE_BLOB)) { ps_fetch_string(r_param, field, row); return; } field_length= net_field_length(row); copylen= MIN(field_length, r_param->buffer_length); memcpy(r_param->buffer, *row, copylen); *r_param->error= copylen < field_length; /* don't count trailing zero if we fetch into string */ if (r_param->buffer_type == MYSQL_TYPE_STRING && !*r_param->error) field_length--; *r_param->length= field_length; (*row) += field_length; }
/* {{{ ps_fetch_datetime */ static void ps_fetch_datetime(MYSQL_BIND *r_param, const MYSQL_FIELD * field, unsigned char **row) { MYSQL_TIME *t= (MYSQL_TIME *)r_param->buffer; unsigned int len= net_field_length(row); switch (r_param->buffer_type) { case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_TIMESTAMP: convert_to_datetime(t, row, len, field->type); break; case MYSQL_TYPE_DATE: convert_to_datetime(t, row, len, field->type); break; case MYSQL_TYPE_TIME: convert_to_datetime(t, row, len, field->type); t->year= t->day= t->month= 0; break; case MYSQL_TYPE_YEAR: { MYSQL_TIME tm; convert_to_datetime(&tm, row, len, field->type); shortstore(r_param->buffer, tm.year); break; } default: { char dtbuffer[60]; MYSQL_TIME tm; unsigned int length; convert_to_datetime(&tm, row, len, field->type); /* if (tm.time_type== MYSQL_TIMESTAMP_TIME && tm.day) { tm.hour+= tm.day * 24; tm.day=0; } */ switch(field->type) { case MYSQL_TYPE_DATE: length= sprintf(dtbuffer, "%04u-%02u-%02u", tm.year, tm.month, tm.day); break; case MYSQL_TYPE_TIME: length= sprintf(dtbuffer, "%s%02u:%02u:%02u", (tm.neg ? "-" : ""), tm.hour, tm.minute, tm.second); if (field->decimals) { char ms[8]; sprintf(ms, ".%06u", tm.second_part); if (field->decimals < 6) ms[field->decimals + 1]= 0; length+= strlen(ms); strcat(dtbuffer, ms); } break; case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_TIMESTAMP: length= sprintf(dtbuffer, "%04u-%02u-%02u %02u:%02u:%02u", tm.year, tm.month, tm.day, tm.hour, tm.minute, tm.second); if (field->decimals) { char ms[8]; sprintf(ms, ".%06u", tm.second_part); if (field->decimals < 6) ms[field->decimals + 1]= 0; length+= strlen(ms); strcat(dtbuffer, ms); } break; default: dtbuffer[0]= 0; length= 0; break; } convert_froma_string(r_param, dtbuffer, length); break; } } (*row) += len; }
} (*row) += len; } /* }}} */ /* {{{ ps_fetch_string */ static void ps_fetch_string(MYSQL_BIND *r_param, const MYSQL_FIELD *field __attribute__((unused)), unsigned char **row) { /* C-API differs from PHP. While PHP just converts string to string, C-API needs to convert the string to the defined type with in the result bind buffer. */ ulong field_length= net_field_length(row); convert_froma_string(r_param, (char *)*row, field_length); (*row) += field_length; } /* }}} */ /* {{{ ps_fetch_bin */ static void ps_fetch_bin(MYSQL_BIND *r_param, const MYSQL_FIELD *field __attribute__((unused)), unsigned char **row) { ulong field_length= *r_param->length= net_field_length(row); uchar *current_pos= (*row) + r_param->offset, *end= (*row) + field_length;