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]