27.6. A interface de caminho-rápido

O PostgreSQL disponibiliza uma interface de caminho rápido (fast-path) para enviar chamadas simples de função para o servidor.

Dica: Esta interface está um tanto obsoleta, porque pode ser obtido um desempenho semelhante e uma funcionalidade melhor definindo uma declaração preparada para a chamada da função. Então, a execução da declaração com transmissão binária dos parâmetros e resultados substitui a chamada de função de caminho rápido.

A função PQfn solicita a execução da função do servidor através da interface de caminho rápido:

PGresult *PQfn(PGconn *conn,
               int fnid,
               int *result_buf,
               int *result_len,
               int result_is_int,
               const PQArgBlock *args,
               int nargs);

typedef struct {
    int len;
    int isint;
    union {
        int *ptr;
        int integer;
    } u;
} PQArgBlock;

O argumento fnid é o OID da função a ser executada. Os parâmetros args e nargs definem os parâmetros a serem passados para a função; estes parâmetros devem corresponder a lista declarada de argumentos da função. Quando o campo isint da estrutura do parâmetro tem o valor verdade, o valor de u.integer é enviado para o servidor como um inteiro do comprimento indicado (devendo ser 1, 2 ou 4 bytes); ocorre a troca apropriada de bytes. Quando isint tem o valor falso, o número de bytes indicados por *u.ptr é enviado sem processamento; os dados devem estar no formato esperado pelo servidor para transmissão binária do tipo de dado do argumento da função. O parâmetro result_buf é o buffer no qual é colocado o valor do retornado. Quem chama deve alocar espaço suficiente para armazenar o valor retornado (Não há verificação!) O real comprimento do resultado é retornado no inteiro apontado por result_len. Se for esperado um resultado inteiro de 1, 2 ou 4 bytes, result_is_int deve ser definido com o valor 1, senão com o valor 0. Definir result_is_int como 1 faz com que a libpq faça a troca de bytes do valor, caso seja necessário, para que este seja entregue como um valor do tipo int apropriado para a máquina cliente. Quando o valor de result_is_int é igual a 0, a cadeia de bytes no formato binário enviada pelo servidor é retornada sem modificações.

A função PQfn sempre retorna um ponteiro válido para PGresult. O status do resultado deve ser verificado antes do resultado ser utilizado. Quem chama é responsável por liberar PGresult através da função PQclear, quando esta não for mais necessária.

Deve ser observado que não é possível tratar argumentos nulos, resultados nulos, nem resultados de conjunto de valores nulos quando se utiliza esta interface.

SourceForge.net Logo CSS válido!