Il y a des
différences de limites entre
Interbase et Firebird et aussi entre leurs versions. Chaque champ
d’une
requête SQL doit respecter la limite des champs ET l’enregistrement
complet de la requête ne peut dépasser la limite d’un
enregistrement.
Le calcul de la limite d’un enregistrement s’opère par l’addition
des
dimensions spécifiées pour les champs et non par les dimensions des
valeurs contenues dans ces champs:
- un champ de table avec sa définition, par exemple VARCHAR(100), 2
by
tes pour SMALLINT, etc.
- une fonction UDF avec une valeur de retour, par exemple 100 bytes
pour … RETURN VARCHAR(100) …
- une procédure stoquée, idem.
column limit
row limit
limite de champ
limite d’enregistrement
InterBase 6.02
32 kB
32 kB
InterBase 7.x
32 kB
64 kB
FireBird 1.x
32 kB
32 kB
FireBird 2.x
32 kB
40 kB
Pour que la requête de l’exemple suivant puisse fonctionner:
select F_REPLACE(F_REPLACE(F_REPLACE(F_REPLACE(‘abcdefg’, ‘a’, ‘x‘),
‘b’, ‘y’), ‘c’, ‘z’), ‘d’, ‘-‘) from TABLE ...la définition
(DECLARE)
de F_REPLACE doit être la suivante:
DECLARE EXTERNAL FUNCTION F_REPLACE
CSTRING(8190),
CSTRING(254),
CSTRING(254)
RETURNS CSTRING(8190) FREE_IT
ENTRY_POINT 'replace' MODULE_NAME
'FreeAdhocUDF';
"RETURNS CSTRING(8190)" ne peut plus être 8190, car un champ se
reproduit par 4 fois par récurrence --> 4 * 8190 = 32760.
La requête doit en particulier comprendre un champ, comme par
exemple
Select CHAMP, F_REPLACE(F_REPLACE(F_REPLACE(... de telle sorte que
la
requête initiale avec une définition de 8190 n’aura plus recours par
récurrence que 3 fois à F_REPLACE. Ainsi la limite de 32 kB de
l’enregistrement ne sera pas dépassée, alors que 4 fois aurait
conduit
à un dépassement des 32 kB.
Comme une application peut vomprendre plusieurs contraintes pour une
seule fonction UDF, une possibilité est de déclarer plusieurs fois
la
même fonction:
- F_REPLACE avec RETURN CSTRING(254)
- F_REPLACE4 avec RETURN CSTRING(4095)
- F_REPLACE8 avec RETURN CSTRING(8190)
- F_BIGREPLACE avec RETURN CSTRING(32760)
Ainsi on dispose pour toutes les conditions de la fonction correcte. |