/* {{{ 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;
}
Esempio n. 2
0
/* {{{ 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;
}
Esempio n. 5
0
  }
  (*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;