FreeAdhocUDF für InterBase und FireBird in deutschin englishen françaisen españolin italianoa português
homeprevious pageÜbersicht • overview • aperçunext pagelast page Seite empfehlen • advice website •Forum Mailing-Liste • mailinglist • liste de diffusionwas ich vermisse • what I missed •eMail Kommentar • eMail commentprintsitemap
 
Funktionen enthalten in der FreeAdhocUDF.dll/.so/.dylib :
UUID Funktionen 13 Funktionen
Vorbemerkung siehe http://de.wikipedia.org/wiki/UUID
Erzeugen 6 Funktionen
Umwandeln 2 Funktionen
Auslesen 5 Funktionen
abFireBird 2 statt 0, '' (Leerstring) oder '17.11.1858' <null>
Output RETURN Mechanismus wenn nicht anderes angegeben: FREE_IT
Die TestSQLs mit NULL funktionieren nur ab FireBird 2
 
UUID-Funktionen: Vorbemerkung
Ein Universally Unique Identifier (UUID) ist ein Standard für Identifizierer, der in der Softwareentwicklung verwendet wird. Er ist von der Open Software Foundation (OSF) als Teil des Distributed Computing Environment (DCE) standardisiert. Die Absicht hinter UUIDs ist, Informationen in verteilten Systemen ohne großartige zentrale Koordination eindeutig kennzeichnen zu können.
Ein UUID besteht aus einer 16-Byte-Zahl, die in fünf Gruppen unterteilt wird. In ihrer Normalform sieht eine UUID so aus: 550e8400-e29b-11d4-a716-446655440000
Obwohl die Eindeutigkeit für generierte UUID nicht garantiert ist, ist die Gesamtzahl der eindeutigen Schlüssel mit 2128 oder 3,4028*1038 so groß, dass die Wahrscheinlichkeit der Erzeugung zwei gleicher UUIDs gegen null geht. Daher können UUIDs beliebig ohne zentrales Kontrollorgan erzeugt und zur Kennzeichnung eingesetzt werden, ohne Gefahr zu laufen, dass gleiche UUID für etwas anderes verwenden wird. Mit UUID markierte Informationen können somit später in einer einzigen Datenbank zusammengeführt werden ohne Bezeichnerkonflikte auflösen zu müssen. Eine weit verbreitete Implementierung des UUID-Standards ist Microsofts Globally Unique Identifier (GUID).
Das originale (Version 1) Generierungsschema für UUID war, die UUID-Version mit der MAC-Adresse des Computers der die UUID generiert und der Anzahl der 100-Nanosekunden-Intervalle seit Beginn des Gregorianischen Kalenders (15.10.1582 00:00:00 Uhr) aneinander zu hängen. In der Praxis ist der eigentliche Algorithmus komplizierter. Dieses Schema wurde kritisiert weil es nicht ausreichend dicht sei; es gibt beides, die Identität des generierenden Computers als auch den Zeitpunkt zu dem er es tat, preis.
Im RFC4122 sind 5 UUID-Versionen definiert
    1    Zeit-basierte
        a    mit eindeutiger MAC Adresse nach IEEE 802-Standard
        b    mit per Zufallsgenerator erzeugter MAC-Adresse nach IEEE 802-Standard
    2    DCE-Sichereitsversion (mit POSIX UIDs)
    3    Names(raum)-basierte (mittels MD5 Kodierung)
    4    Per Zufallsgenerator erzeugte
    5    Namens(raum)-basierte (mittels SHA-1 Kodierung)
Für den Zweck der dezentralen Generierung von eindeutigen IDs für Datensätze unter Berücksichtgung der Kompatibilität zwischen Windows und Linux mittels gleicher Algorithmen eignen sich nur die Versionen 1 und 4 (Versionen 3 und 5 nicht, weil nicht immer sichergestellt ist, dass ein Namensraum (URL) gegeben ist).
Da es vom Anwendungsfall abhängt, ob eine “Rückschlüsselung” von Erstellungszeit und Erstellungsort erwünscht ist oder nicht, sind 3 verschieden UUID-Generatoren implementiert:
F_UUID1MAC
    Version 1 mit echter MAC-Adresse
    Rückschlüsselung der Erstellungszeit und der MAC-Adresse möglich
