Firebird™ Version 1.5 Release Notes v.1

auroratexicoSecurity

Jun 19, 2012 (11 months and 9 days ago)

426 views

Firebird™ Version 1.5
Release Notes v.1.5
5 février 2004 version 1.08
Contenu
Notes Générales Alias de base de données
Nouvelles fonctionnalités ! Connexion par un alias de base de données
Compatibilité avec d'anciennes versions ! Noms des bases de données sur Windows
Améliorations du Langage Equipes de développement Firebird
! Data types Notes d'Installation
! Metadata ! Windows 32-bit
! DSQL ! Linux/UNIX
! PSQL ! Solaris
! Firebird 1.0.x ! MacOS X
Nouveaux mots réservés ! FreeBSD
ISQL Plus d'Information
Fonctions externes (UDFs) Outils et pilotes
! ib_udf Documentation
! fbudf Bugs corrigés
Nouveau fichier de Configuration—firebird.conf
! Parametres système de fichiers
! Les paramètres liés aux ressources
! Paramètres liés à la communication
! Spécifique POSIX
! Spécifique Windows
! Espace temporaire
! Compatibilité
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 1 Notes Générales
Le moteur de base de donnée Firebird a été développé par une équipe indépendante de développeurs volontaires à
partir du code source d’Interbase fourni par Borland dans le cadre d’une licence publique désignée par «InterBase
Public License v.1.0» le 25 Juillet 2000.
Le développement de la version Firebird 2 a démarré tôt au cours du cycle de développement de Firebird 1, avec le
portage du code source C de Firebird 1 en C++ ainsi que la première opération majeure de nettoyage de code.
Firebird 1.5 est la première version issue des sources de Firebird 2. Il représente une étape significative pour les
développeurs et pour le projet entier, mais il n’en est pas pour autant la fin. Parallèlement à la diffusion de Firebird
1.5, le re-développement continue jusqu’au prochain jalon sur le chemin menant vers Firebird 2.
Firebird 1.0.x est toujours en maintenance, les corrections importantes de bug ainsi que les améliorations de la
version 1.5 y sont reportées.
Les binaires Firebird 1.5
Les binaires Firebird 1.5
Les binaires Firebird peuvent être téléchargés depuis le site web de Firebird -
http://sourceforge.net/project/showfiles.php?group_id=9028
C Ch ha aiin ne es s d de e v ve er rs siio on n p po ou ur r lle es s lliiv vr ra aiis so on ns s F Fiir re eb biir rd d 1 1..5 5
Win32: "WI-V1.5.0.nnnn Firebird 1.5"
Linux: "LI-V1.5.0.nnnn Firebird 1.5"
Ainsi de suite, où nnnn est le numéro de construction
Veuillez vous référer à Section documentation pour vous procurer les documentations recommandées.
Nouvelles fonctionnalités
Nouvelle base du code, meilleure optimisation
Nouvelle base du code, meilleure optimisation
Cette version a été obtenue à partir du code C d’origine porté en C++, un processus initié par Mike Nordell en
l’année 2000. Le nettoyage approfondi de code ainsi que les corrections de bug se sont poursuivis, avec l’arrivée
d’une nouvelle gestion de mémoire et de l’enrichissement de langage SQL. Non des moindres, pendant le
développement de la v.1.5, l’optimiseur de requêtes SQL a subi des améliorations et des corrections sous l’égide
entre autres d’Arno Brinkman, permettant de constater des gains de 30 à 60% en vitesse d’exécution.
A Ar rc ch hiitte ec cttu ur re e
Deux nouveautés significatives pour la plateforme Windows: Classic server et embedded server.
• Il n’y a pas eu de Classic Server depuis près de huit ans. Celui-ci peut exploiter plusieurs processeurs, ce que ne
sait toujours pas faire SuperServer. Même s’il est utilisable, Classic Server doit être considéré comme
expérimental.
• Embedded server est une dll qui rassemble une connexion client unique et un Superservert Firebird pour
construire des applications autonomes qui soient rapides et efficaces.

