PythonQ 240-8XX Bedienungsanleitung Seite 637

  • Herunterladen
  • Zu meinen Handbüchern hinzufügen
  • Drucken
  • Seite
    / 768
  • Inhaltsverzeichnis
  • LESEZEICHEN
  • Bewertet. / 5. Basierend auf Kundenbewertungen
Seitenansicht 636
616 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Wenn der Funktionsprototyp kompliziert ist (zum Beispiel eine variable Anzahl von
Argumenten entgegennimmt), sollten Sie zwei Zeile zu sql_yacc.yy hinzuf¨ugen. Eine
gibt das Pr¨aprozessorsymbol an, das yacc definieren soll (das sollte am Anfang der
Datei stehen). Definieren Sie dann die Funktionsparameter und f¨ugen Sie ein “item”
mit diesen Parametern zur simple_expression-Parsing-Regel hinzu. Sehen Sie sich als
Beispiel alle Vorkommen von ATAN in sql_yacc.yy an, um zu sehen, wie das gemacht
wird.
3. Deklarieren Sie in item_func.h eine Klasse, die von Item_num_func oder Item_str_
func erbt, je nachdem, ob Ihre Funktion eine Zahl oder eine Zeichenkette zur¨uckgibt.
4. F¨ugen Sie in item_func.cc eine der folgenden Deklarationen hinzu, je nachdem, ob
Sie eine numerische oder eine Zeichenketten-Funktion definieren:
double Item_func_newname::val()
longlong Item_func_newname::val_int()
String *Item_func_newname::Str(String *str)
Wenn Sie Ihr Objekt von irgend einem der Standard-Items erben (wie von Item_num_
func, m¨ussen Sie wahrscheinlich eine der oben genannten Funktionen definieren und das
Elternobjekt sich um die anderen Funktionen k¨ummern lassen. Beispielsweise definiert
die Item_str_func-Klasse eine val()-Funktion, die atof() auf dem Wert ausf¨uhrt,
der von ::str() zur¨uckgegeb en wurde.
5. Sie m¨ussen wahrscheinlich auch die folgende Objektfunktion definieren:
void Item_func_newname::fix_length_und_dec()
Diese Funktion sollte zumindest max_length basierend auf den angegebenen Argu-
menten berechnen. max_length ist die maximale Anzahl von Zeichen, die die Funktion
zur¨uckgeb en kann. Diese Funktion sollte auch maybe_null = 0 setzen, wenn die Haupt-
funktion keinen NULL-Wert zur¨uckgeben kann. Die Funktion kann pr¨ufen, ob irgend
eins der Funktionsargumente NULL zur¨uckgeben kann, indem die Argumente der maybe_
null-Variable gepr¨uft werden. Sehen Sie sich als typisches Beispiel, wie das gemacht
wird, Item_func_mod::fix_length_and_dec an.
Alle Funktionen m¨ussen Thread-sicher sein (mit anderen Worten: Benutzen Sie keine glob-
alen oder statischen Variablen in den Funktionen, ohne sie mit mutexes zu sch¨utzen).
Wenn Sie von ::val(), ::val_int() oder ::str() NULL zur¨uckgeben wollen, sollten Sie
null_value auf 1 setzen und 0 zur¨uckgeben.
Bei ::str()-Objektfunktionen gibt es einige zus¨atzliche
¨
Uberlegungen, auf die man achten
sollte:
Das String *str-Argument stellt einen Zeichenketten-Puffer zur Verf¨ugung, der be-
nutzt werden kann, um das Ergebnis zu speichern. (Weitere Informationen ¨uber den
String-Typ finden Sie durch einen Blick in die sql_string.h’-Datei.)
Die ::str()-Funktion sollte die Zeichenkette zur¨uckgeben, die das Ergebnis enth¨alt,
oder (char*) 0, wenn das Ergebnis NULL ist.
Alle aktuellen Zeichenketten-Funktionen versuchen, die Zuweisung jeglichen Speichers
zu vermeiden, ausser wenn das absolut notwendig ist!
Seitenansicht 636
1 2 ... 632 633 634 635 636 637 638 639 640 641 642 ... 767 768

Kommentare zu diesen Handbüchern

Keine Kommentare