F_UUID1RAND
    Version 1 mit per Zufallsgenerator generierter MAC-Adresse
    nur Rückschlüsselung des Erstellungszeitpunktes möglich
F_UUID4
    Version 4
    keinerlei Rückschlüsselung möglich
Darüber hinaus gibt es mit der uuidlib von Ian Newby eine Abwandlung der Version 1b (mit Zufallsgenerator) die komprimiert wurde statt sie nach dem in der RFC4122 vorgegebenen Maske auszugeben. Dieser Algorithmus gibt zuerst die MAC-adresse und dann den Zeitstempel aus, was bei auf dem gleichen Rechner erzeugten UUIDs Vorteile wegen besserer Indexierung bringt.
Diesen Grund-Algorithmus haben wir, inclusive der Umwandlungs-Funktionen, ebenfalls übernommen, so dass es zu jeder der 3 (Basis-)UUID-Generatoren noch eine komprimierte Version gibt (für die jeweils die Rückschlüsselung der Basis-Version gilt):
F_UUID1MACCOMPR, UUID1RANDCOMPR, UUID4COMPR.
nach oben • go top •
 
UUID-Funktionen: Erzeugen
F_UUID1MAC Funktion von adhoc
Entrypoint uuid1mac UTF-8 kompatibel
Input nichts

Output CSTRING(36) Universally Unique Identifier (UUID) der Version 1a
TestSQL
SELECT F_UUID1MAC() FROM RDB$DATABASE;
Anmerkung:
Ist auf dem DB-Server keine MAC-Adresse zu finden, erzeugt die Funktion ein F_UUID1RAND
nach oben • go top •
F_UUID1RAND Funktion von adhoc
Entrypoint uuid1rand UTF-8 kompatibel
Input nichts
Output CSTRING(36) Universally Unique Identifier (UUID) der Version 1b
TestSQL
SELECT F_UUID1RAND() FROM RDB$DATABASE;
nach oben • go top •
F_UUID4 Funktion von adhoc
Input/Output-kompatibel zu rFunc (CREATEGUID)
Entrypoint uuid4 UTF-8 kompatibel
Input nichts
Output CSTRING(36) Universally Unique Identifier (UUID) der Version 4
TestSQL
SELECT F_UUID4() FROM RDB$DATABASE;
nach oben • go top •
F_UUID1MACCOMPR Funktion von adhoc in Anlehnung an die uuidlib
Entrypoint uuid1maccompr UTF-8 kompatibel
Input nichts
Output CSTRING(22) komprimierter Universally Unique Identifier (UUID) der Version 1a
Anmerkung (aus der uuidlib):
Erzeugt eine 22 Zeichen lange komprimierte Form einer UUID mit umgekehrter Reihenfolge der einzelnen Blöcke, um ein indiziertes Zugreifen zu verbessern (erst MAC-Adresen, dann Datum). Alle benutzen Zeichen sind in URLs gültige Zeichen.
TestSQL
SELECT F_UUID1MACCOMPR() FROM RDB$DATABASE;
nach oben • go top •
F_UUID1RANDCOMPR Ergebnis-kompatibel zur Funktion UUID_CREATE in der uuidlib
Entrypoint uuid1randcompr UTF-8 kompatibel
Input nichts
Output CSTRING(22) komprimierter Universally Unique Identifier (UUID) der Version 1b
TestSQL
SELECT F_UUID1RANDCOMPR() FROM RDB$DATABASE;
nach oben • go top •
F_UUID4COMPR Funktion von adhoc
Entrypoint uuid4compr UTF-8 kompatibel
Input nichts
Output CSTRING(22) komprimierter Universally Unique Identifier (UUID) der Version 4
TestSQL
SELECT F_UUID4COMPR() FROM RDB$DATABASE;
nach oben • go top •
 