Plusieurs nouveautés du langage SQL ont fait leur apparition depuis la version 1.0.x, comprenant les expressions
SQL-92 CASE, COALESCE et NULLIF. Leur syntaxe est détaillée dans la section “Nouveautés du langage” plus loin
dans ce document.
Modules installés et sécurité
Modules installés et sécurité
Si vous utilisiez encore Firebird 1.0.x, vous allez remarquer plusieurs changements dans les noms des modules ainsi
que dans les règles d’accès et de localisation de ces modules. Suivent ci-après quelques uns de ces changements;
pour une information détaillée sur l’installation, l’emplacement des fichiers et la configuration, veuillez consulter
les sections correspondantes dans ce document.
1. La plus part des modules et des constantes ont été renommées. Dans la plus part des cas, les nouveaux noms
comportent une variante du mot « firebird » ou « fb ». Par exemple, la bibliothèque d’API est intégrée dans
bibliothèque partagée nommé “fbclient.dll” sous Windows et “libfbclient.so” sous d’autres plates-formes. Une
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 2exception dans cette règle de nommage : la base de donnée de sécurité, autrefois nommée “isc4.gdb”, est
désormais baptisée “security.fdb”.
2. Les fichiers externes utilisés par le serveur (bibliothèques UDF, filtres de BLOB, bibliothèque de jeu de
caractère, tables externes) sont désormais assujettis aux niveaux de protections du système de fichier qui, dans
certains cas, correspond à un niveau différent de celui qu’on avait sous Firebird 1.0.x ou InterBase.
3. Le nouveau fichier de configuration du serveur, firebird.conf, qui remplace ibconfig (Windows) et isc_config
(autres plates-formes) comporte plusieurs nouveaux paramètres et bénéficie d’une organisation améliorée tout
en étant auto-documenté.
4. La désignation d’une base de donnée par un alias a été ajoutée à Firebird 1.5. Vous pouvez désormais
optionnellement désigner dans votre application la localisation du fichier base de donnée par un alias en
remplacement de son chemin complet. La correspondance entre l’alias et le chemin complet est consignée dans
un fichier texte coté serveur, aliases.conf. Le but principal de l’utilisation d’un alias est de protéger la
localisation physique de vos bases contre une tentative malveillante d’intrusion via l’observation du trafic
réseau.
5. Le comportement par défaut sous Windows Server fait que le compte local « system » lance le programme qui
installe le service Firebird au démarrage du système. Cela peut se révéler comme une vulnérabilité de sécurité
si le serveur Firebird venait à être piraté, dans la mesure où il fournit une fenêtre à partir de laquelle le pirate
a accès à toute la machine. La version 1.5 de ce programme (instsvc.exe) accepte désormais une ouverture de
session Windows pour l’installation du service. Il est fortement recommandé de créer un compte utilisateur
Firebird à cet effet et faire usage de cette nouvelle fonctionnalité d’ouverture de session lors de l’installation si
votre serveur est connecté à l’internet d’une quelconque façon.
Suppression des espaces des champs Varchar pour les protocoles Client / Serveur
Suppression des espaces des champs Varchar pour les protocoles Client / Serveur
Il s’agit d’éviter de transférer à travers le réseau les caractères ESPACE se trouvant à droite des champs VARCHAR.
Les travaux ont été repris et terminés sur cette fonctionnalité pour la version 1.5.
NOTE : Comme c’est le client qui demande au serveur la suppression des espaces, la couche cliente Firebird 1.5
(fbclient.dll ou libfbclient.so) va bénéficier de cette fonctionnalité même si vous êtes connecté à une version
Firebird Serveur antérieure à 1.5. Si vous utilisez une ancienne version du client, vous ne tirerez pas profit de cette
fonctionnalité, que vous soyez connecté à une version Firebird Serveur 1.5 ou ultérieure.
Sémantiques Multi-action pour le codage des déclencheurs
Sémantiques Multi-action pour le codage des déclencheurs
Maintenant, vous pouvez coder conditionnellement les actions insert/update/delete dans un même trigger, celui-ci
couvrant alors toutes les actions pour une phase. Cela réduit d’une manière significative le code et la maintenance
des triggers tout en gardant la possibilité de définir plusieurs triggers par phase.
Amélioration dans le nommage des contraintes
Amélioration dans le nommage des contraintes
Les indexes qui servent au respect des contraintes d’intégrité peuvent être nommés par des identificateurs définis
par l’utilisateur.
Nombre maximum d’indexes par table augmenté
Nombre maximum d’indexes par table augmenté
Dans les deux versions 1.0 et 1.5, le nombre maximum d’indexes que vous pouvez définir par table passe de 64 à
(DB_PAGE_SIZE/16)-2.
NOTE Quand le nombre réel d’indexes pour une table dépasse 256, le comportement du moteur de base de donné
devient instable.
V Ve er rr ro ou uiilllla ag ge e P Pe es ss siim miis stte e
Pour les rares fois où vous avez besoin d’imposer un verrou pessimiste (pré-verrouillage), la version 1.5 ajoute une
nouvelle syntaxe pour placer des verrous en lecture sur les enregistrements au moment où ils sont envoyés au
client. A utiliser avec précaution.
Cache des connections à la base de donnée de sécurité
Cache des connections à la base de donnée de sécurité
La connexion à la base de donnée de sécurité fait l’objet d’un cache dans les versions SuperServer. Cela signifie que
le fichier security.fdb est chargé dès la première connexion et reste attachée (fichier verrouillé) jusqu’à la fin de la
dernière connexion client.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 3 A Am mé élliio or ra attiio on n d du u ttr ra aç ça ag ge e d de es s e er rr re eu ur rs s
Quand cela est possible, les messages d’erreurs indiquent la cause d’erreur SQL d’une manière plus détaillée. Il est
important de noter que vous allez recevoir des messages bizarres si vous utilisez un ancien fichier interbase.msg ou
firebird.msg.
C Ch ha an ng ge em me en ntts s d da an ns s lle es s m mo od du ulle es s c clliie en ntt
Clients Windows
La bibliothèque client s’appelle "fbclient.dll". Tous les utilitaires serveur (gbak, gfix, etc. …) utilisent uniquement
cette bibliothèque. Il est recommandé de connecter les nouvelles applications en utilisant fbclient.dll, sans qu’il y
ait besoin du fichier gds32.dll.
Pour maintenir la compatibilité avec des applications existantes, une bibliothèque passerelle "gds32.dll" a été
ajoutée au kit de distribution. Cette bibliothèque ne comporte aucun code mais se contente de rediriger les appels
API vers fbclient.dll. Par conséquent, pour les anciennes applications, vous devez placer cette version de gds32.dll
ainsi que fbclient.dll dans le répertoire du programme de l’application ou bien dans le répertoire système de l’OS.
Clients Linux
La bibliothèque cliente du Superserver est renommée “libfbclient.so”. Pour maintenir la compatibilité avec des
applications existantes, un lien symbolique “libgds.so” est installé et pointe vers libfbclient.so. Le client local pour
les applications embarquées se connectant au ClassicServer a été renommé libfbembed.so.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 4 Modules et fichiers renommés
Modules et fichiers renommés
Platform Module Firebird 1.0 Firebird 1.5 Special notes
All Security Isc4.gdb security.fdb
database
All Message file Interbase.msg firebird.msg
All Server log file interbase.log firebird.log
All ODS version 10 10.1 Nouvelle ODS (10.1). n’induit
aucune incompatibilitié avec les
versions précédentes d’ODS mais
la mise à jour n’est pas
automatique. Firebird 1.0 et 1.5
peuvent exploiter des bases de
données en ODS 10.0 et 10.1.
Néanmoins , la procédure de
sauvegarde/restauration est
toujours recommandée pour
migrer des bases de données entre
serveurs de versions différentes.
Linux Classic server gds_inet_server fb_inet_server
binary
Linux Classic lock ib_lock_mgr fb_lock_mgr
manager
Linux Superserver ibmgr.bin fbmgr.bin
control
Linux Superserver ibserver fbserver
binary
Linux Configuration isc_config firebird.conf
file
Linux Client library libgds.so libfbclient.so Client “Thread-safe” distant et
client TCP/IP local loopback pour
Superserver
libfbembed.so Client local (un seul utilisateur,
non-thread-safe) pour Classic
Linux Client library N/A libgds.so
symlink for
compatibility
Windows Guardian ibguard.exe fbguard.exe
Windows Superserver ibserver.exe fbserver.exe Ne prend pas en charge les
binary configurations multiprocesseur
Windows Classic binary N/A fb_inet_server.exe Connexion locale non-disponible
sous Windows.
TCP/IP, NetBEUI OK.
Prend en charge les configurations
multiprocesseur
Platform Module Firebird 1.0 Firebird 1.5 Notes Spéciales
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 5Windows Client library gds32.dll fbclient.dll Les utilitaires Fb 1.5 ainsi que les
nouvelles applications ne
nécessitent que fbclient.dll.
Voir notes ci-après à propos de la
compatibilité gds32.dll pour les
anciennes applications.
Windows Client library N/A gds32.dll
stub for
compatibility
Windows Configuration ibconfig firebird.conf
file
Windows Local IPC port InterBaseIPI FirebirdIPI La configuration par défaut
n’autorise pas des connexions
locales à partir d’applications
utilisant une ancienne version de
la dll gds.dll. Si nécessaire, il est
possible de configurer le serveur
afin qu’il utilise l’ancien nom du
IPC MAP, via firebird.conf.
Windows Default Registry HKLM\/SOFTWARE HKLM\SOFTWARE\ Le chemin est indiqué par le
key \\Borland\\InterBasSOFTWARE\Firebird paramètre "DefaultInstance". i.e.
e project\Firebird plus de clé"CurrentVersion", et
Server\Instances "RootDirectory" remplacé par
"DefaultInstance".
Les nouveaux noms de services sous Windows sont « Firebird Guardian – DefaultInstance » et « Firebird
Server – DefaultInstance »
Compatibilité
O On n- -d diis sk k s sttr ru uc cttu ur re e ( (O OD DS S) )
La structure disque des fichiers Firebird 1.5 est désignée par ODS 10.1. Cette mise a jour mineure était nécessaire
parce que :
- trois nouveaux indexes pour les tables système
- changements mineures dans le BLR (code SQL compilé) de deux triggers système
- amélioration du codage de RDB$TRIGGER_TYPE.
Certaines améliorations nécessitant la modifications de l’ODS ont été repoussées à la version 2.
En attendant, vous devriez être en mesure de porter vos bases de donnée Firebird 1.0.x directement. Par sécurité,
procédez à des tests sur des backups de vos bases 1.0.x avant le portage définitif.
B Ba as se es s d de e d do on nn né ée e IIn ntte er rB Ba as se e™ ™
Si vous voulez essayer Firebird avec des bases existantes Interbase, tout en ayant l’intention de les reconvertir en
Interbase, prenez la précaution de les sauvegarder d’abord avec l’utilitaire gbak d’Interbase. Pour commencer à
travailler avec vos bases sous Firebird 1.5, utilisez la version Firebird 1.5 de gbak pour restaurer votre sauvegarde.
Le manuel “Operations Guide”, disponible à l’url InterBase® 6.0 beta documentation set, décrit la syntaxe de la
commande de sauvegarde et restauration gbak.
Les bases de donnée IB 7.x, et probablement IB 6.5, après migration vers Firebird 1.5 peuvent présenter des
dysfonctionnements si vous y avez utilisé des fonctionnalités nouvelles propres à ces versions d’IB.
Nommage des fichiers et leurs localisations
Nommage des fichiers et leurs localisations
Dans cette version, plusieurs fichiers programme ont été renommés et ce dans le cadre du remplacement progressif
des noms hérités d’ InterBase® 6. Veuillez lire la section correspondante pour une description plus détaillée.
E Ex xé éc cu uttiio on n s siim mu ulltta an né ée e d de es s s se er rv ve eu ur rs s F Fiir re eb biir rd d 1 1..5 5 e ett IIn ntte er rb ba as se e
Le renommage de quelques objets système permet l’installation et l’exécution de FB1.5 sur une machine où est
déjà installé Interbase ou FB 1.0.x. Sous Windows, FB 1.5 utilise aussi une clé de registre différente. Si vous
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 6paramétrez les serveurs de sorte qu’ils utilisent des ports réseau différents, il est alors possible de faire tourner
simultanément plusieurs instances du serveur FB 1.5 ou bien une instance FB 1.5 et une instance IB ou FB 1.0.x.
R Re etto ou ur r à à F Fiir re eb biir rd d 1 1..0 0..x x
En raison du grand nombre de bugs corrigés, le comportement des bases de donnée peut changer si vous passez de
FB 1.5 à FB 1.0.x. Soyez attentifs à l’apparition d’un fichier README détaillant de tels problèmes au grès de leur
apparitions.
C Co om mp pa attiib biilliitté és s L Liin nu ux x
En raison de problèmes historiques avec le compilateur GNU C++, la version Firebird 1.5 Linux nécessite une version
plus récente des runtimes glibc que précédemment. Cela signifie, malheureusement, que nous sommes dans une
période pendant laquelle la capacité d’une distribution particulière à installer et exécuter les binaires FB 1.5 est
difficile à prédire. Cependant, toute autre information est la bienvenue. N’hésitez pas à partager vos expériences
avec les différentes distributions sur le forum firebird-devel.
Distro Level Classic Superserver
Red Hat 7.x Non Non
8.0 Quelques problèmes rapportés Quelques problèmes rapportés
updated from 7.x
8.0 Oui Oui
clean install
Mandrake 8.x Non Non
9.0 Oui, avec Oui, avec
glibc-2.3.1-10mdk.i586.rpm Glibc-2.3.1-10mdk.i586.rpm
9.1 Oui Oui
SuSE 8.0 Oui Inconnu
8.1 Oui Non

Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 7 Améliorations du Langage
T TY YP PE ES S D DE E D DO ON NN NE EE ES S
(1.5) Nouveaux types de donnée natifs
BIGINT
Conforme au type SQL99 exact numeric , 64-bit signé, avec une précision de zéro. Disponible en Dialecte 3 seulement.
Example(s)
i)
DECLARE VARIABLE VAR1 BIGINT;
ii)
CREATE TABLE TABLE1 (FIELD1 BIGINT);
M ME ET TA AD DA AT TA A
(1.5) Amélioration dans le nommage des contraintes
Dmitry Yemanov
Les indexes qui servent au respect des contraintes d’intégrité peuvent être nommés par des identificateurs définis
par l’utilisateur.
Précédemment, bien qu’il était possible de créer en les nommant explicitement des contraintes de clé primaire, de
clé étrangère et d’index unique, il n’en demeurait pas moins que les identificateurs des contraintes générées
automatiquement étaient calculés par le système, tels que RDB$FOREIGN13, et ne pouvaient être renommés. Ce
comportement est toujours celui qui est par défaut si on ne nomme pas explicitement les contraintes.
Toutefois, des extensions du langage ont été ajoutées pour permettre :
a) à un index généré par le système de recevoir le même nom que la contrainte qu’il impose.
b) à un index, qui impose une contrainte nommée ou non nommée, de recevoir explicitement un nom personnalisé
et d’être optionnellement construit dans un ordre descendant.
NOTE : Il n’est actuellement pas possible d’utiliser un index pré-existant
Syntax
...
[ADD] CONSTRAINT [<constraint-identifier>]
<constraint-type> <constraint-definition>
[USING [ASC[ENDING] | DESC[ENDING]] INDEX <index_name>]
Exemples
i) Contrainte nommée et index explicitement nommé
CREATE TABLE ATEST (
ID BIGINT NOT NULL,
DATA VARCHAR(10));
COMMIT;
L’instruction suivante va créer une contrainte de clé primaire nommée PK_ATEST imposée pas un index descendant
nommé IDX_PK_ATEST:
ALTER TABLE ATEST
ADD CONSTRAINT PK_ATEST PRIMARY KEY(ID)
USING DESC INDEX IDX_PK_ATEST;
COMMIT;
ii) Autre alternative à l’exemple ci-dessus :
CREATE TABLE ATEST (
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 8 ID BIGINT NOT NULL,
DATA VARCHAR(10),
CONSTRAINT PK_ATEST PRIMARY KEY(ID)
USING DESC INDEX IDX_PK_ATEST;
iii) L’instruction suivante crée la table ATEST avec la clé primaire PK_ATEST.
L’index sous-jacent est aussi nommé PK_ATEST.
CREATE TABLE ATEST (
ID BIGINT NOT NULL,
DATA VARCHAR(10),
CONSTRAINT PK_ATEST PRIMARY KEY(ID));
(1.5) Trigger mMulti-action
Dmitry Yemanov
La définition des triggers a été modifiée pour permettre la prise en charge conditionnelle de plusieurs actions dans
une même définition.
Syntax
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <multiple_action>
[POSITION number]
AS trigger_body
<multiple_action> ::= <single_action> [OR <single_action> [OR <single_action>]]
<single_action> ::= {INSERT | UPDATE | DELETE}
Exemples
i)
CREATE TRIGGER TRIGGER1 FOR TABLE1
[ACTIVE] BEFORE INSERT OR UPDATE AS
...;
ii)
CREATE TRIGGER TRIGGER2 FOR TABLE2
[ACTIVE] AFTER INSERT OR UPDATE OR DELETE AS
...;
Changement dans la structure disque ODS
Le codage du champ RDB$TRIGGER_TYPE (table RDB$TRIGGERS) a été étendu pour permettre la prise en charge
conditionnelle de plusieurs actions. Pour plus de détail, reportez vous au document readme.universal_triggers.txt
dans la branche /doc/sql.extensions de l’arborescence CVS de Firebird.
Note(s):
1. Les triggers anciens (à une action) sont totalement compatibles au niveau ODS avec FB 1.0.
2. Le codage (BLR) du champ RDB$TRIGGER_TYPE est dépendant de l’ordre d’apparition des actions, BEFORE
INSERT OR UPDATE et BEFORE UPDATE OR INSERT vont être codés différemment, même s’ils sont
sémantiquement équivalents et s’exécutent de la même manière.
3. Les deux variables contextuelles OLD et NEW sont disponibles dans les triggers multi-action. Si un appel du
trigger interdit l’utilisation de l’un d’eux (OLD pour une opération d’insertion), alors tous les champs de ce
contexte sont évalués à NULL. S’ils sont affectés à un contexte inapproprié, une exception runtime sera
déclenchée.
4. Les nouvelles variables booléennes INSERTING/UPDATEING/DELETING peuvent être utilisés pour vérifier le type
d’action en temps exécution. (Voir ci-dessous.)
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 9 (1.5) RECREATE VIEW
Exactement pareil que CREATE VIEW si l’objet vue n’existe pas déjà. S’il existe, RECREATE VIEW va tenter de le
supprimer et de créer un nouvel objet. RECREATE VIEW échoue si l’objet est référencé par ailleur.
Utilise la même syntaxe que CREATE VIEW.
(1.5) CREATE OR ALTER {TRIGGER | PROCEDURE }
Instruction qui va créer un nouvel objet trigger/procedure (s’il n’existe pas) ou bien le changer et le recompiler s’il
existe.. La syntaxe CREATE OR ALTER préserve les dépendances et les permissions existantes.
Cette nouvelle syntaxe est identique à CREATE TRIGGER | CREATE PROCEDURE, respectivement, excepté pour le
mot-clé “OR ALTER”.
(1.5) NULLs dans les contraintes uniques et indexes
Dmitry Yemanov
Il est désormais possible de définir une contrainte UNIQUE ou un unique index pour un champ n’ayant pas de
contrainte NOT NULL. Ceci est conforme aux spécifications SQL-99. Soyez prudent quant à l’utilisation de cette
définition si vous prévoyez de reconvertir votre base de donnée en FB 1.0 ou n’importe quelle version d’Interbase.
La logique d'essai est la suivante:
<unique constraint definition> ::=
<unique specification> ( <unique column list> )
<unique specification> ::= {UNIQUE | PRIMARY KEY}
1) Si <unique specification> spécifie PRIMARY KEY, alors considérer SC comme étant la condition suivante:
UNIQUE ( SELECT UCL FROM TN ) AND ( UCL ) IS NOT NULL
ii) Sinon, considérer SC comme suit:
UNIQUE ( SELECT UCL FROM TN )
où UNIQUE signifie que s’il n’y a pas deux enregistrements dans ( SELECT UCL FROM TN ) tels que la valeur de
chaque champ de la liste dans un enregistrement est non nulle et n’est pas distincte de la valeur du champ
correspondant dans l’autre enregistrement, alors le résultat est VRAI; autrement il est FAUX.
La contrainte permet l’existence uniquement d’enregistrements pour lesquels la condition mentionnée ci-dessus est
évaluée à VRAI. Cela signifie que la contrainte PRIMARY KEY n’autorise pas des valeurs à NULL tandis que la
contrainte UNIQUE autorise un nombre arbitraire de valeurs à NULL. Pour des résultats multi-colonne de ( SELECT
UCL FROM TN ), les règles générales pour les NULLs sont appliquées, c.à.d (1, NULL) est différent de (NULL, 1) et
(NULL, NULL) est distinct de tout autre (NULL, NULL).
D DS SQ QL L
(1.5) Expressions et variables comme arguments de procedure
Dmitry Yemanov
Les appels de procédure EXECUTE PROCEDURE ProcName(<Argument-list>) et
SELECT <Output-list> FROM ProcName(<Argument-list>) acceptent maintenant comme arguments des variables
locales (en PSQL) et des expressions (en DSQL et PSQL).
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 10 (1.5) Support des instructions de type CASE
Arno Brinkman
a) CASE
Permet la détermination de la valeur d’une colonne par un choix parmi un groupe de conditions exclusives.
Syntax
<case expression> ::=
<case abbreviation> | <case specification>
<case abbreviation> ::=
NULLIF <left paren> <value expression> <comma> <value expression> <right paren>
| COALESCE <left paren> <value expression> { <comma> <value expression> }... <right paren>
<case specification> ::=
<simple case> | <searched case>
<simple case> ::=
CASE <value expression> <simple when clause>...
[ <else clause> ]
END
<searched case> ::=
CASE <searched when clause>...
[ <else clause> ]
END
<simple when clause> ::= WHEN <when operand> THEN <result>
<searched when clause> ::= WHEN <search condition> THEN <result>
<when operand> ::= <value expression>
<else clause> ::= ELSE <result>
<result> ::= <result expression> | NULL
<result expression> ::= <value expression>
Exemples
i) simple
SELECT
o.ID,
o.Description,
CASE o.Status
WHEN 1 THEN 'confirmed'
WHEN 2 THEN 'in production'
WHEN 3 THEN 'ready'
WHEN 4 THEN 'shipped'
ELSE 'unknown status ''' || o.Status || ''''
END
FROM Orders o;
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 11ii) recherché
SELECT
o.ID,
o.Description,
CASE
WHEN (o.Status IS NULL) THEN 'new'
WHEN (o.Status = 1) THEN 'confirmed'
WHEN (o.Status = 3) THEN 'in production'
WHEN (o.Status = 4) THEN 'ready'
WHEN (o.Status = 5) THEN 'shipped'
ELSE 'unknown status ''' || o.Status || ''''
END
FROM Orders o;
b) COALESCE
Permet la détermination de la valeur d’une colonne à partir d’une succession d’expressions, la valeur retournée
étant la première expression évaluée à non - NULL.
Format
<case abbreviation> ::=
| COALESCE <left paren> <value expression> { <comma> <value expression> }... <right paren>
Syntax Rules
i) COALESCE (V1, V2) est équivalente à la spécification de type CASE suivante:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
ii) COALESCE (V1, V2,..., Vn), pour n >= 3, est équivalente à ce qui suit:
<case specification>:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2,...,Vn) END
Exemples
SELECT
PROJ_NAME AS Projectname,
COALESCE(e.FULL_NAME,'[> not assigned <]') AS Employeename
FROM
PROJECT p
LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER);
SELECT
COALESCE(Phone,MobilePhone,'Unknown') AS "Phonenumber"
FROM
Relations
c) NULLIF
Retourne NULL pour une sous-expression si elle est évaluée à une valeur spécifique, sinon retourne la valeur de la
sous-expression.
Format
<case abbreviation> ::=
NULLIF <left paren> <value expression> <comma> <value expression> <right paren>
Syntax Rules
NULLIF (V1, V2) est équivalente à la spécification de type CASE suivante:
CASE WHEN V1 = V2 THEN NULL ELSE V1 END
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 12Example
UPDATE PRODUCTS
SET STOCK = NULLIF(STOCK,0)
(1.5) Instruction SAVEPOINT conforme à SQL99
Nickolay Samofatov
L’instruction SAVEPOINT (connue aussi sous le nom de transactions imbriquées) fournie un moyen pratique pour
manipuler des erreurs de logique métier sans devoir annuler toute la transaction. Utilisable uniquement en DSQL.
Utilisez l’instruction SAVEPOINT pour identifier une étape dans la transaction à laquelle reprendra l’exécution en
cas d’annulation (rollback).
SAVEPOINT <identifier>;
<identifier> spécifie le nom du SAVEPOINT à créer. Après la création d’un SAVEPOINT, vous pouvez continuer
l’exécution, confirmer (COMMIT) la transaction, annuler (ROLLBACK) toute la transaction ou annuler la partie de la
transaction qui s’est exécutée depuis le SAVEPOINT.
Le nom d’un SAVEPOINT doit être unique au sein d’une même transaction. Si vous créez un deuxième SAVEPOINT
avec le même nom qu’un SAVEPOINT crée précédemment, ce dernier est effacé et ne fera plus l’objet d’un
ROLLBACK partiel.
ROLLBACK [WORK] TO [SAVEPOINT] <identifier>;
Cette instruction réalise les opérations suivantes:
- Annule les modifications réalisées depuis le SAVEPOINT
- Efface tous les SAVEPOINT crées depuis ce SAVEPOINT. Le SAVEPOINT nommé est preservé, vous permettant
ainsi de le désigner à plusieurs reprises comme point d’annulation partielle. Les SAVEPOINT définis
précédemment sont aussi préservés.
- Libère tous les verrous d’enregistrement implicites et explicites posés depuis le SAVEPOINT. Les autres
transactions qui ont tenté d’accéder aux enregistrements verrouillés après le SAVEPOINT doivent attendre
jusqu’à ce que la transaction soit confirmée (COMMIT) ou annulée (ROLLBACK). Les transactions qui n’avaient
pas encore tenté d’accéder aux enregistrements en question peuvent le faire et y auront accès
immédiatement.
Note: ce comportement est susceptible de changer dans les prochaines versions.
La journalisation induite par l’annulation d’un SAVEPOINT peut consommer un quantité importante de la mémoire
du serveur, surtout si vous modifiez les même enregistrements plusieurs fois dans la même transaction. Utilisez
l’instruction RELEASE SAVEPOINT pour libérer les ressources système consommées par la mise en oeuvre d’un
SAVEPOINT.
RELEASE SAVEPOINT <identifier> [ONLY];
L’instruction RELEASE SAVEPOINT supprime l’identificateur du SAVEPOINT du contexte de la transaction. À moins
que vous n’utilisiez le mot clé ONLY, tous les SAVEPOINT établis depuis le SAVEPOINT <identifier> sont aussi
supprimés.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 13Exemple d’utilisation de SAVEPOINT
create table test (id integer);
commit;
insert into test values (1);
commit;
insert into test values (2);
savepoint y;
delete from test;
select * from test; -- returns no rows
rollback to y;
select * from test; -- returns two rows
rollback;
select * from test; -- returns one row
SAVEPOINT interne
Par défaut, le moteur de base de donnée utilise un SAVEPOINT système automatique (non déclaré) pour réaliser
l’annulation d’une transaction. Quand vous utilisez une instruction ROLLBACK, toutes les modifications appliquées
dans le cadre de cette transaction sont annulées via un SAVEPOINT interne et la transaction est alors confirmée.
Cette logique réduit la quantité de mémoire à libérer pour un ROLLBACK de transaction.
Quand le volume des modifications appliquées dans le cadre d’un SAVEPOINT interne devient trop important (10^4-
10^6 enregistrements affectés) le serveur annule le SAVEPOINT interne et utilise un mécanisme nommé TIP pour
annuler la transaction si nécessaire. Si vous prevoyez un tel volume de modifications dans le cadre d’une seule
transaction, vous pouvez utiliser l’indicateur TPB isc_tpb_no_auto_undo pour éviter la création d’un SAVEPOINT
interne.
SAVEPOINT et PSQL
Implémenter le mécanisme des SAVEPOINT en PSQL ferait voler en éclat le règle d’atomicité des instructions,
incluant les appels de procédures stockées. Firebird fournit une gestion d’exception en PSQL pour annuler les
modifications appliquées dans une procédure stockée ou dans un trigger. Chaque SQL/PSQL instruction est exécutée
dans le cadre d’un SAVEPOINT interne lequel garantit que toute l’instruction sera exécuté avec succès ou bien
toutes les modifications seront annulées et une exception est déclenchée. Chaque bloc de gestion d’exception PSQL
est aussi pris en charge par un SAVEPOINT interne.
(1.5) Verrous explicites
Nickolay Samofatov
L’ajout de la clause optionnelle WITH LOCK permet, d’une manière limitée toutefois, de poser un verrou pessimiste.
Il convient de l’utiliser avec précaution et seulement dans le cas ou le jeu de lignes affectées est a) très petit
(idéallement, un singleton) et b) bien controlé par le code de l’application.
Le besoin d’utiliser des verrous pessimistes avec firebird est très peu fréquent et doit être bien compris avant de
l’utiliser.
Syntax
SELECT ... FROM <sometable>
[WHERE ...]
[FOR UPDATE [OF ...]]
WITH LOCK;
Si la clause WITH LOCK est valide, cela emp^chera tout autre transaction d’accéder aux lignes sélectionnées , tant
que la transaction durera.
Si la clause FOR UPDATE est utilisée, le verrou s’appliquera à chaque ligne, une par une, au moment du fetch. Il est
alors possible qu’un verrou soit valide alors même qu’une ligne est verrouillée par une autre transaction.
Il est essentiel de bien comprendre les niveau d’isolation et les attributs des transactions avant d’utiliser des
verrous explicites dans votre application.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 14La construction SELECT... WITH LOCK est disponible pour DSQL et PSQL. Cela ne peux fonctionner que sur un SELECT
de premier niveau, sur une seule table. Cela n’est pas disponible pour des jointures ou des sous SELECT. L’
operateur DISTINCT , la clause GROUP BY ou tout autre opération d’aggrégat ne peuvent être utilisés. Cela ne peut
être utilisé sur une vue ou le résultat d’une procédure stockée.
Comprendre la clause WITH LOCK
Comme le moteur prend en charge, chacun à leur tour, les enregistrements concernés par le verrou explicite, il
retourne soit le numéro de version de l’enregistrement commité, soit une exception.
Les paramètres du comportement du Wait et les conflits possibles sont les suivants :.
TPB mode Comportement
Les verrous explicites sont surchargés par les verous implicit ou explicite des tables
isc_tpb_consistency
et sont ignorés
Si un enregistrement est modifié par une transaction qui a été validée (commit)
isc_tpb_concurrency
depuis que la transaction essayant d’obtenir un verrous explicite, ou qu’une
+ isc_tpb_nowait
transaction active à modifié cet enregistrement, une exception de conflit de mise à
jour est renvoyée
Si l'enregistrement est modifié par une transaction qui a été validée (commit) depuis
isc_tpb_concurrency
que la transaction qui essaie d’obtenir un verrou est lancée, une exception de conflit
+ isc_tpb_wait
de mise à jour est renvoyée.
Si une transaction active est proprétaire de l’enregistrement (par un verrou explicite
ou par un verrou optimiste) la transaction tentant d’obtenir le verrou explicite va
attendre et tenter encore d’obtenir le verrou. Cela veut dire que si la transaction
bloquant l’enregistrement valide une version modifée de cet enregistrement, une
exception de conflit de mise à jour sera renvoyée.
Si une transaction active est proprétaire de l’enregistrement (par un verrou explicite
isc_tpb_read_committed
ou par un verrou optimiste) , une exception de conflit de mise à jour est renvoyée.
+ isc_tpb_nowait
Si une transaction active est proprétaire de l’enregistrement (par un verrou explicite
isc_tpb_read_committed
ou par un verrou optimiste), la transaction tentant d’obtenir le verrou explicite va
+ isc_tpb_wait
attendre et tenter encore d’obtenir le verrou, il n’y aura jamais de conflit de mise à
jour dans ce cas.
Quand une commande UPDATE est lancé sur un enregistrement qui est verroullé par une autre transaction, soit une
expetion est levée soit elle attend que la transaction qui verrouille l’enregistrement se termine, en fonction du TPB
mose. Le comportement du moteur est le même si l’enregistrement a été modifié par la transaction qui avait le
verrou.
Le moteur garantie que tous les enregistrements concernés par un verrou explicite sont réellement verrouillés et
correspondent à la condition WHERE, tant que les conditions de recherches ne dépendent pas d’une autre table, par
le biais d’une jointure (JOIN) ou d’une sous requête, etc. Le moteur garantie aussi qu’une ligne ne correspondant
pas aux conditions de recherche ne sera pas vérrouillée. Il peut tout de même y avoir des lignes qui satisfont les
conditions de recherche mais qui ne sont pas vérouillées. Cette situation peut arriver quand une autre transaction
parallèle valide (COMMIT) des changements pendant l’exécution de la commande de verrouillage.
Le moteur verrouille les lignes au moment du fetch. Cela à une grande impportance si vous verrouillez plusieures
lignes à la fois. De nombreuses méthodes d’accès aux bases de données Firebird renvoient par défaut des paquets de
quelques centaines de lignes.De ce fait, la plupart des composants d’accès aux données ne peuvent vous renvoyer
les lignes contenues dans le dernier paquet du fetch quand une erreur est renvoyée.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 15La clause FOR UPDATE permet d’éviter ce système de paquet en cache, avec l’option OF <column-names>.
Autrement, vous pouvez paramétrer vos composants d’accès pour n’avoir que des paquets d’une ligne. Cela vous
permet de traiter la ligne en cours de verrouillage avant que la procaine sont envoyée et verrouillée, ou pour gérer
les erreurs sans annuler (rollback) toute la transaction.
Annuler (roll back) une transaction avec un savepoint implicite ou explicite libère l’enregistrement mais ne prévient
pas les les transactions en attente. Les applications ne doivent pas dépendre de ce comportement car il va
certainement changer dans le futur.
Si les verrous explicites permettent de gérer des conflits de mises à jour inablituels, la contrepartie est que les
verrous mortels peuvent survenir rapidement si vous ne controlez pas rigoureusement votre stratégie. La plupart
des applications non pas besoin de verrous explicites. Les principaux intérêts des verrous explicites sont de (1)
eviter des conflits de mise à jour avec des aplication très chargées et (2) maintenir l’intégrité des objets impliqués
dans un contexte de cluster. Si votre usage de correspond pas à une de ces deux cas de figure, vous faites fausse
route, ce n’est pas la bonne manière de faire ce travail avec Firebird.
Les verrous explicites sont une fonctionnalité avancée, ne vous trompez pas sur sont usage ! Si une solution de ce
type peut être très importante pour des sites web gérant des centaines d’écritures concurrentes our pour des
systèmes d’ERP/CRM, la plupart des applications non pas besoin de travailler avec de telles conditions.
Exemples
i) (simple)
SELECT * FROM DOCUMENT WHERE ID=? WITH LOCK
ii) (plusieureslignes,traitées une à une avec un curseur DSQL)
SELECT * FROM DOCUMENT WHERE PARENT_ID=? FOR UPDATE WITH LOCK
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 16 (1.5) Amélioration du traitement des aggrégats
Arno Brinkman
Avant les groupes ne pouvaient être fait que sur des colonnes nommées. Avec Firebird 1.0, il est devenu possible
de grouper par une expression UDF. Avec 1.5, des extensions ont été mises en oeuvre et la clause GROUP BY peut
porter sur le rang de sortie des colonnes (l’ordre étant le même que pour ORDER BY, de gauche à droite) ou sur
diversses expressions.
NOTE: Toutes les expressions ne sont pas acceptées dans des listes GROUP BY. Par exemple, la concatenation n’est
pas permise.
Syntaxe Group By
SELECT ... FROM .... [GROUP BY group_by_list]
group_by_list : group_by_item [, group_by_list];
group_by_item : column_name
| degree (ordinal)
| udf
| group_by_function;
group_by_function : numeric_value_function
| string_value_function
| case_expression
;
numeric_value_function : EXTRACT '(' timestamp_part FROM value ')';
string_value_function : SUBSTRING '(' value FROM pos_short_integer ')'
| SUBSTRING '(' value FROM pos_short_integer FOR nonneg_short_integer
')'
| KW_UPPER '(' value ')'
;
Le group_by_item ne peut référencer une-fonction d’aggrégat (même incluse dans une expression) dans le même
contexte.
HAVING
La clause having ne peut utiliser que des fonctions d’aggregat ou des expressions valides qui font partie de la clause
GROUP BY. Avant il était possible d’utiliser une colonne qui ne faisait pas partie de la clause GROUP BY et d’utiliser
une expression non valide.
ORDER BY
Quand on utilise un aggregat, la clause ORDER BY n’est utilisable qu’avec une expression valide qui est un agrégat
ou une expression faisant partie de la clause GROUP BY. Avant il était possible d’utiliser une expression non valide.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 17Fonction d’agrégat dans une sous-requête
Il est maintenant possible d’utiliser une fonction d’agrégat ou une expression contenue dans la clause GROUP BY
dans une sous-requête.
Exemples
SELECT
r.RDB$RELATION_NAME,
MAX(r.RDB$FIELD_POSITION),
(SELECT
r2.RDB$FIELD_NAME
FROM
RDB$RELATION_FIELDS r2
WHERE
r2.RDB$RELATION_NAME = r.RDB$RELATION_NAME and
r2.RDB$FIELD_POSITION = MAX(r.RDB$FIELD_POSITION))
FROM
RDB$RELATION_FIELDS r
GROUP BY
1
SELECT
rf.RDB$RELATION_NAME AS "Relationname",
(SELECT
r.RDB$RELATION_ID
FROM
RDB$RELATIONS r
WHERE
r.RDB$RELATION_NAME = rf.RDB$RELATION_NAME) AS "ID",
COUNT(*) AS "Fields"
FROM
RDB$RELATION_FIELDS rf
GROUP BY
rf.RDB$RELATION_NAME
Mélanger des fonction d’agrégat de différents contextes
Des fonctions d’agrégat de différents contextes peuvent être utilisés dans une expression.
Exemple
SELECT
r.RDB$RELATION_NAME,
MAX(i.RDB$STATISTICS) AS "Max1",
(SELECT
COUNT(*) || ' - ' || MAX(i.RDB$STATISTICS)
FROM
RDB$RELATION_FIELDS rf
WHERE
rf.RDB$RELATION_NAME = r.RDB$RELATION_NAME) AS "Max2"
FROM
RDB$RELATIONS r
JOIN RDB$INDICES i on (i.RDB$RELATION_NAME = r.RDB$RELATION_NAME)
GROUP BY
r.RDB$RELATION_NAME
HAVING
MIN(i.RDB$STATISTICS) <> MAX(i.RDB$STATISTICS)
Note! Cette requête donne un résultat avec FB1.0, mais il est FAUX!
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 18Les sous-requêtes sont acceptées dans une fonction d’agrégat
Il est possible d’utiliser une expression select renvoyant un singleton dans une fonction d’agrégat.
Exemple
SELECT
r.RDB$RELATION_NAME,
SUM((SELECT
COUNT(*)
FROM
RDB$RELATION_FIELDS rf
WHERE
rf.RDB$RELATION_NAME = r.RDB$RELATION_NAME))
FROM
RDB$RELATIONS r
JOIN RDB$INDICES i on (i.RDB$RELATION_NAME = r.RDB$RELATION_NAME)
GROUP BY
r.RDB$RELATION_NAME
Fonctions d’agrégat empilées
Il est possible d’utiliser une fonction d’agrégat dans une fonction d’agrégat si la fonction d’agrégat la plus lointaine
est dans un contexte plus bas (voir exemple si dessus).
Grouper par indice
En utilisant l’indice d’une colone dans une clause GROUP BY ‘copie’ l’expression de la liste du select (comme dans
la clause ORDER BY). Cela signifie que lorsqu’un indice se réferre à une sous requête, la sous-requête est exécutée
au moins deux fois.
(1.5) La clause ORDER BY peut utiliser une expression ou la place des nulls
Nickolay Samofatov
La clause ORDER BY vous permet de spécifier n’importe quelle expression valide pour trier le résultat de la requête.
Si l’expression est constituée d’un simple nombre, il est interprété comme l’indice de la colonne.
L’ordre de classement des nullls peut être controlé. Les nulls peuvent être placés en premier (NULLS FIRST) ou en
dernier (NULLS LAST).
La valeur par défaut est NULLS LAST.
Syntaxe
SELECT ... FROM .... ORDER BY order_list ....;
order_list : order_item [, order_list];
order_item : <expression> [order_direction] [nulls_placement]
order_direction : ASC | DESC;
nulls_placement : NULLS FIRST | NULLS LAST;
Restrictions
! Si NULLS FIRST est specifié, aucun index ne sera utilisé.
! Le résultat d’un tri sur des valeurs issues d’une UDF ou une procédure stockée est imprévisible si les valeurs
retournées ne peuvent êtres utilisées pour déterminé un ordre de tri logique.
• Le nombre d’invocation d’un procédure est imprévisible que l’ordre de tri soit invoqué par l’expression elle
même ou par sont indice dans la liste des colonnes.
! Un ordre de tri sur une requête d’union ne peut être fait que sur l’indice d’une colonne.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 19Exemples
i)
SELECT * FROM MSG
ORDER BY PROCESS_TIME DESC NULLS FIRST
ii)
SELECT FIRST 10 * FROM DOCUMENT
ORDER BY STRLEN(DESCRIPTION) DESC
iii)
SELECT DOC_NUMBER, DOC_DATE FROM PAYORDER
UNION ALL
SELECT DOC_NUMBER, DOC_DATA FROM BUDGORDER
ORDER BY 2 DESC NULLS LAST, 1 ASC NULLS FIRST
P PS SQ QL L ( (L La an ng ga ag ge e p po ou ur r p pr ro oc cé éd du ur re es s s stto oc ck ké ée es s e ett d dé éc clle en nc ch he eu ur rs s) )
(1.5) EXECUTE STATEMENT
Alex Peshkov
Extension PSQL qui reçoit une chaîne de caractères qui doit être une commande SQL dynamique valide et l'exécute
comme si elle avait été soumise à DSQL.
Disponible dans les déclencheurs et les procédures stockées.
La syntaxe peut avoir trois formes.
Syntaxe 1
Exécuter <chaîne de caractères> comme une instruction SQL ne retournant aucune ligne de résultat, à savoir
INSERT, UPDATE, DELETE, EXECUTE PROCEDURE ou n’importe quel commande DDL excepté
CREATE/DROP DATABASE.
EXECUTE STATEMENT <string>;
Example
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);
DECLARE VARIABLE Par INT;
BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;
Sql = ’EXECUTE PROCEDURE ’ || Pname || ’(’;
Sql = Sql || CAST(Par AS VARCHAR(20)) || ’)’;
EXECUTE STATEMENT Sql;
END
Syntaxe 2
Exécuter <chaîne de caractères> comme une instruction SQL, retournant une seule ligne de résultat. Seules
les instructions SELECT singletons peuvent être exécutées sous cette forme de EXECUTE STATEMENT.
EXECUTE STATEMENT <string> INTO :var1, […, :varn] ;
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 20Example
CREATE PROCEDURE DynamicSampleTwo (TableName VARCHAR(100))
AS
DECLARE VARIABLE Par INT;
BEGIN
EXECUTE STATEMENT ’SELECT MAX(CheckField) FROM ’ || TableName INTO :Par;
IF (Par > 100) THEN
EXCEPTION Ex_Overflow ’Overflow in ’ || TableName;
END
Syntaxe 3
Exécuter <chaîne de caractères> comme une instruction SQL, retournant plusieurs lignes de résultat.
N’importe quelle instruction SELECT peut être exécutée sous cette forme de EXECUTE STATEMENT.
FOR EXECUTE STATEMENT <string> INTO :var1, …, :varn DO
<compound-statement>;
Example
CREATE PROCEDURE DynamicSampleThree (
TextField VARCHAR(100),
TableName VARCHAR(100))
RETURNING_VALUES (Line VARCHAR(32000))
AS
DECLARE VARIABLE OneLine VARCHAR(100);
BEGIN
Line = ’’;
FOR EXECUTE STATEMENT
’SELECT ’ || TextField || ’ FROM ’ || TableName INTO :OneLine
DO
IF (OneLine IS NOT NULL) THEN
Line = Line || OneLine || ’ ’;
SUSPEND;
END
Notes complémentaires sur EXECUTE STATEMENT
La chaîne de caractères de la commande ‘EXECUTE STATEMENT’ ne peut contenir aucun paramètre dans
aucune des variations de syntaxe. Toute substitution de variable, dans la partie statique de la commande SQL,
devrait être faite avant l’exécution de EXECUTE STATEMENT.
Il convient d'être prudent dans l'utilisation de cette fonctionnalité et tous les facteurs doivent être pris en
considération. L’usage de EXECUTE STATEMENT est conseillé seulement lorsque d’autres méthodes sont impossible,
ou lorsque la performance est encore plus mauvaise que sans EXECUTE STATEMENT.
EXECUTE STATEMENT est potentiellement risqué dans quelques cas:
! Il n'est pas possible de valider la syntaxe de la commande.
! Il n'y a aucun contrôle de dépendance pour découvrir si des tables ou des colonnes ont été supprimées.
! L’exécution sera lente car la commande a exécuter doit être préparée à chaque exécution.
! Les valeurs retournées sont strictement examinées pour assurer le type de données afin d’éviter des exceptions
imprévisible de transtypage. Par exemple, la chaîne de caractères ‘1234’ sera convertie en nombre entier, par
contre ‘ABC’ renverrait en erreur de conversion.
! Si les procédures stockées ont des privilèges spéciaux sur quelques objets, la commande dynamique soumise
dans la chaîne de caractères ne les héritera pas. Les privilèges sont limités à ceux accordés à l’utilisateur qui
exécute la procédure.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 21 (1.5) Nouvelles variables de contexte
Dmitry Yemanov
CURRENT_CONNECTION
et
CURRENT_TRANSACTION
Chacune de ces variables de contexte retourne l’identificateur du système de la connexion active ou le
contexte courant de la transaction, respectivement. Le type retourné est entier (INTEGER). Disponible dans
DSQL et PSQL. Parce que ces valeurs sont stockées sur la page d’en-tête de la base de données, elles seront
remises à zéros après une restauration de celle-ci.
Syntaxe
CURRENT_CONNECTION
CURRENT_TRANSACTION
Examples
SELECT CURRENT_CONNECTION FROM RDB$DATABASE;
NEW.TXN_ID = CURRENT_TRANSACTION;
EXECUTE PROCEDURE P_LOGIN(CURRENT_CONNECTION);
ROW_COUNT
Retourne un entier, le nombre de lignes affectées par la dernière commande DML. Disponible dans PSQL, dans le
contexte de procédure ou des déclencherus. Actuellement, la commande SELECT retournera zéro.
Syntax
ROW_COUNT
Example
UPDATE TABLE1 SET FIELD1 = 0 WHERE ID = :ID;
IF (ROW_COUNT = 0) THEN
INSERT INTO TABLE1 (ID, FIELD1) VALUES (:ID, 0);
Note: cette variable ne peut pas être employée pour vérifier les lignes affectées par la commande EXECUTE
STATEMENT.
SQLCODE et GDSCODE
Chaque variable de contexte retourne un nombre entier qui est le code numérique d’erreur pour l’exception active.
Disponible dans PSQL, dans la portée du bloc particulier d’exception. Tous les deux renverront zéros en dehors du
bloc.
La variable GDSCODE retourne une représentation numérique du code d’erreur de GDS(ISC), par exemple
‘335544349L’ retournera 335544349.
Un bloc d’exception 'WHEN SQLCODE' ou ‘WHEN ANY’ capturera une valeur différente de zéro pour la
variable SQLCODE et zéro pour la variable GDSCODE. Seul un bloc ‘WHEN GDSCODE’ peut retourner
une valeur différente de zéro pour la variable GDSCODE (et retournera zéro pour SQLCODE). Si une
exception définie par l’utilisateur est lancée, les deux variables SQLCODE et GDSCODE contiendront zéro,
indépendamment du type de bloc de manipulation d’exception.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 22Syntaxe
SQLCODE
GDSCODE
Example
BEGIN
...
WHEN SQLCODE -802 THEN
EXCEPTION E_EXCEPTION_1;
WHEN SQLCODE -803 THEN
EXCEPTION E_EXCEPTION_2;
WHEN ANY DO
EXECUTE PROCEDURE P_ANY_EXCEPTION(SQLCODE);
END
Voir également les Perfectionnements de Manipulation d’Exception, ci-dessous, et le document
LISEZMOI.Exception_handling dans la branche de firebird2/doc/sql.extensions de l’arbre CVS de Firebird .
INSERTING
UPDATING
DELETING
Trois expressions pseudo Booléennes qui peuvent être examinées pour déterminer le type d'opération DML étant
exécutée. Disponible dans PSQL, seulement dans les déclencheurs. Destiné à l'utilisation avec des déclencheurs
universels (voir le METADATA, ci-dessus).
Syntaxe
INSERTING
UPDATING
DELETING
Example
IF (INSERTING OR DELETING) THEN
NEW.ID = GEN_ID(G_GENERATOR_1, 1);
(1.5) Amélioration dans la gestion d’exception dans PSQL
Dmitry Yemanov
a syntaxe commune pour une commande EXCEPTION dans PSQL est:
EXCEPTION {[name] | [value]};
Les améliorations dans la version 1.5 permettent de
ii) Définir un message d’exécution pour une exception nommée.
iii) re-lancer (re-soulever) une exception capturée dans la portée du bloc d'exception
iv) Obtenir un code d'erreur numérique pour une exception capturée
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 231) Transmission de messages d’exécution d’exception
Syntaxe
EXCEPTION <exception_name> <message_value>;
Examples
i)
EXCEPTION E_EXCEPTION_1 'Error!';
ii)
EXCEPTION E_EXCEPTION_2 'Wrong type for record with ID=' || new.ID;
2) Re-soulèvement d’une exception
Note – ceci n'a aucun effet en dehors d'un bloc d'exception.
Syntaxe
EXCEPTION;
Examples
i)
BEGIN
...
WHEN SQLCODE -802 THEN
EXCEPTION E_ARITH_EXCEPT;
WHEN SQLCODE -802 THEN
EXCEPTION E_KEY_VIOLATION;
WHEN ANY THEN
EXCEPTION;
END
ii)
WHEN ANY DO
BEGIN
INSERT INTO ERROR_LOG (...) VALUES (SQLCODE, ...);
EXCEPTION;
END
3) Codes d’erreurs d’exécution
Voir SQLCODE / GDSCODE (au dessus).
(1.5) instructions LEAVE | BREAK
Termine l'exécution dans une boucle, faisant déplacer l'éxécution de la commande à l’instruction suivant
l’instruction END qui termine cette boucle. Disponible uniquement pour WHILE, FOR SELECT et FOR
EXECUTE, autrement une erreur sera retournée. Dans la définition SQL-99 standard le mot-clé LEAVE
remplace BREAK. Disponible dans les déclencheurs aussi bien que dans les procédures stockées.
Syntaxe
BEGIN
<statements>;
IF (<conditions>) THEN
BREAK;
<statements>;
END
NOTE LEAVE | BREAK et EXIT peuvent êtres employés dans les déclencheurs
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 24iv) Des instructions valide de PLAN peuvent être incluse dans les déclencheurs
Ignacio J. Ortega
Jusqu'à présent, un déclencheur contenant une instruction PLAN était rejetéepar le compilateur. Maintenant, un
plan valide peut être inclus et sera employé.
(1.5) Blocs BEGIN..END vides
Dmitry Yemanov
Les blocs BEGIN..END vides dans des modules PSQL sont maintenant légaux. Par exemple, on peut écrire maintenant
des modules comme :
CREATE TRIGGER BI_ATABLE FOR ATABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
END ^
(1.5) Déclarer et définir une variable locale dans une seule instruction
Claudio Valderrama
Simplifie la syntaxe et permet à des variables locales d'être déclarées et définies (ou initialisées) dans une
instruction.
Syntaxe
DECLARE [VARIABLE] name <variable_type> [{'=' | DEFAULT} value];
Example
DECLARE my_var INTEGER = 123;
(1.0) SELECT [FIRST (<integer expr m>)] [SKIP (<integer expr n>)]
(1.5) SELECT FIRST peut maintenant recevoir zéro comme argumen
FB 1.5 permet zéro comme argument de FIRST. Un ensemble vide sera retourné.
Retourne les premières m lignes de l’ensemble choisi. La clause facultative SKIP ignorera les premières n
lignes et retournera un ensemble de m lignes commençant en n+1. Sous la forme la plus simple, m et n sont
des nombres entiers mais n’importe quelle expression de FireBird qui retourne un nombre entier est valide.
Un identificateur qui retourne un nombre entier peut également être employé dans GDML, mais pas dans
SQL ou DSQL.
Des parenthèses sont nécessaires pour les arguments d'expression et facultatif autrement.
Ils peuvent également lier des variables, par exemple SKIP ? * FROM ATABLE retourne l’ensemble de
lignes résultant après avoir rejeté les n lignes du début, où n est passé dans la variable ‘?’. SELECT FIRST ?
COLONNEA, COLONNEB FROM ATABLE retourne les premières m ligne, ignorant le reste.
La clause FIRST est également facultative, c’est-à-dire que l'on peut inclure la clause SKIP dans une
commande sans FIRST et obtenir un résulta qui exclut les lignes désignées à SKIP.
Disponible dans SQL et DSQL excepté les endroits précedemment indiqués.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 25Examples:
SELECT SKIP (5+3*5) * FROM MYTABLE;
SELECT FIRST (4-2) SKIP ? * FROM MYTABLE;
SELECT FIRST 5 DISTINCT FIELD FROM MYTABLE;
deux problèmes avec SELECT FIRST
1. Ceci
delete from TAB1 where PK1 in (select first 10 PK1 from TAB1);
Supprimera toutes les lignes de la table. Aïe! Le sub-select est évalué a chaque 10 lignes candidates pour la
suppression, en les supprimant, puis prendra les 10 prochaines lignes et les supprimera également, jusqu’à ce que la
table soit vide.
Attention!
2. Une requête comme:
...
WHERE F1 IN ( SELECT FIRST 5 F2 FROM TABLE2 ORDER BY 1 DESC )
ne fonctionnera pas comme prévu, parce que l’optimisation exécutée par le moteur transformera la corrélation
WHERE…IN (SELECT…) en une instruction EXISTS. Il est évident que dans ce cas FIRST N n’est pas raisonnable:
WHERE EXISTS (
SELECT FIRST 5 TABLE2.F2 FROM TABLE2
WHERE TABLE2.F2 = TABLE1.F1 ORDER BY 1 DESC )
Les Charsets
Les Charsets
Ajouté dans la version 1.5
! Nouvelle collation: WIN1251_UA (à la fois le Russe et l’Ukrainien) pour le charset WIN1251.
! Conversion en majuscule par défaut du Charset WIN1251 corrigé.
! Nouvelle collation ISO_HUN (Hongrois) pour le charracter set ISO8859_2.
Nouveaux charsets ajoutés (pas de collations non binaires)
Blas Rodriguez Somoza
! DOS737 PC Grec
! DOS775 PC Baltique
! DOS858 Variante de Cp850 avec le caractère Euro (€)
! DOS862 PC Hébreu
! DOS864 PC Arabe
! DOS866 MS-DOS Russe
! DOS869 IBM Modern Grec
! WIN1255 Windows Hébreu
! WIN1256 Windows Arabe
! WIN1257 Windows Baltique
! ISO8859_3 Latin 3 (Espéranto, Maltais, Pinyi, Sami, Croate et d'autres)
! ISO8859_4 Latin 4 (Baltique, Greenlandic, Lappish)
! ISO8859_5 Cyrillique
! ISO8859_6 Arabe
! ISO8859_7 Grec
! ISO8859_8 Hébreu
! ISO8859_9 Turks
! ISO8859_13 Baltique
Ajouté dans la version 1.0
! Insensibilité à la case pour la collation hongroise, développé et testé par Sandor Szollosi (ssani@freemail.hu).
! Firebird supporte maintenant le charset ISO8859-2 (pour le tchèque).
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 26 LES EXTENTIONS AU LANGUAGE APPORTEES DEPUIS FIREBIRD 1.0.x
LES EXTENTIONS AU LANGUAGE APPORTEES DEPUIS FIREBIRD 1.0.x
Les extensions au langage ci après, introduites par Firebird 1.0.x, sont illustrées ici pour faciliter leur
compréhension.
(1.0) CURRENT_USER et CURRENT_ROLE
1
Ces deux nouvelles variables ont été ajouté pour référencer le USER et (si implementé ) le ROLE de la connexion
courante.
CREATE GENERATOR GEN_USER_LOG;
CREATE DOMAIN INT_64 AS NUMERIC(18,0);
COMMIT;
CREATE TABLE USER_LOG(
LOG_ID INT_64 PRIMARY KEY NOT NULL,
OP_TIMESTAMP TIMESTAMP,
LOG_TABLE VARCHAR(31),
LOG_TABLE_ID INT_64,
LOG_OP CHAR(1),
LOG_USER VARCHAR(8),
LOG_ROLE VARCHAR(31));
COMMIT;
CREATE TRIGGER ATABLE_AI FOR ATABLE
ACTIVE AFTER INSERT POSITION O AS
BEGIN
INSERT INTO USER_LOG VALUES(
GEN_ID(GEN_USER_LOG, 1),
CURRENT_TIMESTAMP,
'ATABLE',
NEW.ID,
'I',
CURRENT_USER,
CURRENT_ROLE);
END
CURRENT_USER est un alias DSQL pour USER qui apparaît dans le SQL standard. Ils sont identiques. CURRENT_USER
n’a pas d’avantages particuliers sur le mot clef USER
1
Si vous continuez à utiliser une base de données InterBase v.4.x ou 5.1 avec Firebird, le rôle n’est pas pris en
charge, ainsi CURRENT_ROLE sera égal à NONE (comme spécifié par la norme SQL en l’absence de rôle explicite)
même si l’utilisateur a indiqué un nom de rôle. Si vous utilisez IB 5.5, IB 6 ou Firebird, le ROLE indiqué est pris en
compte. Si le rôle n’existe pas, il est changé par NONE sans générer d’erreur.
Cela signifie qu’avec FB vous ne pouvez jamais avoir de ROLE invalide retourné par CURRENT_ROLE, parce qu’il sera
changé par NONE, à la différence d’IB ou la valeur erronée est gérée en interne, bien que ce ne soit pas visible par
SQL.
(1.0) DROP GENERATOR
Permet aux générateurs inutilisés d'être retirés de la base de données. L’emplacement sera libéré pour être
réutilisé par le prochain RESTORE. Disponible en SQL et DSQL.
DROP GENERATOR <nom du générateur>;
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 27 (1.0) GROUP BY UDF
Il est maintenant possible de grouper un SELECT selon le résultat d’une fonction UDF.
Ex :
select strlen(rtrim(rdb$relation_name)), count(*) from rdb$relations
group by strlen(rtrim(rdb$relation_name))
order by 2
Un effet secondaire des changements qui on permis de grouper sur un UDF est que, bien que vous ne pouviez
précédemment appeler une fonction Firebird intégrée, dans un GROUP BY, vous pouvez dorénavant formuler une
requête de cette manière :
select count(*)
from rdb$relations r
group by bin_or((select count(rdb$field_name) from rdb$relation_fields f
where f.rdb$relation_name = r.rdb$relation_name),1)
(1.0) RECREATE PROCEDURE
Cette nouvelle commande DDL vous permet de recréer une procédure stockée ayant le même nom qu'une
procédure existante en remplaçant cette dernière, et ce, sans avoir à supprimer d'abord la version précédente. La
syntaxe est identique à CREATE PROCEDURE.
Disponible en SQL et DSQL.
(1.0) RECREATE TABLE
Cette nouvelle commande DDL vous permet redéfinir la structure d’une table sans avoir besoin de la supprimer
avant. La syntaxe est identique à CREATE TABLE.
Notez que RECREATE TABLE ne conserve pas les données de l’ancienne TABLE.
Disponible en SQL et DSQL.
(1.0) SUBSTRING( <string expr> FROM <pos> [FOR <length>])
Fonction intégrée qui implémente la méthode SUBSTRING() de l’ANSI SQL. Cette fonction retourne un stream
comprenant le byte à la position <pos> et tous les bytes suivants, jusqu'à la fin de la chaîne. Si l'option FOR <length>
est spécifiée, la fonction ne retourne pas plus que la longueur indiquée par <length> selon la taille de la chaîne.
Le premier argument peut être n'importe quelle expression, constante ou identifiant qui équivaut à une chaîne.
<pos> doit être à un nombre entier.
<pos> démarre à 1, comme les autres commandes SQL.
Ni <pos> ni <length> ne peuvent être les paramètres d’une requête.
Parce que <pos> et <length> sont des positions de byte, l’identifiant peut être un blob binaire, ou un blob texte de
sous type 1 et dont le charset équivaut à un byte par caractère. Actuellement la fonction ne gère pas les blob
contenant un jeux de caractère Chinois (maximum de 2 byte/char) ou Unicode (maximum de 3 byte/char). Pour un
argument de type chaîne (contrairement à un blob), la fonction manipule N'IMPORTE QUEL charset.
Disponible en SQL et DSQL.
UPDATE ATABLE
SET COLUMNB = SUBSTRING(COLUMNB FROM 4 FOR 99)
WHERE ...
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 28Référez-vous également à la section concernant les Fonctions Externes (UDFs), pour plus de détails sur les
changements et les améliorations apportées aux fonctions qui manipulent les sous-chaînes dans la bibliothèque
standard UDF.
(1.5) Amélioration des commentaires sur une seule ligne
Dmitry Yemanov
Les commentaires d'une seule ligne peuvent être à n'importe quelle position dans la ligne, pas juste le premier.
Ainsi, dans la version 1.5, le symbole "--" peut être utilisé pour commenter l'extrémité d'une ligne d’un un script,
d’une procédure stockée, d’un trigger ou d’une requête DSQL. Il peut ainsi être utilisé pour commenter la partie
indésirable d’une requête. Tous les caractères depuis le symbole "--" jusqu'au prochain retour chariot, ou retour à
la ligne, seront ignorés.
...
WHERE COL1 = 9 OR COL2 = 99 -- OR COL3 = 999
(1.0) Nouveau symbole de commentaire
Claudio Valderrama
A utiliser dans les scripts, le DSQL, les procédures stockées et les triggers.
Exemple
-- Voici un commentaire
Ce nouveau symbole peut être utilisé pour commenter une simple ligne de code dans un script, une requête
DDL/DML, une procédure stockée ou un trigger.
La logique est d'ignorer des caractères comme suit :
1. Ignorer '--' si on le trouve comme premier caractère paire suivant un symbole de fin de ligne (LF sous Linux/Unix,
CRLF sous Windows)
2. Continuer à sauter les caractères jusqu'au prochain symbole de fin de ligne.
Cette forme de commentaire n'est pas prévue pour être combinée avec les blocs de commentaire (/* commentaire
*/). En d'autres termes, n'utilisez pas le type de commentaire '--' dans un bloc de commentaire, et n’utilisez pas un
bloc de commentaire dans un commentaire de type '--'.
SESSIONS ISQL INTERACTIVES: Gardez à l'esprit ceci, quand vous vous trouvez dans une session ISQL, ISQL accepte
que vous saisissiez une requête en plusieurs morceaux séparés, mais continus, en affichant l’invite 'CON>' jusqu'à ce
qu'il reçoive le symbole de terminaison (par défaut ';'). Si vous tapez le symbole '--' en début de ligne, les caractères
suivants seront ignorés jusqu’à ce que le marqueur de fin de ligne soit affiché à l’écran ou écrit dans le fichier de
sortie quand vous pressez sur la touche « entrer ». Il y a potentiellement un risque d’erreur si vous ajoutez plus tard
une suite, en s’attendant à ce qu’elle soit ignorée.
Des problèmes avec ISQL peuvent arriver, en raison des commandes spéciales d’ ISQL qui lui sont propres et qui
devraient seulement être analysées par lui. Si ces commandes ne sont pas reconnues en raison d’un positionnement
malencontreux du symbole "--", alors elles sont passées au moteur. Évidemment, le moteur ne comprend pas les
commandes ISQL SET et SHOW et les rejette.
(1.0) Alter Trigger n’incrémente plus le nombre de modifications sur une table
Quand le nombre de modifications de la structure d’une table atteint un maximum de 255, la base de données
devient indisponible. Un Backup/Resrore est alors nécessaire afin de réinitialiser ce compteur et ainsi rendre la base
de données disponible à nouveau. L’objectif de ce dispositif est de forcer le nettoyage de base de donnée lorsque la
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 29structure des tables a subit de trop nombreuses modifications, et pour ne pas inhiber les capacités du moteur de
base de données.
Auparavant, chaque fois qu’un trigger était activé/désactivé par une requête ALTER TRIGER, le compteur de la
table associé était incrémenté. Ceci limitait l’intérêt d’activer ou de désactiver un trigger pour des opérations
régulières puisque ça provoquait l’erreur trop rapidement.
Nouveaux Mots Réservés
Les nouveaux mots-clés Firebird suivants devraient être ajoutés à la liste des mots réservés publiés pour interBase
6.0.1.
BIGINT (1.5) CASE (1.5) CURRENT_CONNECTION (1.5)
CURRENT_ROLE CURRENT_TRANSACTION CURRENT_USER
(1.5)
RECREATE ROW_COUNT (1.5) RELEASE
SAVEPOINT
Les mots-clés suivants sont réservés pour un usage ultérieur :
ABS BOOLEAN BOTH
CHAR_LENGTH CHARACTER_LENGTH FALSE
LEADING OCTET_LENGTH TRIM
TRAILING TRUE UNKNOWN
Les mots-clés suivants étaient des mots réservés dans Firebird 1.0 et ne sont plus réservés dans Firebird 1.5 :
BREAK DESCRIPTOR FIRST
IIF SKIP SUBSTRING
Les mots non réservés suivants sont reconnus dans la version 1.5 comme mots-clés une fois utilisé dans leur contexte
respectif:
COALESCE DELETING INSERTING
LAST LEAVE LOCK
NULLIF NULLS STATEMENT
UPDATING USING
Les nouveaux mots-clés d’Interbase 6.5 et 7 (non réservés dans Firebird) devraient également être traités comme si
ils étaient réservés, pour la compatibilité :
BOOLEAN FALSE GLOBAL
PERCENT PRESERVE ROWS
TEMPORARY TIES TRUE
Fonctionnalités ISQL
Fonctionnalité “readline” de la console isql.
Fonctionnalité “readline” de la console isql.
Mark O'Donohue
Le support de l’historique des commandes (comme dans Unix) a été rajouté à la console ISQL. Maintenant vous
pouvez utiliser les flèches Haut et Bas pour reculer ou avancer dans l’historique des commandes tapées dans une
cession ISQL.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 30 Fonctions Définies par l'utilisateur (UDFs)
Dans ib_udf
Dans ib_udf
rpad (instring, length, padcharacter)
Juan Guerrero
Complète à droite la chaîne <instring> par le caractère <padcharacters> jusqu’à ce que la chaîne qui en résulte
atteigne une longueur de <length> caractères. La longueur de la chaîne en entré doit être inférieure 32766
caractères. La longueur <length> ne doit pas excéder 32765 caractères.
Declaration
DECLARE EXTERNAL FUNCTION rpad
CSTRING(80), INTEGER, CSTRING(1)
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_rpad' MODULE_NAME 'ib_udf';
lpad (instring, length, padcharacter)
Juan Guerrero
Complète à gauche la chaîne <instring> par le caractère <padcharacters> jusqu’à ce que la chaîne qui en résulte
atteigne une longueur de <length> caractères. La longueur de la chaîne en entré doit être inférieure 32766
caractères. La longueur <length> ne doit pas excéder 32765 caractères.
Declaration
DECLARE EXTERNAL FUNCTION lpad
CSTRING(80), INTEGER, CSTRING(1)
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf';
log (x, y)
Paul Vinkenoog
Cette fonction était affectée par un ancien bogue, par lequel les arguments étaient inversés. La fonction devait
retourner le logarithme base x de y mais retournait le logarithme base y de x. Cela a été corrigé.
Si cette fonction est utilisée dans vos applications, VEUILLEZ VERIFIER LE CODE DE VOTRE APPLICATION ! Il est
possible que la fonction retourne une valeur incorrecte si quelqu’un a inversé délibérément les paramètres afin
d’obtenir le bon résultat.
D Da an ns s ffb b_ _u ud dff
1. Les fonction *NVL et *NULLIF restent disponibles pour la compatibilité ascendante, mais sont dépréciées à
cause des nouvelles fonctions intégrées : CASE, COALESCE et NULLIF.
2. Il convient noter que le fbudf ne peut pas manipuler des chaînes plus grandes que 32 Kb - un octet par
caractère. Cette limite peut avoir des effets indésirables, en particulier si des chaînes sont concaténées
avant d'être passées à une fonction UDF prenant comme argument une chaîne de caractères. Si la chaîne
dépasse la limite, le comportement de la fonction peut être indéfini. La fonction peut renvoyer un résultat
incohérent ou le code UDF peut exécuter une opération illégale.
3. Si vous migrez une base de données créée avec Firebird 1.0.x qui utilise les fonctions «truncate » et
« round » de fbudf, leur déclaration de fonctionnera plus dans Firebird 1.5 parce que le nom du point
d’entré de ces fonctions a changé. Vous devrez supprimer ces fonctions puis les recréer à nouveau, en
utilisant les déclarations depuis le script « fbudf.sql » situé dans le répertoire « FB1.5/UDF ».
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 31 Nouveau Fichier de Configuration – firebird.conf
L Le e R Ré ép pe er rtto oiir re e R Ra ac ciin ne e d de e F Fiir re eb biir rd d
Le répertoire racine de votre installation de Firebird est utilisé dans plusieurs circonstances, à la fois au moment de
l’installation que par les sous-programmes du serveur, les paramètres de configurations et les clients qui en
dépendent. Parce qu’il existe plusieurs moyens d’indiquer au serveur ou trouver ces paramètre de configuration, les
développeurs et les administrateurs systèmes doivent comprendre la logique que suit le serveur au démarrage pour
retrouver ces paramètres.
Win32 Versions Superserver et Classic (serveur et client):
1) Variable d'environnement « FIREBIRD ».
2) Paramètre “RootDirectory” dans firebird.conf.
3) Base de registre:
HKLM\SOFTWARE\ SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance
puis chercher le paramètre « RootDirectory ».
4) Le niveau du répertoire au-dessus duquel l’exécutable du serveur est localisé.
Win32 Embedded:
1) Variable d'environnement « FIREBIRD ».
2) Paramètre “RootDirectory” dans firebird.conf.
3) Le dossier ou fbembed.dll (renommé en fbclient.dll) se trouve.
Linux Classic:
1) Variable d'environnement « FIREBIRD ».
2) Paramètre “RootDirectory” dans firebird.conf.
3) Le chemin d’installation par défaut (/usr/local/firebird).
Linux Superserver:
1) Variable d'environnement « FIREBIRD ».
2) Paramètre “RootDirectory” dans firebird.conf.
3) Le niveau du répertoire au-dessus duquel l’exécutable du serveur est localisé (retrouvé par symlink
"/proc/self/exe", if disponible)
4) Le chemin d’installation par défaut (/usr/local/firebird)
P Pa ar ra am mè èttr re es s
Les valeurs par défaut sont applicables à la plupart des paramètres. Les noms et les valeurs des paramètres sont
sensibles à la case sous Linux mais pas sous Windows. Pour affecter n'importe quel paramètre à une valeur autre que
celle par défaut, supprimez le symbole de commentaire (#) et modifiez la valeur. Vous pouvez éditer le fichier de
configuration alors que le serveur fonctionne. Toutefois, pour appliquer les changements de configuration, il est
nécessaire d'arrêter et de relancer le service.
Les entrées sont de la forme :
Nom_du_parametre valeur
• « Nom_du_parametre » est une chaîne qui ne comporte aucun espace et dont le nom correspond à une propriété
du serveur à configurer.
• « value” peut être un nombre, un booléen (1=Vrai, 0=Faux) ou une chaîne qui correspond à la valeur du
paramètre.
Les paramètres liés au système de fichier
RootDirectory
Chaîne de caractères, le chemin d’accès complet vers le dossier racine dans le système de fichier local. Il devrait
rester commenté à moins que vous vouliez obliger la procédure de démarrage à ignorer le chemin d'accès au
répertoire racine de l'installation du serveur de Firebird, qu'il détecterait autrement par lui-même.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 32 DatabaseAccess
Support de l’accès à la base de données par alias. Dans des versions précédentes, le serveur pouvait se connecter à
n'importe quelle base de données dans le système de fichier local et les applications clientes pouvaient indiquer le
chemin d’accès complet vers la base de donnée. Ce paramètre fournit des options pour restreindre l'accès du
serveur à une base de donnée, en indiquant uniquement un alias, ou un chemin se trouvant dans l’arborescence
d’un dossier spécifique.
DatabaseAccess peut être « None », « Restrict » ou « Full ».
Full (par défaut) permet à des fichiers de base de données d'être consultés n'importe où dans le système de fichier
local.
None Autorise le serveur à se connecter uniquement aux bases données listées dans le fichier « aliases.conf ».
Restrict vous permet de restreindre les bases des données disponibles à une liste de dossiers. Indiquez une liste
d’un ou de plusieurs dossiers séparés par des points-vigules, pour restreindre l’accès à un ou plusieurs répertoires.
Par exemple :
Unix : /db/databases ;/userdir/data
Windows : D:\data
Les chemins d’accès relatifs, sont traités comme relatifs au chemin d’accès que le serveur courant identifie comme
répertoire racine. Par exemple, sous Windows, si le répertoire racine est « C:\Program Files\Firebird », alors la
valeur suivante autorisera le serveur à accéder uniquement aux fichiers de base de données localisés dans le
répertoire « C :\Program Files\Firebird\userdata » :
DatabaseAccess = Restrict userdata
Notez que l’implémentation de ce paramètre comporte un bogue qui vous oblige à utiliser l’option « Restrict » si
vous répliquez n’importe quelle base de données sur le serveur (CREATE SHADOW …).
ExternalFileAccess
Anciennement external_file_directory dans isc_config/ibconfig mais la syntaxe a changé.
Fournit trois niveaux de sécurité concernant EXTERNAL FILES (les fichiers textes au format fixe utilisés comme les
tables d’une base de données). La valeur est une chaîne de caractères, qui peut prendre les valeurs None, Full ou
Restrict.
None (la valeur par défaut) désactive l’usage des fichiers externes sur votre serveur.
Restrict fournit la possibilité de restreindre l'emplacement des fichiers externes accessibles par la base de données,
à une liste de dossiers spécifiques. Indiquez une liste d’un ou de plusieurs dossiers, séparés par des points virgules
(;) correspondants aux répertoires dans les quels ces fichiers peuvent être stockés.
Par exemple :
Unix: /db/extern;/mnt/extern
Windows: C:\ExternalTables
Les chemins d’accès relatifs, sont traités comme relatifs au chemin d’accès que le serveur courant identifie comme
répertoire racine. Par exemple, sous Windows, si le répertoire racine est « C:\Program Files\Firebird », alors la
valeur suivante autorisera la base de données à accéder uniquement aux fichiers externes se trouvant dans le
répertoire « C:\Program Files\Firebird\userdata\ExternalTables » :
ExternalFileAccess = Restrict userdata\ExternalTables
Full permet aux fichiers externes d'être accessibles n'importe où sur le système.
Veuillez également consulter les AVERTISSEMENTS sur le paramètre UdfAccess, ci après.
UdfAccess
Anciennement external_function_directory dans isc_config/ibconfig mais la syntaxe a changé.
UdfAccess ne fait pas que renommer le précédent paramètre, mais modifie également la manière de renseigner les
valeurs. L’objectif est d’étendre le niveau de protection des librairies externes qui sont potentiellement la cible
reconnue d’intrusions malveillantes. UdfAccess peut prendre les valeurs None, Restrict ou Full.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 33Restrict (valeur par défaut) maintient la compatibilité du paramètre external_function_directory dans Firebird 1.0
afin de limiter l'emplacement des bibliothèques externes accessibles aux emplacements spécifiques du système de
fichier. Fournissez une liste d'un ou plusieurs dossiers, séparés par des points virgule (;), dans lesquels les UDFs, les
filtres BLOB et les informations de « charset » doivent se trouver.
Par exemple :
Unix: /db/extern;/mnt/extern
Windows: C:\ExternalModules
Les chemins d’accès relatifs, sont traités comme relatifs au chemin d’accès que le serveur courant identifie comme
répertoire racine. Par exemple, sous Windows, si le répertoire racine est « C:\Program Files\Firebird », alors la
valeur suivante autorisera le serveur à manipuler uniquement les fichiers se trouvant dans le répertoire
« C:\Program Files\Firebird\userdata\ExternalModules» :
ExternalFileAccess = Restrict userdata\ExternalModules
None Désactive l’utilisation des bibliothèques externes définies pour l'utilisateur.
Full permet d’accéder aux bibliothèques externes ou que soit l’endroit ou elles trouvent sur le système.
AVERTISSEMENT :: Evitez de déclarer des dossiers personnalisés pour UdfAccess et ExternalFileAccess qui auraient
des dossiers en commun dans leur arborescence. Les paramètres par défaut sont fiables. Si vous déclarez des
dossiers en commun pour ces deux paramètres, le serveur peut être facilement piraté pour exécuter du code
malveillant. Un exemple de ce qu’il faut éviter :
UdfAccess = UDF; /bad_dir
ExternalFileAccess = /external; /bad_dir/files
UdfAccess et ExternalFileAccess ont ici un sous dossier en commun : « /bad_dir/files », où quelqu'un pourrait placer
le fichier externe /bad_dir/files/hackudf.ainsi et exécutez son propre code sur le système affecté.
Les paramètres liés aux ressources
CpuAffinityMask
Anciennement cpu_affinity dans isc_config/ibconfig.
Dans la version SuperServer de Firebird pour Windows, il y a un problème qui affecte les systèmes SMP (Symmetric
MultiProcessing), le système d’exploitation alterne continuellement le processus du serveur entre les processeurs du
système, ce qui détériore les performances. Vous pouvez utiliser ce paramètre pour indiquer à Firebird de n’utiliser
qu’un processeur.
ATTENTION Firebird Super Serveur, jusqu’à la version 1.5 inclus, ne supporte pas l’Hyperthreading de quelques modèles
récents de carte mère sous Windows. Pour éviter des problèmes de répartition, vous pourriez avoir à désactiver
l’hyperthreading au niveau du bios directement.
CpuAffinityMask prend comme valeur un entier, le masque CPU.
Exemple
CpuAffinityMask = 1
Ne tourne que sur le premier processeur (CPU 0).
CpuAffinityMask = 2
Ne tourne que sur le second processeur (CPU 1).
CpuAffinityMask = 3
Tourne à la fois sur premier et le second processeur.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 34 M Mé étth ho od de e d de e c ca allc cu ull d du u m ma as sq qu ue e
Vous pouvez utiliser ce paramètre pour faire tourner le serveur sur n’importe quel processeur (Classic Server), ou
sur n’importe quel combinaison de processeurs du système.
Considérez les processeurs comme une tableau numéroté de 0 à n-1, tel que n représente le nombre de processeurs
installés et i l’indice du processeur dans ce tableau. M est un autre tableau, contenant le masque de chaque
processeur sélectionné. La valeur A est la somme des valeurs de M.
Utilisez la formule suivante pour obtenir M est calculer la valeur de A.
I
M = 2
i
A = M + M + M . . .
1 2 3
Par exemple, pour sélectionner le premier et le quatrième processeur (processeurs 0 et 3), le formule de calcul est :
0 3
A = 2 + 2 = 1 + 8 = 9
DeadlockTimeout
Anciennement deadlock_timeout dans isc_config/ibconfig.
Nombre de secondes (nombre entier) que le « lock manager » attendra après qu'un conflit ait été détecté, avant de
nettoyer les « Locks » des processus morts et de scanner à nouveaux, à la recherche d’autre deadlock.
Normalement, le moteur détecte les deadlock immédiatement. La minuterie ne se déclenche que si quelque chose
tourne mal.
La valeur par défaut de 10 secondes est adaptée à la plus part des situations. Baisser cette valeur n’améliore pas
forcément la rapidité avec laquelle, un problème de deadlock retourne une exception de conflit. Si cette valeur est
trop basse, cela peut engendrer un balayage trop fréquent qui peut nuire aux performances du système.
DefaultDbCachePages
Anciennement database_cache_pages dans isc_config/ibconfig.
Nombre de pages (entier) par défaut à allouer en mémoire par base de données. La valeur prédéfinie peut être
surchargée au niveau de la base de donnée.
La valeur par défaut est 2048 pages pour la version SuperServer, et 75 pages pour la version ClassicServer. Le cache
SuperServeur est partagé avec toutes les connexions, pour la version ClassicServer un cache différent est alloué par
connexion.
EventMemSize
Entier représentant le nombre d’octets de mémoire réservés au gestionnaire d’événements. La valeur par défaut est
65536 (64 Kb).
LockAcquireSpins
Anciennement lock_acquire_spins
Ne concerne que la version ClassicServer tournant sur un système SMP. Dans la version CLassicServer, seul un
processus client à la fois peut accéder à la table des locks. C’est un mutex qui contrôle cette règle. Les processus
Clients interrogent le mutex de façon conditionnelle ou inconditionnelle. Si c’est de façon conditionnelle, la
tentative échoue et l’opération doit être renouvelée. Si c’est de façon inconditionnelle, LockAcquireSpins défini le
nombre de tentatives qui seront effectuées si l’action sur le mutex est conditionnelle.
Entier, La valeur par défaut est 0 (Inconditionnel). Il n’y a pas de recommandations particulières en ce qui concerne
le maximum et le minimum.
LockHashSlots
Anciennement lock_hash_slots in isc_config/ibconfig.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 35Utilisez ce paramètre pour optimiser la liste de hachage des locks. En cas de chargement conséquent, le débit
devrait être amélioré en faisant en sorte que le nombre slots disperse la liste en des chaînes de hachage plus
petites. Il est recommandé de définir un nombre premier pour cette valeur. La valeur par défaut est 101.
LockGrantOrder
Anciennement lock_grant_order dans isc_config/ibconfig.
Quand une connexion veut verrouiller un objet, elle obtient un « ticket » qui indique l’objet et le niveau de
verrouillage demandé. Chaque objet verrouillé possède un verrou. Le « ticket » et le verrou sont connectés l’un à
l’autre tant que la requête est en cours d’exécution, ou en attente de verrouillage. Le paramètre LockGrantOrder
est un booléen. La valeur par défaut (1=Vrai) indique que les demandes de verrouillage doivent être accordées selon
la méthode : premier arrivé premier servi. La valeur fausse (0), émule le comportement d’Interbase v3.3 qui
accorde le verrou dès que cela devient possible. Cela peut engendrer des verrous surchargés en demandes.
LockMemSize
Ce paramête de type entier représente le nombre de bits de mémoire partagée allouée au gestionnaire de verrous.
Pour un serveur Classic, ce paramêtre donne l’allocation initiale qui grandira dynamiquement tant que la mémoire
ne sera pas pleine. Si il y a beaucoup de connections ou un gros cache de pages, augmentez cette valeur pour éviter
ces erreurs.
Avec SuperServer, la mémoire alouée pour le gestionnaire de verrous n’augmentera pas.
La taille par défaut pour Linux et Solaris est 98304 bits (96 Kb). Pour Windows, c’est 262144 (256 Kb).
LockSemCount
Valeur entière, qui spécifie le nombre de sémaphores disponibles à la communication interprocessus (IPC). La
valeur par défaut est 32. Modifier cette valeur pour augmenter ou réduire le nombre de sémaphores disponibles.
SortMemBlockSize
Ce paramètre vous permet de configurer, en octets, la taille de chaque bloc de mémoire utilisé par le module de tri
de mémoire intégré. La valeur par défaut est 1Mo ; vous pouvez modifier cette valeur dans la limite du paramètre
SortMemUpperLimit (cf ci dessous).
SortMemUpperLimit
La quantité maximum de mémoire, en octets, qui doit être allouée par le module de tri de mémoire intégré. Au
moment de l’installation la valeur par défaut est 67108864 octets (64Mo) pour la version SuperServer et 8388608
(8Mo) pour le serveur classique.
ATTENTION Pour la version ClassicServer, gardez à l’esprit qu’augmenter la taille des blocs ou la limite maximum
affectera chaque connexion client serveur en augmentant la consommation en mémoire du serveur par voie de
conséquence.
Paramètres liés à la communication
ConnectionTimeout
Anciennement connection_timeout dans isc_config/ibconfig.
Nombre de secondes d’attente avant d’abandonner une tentative de connexion.
La valeur par défaut est 180.
DummyPacketInterval
Anciennement dummy_packet_interval dans isc_config/ibconfig.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 36Ceci est le nombre de secondes (Entier) que le serveur devrait attendre avant d’envoyer un paquet factice sur une
connexion cliente silencieuse afin de vérifier sont état.
N’UTILISEZ PAS CETTE OPTION sur un serveur Win32 qui reçoit des connections clientes TCP/IP. Cela provoque
l’augmentation persistante de la mémoire Kernel (kernel non-paged memory) qui peut faire figer ou planter
Windows sur la partie cliente.
Les explications se trouvent ici:
http://support.microsoft.com/default.aspx?kbid=296265
Sous Windows, le TCP/IP est le seul moyen de détecter et déconnecter des clients inactifs quand l’un ou l’autres
des protocoles NamedPipes (NetBEUI), XNET ou IPC sont utilisés. Il n’y a pas de solution connue sur les systèmes
POSIX.
Normalement, Firebird utilise l’option SO_KEEPALIVE sur le socket pour référencer les connexions actives. Si vous ne
voulez pas d’un timeout de 2 heures, si une connexion reste inactive, ajustez les options de votre système
d’exploitation de cette manière :
! Sur les OS de type UNIX, modifiez le contenu de /proc/sys/net/ipv4/tcp_keepalive_*.
! Sous Windows, suivez les instructions cet article:
http://support.microsoft.com/default.aspx?kbid=140325
La valeur par défaut devrait être 0 et pas 60 comme cela était le cas dans Firebird v1.0 et la plus part des « Release
Candidate » de la version 1.5. Sur les systèmes ou vous avez à activer la détection des connexion inactives par
l’envoi d’un paquet factice vous devez définir cette variable à 60.
RemoteServiceName
Par défaut = gds_db
RemoteServicePort
Ces deux paramètres fournissent la possibilité de modifier le nom du service TCP/IP et le port qui permettent de
recevoir les demandes de connexion clientes, si ceux-ci diffèrent des valeurs par défaut lors de l’installation
(gds_db/tcp 3050).
Changez un de ces paramètres mais pas les deux à la fois. Le paramètre RemoteServiceName est le premier examiné
pour rechercher une correspondance dans le fichier des services. Si il n’y a aucune correspondance, le port 3050,
définit par défaut lors de l’installation, est utilisé.
Notez que si un port est défini dans la chaîne de connexion TCP/IP, celui il aura toujours la priorité sur le paramètre
RemoteServicePort.
RemoteAuxPort
Le comportement hérité d’Interbase qui consiste à envoyer les notifications d’événements au travers d’un port
TCP/IP aléatoire, à été la source continuelle d’erreurs réseau et de conflits avec les firewalls, jusqu’au point de
faire tomber le serveur sous certaines conditions. Ce paramètre vous permet de configurer un port unique pour
véhiculer toutes les notifications d’événements.
La valeur par défaut lors de l’installation (0) maintient le comportement aléatoire d’allocation du port TCP/IP.
RemoteBindAddress
Par défaut, les clients peuvent se connecter depuis n’importe quelle interface réseau par laquelle le serveur reçoit
du trafic. Ce paramètre permet au service Firebird d’accepter les connections entrantes depuis une interface réseau
particulière et de rejeter les autres. Cela devrait aider à éviter les problèmes de sous réseaux lorsque le serveur
gère le trafic au travers de plusieurs cartes réseau.
Valeur chaîne, au format IP (séparé par des points), laisser la valeur vide si vous souhaiter que Firebird reçoive
toutes les demandes de connexion.
TcpRemoteBufferSize
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 37Le moteur reçois les requêtes du client et peut retourner de nombreux enregistrements en un seul paquet de
données. Plus la taille du paquet est grande, plus le nombre d’enregistrements retournés dans un paquet est
important. Manipulez ce paramètre avec précaution et en ayant une totale compréhension de ces effets sur les
performances du réseau ! si vous souhaitez agrandir ou diminuer la taille du paquet TCP/IP utilisé pour envoyer et
recevoir les buffers. Ceci affecte à la fois le client et le serveur. La valeur est un entier (taille du paquet en octets)
dans un intervalle de 1448 à 32768. La valeur par défaut lors de l’installation est de 8192.
Paramètres spécifiques à POSIX
LockSignal
Un paramètre de type Integer: le numéro du signal UNIX à utiliser pour la communication entre processus. Par
défaut: 16.
RemoteFileOpenAbility
A n'utiliser qu'avec une extrême précaution
Un paramètre booléen qui, s'il est vrai, permet au moteur d'ouvrir des fichiers de base de données situés sur une
partition montée par NFS. Comme le système de fichiers est dans ce cas hors du contrôle du système local, il s'agit
d'une caractéristique à haut risque qui ne devrait jamais utilisée pour ouvrir une base de données en
lecture/écriture dont la destruction aurait la moindre importance.
Par défaut, il vaut 0 (False, disabled), et il devrait être laissé sur cette valeur à moins de comprendre
réellement son effet.
TcpNoNagle
Ce paramètre s'appelait tcp_no_nagle dans isc_config/ibconfig.
Sur Linux, par défaut, la bibliothèque sockets minimise les écritures physiques en mettant en tampon les écritures
avant de transmettre réellement les données, au moyen d'un algorithme interne (implémenté sous le contrôle de
l'option TCP_NODELAY de la connexion socket), connu sous le nom d'algorithme de Nagle. Il a été conçu pour éviter
des problèmes liés aux paquets de taille réduite (tinygrams) sur des réseaux lents.
Par défaut, TPC_NODELAY est activé (valeur 0) lorsque le super-serveur Firebird est installé sur Linux. Sur des
réseaux lents, sa désactivation peut améliorer les performances. Attention à la double négation: définir le
paramètre comme Vrai pour désactiver TCP_NODELAY et Faux pour l'activer.
Dans les versions v1.5 et antérieures, cette caractéristique n'est active que pour le Super-serveur.
Paramètres spécifiques à Windows
CreateInternalWindow
Le protocole "Windows local" utilise une fenêtre cachée pour la communication inter processus entre le client local
et le serveur. Cette fenêtre d'IPC est créée au lancement du serveur lorsque CreateInternalWindow est vrai (1,
valeur par défaut). La définir à 0 (off) pour exécuter le serveur sans fenêtre et désactiver ainsi le protocole local.
Lorsque le protocole local est désactivé, il devient possible d'exécuter des instances multiples du serveur
simultanément.
DeadThreadsCollection
Ce paramètre du planificateur de processus légers (threads) de Windows est de type Integer et fixe le nombre
de cycles de commutation prioritaires (cf PrioritySwitchDelay, infra) que le planificateur doit exécuter avant
de détruire ou fermer un processus léger.
La destruction ou fermeture immédiate des "worker threads" nécessiterait un sémaphore et un appel bloquant,
causant une surcharge significative. Pour éviter ceci, un planificateur de processus légers maintient une réserve de
processus légers. Lorsqu'un processus léger a terminé sa tâche, il est marqué comme inactif (idle). Le processus
léger inactif est détruit ou fermé après n itérations de la boucle du planificateur, où n est la valeur du paramètre
DeadThreadsCollection.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 38Sur un serveur desservant un très grand nombre de connexions (un grand nombre de centaines ou plus), il est
préférable d'accroître la valeur par défaut au-delà de 50.
GuardianOption
Paramètre booléen utilisé sur les serveurs Windows pour déterminer si le processus gardien (Guardian) doit
redémarrer le serveur à chaque fois que ce dernier s'arrête de manière anormale. Par défaut, l'installation prévoit
ce redémarrage (1 = True). Pour désactiver cette fonction de redémarrage, définir ce paramètre sur non. (0 =
False).
IpcMapSize
Ce paramètre s'appelait server_client_mapping dans ibconfig
Taille en octets de la région allouée à un client dans le fichier mis en mémoire (memory-mapped) pour la
communication interprocessus (IPC) dans le modèle de connexion utilisé pour la connexion "Windows local". Sans
équivalent sur les autres plateformes.
C'est un paramètre entier, compris entre 1024 et 8192, avec une valeur par défaut de 4096.
Accroître la taille de cette région peut améliorer les performances lors de l'accès à des jeux de résultats très larges
ou très volumineux, comme ceux contenant des BLOBs multimédia.
NOTE il n'est plus possible de modifier ce paramètre au moyen d'un dialogue de l'icône du Gardien dans la
barre de tâches.
IpcName
Valeur par défaut: FirebirdIPI
Ce paramètre définit le nom de la région de mémoire partagée utilisée comme moyen de transfert des données dans
le protocole local.
La valeur par défaut de la version 1.5 (FirebirdIPI) n'est pas compatible avec les versions plus anciennes de
Firebird, ni avec Interbase®. Il est possible de définir ce nom à la valeur InterBaseIPI pour rétablir la
compatibilité, si nécessaire.
UnflushedWrites
Ce paramètre a été introduit dans la version 1.5 pour contourner un bogue dans les systèmes d'exploitation Windows
Server, du fait duquel les écritures asynchrones n'étaient jamais validées sur disque sauf en cas d'arrêt normal du
serveur (les écritures asynchrones ne sont pas supportées sur Windows 9x ou Me). De ce fait, dans les systèmes
fonctionnant en continu, les écritures asynchrones n'étaient jamais validées sur disque.
Ce paramètre détermine à quelle fréquence les pages retenues sont enregistrées sur disque lorsque les écritures
forcées sont désactivées (lorsque l'écriture asynchrone est activée). Sa valeur est un entier qui définit le nombre de
pages à retenir avant qu'une écriture forcée sur disque ne soit planifiée à la transaction suivante. Ce paramètre vaut
100 dans les installations sur Windows est -1 (désactivé) sur toutes les autres plateformes, qui n'ont pas ce
problème.
Si la fin du cycle de MaxUnflushedWriteTime (cf infra) est atteinte et que le compte des pages retenues
n'atteigne MaxUnflushedWrites , l'écriture forcée est exécutée immédiatement est le nombre de pages retenues
est remis à zéro.
MaxUnflushedWriteTime
Ce paramètre définit l'intervalle de temps maximal entre deux écritures forcées lorsque les écritures forcées sont
désactivées (lorsque l'écriture asynchrone est activée). Sa valeur est un entier qui définit l'intervalle, en secondes,
entre la dernière écriture disque forcée et le positionnement d'un drapeau indiquant la nécessité d'une écriture
forcée à la prochaine validation (commit) d'une transaction. La valeur par défaut est de 5 secondes sous Windows
et de -1 (désactivé) pour toutes les autres plateformes.
PrioritySwitchDelay
Ce paramètre du planificateur de processus légers (threads) de Windows est un entier qui définit la durée en
millisecondes qui doit s'écouler avant que la priorité d'un processus léger inactif ne soit réduite à LOW ou que la
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 39priorité d'un processus léger actif ne soit élevée à HIGH. Une itération de cette séquence de commutation
représente un cycle du planificateur de processus légers.
La valeur par défaut est de 100ms, à la suite d'essais sur les processeurs Intel PIII/P4. Sur des processeurs avec des
horloges plus lentes, un délai plus important est requis.
PriorityBoost
Paramètre entier qui définit le nombre de cycles additionnels donnés à un processus léger lorsque sa priorité est
élevée à HIGH. La valeur par défaut de l'installation est de 5.
ProcessPriorityLevel
Ce paramètre s'appelait server_priority_class dans ibconfig
Niveau/classe de priorité du processus serveur. Ce paramètre remplace le paramètre server_priority_class
des versions antérieures à la 1.5, avec une nouvelle implémentation.
Les valeurs sont des entiers:
• 0 – priorité normale
• valeurs positives : haute priorité (identique au commutateur –B[oostPriority] des options configure et
start de instsvc.exe).
• valeurs négatives : priorité réduite.
Note: il est souhaitable de tester soigneusement le système après toute modification de cette valeur pour s'assurer
que la modification a réellement améliorée la réponse du moteur aux requêtes.
RemotePipeName
Ce paramètre ne concerne que les connexions NetBEUI
Ce paramètre est une chaîne de caractères représentant le nom du tube nommé utilisé comme transport par le
protocole NetBEUI. Le nom du tube est équivalent à un numéro de port pour TCP/IP. La valeur par défaut
(interbas) est compatible avec les versions antérieures de Firebird et avec InterBase ®.
Paramètres pour la configuration de l'espace temporaire de tri
Lorsque la taille du tampon interne de tri est insuffisante pour les lignes impliquées dans un tri, Firebird a besoin de
créer des fichiers temporaires de tri dans le système de fichiers du serveur. Par défaut, il consulte le chemin défini
par la variable d'environnement FIREBIRD_TMP. Si cette variable est absente, il essaie d'utiliser la racine du
système de fichiers /tmp sur Linux/UNIX, ou bien C:\TEMP sur Windows NT/2000/XP. Aucun de ces emplacements
ne dispose d'un réglage de taille.
Firebird fournit un paramètre permettant de configurer l'espace disque à utiliser pour le stockage de ces fichiers
temporaires. Il est prudent de le définir, afin de s'assurer qu'un espace de tri suffisant sera disponible dans tous les
cas.
Toutes les requêtes CONNECT ou CREATE DATABASE partagent la même liste de répertoires de fichiers temporaires
et chacune crée ses propres fichiers temporaires. Les fichiers de tri sont libérés à la fin du tri ou de la requête.
Avec la version 1.5, le nom de ce paramètre a été modifié: tmp_directory avant la version 1.5, il est devenu
TempDirectories et la syntaxe de sa valeur a également changé.
TempDirectories
Ce paramètre s'appelait tmp_directory dans isc_config/ibconfig
Il contient une liste d'un ou plusieurs répertoires, séparés par des points-virgules, dans lesquels les fichiers de tri
peuvent être stockés. Chaque entrée peut inclure un élément de taille optionnel, en octets, pour limiter l'espace à
utiliser dans le répertoire désigné. Si cet argument est absent ou invalide, Firebird utilise l'espace du répertoire
correspondant jusqu'à épuisement avant de passer au répertoire suivant.
Par exemple:
Unix: Unix: /db/sortfiles1 100000000;/firebird/sortfiles2
Unix: Unix:
Windo Windo Windo Windows: ws: ws: ws: E:\sortfiles 500000000
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 40Les chemins relatifs sont traités comme relatifs par rapport au chemin que le serveur en cours d'exécution reconnaît
comme répertoire racine de l'installation Firebird. Par exemple, sur Windows, si l'installation a été faite dans
C:\Program Files\Firebird, alors la description suivante indiquera au serveur de ranger les fichiers
temporaires dans le répertoire C:\Program Files\Firebird\userdata\sortfiles, dans la limite de 500 Mo.
TempDirectories = userdata\sortfiles 500000000
Il n'est plus nécessaire de mettre les chemins entre guillemets comme c'était le cas avec Firebird 1.0.
Paramètres de compatibilité
CompleteBooleanEvaluation
Définit la méthode d'évaluation booléenne (complète ou raccourcie). La valeur par défaut (0 = FALSE) court-circuite
l'évaluation des expressions booléennes impliquant des AND et OR dès lors qu'un résultat vrai ou faux a été atteint
et ne peut plus être modifié par un complément d'évaluation.
Dans quelques cas très rares (habituellement possible à éviter), il peut survenir qu'une opération à l'intérieur d'une
condition OR ou AND qui demeure non évaluée du fait du court-circuit d'évaluation puisse modifier le résultat
initial. Si vous manquez de chance au point d'hériter d'une application ayant une telle caractéristique dans sa
logique SQL, il est possible d'utiliser ce paramètre pour forcer une évaluation booléenne complète jusqu'à ce que
vous ayez l'occasion de corriger l'application concernée. Ce paramètre est de type booléen.
Ne négligez pas le fait que ce drapeau affecte toutes les évaluations effectuées dans toutes les bases du serveur
OldParameterOrdering
La version 1.5 a pris en compte et corrigé un ancien bogue InterBase qui causait le renvoi des paramètres de sortie
au client avec un ordre idiosyncrasique dans la structure XSQLDA. Ce bogue a eu une telle durée de vie que nombre
d'applications existantes, de pilotes, et de composants d'interface ont créé des contournements pour corriger le
problème du côté client.
Les versions 1.5 et suivantes appliquent les conditions correctes de l'API et sont installées avec
OldParameterOrdering=0 (False). Définir ce paramètre booléen à True permet de revenir à l'ancien
comportement pour maintenir la compatibilité avec des codes existants.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 41 Alias de fichiers de bases de données (DB File Aliasing)
Firebird version 1.5 a introduit un mécanisme d'alias de fichiers de base de données pour améliorer la portabilité
des applications et améliorer le contrôle exercé sur les accès aux fichiers de bases de données internes et externes.
A Alliia as se es s..c co on nff
Les alias de bases de données sont configurés dans le fichier texte aliases.conf, situé à la racine de l'installation
du serveur Firebird. Le fichier aliases.conf installé est de cette forme:
#
# List of known database aliases
# ------------------------------
#
# Examples:
#
# dummy = c:\data\dummy.fdb
#
Comme dans tous les fichiers de configuration Firebird, les '#' sont des marques de commentaires. Pour configurer
un alias, il suffit de supprimer le '#' en tête de ligne et de remplacer la ligne dummy par un chemin adéquat:
# fbdb1 est sur un serveur Windows:
fbdb1 = c:\Firebird\sample\Employee.fdb
# fbdb2 est sur un serveur Linux
fbdb2 = /opt/databases/killergames.fdb
#
Il est possible de modifier aliases.conf alors que le serveur est en fonctionnement. Il n'est pas nécessaire de
l'arrêter et de le redémarrer pour que les nouveaux alias introduits dans aliases.conf soient reconnus.
C Co on nn ne ex xiio on n p pa ar r u un n a alliia as s d de e b ba as se e d de e d do on nn né ée es s
La chaîne de connexion modifiée dans l'application cliente est de la forme:
Nom_de_serveur:nom_d_alias
Avec le fichier de l'exemple ci-dessus, la chaîne de connexion va demander au serveur Firebird s'exécutant sur un
serveur Linux de nom monserveur de trouver et de connecter le client à la base présente sur le chemin identifié
dans le fichier aliases.conf comme fbdb2.
monserveur:fbdb2
N No om ms s d de es s b ba as se es s d de e d do on nn né ée es s s su ur r W Wiin nd do ow ws s
Avec Windows ME et XP il est préferable d'utiliser l'extension ".fdb" pour éviter les problèmes de conflit avec la
fonction "System Restore" de ces versions de Windows. Ne pas respecter cette convention sur ces plateformes fait
apparaître le problème bien connu du délai de première connexion à une base de données dont le fichier primaire
et/ou les fichiers secondaires portent des noms avec l'extension habituelle ".gdb".
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 42 Equipes de développement Firebird
Développeur Pays Tâches principales
Dmitry Yemanov Fédération de Russie Coordinateur de la version; améliorations DSQL et PSQL;
implémenteur de l'Embedded Server, multiples améliorations aux
métadonnées, alias de bases de données, déclencheurs d'actions
multiplies, type de données BigInt, nouvelles variables de contexte,
serveur Windows Classic; multiples corrections de bogues.
Nickolay Samofatov Fédération de Russie Concepteur et implémenteur des fonctions SQL (Savepoints,
verrouillage pessimiste); amélioration aux métadonnées;
réimplémentations majeurs du moteur; découvreur et correcteur de
bogues; inspecteur d'architecture; accès à l'API des services sur le
serveur Linux Classic; améliorations de performances; construction
des versions Linux Classic
Arno Brinkman Pays-Bas Améliorations de l'optimiseur; nombreuses nouvelles caractéristiques
DSQL.
Claudio Valderrama Chili Inspecteur de code; découvreur et correcteur de bogues ;
améliorations PSQL; correcteur des UDF, concepteur et
implémenteur
Alex Peshkoff Fédération de Russie Nouvelles caractéristiques PSQL et DSQL features; coordinateur et
auteur des caractéristiques de sécurité; correcteur de code,
construction des versions Linux Superserver
Mike Nordell Suède Traduction de la base de code Firebird en C++. Améliorations de
performances; portage de caractéristiques, découvreur et correcteur
de bogues.
Blas Rodriguez Somoza Espagne Développeur de nouveaux jeux de caractères; grand nettoyeur de
code et d'arborescence de sources. Construction des versions MinGW
Roman Rokytskyy Allemagne Implémenteur et coordinateur de Jaybird
David Jencks Etats-Unis d'Amérique Concepteur et coordinateur de JayBird; outils de documentation
Carlos Guzman Alvarez Espagne Développeur et coordinateur du fournisseur .NET pour Firebird
John Bellardo Etats-Unis d'Amérique Implémentation de l'interface plug-in pour les jeux de caractères;
coordinateur des versions Darwin builds; implémenteur initial du
nouveau modèle mémoire
Erik Kunze Allemagne Découvreur et correcteur de bogues. Nettoyeur de code;
construction des versions SINIX-Z
Dmitry Sibiryakov Fédération de Russie Nettoyage de code; versions MinGW
Pavel Cisar Tchéquie Construction des versions Linux (version 1.0); concepteur et
coordinateur des outils d'assurance qualité
Ann Harrison Etats-Unis d'Amérique Correcteur de bogues; conseiller technique, accroissement du
nombre d'index autorisés.
Développeur Pays Tâches principales
Mark O'Donohue Australie Fonction readline dans isql; correction de bogues; premières
versions (version 1.0); corrections de code (version 1.0)
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 43Paul Reeves France Assurance qualité; programme d'installation Win32; appliquette
standard du panneau de configuration Win32
Ignacio J. Ortega Espagne Ajout des fonctions PLAN aux déclencheurs, nettoyage de code.
Konstantin Kuznetsov Fédération de Russie Construction des versions Solaris sur Intel
Olivier Mascia Belgique Réimplementation des services d'installation sur Win32
Peter Jacobi Allemagne Amélioration, mise à jour des jeux de caractères
Tilo Muetze Allemagne Coordinateur du projet de documentation Firebird
Paul Vinkenoog Pays-Bas Coordinateur du projet de documentation Firebird ; correction des
UDF
Artur Anjos Portugal Appliquettes améliorées du panneau de configuration Win32;
développement et internationalisation du gestionnaire de
configuration Firebird Configuration Manager
Achim Kalwa Allemagne Appliquettes améliorées du panneau de configuration Win32
Sean Leyne Canada Organisateur de la gestion de bogues; nettoyage de code
Ryan Baldwin Royaume-Uni Développeur du pilote Type 2 Jaybird
Sandor Szollosi Hongrie Implémenteur des séquences de tri des jeux de caractères
Dmitry Kuzmenko Fédération de Russie GSTAT déverminé
Artem Petkevych Ukraine Type ARRAY déverminé
Vlad Horsun Ukraine Accélération du balayge (sweep); correction d'un bogue dans le
commit en deux phases
Tomas Skoda Slovaquie Correction de bogues
Evgeny Kilin Fédération de Russie Correction de bogues
Oleg Loa Fédération de Russie Correction de bogues
Erik S. La Bianca Etats-Unis d'Amérique Correction de bogues
Tony Caduto Etats-Unis d'Amérique Programmes d'installation officieux pour Win32
Juan Guerrero Espagne Nouveaux UDFs
Chris Knight Australie Construction des versions FreeBSD
Développeur Pays Tâches principales
Neil McCalden Royaume-Uni Construction des versions Solaris
Grzegorz Prokopsi Hongrie Construction des versions Debian
Paul Beach Royaume-Uni Construction des versions HP-UX
Geoffrey Speicher Etats-Unis d'Amérique Construction des versions FreeBSD
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 44Helen Borrie Australie Auteur des notes de version; testeur en situation et police de la
pensée
" "L Le es s h hé ér ro os s d du u tte es stt e en n s siittu ua attiio on n " "
Pavel Kuznetsov Daniel Rail
Eugene Kilin Volker Rehn
Dmitry Kovalenko David Ridgway
Vladimir Kozloff David Rushby
Barry Kukkuk Pavel Shibanov
Yakov Maryanov Ruslan Strelba
Christian Pradelli
Traduction française
Traduction française
Mohamed Banouas Henri Gourvest
Valentin Billotte (relecture) Philippe Makowski (coordinateur)
Philippe Boucault Frédéric-Georges Marand
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 45 N O T E S D’ I N S T A L L A T I O N
Installation de Firebird 1.5 sur Windows 32
Installation de Firebird 1.5 sur Windows 32
A LIRE EN PREMIER LIEU !
L'introduction des deux nouveaux modèles de serveur sur Win32 a vu proliférer les choix pour l'installation de
Firebird.
! Assurez-vous d'être connecté en tant qu'Administrateur (ne concerne pas Win9x ni ME)
! Tous les modèles Superserver, Classic et Embedded Server ainsi que les installation des outils serveurs seuls et
du client seul peuvent être installés avec l'application d'installation pour Windows. Pour installer une version
complète, il est chaudement recommandé d'utiliser l'installateur s'il existe.
! Commencer par sauvegarder la base de sécurité antérieure isc4.gdb si elle existe, au moyen de gbak. Il sera
possible de la restaurer ensuite sous le nom de security.fdb
! Si votre installation antérieure a défini des paramètres particuliers dans ibconfig, il est possible que vous
souhaitiez les transférer vers les paramètres équivalents dans firebird.conf . Etudiez les notes de version
relatives à firebird.conf pour vous assurer de ce qui peut être recopié tel quel et des paramètres dont la
syntaxe a changé.
! Si certains fichiers de configuration existent dans le répertoire d'installation, ils seront préservés si vous utilisez
l'installateur, mais ECRASES si vous vous contentez de décompresser une archive à l'emplacement prévu. Ceci
concerne en particulier:
security.fdb
firebird.log
firebird.conf
aliases.conf
! Chaque modèle peut être installé depuis une archive ZIP. Cette méthode est plus rapide que l'installateur, si
vous avez acquis l'expérience nécessaire dans l'installation de Firebird 1.5 à partir de fichiers ZIP. Elle est
parfaitement exaspérante si vous êtes nouveau venu à Firebird.
! La mise en œuvre de ces notes d'installation suppose que:
! Vous comprenez comment fonctionne votre réseau
! Vous comprenez pourquoi un système client/serveur a besoin à la fois d'un serveur et de clients.
! Vous avez lu le reste des notes de version, ou au moins que vous avez conscience qu'il vous faudra les lire si
quelque chose semble mal se passer.
! Vous savez contacter la liste de support Firebird en cas de problème bloquant. Inscrivez-vous sur
http://www.yahoogroups.com/groups/firebird-support
Si votre serveur est déjà pourvu d'une version antérieure de Firebird ou d'Interbase® et que vous pensez être
susceptible de vouloir revenir à cette version, préparez cet éventuel retour en arrière avant de commencer
l'installation.
! Utilisez la version existante de GBAK pour sauvegarder vos fichiers de bases de données en format transportable
! Faites une copie du fichier gds32.dll présent dans le répertoire System. Il peut être prudent de renommer la
copie "gds32.dll.ib5" ou "gds32.dll.fb103" ou toute autre forme de nom également informative, et de la
cacher hors du répertoire System et de la racine d'installation de Firebird.
! Il est également prudent de faire une copie de l'environnement d'exécution de Microsoft C++, msvcp60.dll .
En principe, l'installation ne doit pas écraser votre version de ce fichier, mais des évènements étranges ont été
remarqués.
! ARRETEZ TOUTE VERSION DE FIREBIRD OU INTERBASE EN COURS D'EXECUTION
Le programme d'installation tentera de détecter si une version Firebird ou Interbase® est installée et/ou en
cours d'exécution. Si vous n'utilisez pas le programme d'installation, c'est à vous de vous en assurer.
! La racine d'installation par défaut de Firebird 1.5 sera C:\Program Files\Firebird_1_5. Si votre ancienne
version est déjà installée dans un répertoire de ce nom et que vous voulez utiliser les valeurs par défaut de la
version 1.5, renommez le répertoire existant.
! Pour installer Firebird comme un service: si vous souhaitez utiliser la nouvelle fonction de connexion
sécurisée, créez un compte "firebird service user" sur le système, avec n'importe quel nom et mot de
passe de votre choix, avec les privilèges adéquats. Il est recommandé que vous lisiez le document intitulé
README.instsvc.txt préalablement. Si vous installez à partir d'une distribution ZIP, vous trouverez ce document
dans le répertoire /doc de la racine du fichier ZIP. Si vous ne partez pas d'un fichier ZIP, le fichier ne sera pas
disponible tant que l'installation n'aura pas eu lieu. Vous pouvez le consulter sur le Web à l'URL:
http://cvs.sourceforge.net/viewcvs.py/firebird/firebird2/doc/README.instsvc
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 46
A LIRE EN DEUXIEME LIEU
L'un des objectifs fixés à Firebird 1.5 a été de permettre des installations multiples du serveur. Ceci permet aux
utilisateurs d'exécuter des versions distinctes simultanément (side by side). Firebird 1.5 le permet, mais le processus
est mal documenté, et dépend largement de l'intervention d'un utilisateur expérimenté. Il est prévu que les versions
ultérieures de Firebird rendent ce processus bien moins compliqué.
Dans l'intervalle, Firebird 1.5 a posé les bases, ce qui a contraint à affronter la question de l'installation des
bibliothèques. Simultanément, Microsoft a pris ses propres mesures pour gérer l'installation de versions multiples
d'une même bibliothèque. La conjonction de ces deux actions signifie une nouvelle approche de l'installation des
bibliothèques dans Firebird 1.5 et au-delà.
Installation des bibliothèques système Microsoft
Les problèmes associés à l'installation de versions multiples des bibliothèques système Microsoft sont si notoires
qu'ils ont acquis le sobriquet de "DLL Hell" (enfer des DLL).
Depuis Windows 2000, Microsoft a rendu quasi-impossible la modification des DLLs système. Pour contourner cette
difficulté, Microsoft recommande donc que chaque application installe des copies locales de toute bibliothèque
système dont elle a besoin.
Firebird 1.5 applique cette recommandation et place les bibliothèques nécessaires dans son répertoire \bin aux
côtés du serveur.
Installation de fbclient.dll
Firebird 1.5 et au-delà n'utilisent plus gds32.dll comme bibliothèque cliente. Celle-ci s'appelle dorénavant
fbclient.dll . Compte tenu des problèmes rencontrés par Microsoft avec l'enfer des DLLs, il n'aurait pas été
raisonnable de maintenir la bibliothèque cliente Firebird dans le répertoire <system> . Et avec l'installation de
versions multiples du moteur simultanément, placer la bibliothèque cliente dans le répertoire <system> aurait créé
un autre enfer des DLLs spécifique à Firebird. Pour ces raisons, à partir de Firebird 1.5, la bibliothèque cliente
réside dorénavant dans le répertoire \bin avec les autres fichiers binaires.
Une nouvelle clef de base de registre a été définie, et toute application conforme à Firebird doit dorénavant utiliser
celle-ci pour localiser la version de Firebird qu'elle souhaite utiliser. Cette clef est:
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
Firebird garantit qu'une valeur au moins existe toujours dans cette clef. Cette valeur est connue sous le nom de:
DefaultInstance
Et elle contient le chemin du répertoire racine de (vous l'aviez deviné !) l'installation par défaut. Ainsi toute
application ne recherchant pas une installation en particulier peut toujours utiliser l'instance par défaut pour
localiser la bibliothèque client fbclient.dll
Avec les versions à venir de Firebird apparaîtront d'autres valeurs d'instance. Les applications seront alors en mesure
d'énumérer les entrées de registre pour vérifier quelle instance elles souhaitent charger.
Support des applications et pilotes historiques
Traditionnellement, les applications qui utilisent Interbase ou Firebird essaient de charger la bibliothèque cliente
gds32.dll depuis le répertoire <system>. Firebird 1.5 est fourni avec un outil nommé instclient.exe qui
installe un clone de fbclient.dll dans le répertoire système Windows. Ce clone est modifié à la volée de sorte
que ses informations de version commencent par "6.3", pour assurer la compatibilité avec les anciennes
applications qui vérifient la version du fichier GDS32.DLL et ne savent que faire lorsqu'elles reçoivent une chaîne
de numéro comme "1.5".
Au cours du processus d'installation, l'installateur vérifie si une installation d'Interbase ou Firebird existe déjà. Si
rien n'est installé, il crée et place une version de gds32.dll dans le répertoire <system>. S'il détecte qu'une
version quelconque de Firebird ou d'Interbase est susceptible d'avoir déjà été installée, il n'installe pas gds32.dll
dans le répertoire <system>. Il est possible d'utiliser l'outil instclient.exe pour le faire postérieurement à
l'installation.
Il est prévu que les versions futures de Firebird n'essaient plus d'installer gds32.dll dans le répertoire <system> et
que cette bibliothèque soit à terme totalement supprimée de la distribution.
L'utilitaire instclient.exe peut également installer fbclient.dll elle-même dans le répertoire système
Windows, si nécessaire. Ceci permet la prise en charge des outils et applications qui ont besoin de la charger depuis
cet emplacement.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 47L'utilitaire instclient.exe doit être situé dans le répertoire bin de votre installation Firebird et
exécuté depuis cet emplacement.
Utilisation d'instclient.exe
instclient i[nstall] [ -f[orce] ] library
q[uery] library
r[emove] library
où library vaut: fbclient ou gds32
L'option –z peut être utilisée conjointement avec toute autre option, et affiche la version.
Les informations de version et le compteur de références des bibliothèques partagées sont pris en charge
automatiquement. Il est possible d'utiliser l'option f[orce] pour outrepasser les contrôles de version.
REMARQUE: utiliser f[orce] lors de l'installation peut endommager une autre version de Firebird ou d'Interbase®
déjà installée. Il peut être nécessaire de redémarrer la machine pour accomplir effectivement la copie du fichier.
Pour plus de détails, consultez le document README.Win32LibraryInstallation.txt placé soit à la racine de votre
chemin d'installation, soit dans \doc .
Nettoyage des installations de versions non finalisées "Release Candidate"
L'installateur retire fbclient.dll du répertoire <system> s'il l'y trouve. Il retire également la clef de base de
registre obsolète HKLM\SOFTWARE\FirebirdSQL .

Utilisation de l'installateur Firebird Win32
C'est la méthode la plus simple:
Il suffit de lancer l'exécutable et de répondre aux dialogues. Après avoir répondu à quatre écrans environs, se
présente une liste similaire à la suivante.
Choisissez l'installation que vous désirez et cliquez sur "Next" pour continuer.
Service ou application ?
Si vous choisissez d'installer un serveur, Superserver ou Classic, et que votre version de système d'exploitation
Windows supporte les services, l'installateur vous demandera de choisir entre l'exécution de Firebird comme service
ou comme application. A moins que vous n'ayez un besoin impératif d'utiliser le serveur comme une application,
choisissez "service"
Manuel ou automatique ?
Si vous choisissez l'option automatique (automatic), Firebird se lancera à chaque démarrage de la machine. Avec
l'option de démarrage manuel (manual), vous pouvez lancer le serveur à la demande.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 48 Option "Gardien"
Le gardien (Guardian) est un utilisateur qui s'exécute "au-dessus" du SuperServer et qui le redémarre dans le cas où
il s'interrompt de manière imprévue, quelle qu'en soit la raison.. Dans des configurations de développement, il n'est
pas forcément souhaitable. En revanche, pour les déploiements, il permet d'éviter les situations dans lesquelles le
serveur ne répond plus et où aucun DBA n'est disponible pour le redémarrer.
Répertoire (racine) d'installation
Si vous décidez de ne pas utiliser le répertoire racine d'installation par défaut, parcourez le système de fichiers
jusqu'à l'endroit choisi, ou bien tapez directement le chemin désiré. Il n'est pas nécessaire que l'endroit existe:
l'installateur vous demandera l'autorisation de le créer si nécessaire.
Au bout du compte, le dernier dialogue finira par arriver et le serveur démarrera, ou bien vous demandera
l'autorisation de redémarrer la machine. Un redémarrage est nécessaire si l'instalalteur a remplacé le fichier
msvcp60.dll, ou si une ancienne version de gds32.dll était déjà chargée lors du démarrage de l'installateur.
Installation du Superserver à partir d'une distribution zip
L'installation de FB1.5 est similaire dans son principe à celle des versions antérieures.
Si vous ne disposez pas d'un programme d'installation spécifique (il est distribué séparément), les étapes sont les
suivantes:
v) Décompressez l'archive ZIP dans un répertoire vide (comme un certain nombre de noms de fichiers ont été
modifiés depuis la version précédente, il n'est pas souhaitable de décompresser les fichiers de la v1.5 dans le
répertoire d'une image d'IB/FB1)
vi) CD <root>\bin
A partir de ce point, <root> désigne le répertoire où sont situés les fichiers de la v1.5.
vii) Exécutez instreg.exe
viii) instreg.exe install
ix) ceci a pour effet d'inscrire le chemin d'installation (le répertoire parent, donc <root>) dans la base de registre,
sous la clef HKLM\Software\Firebird Project\Firebird Server\Instances\DefaultInstance
x) si vous voulez enregistrer un service, exécutez également instsvc.exe
xi) instsvc.exe install
xii) en option, vous pouvez souhaitez copier fbclient.dll et gds32.dll dans le répertoire System de Windows.
Installation du Classic Server à partir d'une distribution zip
Pour installer le moteur CS, la seule différence est le commutateur supplémentaire sur instsvc.exe :
instsvc.exe install -classic
Ceci signifie en particulier qu'une seule des deux architectures peut être installée comme un service: soit
fbserver.exe (Superserver) soit fb_inet_server.exe (le processus parent des serveurs Classic)
L'appliquette du Panneau de Configuration n'est volontairement pas installée dans les configurations Classic Server.
N'essayez pas de l'installer et de l'utiliser: le concept même d'arrêt d'un service ne s'applique pas au modèle Classic.
Installation simplifiée
Si vous n'avez pas besoin d'un service enregistré, il n'est pas nécessaire de lancer instreg.exe et instsvc.exe .
Dans ce cas, il suffit de décompresser l'archive dans un répertoire et de lancer le serveur directement:
fbserver.exe –a
Dans ce cas, le serveur traitera son répertoire parent comme sa racine.
Désinstallation
Pour désinstaller FB1.5 sans passer par la désinstallation Windows, les étapes sont les suivantes:
! arrêt du serveur
! exécution de instreg.exe remove
! exécution de instsvc.exe remove
! suppression du répertoire d'installation
! suppression de fbclient.dll et gds32.dll du répertoire System de Windows
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 49 Installation du serveur embarqué (Embedded server) depuis une distribution ZIP
Le serveur embarqué (embedded server) est composé d'un client et d'un serveur totalement fonctionnel liés dans
une bibliothèque à chargement dynamique, fbembed.dll . Il a exactement les mêmes caractéristiques que le
Superserver standard et exporte les points d'entrée standard de l'API Firebird.
Base de registres
Les entrées de base de registres pour Firebird, que le serveur consulte normalement pour localiser le répertoire
racine, sont ignorées. Le répertoire racine du serveur embarqué est le répertoire dans lequel le fichier binaire de la
bibliothèque est situé.
Accès base de données
Seul l'accès "true local" est autorisé. Le serveur embarqué ne supporte pas les protocoles distants, de sorte que
même un accès par localhost ne fonctionnera pas.
Authentification et sécurité
La base de sécurité (security.fdb) n'est pas utilisée par le serveur embarqué et n'est donc pas requise. Tout
utilisateur peut s'attacher à toute base de données. Puisque le serveur et le client s'exécutent dans le même espace
d'adressage local, la sécurité devient une question d'accès physique.
Les privilèges SQL sont vérifiés, comme dans les autres modèles de serveur.
Compatibilité
Il est possible d'avoir tout nombre d'applications simultanées utilisant le serveur embarqué, sans conflits. Le serveur
embarqué n'entre pas non plus en conflit avec un serveur IB/FB.
Il ne faut toutefois pas accéder à la même base de données simultanément depuis plusieurs serveurs embarqués, car
ils ont une architecture SuperServer et verrouillent en accès exclusif les bases auxquelles ils sont attachés.
Structure des fichiers du serveur embarqué
Il suffit de copier fbembed.dll dans le répertoire de votre application, puis de le renommer en fbclient.dll ou
gds32.dll, selon vos besoins de connectivité. Faites des copies sous les DEUX noms si vous souhaitez utiliser les
outils serveur (isql, gbak, etc.)
Copiez également firebird.msg, firebird.conf (si nécessaire) et ib_util.dll dans le même répertoire.
Si votre application utilise des bibliothèques externes, par exemple le support international (fbintl.dll) ou des
bibliothèques d'UDF, celles-ci sont en principe séparées du répertoire de l'application. Pour les utiliser, placez-les
dans un répertoire qui émule l'arborescence du serveur Firebird, c'est-à-dire dans des sous-répertoires /intl et
/udf juste sous le répertoire des fichiers racine de Firebird.
Exemple
D:\my_app\app.exe
D:\my_app\gds32.dll (fbembed.dll renommé)
D:\my_app\fbclient.dll (fbembed.dll renommé)
D:\my_app\firebird.conf
D:\my_app\aliases.conf
D:\my_app\isql.exe
D:\my_app\ib_util.dll
D:\my_app\gbak.exe
D:\my_app\firebird.msg
D:\my_app\intl\fbintl.dll
D:\my_app\udf\fbudf.dll
A ce stade, démarrez votre application. Elle utilisera le serveur embarqué comme une bibliothèque cliente et sera
en mesure d'accéder aux bases de données locales.
REMARQUE: si vous avez installé la structure des répertoires selon ces règles, il n'est pas nécessaire de configurer la
clause RootDirectory dans firebird.conf . Néanmoins, si vous décidez de déployer le serveur embarqué et
votre application selon une autre structure de répertoires, lisez attentivement le document
README_embedded.txt de la distribution de l'Embedded Server avant toute action, pour y trouver les instructions
relatives aux compléments de configuration nécessaires.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 50 Désinstallation
Le programme de désinstallation de Firebird préserve et renomme les fichiers principaux suivants :
préserve security.gdb ou le renomme security.fbnnnn
préserve firebird.log
préserve firebird.conf ou le renomme firebird.confnnnn
préserve aliases.conf ou le renomme aliases.confnnnn
où "nnnn" est le numéro de construction de la précédente installation.
Aucune tentative n’est faite pour désinstaller des fichiers qui ne feraient pas partie de l’installation initiale.
Les fichiers partagés tels que fbclient.dll ou gds32.dll, ne seront supprimés que si le compteur de partage signale
qu’aucune autre application ne les utilise.
Les clés créées dans le Registre seront supprimées.
Autres remarques
Winsock2
Firebird nécessite la présence de la bibliothèque WinSock2. Elle devrait être présente sur toutes les plateformes
Windows 32 bit, sauf Windows 95. Un test de présence de cette bibliothèque est fait lors de l’installation. Si elle
n’est pas trouvée, l’installation échouera.
Pour en savoir plus sur la mise à jour de cette bibliothèque, consultez ce lien :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q177719
Windows ME et XP
Windows ME et XP (Editions personnelle et professionnelle) utilisent une fonctionnalité appelée Restauration
système qui réalise une mise à jour automatique (sauvegarde et mise en cache ?) de tout fichier suffixé par ".gdb".
Cela entraîne un ralentissement des accès aux bases de données Interbase/Firebird qui peut aller jusqu'à un quasi
arrêt, car ces fichiers sont sauvegardées à chaque fois qu'une opération d'E/S est réalisée (Il n'y a pas de
Restauration Système pour les serveurs XP .Net).
Windows ME dispose d'un fichier nommé "C:\Windows\System\filelist.xml" qui référence les extensions des fichiers
protégés par cette fonctionnalité. ".gdb" en fait partie.
Charlie Caro a dans un premier temps préconisé d'effacer l'extension ".gdb" de la section "includes" de ce fichier.
Mais il a été prouvé depuis que Windows ME pouvait reconstruire cette liste. Pour Windows XP, il est totalement
impossible de modifier ce fichier filelist.xml.
Pour Windows ME, on peut utiliser un des contournements suivants :
! utiliser FDB (Firebird DB) comme extension des fichiers primaires de vos bases de données
! déplacer les bases de données dans le dossier "C:\Mes Documents", qui n'est pas géré par la fonctionnalité de
Restauration Système
! désactiver complètement la fonctionnalité de Restauration Système (voir l'aide de Windows pour les détails).
Avec Windows XP Edition personnelle ou professionnelle vous pouvez déplacer vos bases de données sur une
partition que vous exclurez des traitements réalisés par la Restauration Système.
Windows XP utilise la fonctionnalité de copie intelligente, aussi les ralentissements rencontrés avec Windows ME
sont moins flagrants, du moins pour des fichiers de petite taille. Pour de plus gros fichiers (par exemple les fichiers
de bases de données de Firebird !), il n'y a pas de solution miracle tant que l'on utilise dans la partition système des
fichiers dont l'extension est ".gdb".
Nous essayons d'obtenir une description précise de ce problème ainsi qu'une solution éprouvée que nous publierons
ici. Si vous pouvez apporter une quelconque aide dans la description et/ou la solution de ce problème, veuillez
envoyer un message à la liste de diffusion du support technique de Firebird ou au groupe de discussions dédié à
Firebird à l'adresse news://news.atkin.com
Le comportement de Windows XP lors de l'arrêt du système est connu pour être "une étape obscure". Il se passe un
long moment lors de l'arrêt des différents services. Pendant ce temps, l'affichage signale que Firebird fonctionne
comme une application.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 51Ce problème semble seulement affecter Windows XP et il ne se produit que lorsque le "Guardian" n'est pas utilisé
pour arrêter ce service. Ceci est le comportement par défaut jusqu'à ce qu'un correctif soit trouvé.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 52 I In ns stta alllla attiio on n s su ur r U UN NIIX X // L Liin nu ux x
(Originellement par Mark O'Donohue, mis à jour pour la version 1.5)
Le serveur Firebird est édité sous deux formes, ClassicServer qui fonctionne comme un service, et SuperServer qui
fonctionne comme un démon en tâche de fonds. L’édition ClassicServer fonctionne plus comme un service Unix
traditionnel, alors que l’édition SuperServer utilise des "threads" plutôt que des processus. Tout utilisateur débutant
avec Firebird peut utiliser l’une ou l’autre de ces architectures, bien que l’édition "Classic Server" soit la plus
adaptée à une toute première expérimentation.
REMARQUES – A LIRE EN PREMIER
1) Vous devrez être identifié comme utilisateur "root" pour installer Firebird.
2) L'installation sur Linux nécessite la présence du paquetage glibc dans sa version 2.2.5 ou ultérieure et du
paquetage libstdc++ dans sa version 5.0 ou ultérieure.
3) Pour une évaluation approximative de la compatibilité Linux, référez vous à ces règles, mais ne les considérez
pas comme intangibles. Les distributions prêtes à l'emploi de Linux peuvent varier selon le moment où elles ont
été construites.
4) Assurez vous que les paquetages d’édition 'ed' et 'vim' soient préalablement installés sur votre système. Dans le
cas contraire, le paquetage sera installé, mais les scripts d'installation échoueront. (Remarque : ce paquetage
pourra être remplacé dans le futur par "sed").
INSTALLATION SUR LINUX
Les instructions suivantes s’appliquent à l’édition "Classic Server". Pour installer l’édition "Super Server", il suffit de
remplacer dans le nom des paquetages le suffixe "CS" par "SS". Par exemple, le paquetage FirebirdCS-1.5.0-
nnnn.i686.rpm est remplacé par FirebirdSS-1.5.0-nnnn.i686.rpm.
Installation linux à partir d’un paquetage rpm
$rpm -ivh FirebirdCS-1.5.0-nnnn.i686.rpm
Installation Linux à partir d'une archive .tar.gz
$tar -xzf FirebirdCS-1.5.0-nnnn.tar.gz
$cd install
$./install.sh
* ou FirebirdSS-1.5.0-nnnn
Ce qui se passera lors d'une installation sur Linux
1. Tentative d'arrêt du serveur en cours d’exécution.
2. Ajout de l’utilisateur ‘firebird’ et du groupe ‘firebird’ s’ils n’existent pas déjà.
3. Installation du logiciel dans le dossier /opt/firebird, et création des liens vers les bibliothèques dans /usr/lib et
vers les fichiers d'entête dans /usr/include
4. Ajout automatique de gds_db, port 3050 dans le fichier /etc/services si cette entrée n’existe pas déjà.
5. Ajout automatique de localhost.localdomain et HOSTNAME dans le fichier /etc/host.equiv
6. L'édition SuperServer installe aussi un script de démarrage du serveur dans le dossier /etc/rc.d/init.d/firebird.
7. L'édition ClassicServer installe aussi un script de démarrage du serveur dans le dossier /etc/xinetd.d/firebird ou
inetd pour les systèmes plus anciens et ajoute une entrée dans le fichier /etc/inetd.
8. Pour les distributions Linux SuSE, un nouveau lien rcfirebird est créé dans le dossier /usr/bin pour le fichier
script init.d ainsi qu’une entrée /etc/rc.config Firebird.
9. Démarrage du serveur. Firebird devrait démarrer avec le niveau runlevel 2, 3 ou 5.
10. Génération aléatoire d’un nouveau mot de passe pour l’utilisateur SYSDBA et enregistrement de celui ci dans le
fichier /opt/firebird/SYSDBA.password
11. Ajout d’un alias pour la base de données exemple "employe.fdb" dans le fichier aliases.conf.
Tester votre installation sur Linux
Etape 1 – Accéder à une base de données
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 53$cd /opt/firebird/bin
$isql -user sysdba -password <password*>
SQL>connect localhost:employee.fdb /* Ceci est un alias de chemin d’accès */
SQL>select * from sales;
SQL>select rdb$relation_name from rdb$relations;
SQL>help;
SQL>quit;
*Un mot de passe a été généré pendant l’installation. On peut l’obtenir en consultant le fichier
/opt/firebird/SYSDBA.password.
Etape 2 – Créer une base de données
A partir de la version 1.5, le serveur Firebird fonctionne par défaut avec l'utilisateur "firebird". Bien que ceci ait
toujours été la configuration recommandée, le serveur fonctionnait auparavant et par défaut avec l'utilisateur
"root". En tant qu’utilisateur "root", le serveur a toute capacité pour créer et supprimer des fichiers de base de
données n'importe où sur les emplacements gérés par le système d’exploitation POSIX. Pour des raisons de sécurité,
ce service devrait avoir des capacités plus limitées de lire, supprimer et créer des fichiers.
Cette nouvelle configuration offre une meilleure perspective en termes de sécurité, mais elle exige que certaines
considérations spéciales soient prises en compte lors de la création de nouvelles bases de données :
a) L’utilisateur 'firebird' doit avoir les droits d’écriture dans le dossier où vous souhaitez créer votre base de
données.
b) La valeur recommandée de l'attribut DatabaseAccess dans le fichier /opt/firebird/firebird.conf devrait être
initialisée à None, pour permettre d’accéder aux bases de données seulement par les entrées définies dans le
fichier aliases.conf.
c) Utiliser les entrées définies dans le fichier aliases.conf pour découpler les utilisateurs des emplacements
physiques des bases de données. Plus de notes sur les alias Alias
Les procédures pour créer une nouvelle base de données varient suivant la configuration choisie, mais ce qui suit
sont les étapes que nous recommandons avec la configuration préconisée :
1) Si un dossier détenu par l'utilisateur 'firebird 'n'existe pas, alors passez en l'utilisateur "root" et créez le dossier :
$su - root
$mkdir -p /var/firebird
$chown firebird:firebird /var/firebird
2) Créez physiquement une nouvelle base de données définissez un alias qui pointera dessus. En tant qu’utilisateur
root ou firebird, exécutez le script suivant:
$cd /opt/firebird/bin
$./createDBAlias.sh test.fdb /var/firebird/test.fdb
(Règle d’utilisation : createDBAlias.sh <dbname> <pathtodb>)
3) De manière alternative au script createDBAlias.sh de l'étape 2, on peut exécuter pas à pas:
$vi /opt/firebird/aliases.conf
and add the line at the end of the file:
test.fdb /var/firebird/test.fdb
4) Créez ensuite la base de données:
$/opt/firebird/isql -u sysdba -p <password*>
SQL>create database 'localhost:test.fdb';
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 54SQL>quit;
5) Si la valeur DatabaseAccess dans le fichier /opt/firebird/firebird.conf est définie à Full ou restreinte à un
chemin (par exemple: DatabaseAccess=/var/firebird), une autre alternative à l’étape 2 est de créer
directement le fichier physique de base de données, en indiquant un chemin et un nom de fichier complet:
$/opt/firebird/isql -u sysdba -p <password*>
SQL>create database '/var/firebird/test.fdb';
SQL>quit;
Si vous utilisez cette configuration, la base de données peut être directement accédé sans utiliser une entrée du
fichier des alias:
$/opt/firebird/isql -u sysdba -p <password*>
SQL>connect '/var/firebird/test.fdb';
SQL>quit;
*Un mot de passes a été généré lors de l’installation. Il est stocké dans le fichier /opt/firebird/SYSDBA.password.
Astuces et Scripts pratiques
En complément de l’installation, on trouve dans le dossier bin les scripts suivants:
! changeDBAPassword.sh—Modifie le mot de passe de l’utilisateur Firebird "SYSDBA". Pour l’édition "Superserver",
ce script modifiera aussi le script /etc/rc.d/init.d/firebird pour utiliser le nouveau mot de passe.
! createAliasDB.sh—Règle d’utilisation: createAliasDB.sh <dbname> <dbpath>.
Ce script crée physiquement une nouvelle base de données et ajoute un alias dans le fichier aliases.conf.
! fb_config—Ce script peut-être utilisé dans les fichiers de compilation (makefiles) pour produire les chemins
d’accès aux bibliothèques et fichiers "include" de la version installée de Firebird. L’aide de fb_config donne la
liste complète des options.
! changeGdsLibraryCompatibleLink.sh—Seulement pour l’édition "ClassicServer". Change le lien de la
bibliothèque client libgds.so vers libfbclient.so pour la version "multithread", et vers libfbembed.so pour la
version "singlethread" qui permet une ouverture directe du fichier de la base de données. Par souci de
compatibilité ascendante, libgds.so pointe par défaut vers libfbembed.so.
! Accès direct ou étendu aux fichier de bases de données.
L'édition ClassicServer offre le mode d'accès direct ou étendu qui autorise des applications à ouvrir directement
les fichiers de base de données. Pour utiliser ce mode, un utilisateur connu de la base de données a besoin
d'avoir les droits étendus pour pouvoir accéder à certains fichiers de configuration de Firebird et certains
fichiers d'état.
! Accéder aux bases de données: Maintenant que l'utilisateur "firebird" (et no pas "root") est l'utilisateur par
défaut qui lance les programmes,vous avez besoin de savoir comment rattacher un utilisateur au groupe
firebird qui seul peut accéder aux bases de données. Ceci est documenté dans le fichier readme, mais les
étapes suivantes devraient vous donner tout ce dont vous avez besoin:
Pour ajouter un utilisateur (par exemple l'utilisateur skywalker) au groupe firebird, l'utilisateur"root" devra saisir
la commande:
$ usermod -G firebird skywalker
L'utilisateur "skywalker" lors de sa prochaine connexion pourra commencer à travailler avec des bases de
données firebird.
Pour obtenir la liste des groupes auxquels un utilisateur appartient, saisissez la commande suivante:
$ groups
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 55Problèmes NTPL avec des distributions récentes de Linux
La nouvelle NTPL (Native POSIX Thread Library) de la distribution Red Hat 9 (jusqu’à présent) peut générer des
erreurs avec l’édition SuperServer et les programmes compilés localement ainsi que les utilitaires. Gbak, en
particulier, déclenchera une erreur "Broken Pipe error". Pour corriger ceci:
1. dans le fichier /etc/init.d/firebird, rajouter
LD_ASSUME_KERNEL=2.2.5
export LD_ASSUME_KERNEL
Cela permet de prendre en compte l’instance du serveur. Vous devez également avoir défini les variables
d’environnement pour l’environnement local, aussi:
2. Ajouter ce qui suit dans le fichier /etc/profile, pour être sur que chaque utilisateur récupèrera ces informations
dans ses utilitaires de ligne de commande.
après
HISTSIZE=1000
ajouter
LD_ASSUME_KERNEL=2.25
Et sur la ligne suivante, pour exporter cette variable:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUT_RC LD_ASSUME_KERNEL
Désinstallation sous Linux
Si vous avez besoin de désinstaller Firebird, faites le avec l'utilisateur "root". Les exemples suivants s'appuient sur
l'édition ClassicServer (CS), mais restent valables pour l'édition SuperServer en remplaçant le terme CS par SS.
Pour les paquetages rpm:
$rpm -e FirebirdCS-1.5.0
ou pour les installations à partir des archives .tar.gz:
$/opt/firebird/bin/uninstall.sh
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 56 I In ns stta alllla attiio on n d de e F Fiir re eb biir rd d C Clla as ss siic cS Se er rv ve er r & & S Su up pe er rS Se er rv ve er r s su ur r S Sp pa ar rc c S So olla ar riis s 2 2..7 7
Indisponible actuellement. Veuillez vous référer au document "releasenotes v.1" comme référence à l'installation de
la 1.5.
Installation de Firebird ClassicServer sur MacOS X / Darwin
Installation de Firebird ClassicServer sur MacOS X / Darwin
Indisponible actuellement. Veuillez vous référer au document "releasenotes v.1" comme référence à l'installation de
la 1.5.
C Co on ns sttr ru uc cttiio on n o ou u IIn ns stta alllla attiio on n d de e F Fiir re eb biir rd d s su ur r F Fr re ee eB BS SD D
Indisponible actuellement. Veuillez vous référer au document "releasenotes v.1" comme référence à l'installation de
la 1.5.
Configurer le port de service sur le serveur et les clients
Par défaut, un serveur Firebird est à l'écoute sur le port 3050 pour les demandes de connexion des clients. Le nom
associé à ce port est gds_db. La bonne nouvelle est que si vous utilisez ce paramétrage par défaut, vous n'avez rien
à faire pour configurer ce port que ce soit pour le serveur ou le client.
Vous pouvez changer le numéro de port, le nom qui lui est associé, voire les deux. Vous pourriez avoir à effectuer ce
changement dans le cas où le port 3050 est déjà utilisé par un autre service, par exemple, une version différente de
Firebird ou un serveur InterBase®. Il y a plusieurs moyens d'outrepasser ces paramètres. A la fois le serveur et ses
clients doivent être reconfigurés lors d’un changement de nom de service du port, ou de son numéro ou des deux, et
ceci d'une des manières suivantes:
! dans la chaîne de connexion du client
! dans la commande utilisée pour démarrer le serveur
! par activation des paramètres RemoteServicePort ou Remote ServiceName dans le fichier firebird.conf (Version
1.5 et ultérieure)
! dans la configuration du démon (édition ClassicServer sur système POSIX)
! par une entrée dans le fichier des Services
Avant d'examiner chacune de ces techniques, il sera judicieux de regarder comment le serveur définit ses ports
d'écoute et comment les clients choisissent un port sur lequel transmettre leurs demandes.
C Co om mm me en ntt lle e s se er rv ve eu ur r d dé éffiin niitt s se es s p po or rtts s d d''é éc co ou utte e
Le fichier exécutable du serveur est doté de d'un commutateur optionnel (-p) par lequel on peut définir le numéro
du port ou le nom de service du port d'écoute. A ce moment, si ce commutateur est présent, soit le numéro de
port, soit le nom de service du port (gds_db) fourni en argument remplace celui par défaut.
Ensuite — ou premièrement en l’absence de commutateur –p — un serveur V1.5 contrôlera la présence des
paramètres RemoteServiceName et RemoteServicePort dans le fichier firebird.conf:
! Si ces deux paramètres sont précédés de la marque de commentaire "#", les valeurs par défaut sont prises en
compte et aucun autre changement ne se produit. Tout paramètre fourni en argument du commutateur est pris
en compte et le paramètre "manquant" conserve sa valeur par défaut.
! Si le paramètre RemoteServicePort est mis en commentaire, mais pas le paramètre RemoteServiceName, alors
le nom de service du port prend la valeur de ce dernier mais seulement si celle-ci n'a pas déjà été remplacée
par la valeur fournie par le commutateur –p
! Si le paramètre RemoteServiceName est mis en commentaire, mais pas le paramètre RemoteServiceport, alors
le numéro de port prends la valeur de ce dernier mais seulement si celle-ci n'a pas déjà été remplacée par la
valeur fournie par le commutateur –p
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 57! Si les deux paramètres RemoteServiceName et RemoteServicePort ne sont pas mis en commentaire, alors le
paramètre RemoteServiceName est prioritairement choisi à moins que sa valeur n'ai été changée par celle
définie par le commutateur –p. Si la valeur du nom de service du port a déjà été remplacée, la valeur du
paramètre RemoteServiceName n'est pas retenue et la valeur du paramètre RemoteServicePort est forcée à
3050
! Ensuite, si une des deux valeurs a été remplacée, le serveur V.1.0 comme V.1.5 contrôle dans le fichier Services
l'existence d'une entrée dont la combinaison des noms de service du port et du numéro de port sont identiques à
celle demandée. Si cette existence est confirmée, tout va bien. Dans le cas contraire, si gds_db n'est pas le nom
du port de service, le serveur lèvera une exception et refusera de démarrer. Si gds_db est le nom de service du
port et qu'il ne peut être associé à aucun autre numéro de port, il le sera automatiquement au port 3050.
Si le nom de service par défaut doit être remplacé, veillez alors à créer une entrée dans le fichier Services. —Voir le
chapitre ci-dessous, Configurer le fichier Services.
Utilisation du commutateur de remplacement –p
Veuillez noter que ce commutateur existait déjà dans Firebird 1.0.x, mais qu’ auparavant son utilisation n'était pas
documentée.
Démarrer le serveur avec le commutateur optionnel –p vous permet de remplacer soit le numéro de port par défaut
(3050), soit le nom de service du port par défaut (gds_db) que le serveur utilise pour réceptionner les demandes de
connexion. Ce commutateur permet de changer un des paramètres mais pas les deux ensemble. Pour les versions 1.5
et ultérieures de Firebird, vous pouvez utiliser ce commutateur –p en combinaison avec une configuration du fichier
firebird.conf pour remplacer simultanément le numéro de port et son nom de service.
Syntaxe pour TCP/IP
server-command <other switches> -p port-number | service-name
Par exemple, pour démarrer le serveur "Superserver" comme une application et remplacer le nom de service gds_db
par fb_db:
fbserver -a -p fb_db
Ou, pour remplacer le numéro de port 3050 par 3051:
fbserver -a -p 3051
Syntaxe pour les redirections WNet
Dans un réseau WNet, remplacez la syntaxe ci dessus du commutateur –p par la syntaxe suivante "antislash-
antislash-arobase":
fbserver -a -p \\.@fb_db
ou
fbserver -a -p \\.@3051
Edition ClassicServer sur POSIX: le démon inetd ou xinetd
Avec l'édition ClassicServer de Firebird sur Linux ou UNIX, le démon inetd ou xinetd est configuré pour écouter sur
le port par défaut et diffuser le nom de service par défaut. Le script d'installation écrira l'entrée adéquate dans le
fichier de configuration /etc/inetd.conf ou /etc/xinetd.conf.
Vous pouvez éditer la configuration actuelle si nécessaire. Ce qui suit est un exemple de ce que vous devriez trouver
dans le fichier xinetd.conf ou inetd.conf après avoir installé l'édition ClassicServer de Firebird sur Linux:
# default: on
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 58# description: FirebirdSQL server
#
service gds_db
{
flags = REUSE KEEPALIVE
socket_type = stream
wait = no
user = root
# user = @FBRunUser@
log_on_success += USERID
log_on_failure += USERID
server = /opt/firebird/bin/fb_inet_server
disable = no
}
Si vous changez les valeurs de configuration par défaut du port de service, vous devrez modifier de manière
équivalentes le fichier xinetd.conf ou inetd.conf. Redémarrez xinetd ou inetd avec la commande kill -HUP pour être
sur que le démon utilisera la nouvelle configuration.
REMARQUE : les tentatives de connexion échoueront si xinetd (ou inetd) et fbserver (ou ibserver) sont à l’écoute sur
le même port. Si votre machine hôte utilise cette double configuration, il sera nécessaire de modifier cet état de
choses de sorte que chacun des serveurs ait son propre port.
Utiliser un fichier de configuration des paramètres
Vous pouvez configurer soit RemoteServiceName soit RemoteServicePort dans le fichier firebird.conf pour remplacer
soit le numéro de port par défaut (3050), soit le nom de service du port par défaut (gds_db) que le serveur utilisera
pour recevoir les tentatives de connexion.
Le moteur utilisera un des deux paramètres RemoteServer*, mais pas les deux. Si vous configurez les deux,
RemoteServicePort sera systématiquement ignoré, sauf quand la commande de démarrage du serveur sera invoquée
avec le commutateur –p pour fournir un remplacement au nom de service du port. Ainsi, vous pouvez utiliser le
commutateur –p et un paramètre RemoteService* et par combinaison remplacer à la fois le nom de service et le
numéro de port.
Si le nom de service par défaut est remplacé, vous devrez créer une entrée dans le fichier Services.
NE VOUS FAITES PAS AVOIR ! Si vous ne mettez pas en commentaire RemoteServiceName et RemoteServicePort et
que vous ne changiez pas leurs valeurs initiales, alors ceux-ci seront considérés comme des remplacements. Il sera
alors nécessaire de créer explicitement une entrée dans le fichier Services pour les paramétrages par défaut du
port.
Configurer un client pour trouver le port de service
Configurer un client pour trouver le port de service
Si vous paramétrez votre serveur avec les valeurs par défaut (service gds_db à l’écoute sur le port 3050), aucune
configuration du client n'est nécessaire. Si le serveur est à l'écoute sur un autre numéro de port ou utilise un nom de
service différent, l'application client et/ou sa machine hôte aura besoin d'une nouvelle configuration pour aider la
bibliothèque cliente Firebird à trouver le port en question.
La chaîne de connexion utilisée par un client peut inclure des informations afin de déterminer le port d’écoute du
serveur et ce de différentes manières. Les clients Firebird 1.5 peuvent éventuellement utiliser une copie locale du
fichier firebird.conf. Des changements peuvent s'avérer nécessaires dans le fichier Services des clients.
Utiliser la chaîne de connexion
Si seulement le numéro de port ou le nom de service a été reconfiguré, alors ajoutez cet autre numéro ou nom
dans la chaîne de connexion. Ceci fonctionne pour toutes les version de Firebird.
Syntaxe pour les connexions via TCP/IP
Pour se connecter à une base de données nommée alice dont le serveur est à l’écoute sur le port 3050 avec le nom
de service fb_db, la chaîne de connexion serait:
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 59Pour les systèmes POSIX:
alice/fb_db:/data/teaparty.fdb
Ou, si le nom de service est gds_db et le numéro de port 3051:
alice/3051:/data/teaparty.fdb
Pour Windows:
alice/3051:D:\data\teaparty.fdb
alice/fb_db:D:\data\teaparty.fdb
Remarquez que le séparateur entre le nom du serveur et le port est un "slash", et non pas "deux-points". Les "deux-
points" avant le chemin d'accès physique sont toujours nécessaires.
Syntaxe pour les connexions WNet
Dans un réseau WNet, utilisez la notation UNC:
\\alice@3051\d:\teaparty.fdb
ou
\\alice@fb_db\d:\teaparty.fdb
Si le numéro de port ou le nom de service configuré n'est pas celui initialement défini, alors vous devrez créer une
entrée dans le fichier Services.
Syntaxe à utiliser avec des alias de bases de données
Pour vous connecter via un port autre que celui par défaut avec un alias de base de données, affecter le numéro de
port ou le nom de service au nom du serveur , mais pas à l'alias. Par exemple, supposons que l'alias de base de
données est enregistré dans le fichier aliases.conf comme suit:
rabbit = /data/teaparty.fdb
La chaîne de connexion de votre application au serveur 'alice' serait:
alice/fb_db:rabbit
ou
alice/3051:rabbit
Utilisation d'une copie du fichier firebird.conf
Pour les versions 1.5 et ultérieures de Firebird, vous pouvez éventuellement inclure une copie côté-client du fichier
firebird.conf dans le dossier racine de Firebird et configurer RemoteServiceName ou RemoteServicePort afin d’aider
le client à localiser le port du serveur.
! Vous pouvez configurer un de ces deux paramètres pour étendre le forçage donné pour l'autre via la chaîne de
connexion (voir ci-dessus); ou pour remplacer seulement la valeur de RemoteServiceName ou de
RemoteServicePort sans utiliser la chaîne de connexion.
! Si vous devez éviter de passer le nom de service du port ou son numéro dans la chaîne de connexion, et que le
serveur n’utilise aucun des paramètres par défaut, vous pouvez alors configurerles deux paramètres
RemoteServiceName et RemoteServicePort. Vous emploierez cette technique si votre application cliente a
besoin de maintenir la possibilité de se connecter à un serveur Interbase ou Firebird 1.0.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 60 Emplacement des objets Firebird chez le client
Quand vous vous référez au fichier firebird.conf sur des machines clientes, il est important que la bibliothèque
cliente sache où trouver celui-ci. Vous devrez définir le dossier racine de Firebird et indiquer au système son
emplacement. Utilisez pour ce faire la variable d'environnement FIREBIRD. Les clients Windows quant à eux,
peuvent utiliser la clé de registre Firebird. Avec une installation correcte du client, vous pouvez aussi mettre en
place une version locale du fichier des messages.
Configurer le fichier Services
Configurer le fichier Services
Vous n'avez pas besoin de configurer une entrée pour le port de service pour votre serveur Firebird ou vos clients si
le serveur utilise les valeurs par défaut, gds_db sur le port 3050. Si gds_db est le nom de service du port et qu'il
n’est associé à aucun port, il l’est automatiquement au port 3050.
Si vous configurez le service pour un port ou un nom de service différent, le serveur et le client devront
impérativement être mis à jour pour refléter cette reconfiguration. Sur Linux comme sur Windows, ces informations
sont enregistrées dans le fichier Services.
Localisation du fichier services
! Sur Windows NT/2000/XP/S2003, ce fichier se trouve dans le dossier C:\windows\system32\drivers\etc\services.
! Sur Windows 95/98/ME, ce fichier se trouve dans le dossier C:\windows\services.
! Sur Linux/UNIX, ce fichier se trouve dans le dossier /etc/services.
Une entrée dans ce fichier ressemble à ceci:
gds_db 3050/tcp # Firebird Server 1.5
Ouvrez le fichier avec un éditeur de texte et ajouter une ligne ou modifiez la ligne existante comme suit:
! pour un serveur ou un client Firebird 1.0.x, modifier soit le nom du service soit le numéro de port pour refléter
comment démarrera le serveur.
! pour une version 1.5 ou ultérieure du serveur Firebird, ajoutez ou modifiez la ligne comme requis. Si vous avez
un serveur Firebird 1.0 ou InterBase installé sur la même machine hôte, conservez les entrées qu'ils leur sont
nécessaires et ajoutez une nouvelle entrée reflétant comment démarre le serveur Firebird 1.5.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 61 Informations suppl émentaires
Plus d'informations concernant le moteur de base de données Firebird peuvent être trouvées sur le site:
http://firebird.sourceforge.net
ou sur un des sites affiliées:
http://firebirdsql.org
http://www.ibphoenix.com
http://www.cvalde.com
http://www.firebird.fr
Si vous souhaitez vous impliquer dans le développement de Firebird, ou discuter d'un possible bogue, veuillez
rejoindre notre liste de diffusion firebird-devel. Pour vous inscrire, envoyez simplement un email à:
firebird-devel-request@lists.sourceforge.net
avec le mot "subscribe" dans le champ Objet du message.
Veuillez s'il vous plait, ne pas utiliser la liste de diffusion firebird-devel pour toute question relative à
l’assistance et au support.
Pour une assistance technique, veuillez rejoindre la liste de diffusion firebird-support:
http://www.yahoogroups.com/groups/firebird-support
Il existe une liste de diffusion spécialisée pour tout ce qui concerne les développements relatifs à InterClient et
Java:
http://www.yahoogroups.com/groups/Firebird-Java
La liste de diffusion firebird-support traite de tous les problèmes techniques rencontrés avec Firebird et
InterBase(R). Pour les questions relatives à Delphi ou à un autre environnement de développement client, veuillez
contacter le forum adéquat.
La communauté open source anime d'autres listes de diffusions qui abordent divers aspects du développement de
Firebird. Pour plus de détails, veuillez vous référer aux listes de diffusions et newsgroups du site de la communauté
Firebird.
La liste des développeurs Firebird, les listes générales de la communauté ainsi que quelques listes intéressant les
développeurs Firebird et InterBase, sont reflétés comme newsgroups sur le serveur
news://news.atkin.com
Un support payant à travers le monde pour Firebird peut être mis en place par IBPhoenix (adresses et téléphones
sur le site http://www.ibphoenix.com). Plusieurs membres de l'équipe Firebird assurent également un rôle
d'assistance et de consultants. Veuillez les contacter directement.
Les services de récupération de bases de données Firebird ou InterBase peuvent être assurés par IBPhoenix. Si
vous souhaitez analyser et réparer vous même des bases de données endommagées, essayez l'outil IBSurgeon
accessible sur le site IBase.ru (www.ibase.ru). IBase.ru propose aussi des services de récupération en Russie et en
Europe.
Les demandes/offres d'améliorations commandités de Firebird peuvent être adressées directement à FirebirdSQL
Foundation Inc. Envoyez un email à foundation@firebirdsql.org. Si vous souhaitez contacter les administrateurs du
projet Firebird, envoyez un email à firebirds@users.sourceforge.net.
Les discussions d'ordre général au sujet des améliorations de Firebird peuvent être adressées à la liste des
priorités-Firebird (http://www.yahoogroups.com/community/Firebird-priorities).
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 62La liste IB-Architect ( http://www.yahoogroups.com/community/ib-architect ) est dédiée aux discussions
techniques de conception SEULEMENT. Les questions relatives au support/conversion y sont complètement hors-
sujet.
Outils et Pilotes
Outils d'administrations de base de données
Un choix de plusieurs excellents d'outils d'administration de Firebird, dotés d'une interface graphique, est proposé
sur la page "Contributed Downloads" du site http://www.ibphoenix.com. Certains sont open source, d'autres
freewares, d'autres encore des produits commerciaux.
L'outil de Borland IBConsole n'est pas préconisé comme outil d'administration d'une base de données de Firebird 1.5.
Pilotes et Composants
JAVA: Le projet de pilote Jaybird JDBC contribue de manière active à une partie du projet Firebird. Un pilote
JDBC/JCA de Type 4 a été realisé ainsi qu'une béta d'un pilote de Type 2. Les sources et binaires peuvent être
téléchargés à partir du site
http://sourceforge.net/project/showfiles.php?group_id=9028
Pour information ou pour participer aux développements et tests, rejoignez le groupe Firebird-java à:
http://www.yahoogroups.com/community/firebird-java.
.NET: Firebird a démarré un projet de pilote pour l'environnement .NET. Les sources et binaires peuvent être
téléchargés à partir du site
http://sourceforge.net/project/showfiles.php?group_id=9028
Pour information ou pour participer aux développements et tests, rejoignez le groupe Firebird .NET à:
http://lists.sourceforge.net/lists/listinfo/firebird-net-provider
Delphi et C++Builder: Les utilisateurs de ces deux produits ont à leur disposition deux importantes possibilités qui
leur donnent une connectivité directe et complète à l'API Firebird 1.5, avec un bon support développeur et
utilisateur:
! Jason Wharton's IB Objects sur le site http://www.ibobjects.com
! FIBPLus sur le site http://www.devrace.com
C++: la bibliothèque freeware d'accès 'IBPP' (http://www.ibpp.org), sous licence MPL, hébergé sur sourceforge.net,
pleinement compatible Win32 et Linux, et probablement avec les autres plates-formes POSIX. Elle est très utile
lorsque vous souhaitez accéder aux fonctions bas niveau de type C de l'API, avec un niveau d'abstraction de type C++
réduit, sans être lié à un environnement de développement particulier.
ODBC: Une liste de pilotes ODBC peut être trouvée sur la page "Contributed Downloads" du site
http://www.ibphoenix.com. Le développement d'une version open source d'un pilote ODBC/JDBC peut être suivi ici
http://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel
PHP: Un groupe travaille actuellement au portage de l'ancienne extension PHP pour InterBase vers Firebird. Pour
plus de renseignements, rejoignez le groupe Firebird-PHP http://www.yahoogroups.com/community/firebird-php
PYTHON: KInterbasDB est une paquetage d’extension de Python qui implémente l’API Python Database 2.0
pleinement compatible avec Firebird. Elle offre un soutien total de l’API client de Firebird; existe en version stable
et sous actif développement. Sous licence open source BSD. Téléchargement et informations sur
http://kinterbasdb.sourceforge.net/
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 63 Documentation
La documentation dédiée à InterBase v 6.0 peut s'appliquer à la version actuelle de FireBird. Une version béta des
manuels InterBase(tm) 6 est disponible au format Acrobat d'Adobe ici:
ftp://ftpc.inprise.com/pub/interbase/techpubs/ib_60_doc.zip
Un index de la structure de la documentation est maintenu à jour sur le site de la communauté Firebird
http://firebird.sourceforge.net/index.php?op=doc
Cette section est en pleine évolution et tous les ajouts sont les bienvenus. Envoyez un email à
firebird-docs@lists.sourceforge.net
Quelques guides d'installation et autres tutorials peuvent être trouvés dans la section documentation du site à partir
de:
http://www.firebirdsql.org
ou plus directement à:
http://sourceforge.net/projects/firebird
Le site IBPhoenix est le lieu principal ou sont recensés les informations techniques et d'utilisation
http://www.ibphoenix.com
IBPhoenix édite également régulièrement un CD complet qui contient les documentations publiées (disponibles aussi
de manière séparées). Utiliser Firebird et Le guide de référence Firebird.
Quelques documents additionnels sont proposés dans la section techpubs du site Borland:
http://www.borland.com/techpubs/interbase/
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 64 Correctifs et ajouts depuis la version 1.0
Tracker # Description Contribuant
Correction d'incohérences mineures dans le nommage des jeux de P. Jacobi
(no #)
caractères
Plantage de GSTAT dans certains combinaisons D. Yemanov
(no #)
Correction du point de sauvegarde perdu lors de l'utilisation de D. Yemanov
(no #)
BREAK|LEAVE|EXIT.
Correction de l'optimiseur pour préférer des index simples à des index A. Brinkman
(no #)
composés et pour préférer les index uniques.
Extension des outils d'installation de la plate-forme Win32 instsvc.exe O. Mascia
(no #)
et instreg.exe
Nombre maximum d’index par table augmenté de 64 à A. Harrison,
Amélioration
(DB_PAGE_SIZE/16)-2
Adapté à la 1.5 par
N.Samofatov
Les connexions de longue durée entraînent des fuites de mémoire au N. Samofatov
721792
niveau du noyau du système d'exploitation.
La fonction UDF log(x, y) renvoyait log(y, x) P. Vinkenoog,
775003
N. Samofatov
Les fonctions UDFs ltrim('') et rtrim('') renvoyaient NULL. La fonction P. Vinkenoog,
774987
rtrim ne renvoyait pas le 1er caractère N. Samofatov
Correction du plantage du serveur généré lors de la perte du contexte A. Peshkoff
(no #)
d’une transaction
Correction du plantage du serveur avec certaines combinaisons de sous A. Peshkoff
(no #)
requêtes et de l'opérateur between.
L'instruction "<value> STARTING WITH <field>" échoue si utilisée avec D. Yemanov
736318
des index.
L'exception "Non-existent deadlock" est levée après l'exécution de A. Peshkoff
(no #)
déclencheurs de type pre-update ou pre-delete.
Rendre les mots clés INSERTING/UPDATING/DELETING non -réservés. N. Samofatov
Amélioration
Ajout de nouveaux messages d’erreur (plus précis) pour certains D. Yemanov,
Amélioration
changements de la version 1.5 A. Brinkman,
A. Peshkoff
Ajout d'un commutateur de connexion à l'outil instsvc pour autoriser A. Peshkoff
Correctif de
l'installation du service FB avec un compte non local.
sécurité
Réactivation du trimming des champs de type VARCHAR pour les D. Yemanov
Amélioration
protocoles distants.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 65Tracker # Description Contribuant
Plantage aléatoire du serveur lors de la préparation de grosses D. Yemanov
(no #)
requêtes.
Amélioration du paramétrage – la gestion des chemins dans le fichier A. Peshkoff
Amélioration
firebird.conf est mise en conformité avec les pré requis du système
d'exploitation.
Mauvais arguments des fonctions UDF pour les types DATE/TIME (dialect Oleg Loa
(no #)
3).
Possible violation d’intégrité référentielle. Vlad Horsun,
(no #)
D. Yemanov
Problème de droits d'accès pour le fichier firebird.conf (SF #745090). Erik S. LaBianca,
745090
N. Samofatov
et autres pbs
Crée aussi un fichier aliases.conf à l'installation; utilisez rpmbuild pour
relatif à
créer des paquetages Linux
l’installation
de la RC 2
Faciliter le réglage du paramètre LockSemCount pour les plates-formes N. Samofatov
(no #)
POSIX. Plus besoin d'utiliser gds_drop ou de redémarrer l'ordinateur
pour que les nouveaux paramétrages soient pris en compte.
Rendre les mots clés FIRST/SKIP non-réservés. N. Samofatov
Amélioration
Référence de lien mauvaise après une exception en PSQL. A. Peshkoff
(no #)
L’utilisation des instructions BREAK/LEAVE et EXIT est maintenant D. Yemanov
(no #)
possible dans les déclencheurs.
Corruption possible d'index lors d'un nettoyage de la mémoire via le Vlad Horsun,
(no #)
ramasse miettes. D. Yemanov
Résolution des problèmes rencontrés avec la gestion des fichiers N. Samofatov
(no #)
temporaires:
Trou de sécurité sur les plates-formes POSIX sauf FREEBSD/OPENBSD
liée à l'utilisation de la commande mktemp (Attaque par déni de service
ou augmentation des droits possible)
Seuls 27 fichiers uniques créés avec une plate-forme Windows 32 bit
(qui peut entraîner un comportement imprévisible de l'édition
SuperServer)
Modification du gestionnaire d' événements: utilisation interdite dur D. Yemanov
(no #)
port aux dans l'édition ClassicServer à cause de problèmes connus.
Autoriser des fonctions d'agrégation de contexte parental différent à A. Brinkman
(no #)
l'intérieur d'une autre fonction d'agrégation
Exemple:
SELECT MAX((SELECT COUNT(*) FROM RDB$RELATIONS))
FROM RDB$RELATIONS
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 66Tracker # Description Contribuant
(no #) Plantage possible pendant la déconnexion lorsque la notification D. Yemanov
d'événements est utilisée.
(no #) Modification du gestionnaire de Service: les fonctionnalités de D. Yemanov
GSTAT/GSEC ne sont pas disponibles via l'API Services pour l'édition
ClassicServer Win32 (jusqu'à la version 1.6).
(no #) Les enregistrements des statistiques sont faux quand une opération D. Yemanov
échoue pour quelque raison que ce soit.
(no #) Redirection impossible des entrées sorties de la version console win 32 A. Peshkoff
de GBAK avec stdin/stdout.
(no #) Table des verrous cassée lors d’une opération de retaillage avec N. Samofatov
l’édition CS. Plus d’erreur "lock manager out of room" (Edition
ClassicServer 1.5 RC1 Win32) ou plantage (avec toutes les autres
éditions d'Interbase et Firebird).
Amélioration Amélioration INTL: rendre la fonction UPPER fonctionnelle avec le jeu N. Samofatov,
de caractères WIN1251 sans indiquer explicitement une collation. D. Yemanov
BUGCHECK(291) Corruption de la base de données possible lors de la modification ou A. Peshkoff
suppression d'un enregistrement dans un pré-déclencheur activé par une
action sur ce même enregistrement.
(no #) Débordement de tampon lors de l'appel de la fonction Oleg Loa
isc_database_info().
(no #) Modification du gestionnaire de Configuration: Maintenant, le serveur A. Peshkoff
est arrêté si le fichier firebird.conf est manquant ou erroné, et un
rapport d' erreur est stocké dans les logs système.
(no #) Correction de l'API des Services: opérations statistiques de l’API N. Samofatov
possibles avec l’édition CS sur système POSIX.
(no #) Modification de l'analyseur syntaxique. D. Yemanov
1) ROWS_AFFECTED est renommé en ROW_COUNT
2) CONNECTION_ID/TRANSACTION_ID sont renommés en
CURRENT_CONNECTION/CURRENT_TRANSACTION
3) Certains mots récemment introduits sont rendus non-
réservés.
(no #) Correction de l'API des Services: API partiellement activée pour l’édition D. Yemanov
CS Win32.
(no #) Transmission d’évènements du mauvais type (utilisation non nécessaire Jim Starkey,
de paquets OOB). Paul Reeves
(no #) Améliorations du gestionnaire de verrouillage : les verrous mortels sont N. Samofatov
maintenant détectés et signalés aussitôt que tous les processus
bloquants ont reçu leurs notifications, c.a.d. instantanément dans la
plupart des cas.
(no #) Plantages du Serveur avec certaines opérations de l'API Services. A. Brinkman
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 67Tracker # Description Contribuant
(no #) Capacités de sécurité étendues: implémentation d'accès paramétrables A. Peshkoff
aux bases de données, tables externes et bibliothèques de fonctions
UDF.
(no #) Correction de fuites de mémoires/ressources. Mike Nordell,
A. Peshkoff,
N. Samofatov,
D. Yemanov
(no #) Débordements de tampon lors de l'utilisation de tableaux D. Yemanov
multidimensionnels.
213460, 678718 Divers problèmes avec les événements utilisés avec des serveurs avec D. Yemanov
plusieurs adresses IP.
REMARQUE: Il est maintenant possible de paramétrer un port particulier
pour traiter les événements.
(no #) Correction de certaines fuites de ressources. Mike Nordell,
A. Peshkoff
(no #) Correction de l'API Services: API active sur l’édition CS des systèmes N. Samofatov
POSIX.
Remarques:
1. Ces changements ne sont pas encore applicables à l’édition CS Win 32
2. Les sauvegarde/restauration sont corrigées, testées et devraient
fonctionner
3. La validation de base de données est en partie corrigée et devrait
fonctionner
4. Les autres services ne sont probablement pas encore opérationnels
dans l'édition ClassicServer
(no #) Amélioration SQL: La valeur NULL est autorisé dans les contraintes D. Yemanov,
d'unicité et dans les index (norme SQL-99). N. Samofatov
(no #) Amélioration des performances: les logs de sauvegarde d’E/S utilisent N. Samofatov
maintenant des arbres B+ tree pour stocker les informations des points
de sauvegarde. Ceci améliore les performances lors de mises à jour
multiples d'enregistrements dans une seule transaction, juste un peu
(habituellement d’un ordre de grandeur de 2 ou 3 pour 100000
enregistrements).
(no #) Corruption de la base de données lors de la sauvegarde d’un point de N. Samofatov
reprise après un grand nombre d’opérations de manipulations des
données LMD (le point de reprise est perdu) et les enregistrement sont
mis à jour _pas_ sous le point de reprise mais détruits sous ce point.
(no #) Amélioration de l'instruction EXECUTE STATEMENT. Il est maintenant A. Peshkoff
possible de renvoyer des valeurs depuis the dynamic SQL.
Syntaxe:
EXECUTE STATEMENT <value> INTO <var_list>; (forme avec singleton)
Ou
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 68FOR EXECUTE STATEMENT <value> INTO <var_list> DO <stmt_list>;
Tracker # Description Contribuant
(no #) Plantage du Serveur lors de la déconnexion après un volume de mise à D. Yemanov
jour important.
(no #) Amélioration de l'optimiseur: les sous requêtes dans la clause SET d'une A. Brinkman
instruction UPDATE peuvent maintenant utiliser des index.
(no #) Erreur "Context already in use" en utilisant DISTINCT dans des sous A. Brinkman
requêtes.
(no #) Extension des capacités de la fonction isc_database_info: un appel à la N. Samofatov
fonction isc_database_info permet d'obtenir la liste des transactions
couramment actives.
(no #) Amélioration des performances: évaluation logique en court circuit. Mike Nordell
Remarque: Ce comportement est contrôlé par l'option
"CompleteBooleanEvaluation" du fichier firebird.conf. La valeur par
défaut est 0 (évaluation en court circuit).
(Beta 2 bug) Débordement de pile pendant la préparation d'une instruction. D. Yemanov,
Mike Nordell
(no #) Amélioration des performances pour les architectures à base de Mike Nordell
processeurs IA32: Accélération des opérations d'indexation.
(no #) Changement dans les déclencheurs universels: l'accès aux deux D. Yemanov
contextes (OLD et NEW) est autorisé.
(no #) Amélioration de l'optimiseur: en présence d’un nœud de type égal et A. Brinkman
d’un nœuds d’un autre type (supérieur, inférieur, entre…) lors d’une
récupération d’index, le nœud de type égal est toujours choisi aux
autres.
(no #) Délais de connexion/déconnexion importants avec Windows XP. A. Brinkman
(no #) Nettoyage général: suppression de beaucoup de code inutilisé. Blas Rodriguez
Somoza,
Erik Kunze
523589 Vues affectant le résultat d’une requête. A. Brinkman
Commentaire: le problème venait du fait que le RSE (dans la vue)
n’était pas typé comme un variant.
(no #) Changement du comportement du mode d’écriture forcée: maintenant, Blas Rodriguez
si ce mode est désactivé, vous pouvez contrôler combien de fois les Somoza
pages "dirty" sont transférées sur le disque (permet une meilleure
fiabilité quand ce mode est désactivé sur les plates-formes win32).
(no #) La base de données de sécurité a été renommée security.fdb. D. Yemanov
(no #) Nouveau fichier de configuration: firebird.conf est finalement publié. D. Yemanov
(no #) La bibliothèque IB_UDF est dotée des fonctions LPAD et RPAD. Juan Guerrero
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 69Tracker # Description Contribuant
(no #) Quelquefois, GFIX ne permettait pas d'indiquer les paramètres "-user" et D. Yemanov
"-password" (Erreur "incompatible swiches").
(no #) Mise en cache de la base Securité: les connexions à la base de données D. Yemanov
Sécurité sont mises en cache, permettant de diminuer le temps de
connexion ultérieur aux bases.
Améliorations 1. Diminution de la mémoire utilisée par le serveur. D. Yemanov
2. E/S externes directes quan il n’ y a pas de mémoires disponibles
pour les opérations de tri.
L'optimiseur supporte un nombre de flux et de prédicats plus important.
508594 Jointure gauche avec des vues: les jointures gauches avec une vue et A. Brinkman
une seule clause ON n'utilisait pas d’index, même quand cela était
possible.
(no #) Nouveaux jeux de caractères: DOS737, DOS775, DOS858, DOS862, Blas Rodriguez
DOS864, DOS866, DOS869, WIN1255, WIN1256, WIN1257, ISO8859_3, Somoza
ISO8859_4, ISO8859_5, ISO8859_6, ISO8859_7, ISO8859_8, ISO8859_9,
ISO8859_13
Remarque: Les collations pour les jeux de caractères ci-dessus ne sont
pas encore disponibles.
(no #) Changement dans CREATE VIEW: la clause PLAN est rejetée. D. Yemanov
(no #) Changement du comportement de suivi des agrégats A. Brinkman
Introduction de la compatibilité ascendante avec les agrégats. Le
champ le plus profond de l’agrégat détermine à quel contexte
d’agrégats il devrait appartenir.
(no #) Amélioration de l'optimiseur: meilleure optimisation des jointures A. Brinkman
complexes (jointures gauches, vues, procédures stockées, etc.).
(alpha 5 bug) Les fuites principales de mémoire sont corrigées. D. Yemanov
(no #) Nouvelles fonctions de l’API: Fonctions compatibles IB7 renvoyant la D. Yemanov
version de la bibliothèque cliente
isc_get_client_version(), isc_get_client_major_version(),
isc_get_client_minor_version()
(no #) Améliorations du Tri/Fusion : la fusion (plans SORT MERGE) est D. Yemanov
maintenant réalisée par le module de tri en mémoire.
(no #) Nouveau gestionnaire interne de mémoire pour obtenir de meilleures N. Samofatov
performances.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 70Tracker # Description Contribuant
(no #) Changements pour la version Win32: D. Yemanov
1. Noms des objets USER32 modifiés pour permettre au serveur 1.5 de
tourner simultanément avec IB/FB1.
2. Le nom de mappage du protocole local (IPC) a changé, aussi la
bibliothèque cliente v1.5 n’est plus compatible avec les versions
antérieures via IPC.
3. Tous les protocoles de transport (port et service INET, WNET pipe,
IPC map) sont maintenant configurables via firebird.conf.
(no #) champ RDB$FIELD_LENGTH erroné pour les vues qui contiennent une D. Yemanov
concaténation de champs de type CHAR/VARCHAR de longueurs
importantes.
Amélioration Amélioration des déclencheurs: ajouts de contrôle d’actions à D. Yemanov
l’exécution (prédicats INSERTING/UPDATING/DELETING).
Exemple:
if (INSERTING) then
new.OPER_TYPE = 'I';
else
new.OPER_TYPE = 'U';
(no #) Les curseurs (clause WHERE CURRENT OF) ne pouvaient pas être utilisés D. Yemanov
dans les déclencheurs.
221921 La clause ORDER BY était sans effet. A. Brinkman
213859 Sous requête liée avec la clause 'IN'. A. Brinkman
Amélioration Expressions arbitraires permises dans la clause ORDER BY. N. Samofatov
(no #) Crash du moteur en utilisant la clause UNIONS dans une VUE et que A. Brinkman
cette VUE est utilisée dans la clause WHERE d’une sous-requête.
(no #) Nettoyage générique de code: structures dans Y-valve. A. Peshkoff,
N. Samofatov
Amélioration Les commentaires de ligne (--) sont maintenant autorisés à n’importe D. Yemanov
quel endroit d’une instruction SQL.
(no #) "Request sycnhronization error" avec l’instruction BREAK. D. Yemanov
625899 Bugcheck 291. A. Peshkoff
(no #) Changement PSQL: EXECUTE VARCHAR est renommé en EXECUTE A. Peshkoff
STATEMENT.
521952 A. Brinkman
Erreur: "No current record for fetch operation. "
(no #) QLI ne comprend pas le type de données BIGINT. D. Yemanov
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 71Tracker # Description Contribuant
(no #) La longueur des variables texte à l’intérieur des procédures et A. Brinkman
déclencheurs n’est pas copié dans la structure du descripteur.
(no #) Changement avec FIRST/SKIP et ORDER BY D. Yemanov
1. Implémentation de la clause ORDER BY dans les sous-requêtes.
2. FIRST/SKIP interdit pour les vues
3. Zéro autorisé comme argument valide pour FIRST.
(no #) Débordement de tampon (MAXPATHLEN) et réécriture de la fonction Erik Kunze
locale "dirname".
(no #) Rendre le pramêtre SQLDA de mapping cohérent avec l’ordre et le N. Samofatov
nombre de paramêtres dans la chaîne source SQL.
REMARQUE Vous pouvez permettre l’ancienne manière de mapping
(pour la compatibilité ascendante) en utilisant le paramètre de gestion
de configuration "OldParameterOrdering".
Amélioration Amélioration de l’optimiseur: laisser les sous-requêtes utiliser A. Brinkman
également des index quand leur parent est une procédure stockée.
(no #) Suppression de la limitation de la taille des requêtes. D. Yemanov
(no #) "Nulls", "first", "last" et "collation" manipulable dans la clause "order by" N. Samofatov
avec des unions
(no #) Nettoyage générique du code; renommage, nouvelles macros sures, Erik Kunze,
support pour mingw. Ignacio J. Ortega,
D. Sibiryakov
(no #) Implémentation du verrouillage explicite d’enregistrements finalisée. N. Samofatov
Devrait être stable et conforme maintenant.
Amélioration Amélioration de l’optimiseur: meilleure manipulation des nœuds "AND" A. Brinkman
à l’intérieur d’un nœud "OR".
(no #) Les exceptions à l’intérieur d’une boucle "for"/"while" dans les A. Peshkoff
déclencheurs sont maintenant correctement traitées.
623992 Double slash dans les chaînes de connexion. Paul Reeves,
Mark O’Donohue
(no #) Verrou mortel Durant certaines opérations sur la base de données. A. Peshkoff
Amélioration Amélioration de l’optimiseur: Si plusieurs index différents peuvent être D. Yemanov
utilisé lors d’une opération d’indexation, seuls les plus pertinents
d’entre eux sont utilisés tandis que les autres sont ignorés.
(no #) Problèmes des identifiants quottés dans les expressions plan. N. Samofatov
Amélioration L’architecture CS est maintenant supporté sur Win32, mais elle ne peut D. Yemanov
pas encore être considérée stable, aussi tout retour d’expérience sera
appréciée.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 72Tracker # Description Contribuant
(no #) Les procédures stockées ne sont plus recompilées avant leur N. Samofatov
suppression.
(no #) Nouvelle collation pour le jeu de caractères WIN1251: WIN1251_UA pour D. Yemanov
les langues Ukrainienne et Russe.
(no #) Changement dans la bibliothèque Cliente: Les routines API ne sont plus D. Yemanov
exporté par numéro d’ordre.
Amélioration Nouveau gestionnaire de configuration: permet un fichier de D. Yemanov
configuration identique pour toutes les plates-formes supportées.
Amélioration Amélioration de l’optimiseur: ajout d’un meilleur support lors de A. Brinkman
l’emploi des index avec "OR". Sélection du meilleur index composé
disponible de tous les nœuds "AND".
Amélioration Ajout du support de gestion des points explicites de sauvegarde en N. Samofatov
DSQL.
(no #) Nettoyage des protocoles: le protocole de réseau IPX/SPX n’est plus Sean Leyne
supporté.
(no #) Retrait des plates-formes obsolètes: certaines plates-formes ne sont Sean Leyne
plus gérées par le code source actuel.
DELTA, IMP, DG_X86, M88K, UNIXWARE, Ultrix, NeXT, ALPHA_NT, DGUX,
MPE/XL, DecOSF, SGI, HP700, Netware, MSDOS, SUN3_3
Amélioration Amélioration de l’optimiseur: support de la détection d’index avec des A. Brinkman
sous-requêtes dans des "select" avec agrégat.
Amélioration Amélioration du programmateur des "threads" pour l’édition SS Win32: A. Peshkoff
maintenant le serveur devrait mieux supporter les fortes charges.
Amélioration Support du verrouillage explicite. Le comportement d’attente en mode N. Samofatov
transactionnel avec isc_tpb_wait n’est pas encore stable.
Syntaxe:
SELECT <...> [FOR UPDATE [OF col [, col ...]] [WITH LOCK]]
558364 Echec de la compilation des déclencheurs lors de l’utilisation des PLAN. Ignacio J. Ortega
(no #) Les transactions distribuées (2PC) ne peuvent être correctement Vlad Horsun,
annulées à cause d’erreurs réseau. Erik Kunze
(no #) Nettoyage générique: macros ISC_STATUS_LENGTH et MAXPATHLEN. Erik Kunze
496784 Quand l’optimiseur rencontre des index pour les jointures gauches(LEFT N. Samofatov
JOIN), il fonctionne comme avec des jointures internes (INNER JOIN).
Problème résolu qui faisait que les jointures externes complexes
(OUTER JOIN) retournaient un mauvais résultat.
(no #) Le sous type BLOB n’est pas pris en compte dans les domaines système D. Yemanov
produits pour les champs définissant les vues.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 73Tracker # Description Contribuant
(no #) Bogue lors de l’installation: instreg.exe ne créait pas la valeur D. Yemanov
"GuardianOptions" dans le registre.
(no #) Fuite de ressource lors de l’utilisation de procédures récursives en LDD N. Samofatov
(Langage de Définition des Données) qui pouvait entraîner l’échec de
certaines instructions LDD.
(no #) Une contrainte de vérification qui utilise un seul champ d’une table est N. Samofatov
maintenant automatiquement supprimée dès que le champ en question
est supprimé.
451927 Nouvelle variable système ROWS_AFFECTED en PSQL: renvoie le nombre D. Yemanov
de lignes affectées par la dernière instruction INSERT/UPDATE/DELETE.
Pour toute autre instruction, le résultat est toujours zéro.
446240 Messages d’exception dynamique: on peut lever une exception avec un D. Yemanov
message différent de celui avec lequel elle a été créée.
Syntaxe:
EXCEPTION name [value];
547383 Nouvelles variables systèmes SQLCODE et GDSCODE permettant D. Yemanov
d’accéder au code d’une erreur interceptée à l’intérieur d’un bloc
WHEN en PSQL. A l’extérieur du bloc, 0 (succès) est retourné.
(no #) Redéclenchement d’exception: permet de redéclencher une exception “Digitman”
qui a été intercepté en PSQL à partir d’un bloc WHEN.
Syntaxe:
EXCEPTION;
Aucun effet à l’extérieur du bloc WHEN.
(no #) Le serveur plante durant une opération de nettoyage mémoire lors de N. Samofatov
fortes sollicitations.
Amélioration Compilation retardée des méta-données: résout beaucoup de cas de N. Samofatov
l’erreur bien connue "object in use".
Amélioration Nouvelle manipulation de l’ordonnancement: permet les tris utilisateur N. Samofatov
avec valeur nulle.
(no #) gstat renvoie une mauvaise valeur pour l’élément maxdup. D. Kuzmenko
(no #) Utilisation d’une nouvelle clé de registre sur win32: --
SOFTWARE\FirebirdSQL\Firebird.
451925 Les contraintes définies par l’utilisateur peuvent utiliser des noms D. Yemanov
d’index définis par l’utilisateur.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 74Tracker # Description Contribuant
Amélioration Nouvelle instruction RECREATE VIEW: raccourci du couple d’instructions D. Yemanov
DROP VIEW / CREATE VIEW.
Syntaxe:
RECREATE VIEW name <view_definition>;
(no #) Les déclencheurs dont le nom commence par 'RDB$' ne peuvent être ni D. Yemanov
modifié ni supprimé.
(no #) Les fichiers de distributions sont renommés pour être sur qu’ils sont à Various
Firebird. Ils s’appellent maintenant fbserver, fbclient, firebird.msg etc.
La bibliothèque client s’appelle fbclient désormais et devrait être
utilisé par tous les nouveaux projets basés sur FB. gds32 ne contient
plus rien et redirige ses exports, ; elle n’est fourni que pour des raisons
de compatibilité.
(Maj. mineure Ajout de nouveaux index système (RDB$INDEX_41, RDB$INDEX_42, D. Yemanov,
de l’ODS) RDB$INDEX_43), Maintenant, la version de l’ODS est 10.1. N. Samofatov
451935 Nouvelle instruction CREATE OR ALTER pour les déclencheurs et D. Yemanov
procedures stockées, permet de créer ou modifier un objet de base de
données suivant qu’il existe ou non.
Syntaxe:
CREATE OR ALTER name <object_definition>;
(no #) Des liens de dépendances cassés (comme DB$34) apparaissent dans la D. Yemanov
base de données après des changements de méta données.
(no #) Déclaration étendue des variables locales: simplifie la syntaxe et Claudio Valderrama
permet de déclarer et affecter des variables en une seule fois.
Syntaxe:
DECLARE [VARIABLE] name <variable_type> [{'=' | DEFAULT} value];
Exemple:
DECLARE my_var INTEGER = 123;
(no #) Instruction BREAK interdite pour les déclencheurs (comme EXIT) à cause D. Yemanov
de limitations internes connues.
555839, 546274 Regroupement étendu: permet d’utiliser GROUP BY avec des fonctions A. Brinkman
internes ou des sous-requêtes. Permet aussi le GROUP BY ordinal (c.a.d.
le numéro d’ordre de la colonne dans l’ensemble résultant).
451917 Nouvelle fonction interne COALESCE permettant de calculer la valeur A. Brinkman
d’une colonne à partir d’un certain nombre d’expressions, la première
expression renvoyant une valeur non nulle correspond à la valeur de la
colonne.
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 75Tracker # Description Contribuant
451917 Nouvelle fonction interne NULLIF renvoyant NULL si la sous expression a A. Brinkman
une valeur spécifique, sinon la valeur de la sous expression.
451917 Nouvelle fonction interne CASE permet de déterminer le résultat d’une A. Brinkman
colonne en fonction du résultat de l’expression du CASE.
545725 Le nettoyage automatique (sweep) se. A. Peshkoff
(no #) Le serveur s’arrête quand les structures XSQLDA ne sont pas préparée D. Yemanov
pour tous les paramêtres des instructions.
PSQL: support des blocs BEGIN...END vides. D. Yemanov
(no #)
(no #) Les déclencheurs dont le nom commence par 'RDB$' ne peuvent être ni D. Yemanov
modifiés ni supprimés.
(no #) Les fichiers de distribution sont renommés pour être sur qu’ils sont à Various
Firebird. Ils s’appellent maintenant fbserver, fbclient, firebird.msg etc.
La bibliothèque client s’appelle fbclient désormais et devrait être
utilisés par tous les nouveaux projets basés sur FB. gds32 ne contient
plus rien et redirige ses exports; elle n’est fournie que pour des raisons
de compatibilité.
(Maj. mineure Ajout de nouveaux index système (RDB$INDEX_41, RDB$INDEX_42, D. Yemanov,
de l’ODS) RDB$INDEX_43), Maintenant, la version de l’ODS est 10.1. N. Samofatov
451935 Nouvelle instruction CREATE OR ALTER pour les déclencheurs et D. Yemanov
procédures stockées, permet de créer ou modifier un objet de base de
données suivant qu’il existe ou non.
Syntaxe:
CREATE OR ALTER name <object_definition>;
(no #) Des liens de dépendances cassés (comme DB$34) apparaissent dans la D. Yemanov
base de données après des changements de méta données.
(no #) Déclaration étendue des variables locales: simplifie la syntaxe et Claudio Valderrama
permet de déclarer et affecter des variables en une seule fois.
Syntaxe:
DECLARE [VARIABLE] name <variable_type> [{'=' | DEFAULT} value];
Exemple:
DECLARE my_var INTEGER = 123;
(no #) Instruction BREAK interdite pour les déclencheurs (comme EXIT) à cause D. Yemanov
de limitations internes connues.
555839, 546274 Regroupement étendu: permet d’utiliser GROUP BY avec des fonctions A. Brinkman
internes ou des sous-requêtes. Permet aussi le GROUP BY ordinal (c.a.d.
le numéro d’ordre de la colonne dans l’ensemble résultant).
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 76Tracker # Description Contribuant
451917 Nouvelle fonction interne COALESCE permettant de calculer la valeur A. Brinkman
d’une colonne à partir d’un certain nombre d’expressions, la première
expression renvoyant une valeur non nulle correspond à la valeur de la
colonne.
451917 Nouvelle fonction interne NULLIF renvoyant NULL si la sous expression a A. Brinkman
une valeur spécifique, sinon la valeur de la sous expression.
451917 Nouvelle fonction interne CASE permet de déterminer le résultat d’une A. Brinkman
colonne en fonction du résultat de l’expression du CASE.
545725 Le nettoyage automatique (sweep) se bloque. A. Peshkoff
(no #) Le serveur se crashe quand toutes les structures XSQLDA ne sont pas D. Yemanov
préparées pour tous les paramètres d’une instruction.
PSQL:les blocs BEGIN...END vides sont autorisés. D. Yemanov
(no #)
567931 Trou de sécurité des méta données partiellement corrigé. D. Yemanov
(no #) Tableaux de BigInt ne fonctionnaient pas. Artem Petkevych
437859 Implémentation de la concaténation de chaînes de caractères avec D. Yemanov
l’instruction "execute procedure", permettant d’utiliser n’importe
quelle expression comme paramètre d’une procédure stockée.
562417 Aggrégats avec des concaténations de char vides. D. Yemanov
Amélioration M. O’Donohue
Support de "Readline" (historique de commandes) ajouté à ISQL.
446206 Nouveau type de données BIGINT permettant l’utilisation native des D. Yemanov
entiers 64 bits (seulement en Dialect 3).
451922 Déclencheurs universels permettant d’activer un déclencheur à partir D. Yemanov
d’un numéro de type d’actions.
446238, 446243 Nouveau système CONNECTION_ID et TRANSACTION_ID en PSQL. Renvoie D. Yemanov
l’identifiant interne adéquat, stockée sur la page d’entête de la base
de données.
446180 Alias de bases de données côté serveur: se rattacher à une base de D. Yemanov
données en utilisant un nom d’alias plutôt que son chemin d’accès
physique. La liste des alias des bases de données référencées est
enregistrée dans le fichier aliases.conf dans le dossier racine de
l’installation.
Exemple:
Alias dans le fichier de configuration:
my_database = c:\dbs\my\database.gdb
Chaîne de connexion côté application: localhost:my_database
(no #) Nouveau gestionnaire de plugins te nouvelle interface INTL. John Bellardo
Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 77Tracker # Description Contribuant
Amélioration D. Yemanov
Tri en mémoire: Si un plan "SORT" est utilisé pour une instruction SQL,
le tri est réalisé en mémoire. S’il n’ y a pas assez de mémoire pour
réaliser l’opération, L’ancienne méthode à base de fichier temporaire
est utilisée.
538201 Crash avec extraction de valeur null comme date Claudio Valderrama
446256 Extension de l’instruction EXECUTE VARCHAR PSQL permettant A. Peshkoff
d’exécuter des instructions DSQL dans les procédures stockées et
déclencheurs. (renommé ultérieurement EXECUTE STATEMENT).
(no #) Nettoyage principal du code. Sean Leyne,
Erik Kunze
(no #) Nouveau gestionnaire de mémoire. John Bellardo
(no #) Nouvelle logique de manipulation des exceptions. Mike Nordell,
John Bellardo
(no #) Nouvelle configuration de construction basée sur autoconf. John Bellardo,
M. O’Donohue,
Erik Kunze
Portage du code du C vers le C++. Mike Nordell,
(no #)
John Bellardo,
M. O’Donohue

Firebird 1.5 Release Notes v.1.0.8 5 février 2004 Page 78