On Monday, January 24, 2011 11:11 AM, Artur Reilin wrote:
>> Hi,
>>
>> I have put together a simple uuid generation method in sqlite:
>>
>> select '{' || hex( randomblob(4)) || '-' || hex( randomblob(2))
>> || '-' || '4' || substr( hex( randomblob(2)), 2) || '-'
>> || substr('AB89', 1 + (abs(random()) % 4) , 1) ||
>> substr(hex(randomblob(2)), 2) || '-' || hex(randomblob(6))
>> ||
>> '}';
>>
>> It's based on the description for v.4 uuid's in wikipedia
>> https://secure.wikimedia.org/wikipedia/en/wiki/Uuid .
>>
>> But I am thinking there may be a better (or another) method to do this
>> in sqlite, without the need to use something external?
>>
>> thanks
>
> http://sqlite.org/lang_corefunc.html
>
> randomblob(N)
> The randomblob(N) function return an N-byte blob containing pseudo-random
> bytes. If N is less than 1 then a 1-byte random blob is returned.
>
> Hint: applications can generate globally unique identifiers using this
> function together with hex() and/or lower() like this:
> hex(randomblob(16))
>
> lower(hex(randomblob(16)))
>
And since this doesn't give the UUID in the form you wish, and failing that
any other suitable way to do it presents itself to you, you could do worse
than create a custom function (see
http://www.sqlite.org/c3ref/create_function.html and
http://www.sqlite.org/c_interface.html#cfunc) which takes the randomblob
data and formats it according to the UUID v4 structure.
If you do take this route, then you can create the randomblob data within
your custom function (hint: have a look at how the randomblob function is
implemented in the sqlite source code), rather than passing it in as a
parameter -- the advantage being that you can ensure that you create the
correct size blob in one go and then split it up appropriately into the
structure required.
Cheers
Andy
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users