UUID-Funktionen:  Umwandeln
F_UUID2UUIDCOMPR Ergebnis-kompatibel zur Funktion GUID_TO_UUID in der uuidlib
Entrypoint compressuuid UTF-8 kompatibel
Input CSTRING(250) gültige UUID jeder Version
Output CSTRING(22) komprimierte UUID
TestSQL (für TestISO.GDB)
Übergabe einer komprimierten UUID als Input Paramter statt einer normalen UUID:
SELECT UUIDTESTID, 'Input no RFC4122 UUID' AS ISCORRECT, F_UUID2UUIDCOMPR(UUIDCOMPR) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
Übergabe einer beliebigen Zeichenkette als Input Paramter statt einer normalen UUID:
SELECT 'Input no RFC4122 UUID' AS ISCORRECT, F_UUID2UUIDCOMPR('abcde') FROM RDB$DATABASE;
Übergabe einer normalen UUID als Input Paramter (richtig):
SELECT UUIDTESTID, UUIDCOMPR AS ISCORRECT, F_UUID2UUIDCOMPR(UUID) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUID2UUIDCOMPR(NULL) FROM RDB$DATABASE;
nach oben • go top •
F_UUIDCOMPR2UUID Ergebnis-kompatibel zur Funktion UUID_TO_GUID in der uuidlib
Entrypoint expanduuidcompr UTF-8 kompatibel
Input CSTRING(250) gültige komprimierte UUID
Output CSTRING(36) normale UUID der Version, die der komprimierten UUID entsprach
TestSQL (für TestISO.GDB)
Übergabe einer normalen UUID als Input Paramter statt einer komprimierten UUID:
SELECT UUIDTESTID, 'Input no compressed UUID' AS ISCORRECT, F_UUIDCOMPR2UUID(UUID) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
Übergabe einer beliebigen Zeichenkette als Input Paramter statt einer komprimierten UUID:
SELECT 'Input no compressed UUID' AS ISCORRECT, F_UUIDCOMPR2UUID('abcde') FROM RDB$DATABASE;
Übergabe einer komprimierten UUID als Input Paramter (richtig):
SELECT UUIDTESTID, UUID AS ISCORRECT, F_UUIDCOMPR2UUID(UUIDCOMPR) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUIDCOMPR2UUID(NULL) FROM RDB$DATABASE;
nach oben • go top •
 
UUID-Funktionen:  Auslesen
F_UUIDVERSION Funktion von adhoc
Entrypoint uuidversion UTF-8 kompatibel
Input CSTRING(250) gültige UUID
Output CSTRING(20) Variante und Version der UUID
Mögliche Varianten sind:
     0    NCS (reserviert für Rückwärtskompatibilität)
   10    die aktuelle Variante nach RFC4122
 110    Microsoft (reserviert für Rückwärtskompatibilität))
 111    reserviert für zukünftige Varianten
Mögliche Versionen sind:
    1        Zeit-basierte
              a. mit eindeutiger MAC Adresse nach IEEE 802-Standard
              b. per Zufallsgenerator erzeugter MAC-Adresse nach IEEE 802-Standard
    2        DCE-Sichereitsversion (mit POSIX UIDs)
    3        Names(raum)-basierte (mittels MD5 Kodierung)
    4        Per Zufallsgenerator erzeugte
    5        Namens(raum)-basierte (mittels SHA-1 Kodierung)
Die Funktion liefert z. Zt. folgendes zurück:
    V1a
    V1b
    V3
    V4
    V5
