Just figured it out without a UDF(not documented anywhere that I found).
SELECT conv(hex(fdata),16,10) INTO fdata_bigint;

So a double conversion seems to work for me.

You solution looks like it will work, but since I was able to get it to
work without a UDF, I'm not going to test it out.  Thanks.

David Godsey

> "David Godsey" <[EMAIL PROTECTED]> wrote on 03/22/2006 01:21:07 PM:
>
>> I'm in the process of writing my first UDF and would appreciate some
> help.
>>
>> I am pulling data from a table like:
>>
>>          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;
>>
>> frame_data is type BLOB.  It is raw data collected. The substr will get
>> the specific bytes I'm interested in.  What I need to do, is if the data
>> is <= 8bytes, convert it to a BIGINT, so I can do some masking on the
>> data.
>>
>> So I am writing a UDF to do the job, but I am apparently unfamiliar with
>> the Mysql data types and how I can convert them.
>>
>> In a procedure.
>> DECLARE fdata_bigint BIGINT UNSIGNED;
>> SELECT BlobToInt(binary(fdata)) INTO fdata_bigint;
>>
>> my_bool BlobToInt_init( UDF_INIT* initid, UDF_ARGS* args, char* message
> )
>> {
>>   if (args->arg_count != 1)
>>   {
>>     strcpy(message,"Wrong arguments to BlobToInt;  should be
>> BlobToInt(blob)");
>>     return 1;
>>   }
>>   return 0;
>> }
>> longlong BlobToInt( UDF_INIT* initid, UDF_ARGS* args, char* is_null,
> char
>> *error )
>> {
>>    longlong tmplong =  *((longlong*)args->args[0]);
>>    return tmplong;
>> }
>>
>> I guess I was just assuming I could just cast the data as the type I
> want,
>> but that doesn't seem to work.  The function returns a 0.
>>
>> Any help would be appreciated.
>>
>> Accomplishing the impossible means only that the boss will add it to
> your
>> regular duties.
>>
>> David Godsey
>>
>
> C is not my strongest language but aren't you getting a null-terminated
> string as args[0] ? What if you allocated a longlong and byte-copied the
> bytes from args[0] into your longlong? Maybe something like...
>
> longlong BlobToInt( UDF_INIT* initid, UDF_ARGS* args, char* is_null, char
> *error )
> {
> char idx, *cArg
>    longlong tmplong, *plonglong ;
>    plonglong = &tmplong;
>    cArg = (args->args[0]);
>    for(idx=0;idx<8;idx++) {
>         plonglong[idx]=cArg[idx];
>    }
>    return tmplong;
> }
>
> Again, I strongly stress that C/C++ is not my best language (I don't use
> it nearly enough) but I think you can see what I was trying to do. Other
> options: memcpy(), strcpy(), strncpy() etc....
>
> Shawn Green
> Database Administrator
> Unimin Corporation - Spruce Pine
>
>
>
>


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]

Reply via email to