31.12. Op�rateurs d�finis par l'utilisateur

Chaque op�rateur est un <<�sucre syntaxique�>> pour l'appel d'une fonction sous-jacente qui effectue le v�ritable travail ; aussi devez-vous en premier lieu cr�er cette fonction avant de pouvoir cr�er l'op�rateur. Toutefois, un op�rateur n'est pas simplement un <<�sucre syntaxique�>> car il apporte des informations suppl�mentaires qui aident le planificateur de requ�te � optimiser les requ�tes utilis�es par l'op�rateur. La prochaine section est consacr�e � l'explication de ces informations additionnelles.

PostgreSQL accepte les op�rateurs unaire gauche, unaire droit et binaire. Les op�rateurs peuvent �tre surcharg�s ; c'est-�-dire que le m�me nom d'op�rateur peut �tre utilis� pour diff�rents op�rateurs � condition qu'ils aient des nombres et des types diff�rents d'op�randes. Quand une requ�te est ex�cut�e, le syst�me d�termine l'op�rateur � appeler en fonction du nombre et des types d'op�randes fournis.

Voici un exemple de cr�ation d'op�rateur pour l'addition de deux nombres complexes. Nous supposons avoir d�j� cr�� la d�finition du type complex (voir la Section 31.11). Premi�rement, nous avons besoin d'une fonction qui fasse le travail, ensuite nous pouvons d�finir l'op�rateur :

CREATE FUNCTION complex_add(complex, complex)
    RETURNS complex
    AS 'filename', 'complex_add'
    LANGUAGE C;

CREATE OPERATOR + ( leftarg = complex, rightarg = complex, procedure =
complex_add, commutator = + ); 

Maintenant nous pouvons ex�cuter la requ�te comme ceci :

SELECT (a + b) AS c FROM test_complex;

        c
-----------------
 (5.2,6.05)
 (133.42,144.95)

Nous avons montr� comment cr�er un op�rateur binaire. Pour cr�er des op�rateurs unaires, il suffit d'omettre un des leftarg (pour un op�rateur unaire gauche) ou rightarg (pour un op�rateur unaire droit). La clause procedure et les clauses argument sont les seuls �l�ments requis dans la commande CREATE OPERATOR. La clause commutator montr�e dans l'exemple est une indication optionnelle pour l'optimiseur de requ�te. Des d�tails suppl�mentaires sur la clause commutator et d'autres compl�ments d'optimisation sont donn�s dans la prochaine section.