すべてのプロダクト
Search
ドキュメントセンター

PolarDB:オペレーターの作成

最終更新日:May 31, 2024

CREATE OPERATORは、新しい演算子nameを定義します。

説明

CREATE OPERATORは、新しい演算子nameを定義します。 演算子を定義するユーザーがその所有者になります。 スキーマ名が指定されている場合、指定されたスキーマに演算子が作成されます。 指定されない場合は、現在のスキーマに作成されます。

演算子名は、次のリストから最大NAMEDATALEN -1 (デフォルトでは63) 文字のシーケンスです。

+ - * / < > = ~! @ # % ^ > | '?

名前の選択にはいくつかの制限があります。

  • -/* は、コメントの先頭となるため、演算子名のどこにも表示できません。

  • マルチ文字演算子名は、名前に次の文字の少なくとも1つが含まれていない限り、+ または-で終わることはできません。~! @ # % ^ & | '? たとえば、@- は許可された演算子名ですが、*- は許可されません。 この制限により、PolarDBはトークン間にスペースを必要とせずにSQL準拠のコマンドを解析できます。

  • 記号 => はSQL文法によって予約されているため、演算子名として使用することはできません。

オペレータ!=にマップされます。<>したがって、これら2つの名前は常に同等です。

LESTARGとRIGHTARGの少なくとも1つを定義する必要があります。 バイナリ演算子の場合、両方を定義する必要があります。 右の単項演算子については、DEFTARGのみが定義されるべきであり、左の単項演算子については、RIGHTARGのみが定義されるべきである。

概要

オペレーター名の作成 (
        {FUNCTION | PROCEDURE} = function_name
        [, LEFTARG = left_type ] [, RIGHTARG = right_type]
        [, COMMUTATOR = com_op ] [, NEGATOR = neg_op]
        [, RESTRICT = res_proc ] [, JOIN = join_proc]
        [, HASHES ] [, MERGES]
    )

正しい単項演算子 (サフィックスとも呼ばれます) は廃止されました。

function_name関数は、CREATE functionを使用して事前に定義されている必要があり、指定された型の引数の正しい数を受け入れるように定義されている必要があります。

CREATE OPERATORの構文では、キーワードFUNCTIONPROCEDUREは同等ですが、参照される関数はいずれの場合もプロシージャではなく関数でなければなりません。 ここでのキーワードPROCEDUREの使用は歴史的で非推奨です。

その他の句は、オプションの演算子最適化句を指定します。 演算子を作成できるようにするには、引数型と戻り値型に対するUSAGE特権と、基になる関数に対するEXECUTE特権が必要です。 整流子または否定演算子が指定されている場合は、これらの演算子を所有する必要があります。

CREATE operatorで演算子の語彙優先順位を指定することはできません。これは、パーサーの優先順位の動作がハードワイヤードであるためです。

廃止されたオプションSORT1SORT2LTCMP、およびGTCMPは、以前はマージ結合可能演算子に関連付けられたソート演算子の名前を指定するために使用されていました。 関連する演算子に関する情報は、代わりにBツリー演算子ファミリーを見ることによって見つけられるので、これはもはや必要ではない。 これらのオプションのいずれかが指定された場合、暗黙的にMERGESをtrueに設定する以外は無視されます。

データベースからユーザー定義演算子を削除するには、DROP OPERATORを使用します。 データベース内の演算子を変更するには、ALTER OPERATORを使用します。

パラメーター

name: 定義する演算子の名前。 許容可能な文字については上記を参照されたい。 名前は、CREATE OPERATOR myschema.+ (...) のように、スキーマ修飾することができます。 そうでない場合、演算子は現在のスキーマに作成されます。 同じスキーマ内の2つの演算子は、異なるデータ型を操作する場合、同じ名前を持つことができます。 これはオーバーロードと呼ばれます。

function_name: この演算子の実装に使用される関数です。

left_type: 演算子の左オペランドのデータ型 (存在する場合) 。 このオプションは、プレフィックス演算子では省略されます。

right_type: 演算子の右オペランドのデータ型。

com_op: この演算子の整流子。

neg_op: この演算子の否定子。

res_proc: この演算子の制限選択性推定関数。

join_proc: この演算子の結合選択性推定関数。

HASHES: この演算子がハッシュ結合をサポートできることを示します。

マージ: この演算子がマージ結合をサポートできることを示します。

com_opまたはその他のオプションの引数でスキーマ修飾演算子名を指定するには、次のようなoperator () 構文を使用します。

COMMUTATOR = OPERATOR(myschema.===) 、

次のコマンドは、データ型ボックスの新しい演算子、area-equalityを定義します。

CREATE OPERATOR === (
        LEFTARG=ボックス、
        RIGHTARG=ボックス、
        FUNCTION = area_equal_function,
        委員会====,
        ネガター= !==,
        RESTRICT = area_restriction_function、
        JOIN = area_join_function,
        HASHES、合併
    );