TestSQL (für TestISO.GDB)
SELECT ART, F_UUIDVERSION(UUID) FROM UUIDTEST ORDER BY UUIDTESTID;
SELECT NULL AS ISCORRECT, F_UUIDVERSION(NULL) FROM RDB$DATABASE;
nach oben • go top •
F_UUID1TIMESTAMP Funktion von adhoc
Entrypoint uuid1timestamp UTF-8 kompatibel
Input CSTRING(250) gültige UUID Version 1
Output TIMESTAMP Zeitstempel, wann die UUID Version 1 erzeugt wurde
Bei nicht gültigem Input gibt die Funktion den Zeitstempel 31.12.1899 00:00:00 aus (Zeit = 0 - Start der internen InterBase/FireBird Zeitrechnung), bei FireBird 2.0, wenn gewünscht, <null>.
TestSQL (für TestISO.GDB)
Übergabe einer normalen UUID als Input Paramter (richtig):
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, ZEITSTEMPEL AS ISCORRECT, F_UUID1TIMESTAMP(UUID) FROM UUIDTEST ORDER BY 1;
Übergabe einer komprimierten UUID als Input Paramter statt einer nornalen UUID:
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, NULL AS ISCORRECT, F_UUID1TIMESTAMP(UUIDCOMPR) FROM UUIDTEST ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUID1TIMESTAMP(NULL) FROM RDB$DATABASE;
nach oben • go top •
F_UUID1COMPRTIMESTAMP Funktion von adhoc
Entrypoint uuid1comprtimestamp UTF-8 kompatibel
Input CSTRING(250) gültige komprimierte UUID Version 1
Output TIMESTAMP Zeitstempel, wann die UUID Version 1 erzeugt wurde
Bei nicht gültigem Input gibt die Funktion den Zeitstempel 31.12.1899 00:00:00 aus (Zeit = 0 - Start der internen InterBase/FireBird Zeitrechnung), bei FireBird 2.0, wenn gewünscht, <null>.
TestSQL (für TestISO.GDB)
Übergabe einer komprimierten UUID als Input Paramter (richtig):
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, ZEITSTEMPEL AS ISCORRECT, F_UUID1COMPRTIMESTAMP(UUIDCOMPR) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
Übergabe einer normalen UUID als Input Paramter statt einer komprimierten UUID:
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, NULL AS ISCORRECT,
F_UUID1COMPRTIMESTAMP(UUID) FROM UUIDTEST ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUID1COMPRTIMESTAMP(NULL) FROM RDB$DATABASE;
nach oben • go top •
F_UUID1MACMAC Funktion von adhoc
Entrypoint uuid1macmac UTF-8 kompatibel
Input CSTRING(250) gültige UUID Version 1a
Output CSTRING(17) MAC-Adresse des Computers, auf dem die UUID erzeugt wurde
TestSQL (für TestISO.GDB)
Übergabe einer normalen UUID als Input Paramter (richtig):
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, MACADRESS AS ISCORRECT, F_UUID1MACMAC(UUID) FROM UUIDTEST ORDER BY 1;
Übergabe einer komprimierten UUID als Input Paramter statt einer normalen UUID:
SELECT 'no RFC4122 UUID' AS ISCORRECT, F_UUID1MACMAC(UUIDCOMPR) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUID1MACMAC(NULL) FROM RDB$DATABASE;
nach oben • go top •
F_UUID1MACCOMPRMAC Funktion von adhoc
Entrypoint uuid1maccomprmac UTF-8 kompatibel
Input CSTRING(250) gültige komprimierte UUID Version 1a
Output CSTRING(17) MAC-Adresse des Computers, auf dem die UUID erzeugt wurde
TestSQL (für TestISO.GDB)
Übergabe einer komprimierten UUID als Input Paramter (richtig):
SELECT UUIDTESTID, F_UUIDVERSION(UUID), ART, MACADRESS AS ISCORRECT, F_UUID1MACCOMPRMAC(UUIDCOMPR) FROM UUIDTEST WHERE UUIDCOMPR IS NOT NULL ORDER BY 1;
Übergabe einer normalen UUID als Input Paramter statt einer komprimierten UUID:
SELECT 'no compressed UUID' AS ISCORRECT, F_UUID1MACCOMPRMAC(UUID) FROM UUIDTEST ORDER BY 1;
SELECT NULL AS ISCORRECT, F_UUID1MACCOMPRMAC(NULL) FROM RDB$DATABASE;
vorige Seite • previous page • passée sitenach oben • go top • vers le hautnächste Seite • next page • prochain site