Blobfilter

<< Benutzerdefinierte Funktionen - UDF | IBExpert | Role >>

Die deutschsprachige Dokumentation wird seit dem 26. Juli 2016 nicht mehr gepflegt. Aktuelle und vollständige Dokumentation finden Sie auf der englischsprachigen Webseite: IBExpert Documentation


Blobfilter

Blobfilter sind Routinen für Blobs. Sie übersetzen Blobdaten von einem Typ zum anderen, d.h. sie ermöglichen die Anzeige der Inhalte des Blob-Subtypes X als Subtype Y oder umgekehrt. Diese Filter sind ideale Werkzeuge für bestimmte binäre Operationen, wie die Kompression oder Übersetzung von Blobs, je nach Anforderung der Anwendung.

Ein Blobfilter gleicht technisch einer Benutzerdefinierten Funktion - UDF. Er stellt sich selbst in den Hintergrund einer Datenbankmaschine und wird beispielsweise zur Komprimierung des Blobs verwendet oder, um das Format festzulegen, wie GIF oder JPG (abhängig davon, ob Windows oder Apple Mac verwendet wird). Der Blobfiltermechanismus muss wissen, was die verschiedenen Subtypen sind, um zu funktionieren.

Blobfilter werden auf die gleiche Weise geschrieben, wie UDFs und sind generell, genau wie UDFs, Teil der Standardbibliotheken.

Blobfilter deklarieren

Ein Blobfilter muss explizit in der Datenbank deklariert werden, bevor er verwendet wird. Dies geschieht über das Schlüsselwort DECLARE FILTER. Zunächst ist es notwendig die Datenbank via Blobfilter zu verbinden und dann die Anweisung zu erstellen. Die Syntax des DECLARE FILTER lautet wie folgt:

 DECLARE FILTER <IB/FB_Filter_Name>
 <Parameter_List>
   INPUT TYPE <Type>
   OUPUT TYPE <Type>
   ENTRY_POINT <External_Function_Name>
   MODULE_NAME <Library_Name>;

Neu seit Firebird 2.0: Vorher war die einzig erlaubte Syntax zur Deklarierung eines Blobfilters die oben gezeigte. Seit Firebird 2.0 gibt es alternative eine neue Syntax:

 DECLARE FILTER <name> 
   INPUT_TYPE <mnemonic> 
   OUTPUT_TYPE <mnemonic>
   ENTRY_POINT <function_in_library> 
   MODULE_NAME <library_name>;

Wobei <mnemonic> sich auf einen der Engine bekannten Subtype-Identifizierer bezieht.

Anfänglich sind sie binär, Text und andere meist für den internen Gebrauch, aber es ist möglich ein neues mnemonic in rdb$types azu schreiben und zu verwenden, da es nur zum Zeitpunkt der Deklaration geparst wird. Die Engine behält den numerischen Wert. Bitte vergessen Sie nicht, dass nur negative Subtype-Werte vom Benutzer definiert werden sollen.

Um die vordefinierten Typen einzusehen, machen Sie folgendes

 select RDB$TYPE, RDB$TYPE_NAME, RDB$SYSTEM_FLAG
   from rdb$types
   where rdb$field_name = 'RDB$FIELD_SUB_TYPE';
RDB$TYPERDB$TYPE_NAMERDB$SYSTEM_FLAG
======================================================
0BINARY1
1TEXT1
2BLR1
3ACL1
4RANGES1
5SUMMARY1
6FORMAT1
7TRANSACTION_DESCRIPTION1
8EXTERNAL_FILE_DESCRIPTION1

Beispiele finden Sie unter: Declare BLOB subtypes by known descriptive identifiers.

Blobfilter aufrufen

Wie auch UDFs können Blobfilter von Firebird/InterBase® Code aufgerufen werden, wan immer ein eingebauter Firebird/InterBase® Funktionsaufruf verwendet wird. Um den Blobfilter zu verwenden, rufen Sie die FILTER-Anweisung auf, wenn ein Cursor deklariert wird. Dann wird immer, wenn Firebird/InterBase® den Cursor verwendet, der Blobfilter automatischa aufgerufen.

Blobfilter löschen

 DROP FILTER <filter_name>

DROP FILTER entfernt eine Blobfilter-Deklaration von der Datenbank. Die Entfernung der Blobfilter-Deklaration von der Datenbank bedeutet nicht, dass er von der entsprechenden Blobfilter Bibliothek entfernt wird. Der Filter wird aber von der Datenbank unzugänglich sein. Nachdem der Löschung der Definition, alle am Filter abhängigen Anwendungen werden Fehlermeldungen zurückgeben.

Ein Filter kann nur vom Datenbankbesitzer, vom SYDBA und von aller User mit Betriebssystem Rootprivilegien gelöscht werden.

Textblobs

In Firebird 2.0 wurden viele Erweiterungen für Textblobs eingeführt. Weiteres finden Sie unter Enhancements for BLOBs.

Siehe auch:
deutschsprachig:
Blob
Blob Anzeige/Editor
Benutzerdefinierte Funktionen (UDF)
Firebird für Datenbankexperten: Episode 2 - Seitentypen
englischsprachig:
InterBase, Firebird and Blobs - a technical overview
Blob filter sample code
Firebird 2.1 Release Notes: Descriptive identifiers for BLOB subtypes
Stream blobs

zurück zum Seitenanfang
<< Benutzerdefinierte Funktionen - UDF | IBExpert | Role >>