Never mind, I was being dumb. I wasn't using the args->lengths array for binary data, so it was dying on a strlen(args->args[0]) which makes sense.
Thanks anyway. David Godsey > So, in theory this should be pretty straight forward to do right? Well > I'm new to UDF's, so how mysql is passing the data to the UDF is a bit of > a mystery. I'm hoping someone can help me understand this. > > I'm selecting data from a BLOB field like this: > > SELECT payload_time, > SUBSTR(BINARY(frame_data), > FLOOR(foffset/8)+1, > CEIL((flength + (foffset %8 ))/8)) > FROM RawMajorFrames > WHERE raw_major_frame_id=rfid > INTO ptime,fdata; > > You can see that I'm only taking a portion of the string, but it is still > in raw form. > > Now I would like to pass it to my UDF function called toDoubleArray, to > convert each 8 byte section to a double. > > I call the function like this: (you can ignore conv_param) > SELECT toDoubleArray(fdata,"%1.3E",conv_param) INTO fdata_string; > > Well, I get a Lost Connection when the function is called. > Here is the UDF: > > my_bool toDoubleArray_init(UDF_INIT *initid, UDF_ARGS *args, char > *message) > { > if (args->arg_count != 3) > { > strcpy(message,"Wrong arguments to toDouble: should be > toDoubleArray(blob)"); > return 1; > } > initid->max_length = strlen(args->args[0])/8 * 128; > return 0; > > } > char * toDoubleArray(UDF_INIT *initid, UDF_ARGS *args, char *result, > unsigned long *length,char *is_null,char *error) > { > int curr_buf_ptr =0; /* current length of FloatString */ > char * data = args->args[0]; /* just to make it easier to reference the > string */ > char * f = args->args[1]; /* get the format string */ > char format[15]; > > sprintf(format,"%s,",f); /* put a comma at the end of format for CSV > format */ > > for(int i=0;i<strlen(data);i +=8){ > sprintf(result + curr_buf_ptr,format,*((double *)(data +i))); > curr_buf_ptr = strlen(result); > } > result[curr_buf_ptr -1] = '\0'; > *length = strlen(result); > return result; > } > This should return a comma delimited list of double values in a string > format (ascii representation). > > Like I said, I'm new to UDF's so it is likely I'm not aware of conventions > to follow that are well known to others. > > Any help would be great. > > David Godsey > >> David Godsey wrote: >> >>>> >>>> I know, I know, sounds like something that should be done in the >>>> presentation layer, howerver if possible, I would like to provide >>>> common >>>> data presentation to multiple presentation layers (written in >>>> different >>>> languages). >>>> >>>> So is there anyway to return an array in mysql? >>> >> Your aware your doing something stupid and want to do it anyway :-( >> >> Why not return the values from your user defined mysql function as a >> (properly quoted) ,comma seperated list. Since almost every application >> language now has a standard csv file handling library it should be easy >> to use across diverse display technologies. >> >> Urrgh >> >> Nigel >> > > > Accomplishing the impossible means only that the boss will add it to your > regular duties. > > David Godsey > Accomplishing the impossible means only that the boss will add it to your regular duties. David Godsey -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]