CREATE OPERATOR

Nome

CREATE OPERATOR -- cria um operador

Sinopse

CREATE OPERATOR nome (
    PROCEDURE = nome_da_função
    [, LEFTARG = tipo_à_esquerda ] [, RIGHTARG = tipo_à_direita ]
    [, COMMUTATOR = comutador_do_operador ] [, NEGATOR = negador_do_operador ]
    [, RESTRICT = função_de_seletividade_da_restrição ] [, JOIN = função_de_seletividade_da_junção ]
    [, HASHES ] [, MERGES ]
    [, SORT1 = operador_de_ordenação_à_esquerda ] [, SORT2 = operador_de_ordenação_à_direita ]
    [, LTCMP = operador_menor_que ] [, GTCMP = operador_maior_que ]
)

Descrição

O comando CREATE OPERATOR define o novo operador, nome. O usuário que define o operador se torna seu dono. Se for fornecido o nome do esquema, então o operador será criado no esquema especificado, senão será criado no esquema corrente.

O nome do operador é uma seqüência com até NAMEDATALEN-1 (63, por padrão) caracteres da seguinte lista:

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

Existem algumas restrições na escolha do nome:

O operador != é mapeado para <> na entrada e, portanto, estes dois nomes são sempre equivalentes.

Com relação a LEFTARG e RIGHTARG, pelo menos um dos dois deve ser definido; para operadores binários os dois devem ser definidos. Para operadores unários direito somente LEFTARG deve ser definido, enquanto que para operadores unários esquerdo somente RIGHTARG deve ser definido.

O procedimento nome_da_função deve ser previamente definido utilizando o comando CREATE FUNCTION, e deve estar definido para aceitar o número correto de argumentos (um ou dois) dos tipos indicados.

As outras cláusulas são cláusulas de otimização de operador opcionais. Seus significados estão descritos na Seção 33.11 .

Parâmetros

nome
O nome do operador a ser definido. Veja acima os caracteres permitidos. O nome pode ser qualificado pelo esquema como, por exemplo, CREATE OPERATOR meu_esquema.+ (...); caso não seja, o operador será criado no esquema corrente. Dois operadores no mesmo esquema podem possuir o mesmo nome se operarem sobre tipos de dado diferentes. Isto se chama sobrecarga (overload).
nome_da_função
A função utilizada para implementar este operador.
tipo_à_esquerda
O tipo de dado do operando à esquerda do operador, se houver. Esta opção deve ser omitida em operadores unário esquerdo.
tipo_à_direita
O tipo de dado do operando à direita do operador, se houver. Esta opção deve ser omitida em operadores unário direito.
comutador_do_operador
O comutador deste operador.
negador_do_operador
O negador deste operador.
função_de_seletividade_da_restrição
A função que estima a seletividade da restrição para este operador.
função_de_seletividade_da_junção
A função que estima a seletividade da junção para este operador.
HASHES
Indica que este operador pode suportar uma junção por hash.
MERGES
Indica que este operador pode suportar uma junção por mesclagem.
operador_de_ordenação_à_esquerda
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à esquerda deste operador.
operador_de_ordenação_à_direita
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à direita deste operador.
operador_menor_que
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que compara os tipos de dado de entrada deste operador.
operador_maior_que
Se este operador puder suportar uma junção por mesclagem, o operador maior-que que compara os tipos de dado de entrada deste operador.

Para usar um nome de operador qualificado pelo esquema em comutador_do_operador, ou nos demais argumentos opcionais, deve ser utilizada a sintaxe de OPERATOR() como, por exemplo,

COMMUTATOR = OPERATOR(meu_esquema.===) ,

Observações

Consulte a Seção 33.11 para obter mais informações.

Utilize o comando DROP OPERATOR para remover do banco de dados operadores definidos pelo usuário.

Exemplos

O comando abaixo define um novo operador, area-equality (igualdade de área), para o tipo de dado box:

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    PROCEDURE = area_equal_procedure,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_procedure,
    JOIN = area_join_procedure,
    HASHES,
    SORT1 = <<<,
    SORT2 = <<<
    -- Uma vez que os operadores de classificação foram fornecidos, MERGES está envolvido.
    -- LTCMP e GTCMP são assumidos como sendo < e >, respectivamente
);

Compatibilidade

O comando CREATE OPERATOR é uma extensão do PostgreSQL. O padrão SQL não trata de operadores definidos pelo usuário.

SourceForge.net Logo