List:General Discussion« Previous MessageNext Message »
From:David Godsey Date:March 31 2006 4:39pm
Subject:Re: Is there anyway to return an array?
View as plain text  
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

Thread
Is there anyway to return an array?David Godsey24 Mar
  • Re: Is there anyway to return an array?SGreen24 Mar
  • Re: Is there anyway to return an array?Peter Brawley25 Mar
    • Re: Is there anyway to return an array?nigel wood25 Mar
      • Re: Is there anyway to return an array?David Godsey29 Mar
      • Re: Is there anyway to return an array?David Godsey31 Mar
        • Re: Is there anyway to return an array?David Godsey31 Mar