PythonQ 240-8XX Manual de usuario Pagina 630

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 629
Kapitel 10: MySQL erweitern 609
Wegen weiterer Anleitungen zum Schreiben benutzerdefinierte Funktionen siehe
Abschnitt 10.1 [MySQL internals], Seite 608. Damit der UDF-Mechanismus funktioniert,
m¨ussen Funktionen in C oder C++ geschrieben sein. Ihr Betriebssystem muss dynamisches
Laden unterst¨utzen und Sie m¨ussen mysqld dynamisch (nicht statisch) kompiliert haben.
Beachten Sie, dass Sie f¨ur das Funktionieren von AGGREGATE eine mysql.func-Tabelle
ben¨otigen, die die Spalte typ enth¨alt. Wenn das nicht der Fall ist, sollten Sie das Skript
mysql_fix_privilege_tables laufen lassen, um diesen Mangel zu beheben.
10.1.2 Hinzuf¨ugen einer neuen benutzerdefinierten Funktion
Damit der UDF-Mechanismus funktioniert, m¨ussen Funktionen in C oder C++ geschrieben
sein. Ihr Betriebssystem muss dynamisches Laden unterst¨utzen und Sie m¨ussen mysqld
dynamisch (nicht statisch) kompiliert haben. Die MySQL-Quelldistribution enth¨alt eine
Datei sql/udf_example.cc’, die 5 neue Funktionen definiert. Sehen Sie in dieser Datei
nach, wie die UDF-Aufruf-Konventionen funktionieren.
Damit mysqld UDF-Funktionen benutzen kann, sollten Sie MySQL mit --with-
mysqld-ldflags=-rdynamic konfigurieren. Der Grund liegt darin, dass Sie auf
vielen Plattformen (inklusive Linux) eine dynamische Bibliothek (mit dlopen()) von
einem statisch gelinkten Programm laden onnen, was Sie erhalten w¨urden, wenn
Sie --with-mysqld-ldflags=-all-static benutzen. Wenn Sie eine UDF benutzen
wollen, die auf Symbole von mysqld zugreifen muss (wie das methaPhone-Beispiel in
sql/udf_example.cc’, das default_charset_info benutzt), m¨ussen Sie das Programm
mit -rdynamic benutzen (siehe man dlopen).
F¨ur jede Funktion, die Sie in SQL-Statements b enutzen wollen, sollten Sie die entsprechen-
den C- (oder C++-) Funktionen benutzen. In den unten stehenden Ausf¨uhrungen wird
“xxx” als Beispiel-Funktionsname benutzt. Um zwischen SQL- und C-/C++-Benutzung zu
unterscheiden, kennzeichnet XXX() (Großschreibung) einen SQL-Funktionsaufruf und xxx()
(Kleinschreibung) einen C-/C++-Funktionsaufruf.
The C-/C++-Funktionen, die Sie f¨ur die Implementierung der Schnittstelle f¨ur XXX()
schreiben, sind:
xxx() (required)
Die Hauptfunktion. Hier wird das Funktionsergebnis berechnet. Der
Zusammenhang zwischen dem SQL-Typ und dem R¨uckgabe-Typ Ihrer
C-/C++-Funktion ist unten dargestellt:
SQL-Typ C-/C++-Typ
STRING char *
INTEGER long long
REAL double
xxx_init() (optional)
Die Initialisierungsfunktion f¨ur xxx(). Sie kann f¨ur folgendes benutzt werden:
Um die Anzahl von Argumenten f¨ur XXX() zu pr¨ufen.
Um zu pr¨ufen, ob die Argumente vom erforderlichen Typ sind oder, alter-
nativ, MySQL mitzuteilen, den Argumenttyp zu erzwingen, den Sie beim
Aufruf der Hauptfunktion brauchen.
Vista de pagina 629
1 2 ... 625 626 627 628 629 630 631 632 633 634 635 ... 767 768

Comentarios a estos manuales

Sin comentarios