無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

35.12. ユーザ定義の演算子

演算子は裏側で実際の作業を行う関数を呼び出す "構文上の飾り" です。 ですから、演算子を作成する前にまずこの基礎となる関数を作成する必要があります。 しかし、演算子は 単なる 構文上の飾りでは ありません 。 問い合わせプランナによる演算子を使用する問い合わせの最適化を補助する追加情報をやり取りするからです。 次節では、この追加情報について重点的に説明します。

PostgreSQL では左単項演算子、右単項演算子、二項演算子をサポートしています。 演算子はオーバーロード可能です。 つまり、同じ演算子名をオペランドの数と型が異なる演算子に対して使用することができるということです。 問い合わせが実行されると、システムは与えられたオペランドの数と型より呼び出すべき演算子を決定します。

以下に2つの複素数の加算を行う演算子を作成する例を示します。 既に complex 型の定義( 項35.11 を参照)を作成していることを前提としています。 まず、実作業を行う関数が必要です。 その後、演算子を定義できます。

CREATE FUNCTION complex_add(complex, complex)
    RETURNS complex
    AS '

filename

', 'complex_add'
    LANGUAGE C IMMUTABLE STRICT;

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

これで以下のような問い合わせを実行できるようになります。

SELECT (a + b) AS c FROM test_complex;

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

ここでは二項演算子をどのように作成するのかを示しました。 単項演算子を作成するには、単に leftarg (左単項の場合)もしくは rightarg (右方単項の場合)を省略するだけです。 procedure 句と引数用の句のみが CREATE OPERATOR での必須項目です。 例で示した commutator 句は省略可能で、問い合わせオプティマイザへのヒントとなります。 commutator やその他のオプティマイザへのヒントについての詳細は次節で説明します。


powered by SEO.CUG.NET