4. Mai 2011

DE_flag GB_flag

for english readers

UUID: die besondere Art von leer

Eine UUID (Universally Unique Identifier) ist eine tolle Errungenschaft. In 4D brauche ich die UUID, um zu Synchronisieren. Super!

uuidEmpty

Doch Vorsicht, ein leeres UUID-Feld ist nicht leer wie "" weil vom Typ Alpha. Es gilt weder die Zahl Null noch NULL, obwohl die UUID eigentlich eine 16-Byte Zahl ist, die hexadezimal notiert und in fünf Gruppen unterteilt wird. Nee, das wäre zu einfach - zum Nachlesen.

Die UUID ist ein Minenfeld. Dann bin ich gut beraten, das Leersetzen und das Überprüfen auf leer an zentralen Stellen vorzuhalten.

Deswegen leere ich ein UUID-Feld so:
[RECH_POSITION]RPOS_UUID:=text_help ("UUID_Empty")
und prüfe ob leer in dieser Form:
If (bool_help ("UUID_IsEmpty";->[RECH_POSITION]RPOS_UUID))

Meine helper-Funktion bündeln nach Ergebnistypen, das spart einige zig globale Funktionen.

text_help setzt in dieser Form leer
: ($what="UUID_@")
  Case of
    : (($what="@_Empty") | ($what="@_Leer"))
    $resultText:="00000000000000000000000000000000" // 32 x "0"
    : ($what="@_Any")
    $resultText:="20000000000000000000000000000000"
  …
  End case

bool_help prüft in dieser Form
: (($what="UUID_NotEmpty") | ($what="UUID_IsEmpty"))
  Case of
    : (Nil($P_Self))
    : ($P_Self->="")
    : ($P_Self->=text_help ("UUID_Empty"))
  Else
    $result_b:=True
  End case
  If ($what="UUID_IsEmpty")
    $result_b:=Not($result_b)
  End if

Jetzt ist Ruhe im Karton.

DE_flag GB_flag

lieber auf deutsch

UUID: that special kind of empty

The UUID (Universally Unique Identifier) is a very helpful construct. 4D needs the UUID for synchronisation-purposes. Super!

uuidEmpty

Be careful, an empty UUID-field is not empty like "", as is true of all other fields of type Alpha. And it's not zero or NULL, although the UUID is a 16-byte (128-bit) number. In its canonical form, a UUID consists of 32 hexadecimal digits, displayed in 5 groups. No, this would have been to easy, wouldn't it.

Before getting blown up by UUIDs, I'm using functions to empty a UUID and check if empty.

That's how I empty a UUID-field:
[RECH_POSITION]RPOS_UUID:=text_help ("UUID_Empty")
and that's how I check if empty:
If (bool_help ("UUID_IsEmpty";->[RECH_POSITION]RPOS_UUID))

My helper-functions pool by result-datatype, which saves some tens of global functions.

text_help works like this
: ($what="UUID_@")
  Case of
    : (($what="@_Empty") | ($what="@_Leer"))
    $resultText:="00000000000000000000000000000000" // 32 x "0"
    : ($what="@_Any")
    $resultText:="20000000000000000000000000000000"
  …
  End case

bool_help checks like this
: (($what="UUID_NotEmpty") | ($what="UUID_IsEmpty"))
  Case of
    : (Nil($P_Self))
    : ($P_Self->="")
    : ($P_Self->=text_help ("UUID_Empty"))
  Else
    $result_b:=True
  End case
  If ($what="UUID_IsEmpty")
    $result_b:=Not($result_b)
  End if

Now I'm on the save side as far as UUIDs are concerned.