10.4. Stockage de valeurs

Les valeurs qui doivent �tre ins�r�es dans une table sont converties vers le type de donn�es de la colonne de destination selon les r�gles suivantes.

Conversion de types pour le stockage de valeurs

  1. V�rifier qu'il y ait une correspondance exacte avec la cible.

  2. Dans le cas contraire, essayer de convertir l'expression vers le type cible. Cela r�ussira s'il y a une conversion (cast) enregistr�e entre ces deux types. Si une expression est de type inconnu, le contenu de la cha�ne litt�rale sera fourni � l'entr�e de la routine de conversion pour le type cible.

  3. V�rifier s'il y a une conversion de taille pour le type cible. Une conversion de taille est une conversion d'un type vers lui-m�me. Si elle est trouv�e dans le catalogue pg_cast, appliquez-la � l'expression avant de la stocker dans la colonne de destination. La fonction d'impl�mentation pour une telle conversion prend toujours un param�tre suppl�mentaire de type integer, qui re�oit la longueur d�clar�e de la colonne de destination (en fait, il s'agit de la valeur atttypmod ; l'interpr�tation de atttypmod varie pour les diff�rents types de donn�es). La fonction de conversion est responsable de l'application de toute s�mantique d�pendante de la longueur comme la v�rification de la taille ou une troncature.

Exemple 10-6. Conversion de types pour le stockage de caract�res

Pour une colonne cible d�clar�e comme character(20), la d�claration suivante assure que la valeur stock�e a la taille correcte :

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

Ce qui s'est r�ellement pass� ici, c'est que les deux types inconnus sont r�solus en texte par d�faut, permettant � l'op�rateur || de les r�soudre comme une concat�nation de texte. Ensuite, le r�sultat texte de l'op�rateur est converti en bpchar ( <<�blank-padded char�>>, le nom interne du type de donn�es character (caract�re)) pour correspondre au type de la colonne cible. (Comme les types texte et bpchar ont une compatibilit� binaire, cette conversion n'ins�re aucun appel r�el � une fonction.) Enfin, la fonction de taille bpchar(bpchar, integer) est trouv�e dans le catalogue syst�me et appliqu�e au r�sultat de l'op�rateur et � la longueur de la colonne stock�e. Cette fonction de type sp�cifique effectue le contr�le de la longueur requise et ajoute des espaces pour combler la cha�ne.