Rb Cafe » Postgres » Documentation PostgreSQL 13.10 » Programmation serveur » Interface de programmation serveur » Fonctions d'interface » SPI_execute_with_args

SPI_execute_with_args

SPI_execute_with_args — exécute une commande avec des paramètres hors ligne

Synopsis

int SPI_execute_with_args(const char *command,
                          int nargs, Oid *argtypes,
                          Datum *values, const char *nulls,
                          bool read_only, long count)
        

Description

SPI_execute_with_args exécute une commande qui pourrait inclure des références à des paramètres fournis en externe. Le texte de commande fait référence à un paramètre avec $n et l'appel spécifie les types et valeurs des données pour chaque symbole de ce type. read_only et count ont la même interprétation que dans SPI_execute.

Le principal avantage de cette routine comparé à SPI_execute est que les valeurs de données peuvent être insérées dans la commande sans mise entre guillemets et échappements, et donc avec beaucoup moins de risques d'attaques du type injection SQL.

Des résultats similaires peuvent être réalisés avec SPI_prepare suivi par SPI_execute_plan ; néanmoins, lors de l'utilisation de cette fonction, le plan de requête est toujours personnalisé avec les valeurs de paramètres spécifiques fournies. Pour une exécution simple, cette fonction doit être préférée. Si la même commande doit être exécutée avec plusieurs paramètres différents, chaque méthode peut être la plus rapide, le coût de la planification pouvant contre-balancer les bénéfices des plans personnalisés.

Arguments

const char * command

chaîne de commande

int nargs

nombre de paramètres en entrée ($1, $2, etc.)

Oid * argtypes

un tableau de longueur nargs, contenant les OID des types de données des paramètres

Datum * values

un tableau de longueur nargs, containing des valeurs réelles des paramètres

const char * nulls

un tableau décrivant les paramètres NULL

Si nulls vaut NULL, alors SPI_execute_with_args suppose qu'aucun paramètre n'est NULL. Dans le cas contraire, chaque entrée du tableau nulls doit valoir ' ' si le paramètre correspondant est non NULL et 'n' si le paramètre correspondant est NULL (dans ce dernier cas, la valeur réelle de l'entrée values correspondante n'a pas d'importance). Notez que nulls n'est pas une chaîne de texte. C'est un tableau et, de ce fait, il n'a pas besoin d'un caractère de fin '\0'.

bool read_only

true pour les exécutions en lecture seule

long count

nombre maximum de lignes à renvoyer ou 0 pour aucune limite

Valeur de retour

La valeur de retour est identique à celle de SPI_execute.

SPI_processed et SPI_tuptable sont configurés comme dans SPI_execute en cas de succès.