Historique
This document in English.
Concernant l’installation, la configuration et l’utilisation, veuillez consulter la documentation.
Ce qui a été fait pour la version 0.0.1:
- La rédaction de ce pilote a été facilitée par une discussion avec Villeroy, sur le forum OpenOffice, que je tiens à remercier, car la connaissance ne vaut que si elle est partagée…
- Utilisation de la nouvelle version de HsqlDB 2.5.1.
- Beaucoup d’autres correctifs…
Ce qui a été fait pour la version 0.0.2:
- Ajout d’une boîte de dialogue permettant de mettre à jour le pilote (hsqldb.jar) dans: Outils -> Options -> Pilotes Base -> Pilote HsqlDB
- Beaucoup d’autres correctifs…
Ce qui a été fait pour la version 0.0.3:
- Je tiens particulièrement à remercier fredt à hsqldb.org pour:
- Son accueil pour ce projet et sa permission d’utiliser le logo HsqlDB dans l’extension.
- Son implication dans la phase de test qui a permis de produire cette version 0.0.3.
- La qualité de sa base de données HsqlDB.
- Fonctionne désormais avec OpenOffice sous Windows.
- Un protocole non pris en charge affiche désormais une erreur précise.
- Une url non analysable affiche désormais une erreur précise.
- Gère désormais correctement les espaces dans les noms de fichiers et les chemins.
- Beaucoup d’autres correctifs…
Ce qui a été fait pour la version 0.0.4:
- Réécriture de Driver en Java version 11 OpenJDK amd64 sous Eclipse IDE for Java Developers version 4.23.0 avec les plugins:
- LOEclipse ou LibreOffice Eclipse plugin for extension development version 4.0.1.
- PyDev ou Python IDE for Eclipse version 9.3.0.
- Ecriture des services
Statement
, PreparedStatement
, CallableStatement
, ResultSet
, ...
de JDBC (merci à hanya pour MRI qui m’a été d’une aide précieuse…)
- Intégration dans jdbcDriverOOo des pilotes JDBC H2 et Derby en plus de HsqlDB. Implémentation de Services Java:
- Renommage du dépot et de l’extension HsqlDBDriverOOo en jdbcDriverOOo.
- Prise en charge dans Base des clés primaires auto incrémentées pour HsqlDB, H2 et Derby.
- Ecriture de com.sun.star.sdbcx.Driver. Ce pilote de haut niveau doit permettre la gestion des utilisateurs, des rôles et des privilèges dans Base. Son utilisation peut être désactivée via le menu: Outils -> Options -> LibreOffice Base -> Pilote JDBC pur Java.
- Implémentation d’un fournisseur de services Java UnoLogger.jar pour l’API SLF4J afin de pouvoir rediriger la journalisation des pilotes des bases de données sous-jacentes vers l’API UNO com.sun.star.logging.*.
- Réécriture, en suivant le modèle MVC, de la fenêtre des Options, accessible par le menu: Outils -> Options -> Pilotes Base -> Pilote JDBC, pour permettre:
- La mise à jour et/ou l’ajout d’archives Java de pilotes JDBC.
- L’activation de la journalisation du pilote de la base de la données sous-jacente.
- Ecriture, en suivant le modèle MVC, des fenêtres d’administration des utilisateurs et des rôles (groupes) et de leurs privilèges associés, accessible dans Base par le menu: Administration -> Gestion des utilisateurs et/ou Administration -> Gestion des groupes, permettant:
- Beaucoup d’autres correctifs…
Ce qui a été fait pour la version 1.0.0:
- Intégration de HyperSQL version 2.7.2.
Ce qui a été fait pour la version 1.0.1:
- Intégration de SQLite JDBC version 3.42.0.0. Je tiens tout particulièrement à remercier gotson pour les nombreuses améliorations apportées au pilote SQLite JDBC qui ont rendu possible l’utilisation de SQLite dans LibreOffice/OpenOffice.
- Ce pilote peut être enveloppé par un autre pilote (HyperSQLOOo ou SQLiteOOo) grâce à une url de connexion désormais modifiable.
- Il est possible d’afficher ou non les tables système dans: Outils -> Options -> Pilotes Base -> Pilote JDBC -> Options du pilote UNO -> Afficher les tables système
- Il est possible d’interdire l’utilisation de jeux de résultats actualisables dans: Outils -> Options -> Pilotes Base -> Pilote JDBC -> Options du pilote UNO -> Utiliser les bookmarks
- De nombreuses corrections ont été apportées afin de rendre l’extension SQLiteOOo fonctionnelle.
Ce qui a été fait pour la version 1.0.2:
Ce qui a été fait pour la version 1.0.3:
Ce qui a été fait pour la version 1.0.4:
- Support dans la création de tables du paramètre TypeInfoSettings permettant de récupérer la précision pour les types SQL:
- TIME
- TIMESTAMP
- TIME WITH TIME ZONE
- TIMESTAMP WITH TIME ZONE
Ceci n’est integré que pour le pilote HsqlDB pour le moment.
Ce qui a été fait pour la version 1.0.5:
Ce qui a été fait pour la version 1.0.6:
- Ajout du paquet Python
packaging
dans le pythonpath
de l’extension. Merci à artem78 d’avoir permis cette correction en signalant cet oubli dans le dysfonctionnement #4.
Ce qui a été fait pour la version 1.0.7:
- Désormais, le pilote lève une exception si la création d’une nouvelle table échoue. Ceci est pour répondre au dysfonctionnement #1 sur l’extension HyperSQLOOo.
Ce qui a été fait pour la version 1.0.8:
- Utilisation de la dernière version de l’API de journalisation.
Ce qui a été fait pour la version 1.1.0:
- Tous les paquets Python nécessaires à l’extension sont désormais enregistrés dans un fichier requirements.txt suivant la PEP 508.
- Désormais si vous n’êtes pas sous Windows alors les paquets Python nécessaires à l’extension peuvent être facilement installés avec la commande:
pip install requirements.txt
- Modification de la section Prérequis.
Ce qui a été fait pour la version 1.1.1:
- Le pilote n’utilise plus de jeux de résultats (ResultSet) pouvant être mis en signet (Bookmarkable) pour des raisons de performances dans LibreOffice Base. Ceci peut être changé dans les options d’extension.
Ce qui a été fait pour la version 1.1.2:
- Implementation de l’interface UNO com.sun.star.sdbc.XGeneratedResultSet. Cette interface permet, lors d’une insertion de plusieurs lignes (ie:
INSERT INTO matable (Colonne1, Colonne2) VALUES (valeur1, valeur2), (valeur1, valeur2), ...
) dans une table disposant d’une clé primaire auto-incrémentée, de récupérer un ensemble de résultats à partir des lignes insérées dans la table et vous donne donc accès aux clés générées automatiquement en un seul coup.
- Implémentation de l’interface UNO com.sun.star.sdbcx.XAlterTable. Cette interface permet la modification des colonnes d’une table. Avec HsqlDB, il est maintenant possible dans Base:
- D’attribuez une description aux colonnes des tables.
- De modifier le type d’une colonne si le transtypage (CAST) des données contenues dans cette colonne le permet, sinon il vous sera proposé de remplacer cette colonne ce qui entraîne la suppression des données…
- Toutes les commandes DDL (ie:
CREATE TABLE...
, ALTER TABLE...
) générées par jdbcDriverOOo sont désormais enregistrées dans la journalisation.
- Pilote SQLite mis à jour vers la dernière version 3.45.1.0.
- Beaucoup d’autres correctifs…
Ce qui a été fait pour la version 1.1.3:
Ce qui a été fait pour la version 1.1.4:
- Pilote SQLite mis à jour vers la dernière version SQLite-jdbc-3.45.1.6-SNAPSHOT.jar.
- Intégration du driver PostgreSQL pgJDBC version 42.7.1 dans l’archive de jdbcDriverOOo. Cette intégration a été réalisée sans utiliser de service Java spécifique à PostgreSQL mais uniquement en configurant le fichier Drivers.xcu permettant de déclarer le pilote JDBC à LibreOffice.
- Ouverture d’un dysfonctionnement pour le pilote MariaDB Connector/J afin qu’il prenne en charge
java.sql.Statement.getGeneratedKeys()
comme demandé par JDBC 4.1.
- Normalement les prochaines versions de jdbcDriverOOo devraient pouvoir être mises à jour dans la liste des extensions installées sous LibreOffice: Outils -> Gestionnaire des extensions… -> Vérifier les mises à jour.
- Désormais, seul le pilote HsqlDB a accès dans Base à l’administration des droits des utilisateurs et des groupes. Ceci est déterminé par le paramètre
IgnoreDriverPrivileges
dans le fichier Drivers.xcu.
- De nombreuses améliorations.
Ce qui a été fait pour la version 1.1.5:
- Vous pouvez désormais éditer une vue en mode SQL avec le pilote SQLite. Pour les pilotes qui ne prennent pas en charge la modification des vues, les vues sont supprimées puis recréées.
Ce qui a été fait pour la version 1.1.6:
- Vous pouvez désormais renommer les tables et les vues dans Base. Toute la configuration nécessaire au renommage pour chaque pilote JDBC intégré est stockée uniquement dans le fichier Drivers.xcu.
- Tous les pilotes JDBC intégrés à jdbcDriverOOo sont capables de renommer des tables ou des vues et même certains (ie: MariaDB et PostgreSQL) permettent de modifier le catalogue ou le schéma.
- De nombreuses améliorations.
Ce qui a été fait pour la version 1.2.0:
- Tous les pilotes intégrés à l’extension sont désormais entièrement fonctionnels dans Base pour la gestion des tables et des vues.
- Des fonctions intelligentes sont appelées pour:
- Le déplacement avec renommage des tables, pour les drivers le permettant et utilisant deux commandes SQL, l’ordre des commandes SQL sera optimisé (PostgreSQL).
- Le Renommage d’une vue, si le pilote ne le supporte pas, elle sera supprimée puis recréée (SQLite).
- Utilisation de classe générique Java pour la gestion des conteneurs utilisés pour la gestion des tables, des vues, des colonnes, des clefs et des indexes. L’utilisation de classes génériques dans les conteneurs permettra de se passer de l’interface UNO XPropertySet et de pouvoir retranscrire le code existant en Java pur.
- De nombreuses améliorations.
Ce qui a été fait pour la version 1.2.1:
- Résolution d’une régression interdisant la suppression de colonnes dans une table.
- Mise à jour du pilote mariadb-java-client-3.3.3.jar.
- Généralisation des classes Java génériques pour toutes les classes devant être partagées au niveau de l’API UNO (ie: sdb, sdbc et sdbcx).
- On peut désormais renommer les colonnes des tables sous SQLite et MariaDB.
- Il est également possible de renommer les colonnes déclarées comme clé primaire dans tous les pilotes embarqués.
- De nombreuses améliorations.
Ce qui a été fait pour la version 1.2.2:
- Mise en place de la gestion des index.
- Renommer une colonne déclarée comme clé primaire renommera également l’index associé à la clé primaire.
- Seuls les membres des classes Java répondant à l’API UNO ont un niveau de visibilité public, tous les autres membres ont une visibilité protégée ou privée.
- Résolution de nombreux problèmes et régressions.
Ce qui a été fait pour la version 1.2.3:
- Renommer une colonne déclarée comme index renommera également la colonne de l’index associée.
Ce qui a été fait pour la version 1.2.4:
- Suppression de SmallSQL.
- Intégration de Jaybird 5.0.4 le pilote JDBC pour Firebird.
- Vous pouvez désormais supprimer une clé primaire avec PostgreSQL.
- L’ajout ou la suppression d’une clé primaire génère une erreur si le pilote sous-jacent ne le supporte pas (SQLite).
- Lors de la création d’une table avec une clé primaire, si le pilote sous-jacent le prend en charge, la création de la clé primaire peut être effectuée par une commande DDL distincte. Cela permet à Jaybird de contourner le dysfonctionnement #791 en créant une clé primaire nommée et permet de gérer des cas particuliers comme MariaDB ou SQLite pour leur gestion des auto-increments.
- Si le pilote sous-jacent le permet, lors de la modification des colonnes d’une table vous pouvez désormais:
- La déclarer en auto-incrément (Identity) sans qu’elle soit nécessairement la clé primaire.
- Ajouter ou retirer la contrainte Identity (auto-incrément).
- Ajouter des commentaires.
- De nombreuses améliorations.
Ce qui a été fait pour la version 1.3.0:
- Intégration de la gestion des clés étrangères dans Base (Outils -> Relations…).
- Lorsque vous renommez une table, cela renommera également le référencement de cette table dans les éventuelles clés étrangères pointant vers cette table.
- Lorsque vous renommez une colonne, cela renommera également le référencement de cette colonne dans les éventuelles clés étrangères pointant vers cette colonne.
- Ces mises à jour de clés étrangères prennent en compte le chargement paresseux des conteneurs des tables et des clés et ne seront effectuées que si Base a déjà accédé aux données impliquées.
- Un problème persiste lors de la création de clés étrangères entre des tables qui n’ont pas le même catalogue et/ou schéma, voir dysfonctionnement #160375. Ce problème semble être lié à Base, j’espère qu’il sera résolu rapidement.
- Meilleure gestion des exceptions avec la possibilité de connaître l’état, le code SQL et le message de l’exception qui a été générée par le pilote sous-jacent.
- De nombreuses corrections et améliorations.
Normalement, je suis arrivé à couvrir toute l’étendue de l’API UNO (com.sun.star.sdbc, sdbcx et sdb), ce qui à pris pas mal de temps, mais je ne pensais pas au départ y arriver.
Ce qui a été fait pour la version 1.3.1:
- Correction de l’implémentation de l’interface XRowLocate responsable de la gestion des signets (Bookmark) dans les jeux de résultats (ResultSet). Cette nouvelle implémentation fonctionne avec tous les pilotes à l’exception de SQLite qui ne prend pas en charge la mise à jour des jeux de résultats. La présence de cette interface dans les jeux de résultats permet à Base d’éditer des tables même en l’absence de clé primaire. Avec certains pilotes (HsqlDB, H2 et Derby) le rafraîchissement en cours de saisie ne sera pas automatique et devra être fait manuellement. L’utilisation des signets peut être désactivée dans les options de l’extension.
- Mise en place de jeu de resultats simulé (java.sql.ResultSet) permettant de produire des ResultSet à partir des données de connexion fourni par le pilote, plus exactement à partir du fichier Drivers.xcu. L’utilisation de ces resultset simulé permet de fournir à Base des resultset conforme à ce qu’il attend même si le pilote sous jancent n’est pas capable de les produire. Ils servent à patcher les résultats obtenus les méthodes
getTypeInfo()
, getTableTypes
et getTablePrivileges()
de l’interface java.sql.DatabaseMetaData en utilisant respectivement les propriétés TypeInfoSettings
, TableTypesSettings
et TablePrivilegesSettings
du fichier Drivers.xcu.
- Ecriture d’un conteneur spécifique pour gérer les utilisateurs d’un rôle ou les rôles d’un rôle. Ce conteneur n’est qu’un pointeur vers les elements des conteneurs utilisateur et/ou role de la base de données. Lors de la suppression d’un utilisateur ou d’un rôle, ce conteneur sera mis à jour si nécessaire.
- Réécriture des fenêtres Administration des utilisateurs et Administration des groupes accessibles dans le menu Administration de Base. Désormais, si la propriété
TablePrivilegesSettings
est fournie par le pilote sous-jacent, seuls les privilèges déclarés dans cette propriété seront affichés. Cela permet une utilisation plus facile. Une demande d’amélioration #160516 a été faite afin d’intégrer cette fonctionalité dans le code de Base.
- Intégration de tous les pilotes embarqués dans l’extension (hors SQLite) dans la gestion des utilisateurs, des rôles et des privilèges sur les tables et les vues. Je suppose que de nombreux dysfonctionnements restent à corriger, merci de me le faire savoir, détecter les dysfonctionnements me prend plus de temps que les corriger….
- De nombreuses corrections et améliorations…
Ce qui a été fait pour la version 1.3.2:
Désormais l’API UNO SDBCX peut être utilisée pour la création de bases de données, comme c’est le cas pour les dernières versions des extensions utilisant jdbcDriverOOo. Il est possible de créer des tables, grâce à l’API UNO, avec les caractéristiques suivantes:
- Déclaration de colonnes de types TIMESTAMP WITH TIME ZONE, TIMESTAMP, TIME WITH TIME ZONE, TIME avec gestion de la précision (ie: de 0 à 9).
- Déclaration de tables temporelles versionnées par le système (temporal system versioned tables). Ces types de tables sont utilisés dans les mêmes extensions pour faciliter la réplication des données.
- Déclaration de tables au format texte. Ces tables vous permettent d’utiliser les données de fichiers au format csv.
- Déclaration des clés primaires, clés étrangères, index, utilisateurs, rôles et privilèges associés.
L’utilisation de l’API UNO pour créer des bases de données vous permettra d’utiliser du code indépendant de la base de données sous-jacente.
Les clients utilisant le pilote jdbcDriverOOo peuvent accéder aux fonctionnalités du pilote JDBC sous-jacent à l’aide de la méthode XDriver.getPropertyInfo() afin d’accéder au paramètre nécessaire lors de la création de tables et d’afficher correctement les privilèges. Ces paramètres étant accessibles directement par le pilote, peuvent être obtenus avant toute connexion, et permettent donc la création de la base de données lors de la première connexion.
Ce qui a été fait pour la version 1.3.3:
- Modification de la gestion du paramètre de connexion
JavaDriverClassPath
. Ce paramètre peut désormais désigner un répertoire et dans ce cas tous les fichiers jar contenus seront ajoutés au Java ClassPath
. Cela permet le chargement dynamique des pilotes JDBC nécessitant plusieurs archives (ie: Derby et Jaybird embedded). Cette modification a été apportée pour permettre à la nouvelle extension JaybirdOOo de fonctionner.
- Reprise d’une partie de l’implémentation de
javax.sql.rowset.CachedRowSet
dans les jeux de résultats ScrollableResultSet.java et SensitiveResultSet.java afin de simuler le type TYPE_SCROLL_SENSITIVE
à partir des jeux de résultats de type TYPE_FORWARD_ONLY
et TYPE_SCROLL_INSENSITIVE
respectivement. Cela permet à LibreOffice Base d’utiliser des signets (ie : l’interface UNO XRowLocate) qui permettent des insertions, mises à jour et suppressions positionnées et donc, pour les bases de données le supportant, la possibilité d’éditer des tables ne contenant aucune clé primaire. De plus, un mode SQL permet de rendre éditable n’importe quel ResultSet. Ce mode peut être validée dans les options de l’extension, elle est trés puissante et donc à utiliser avec prudence. Concernant les jeux de résultats de type TYPE_FORWARD_ONLY
, leur implémentation chargeant progressivement l’intégralité des données du jeu de résultats en mémoire peut conduire à un débordement de mémoire. La mise en oeuvre d’une pagination éliminera ce risque.
- Ajout du pilote MySQL Connector/J version 8.4.0. Ce driver ne semble pas fonctionner correctement, des erreurs assez surprenantes apparaissent… Je le laisse en place au cas où des gens seraient prêts à participer à son intégration? A utiliser avec précaution.
- Suite à la demande de PeterSchmidt23 ajout du pilote Trino version 448. Ne connaissant pas Trino, qui a l’air étonnant par ailleur, seulement un début d’intégration a été réalisée. L’edition du contenu des tables n’est pas encore possible, voir dysfonctionnement #22306. Le nom des tables doit être en minuscule afin d’autoriser leur création.
- L’implémentation de
CachedRowSet
semble avoir résolu le problème d’insertion de cellules depuis Calc, voir dysfonctionnement #7.
- De nombreuses corrections et améliorations…
Ce qui a été fait pour la version 1.4.0:
- Mise à jour du pilote Jaybird vers la version finale 5.0.5.
- Modification de l’implémentation de l’interface UNO com.sun.star.sdbc.XGeneratedResultSet. Cette nouvelle implémentation prend en charge les pilotes qui ne suivent pas l’API JDBC mais proposent une implémentation spécifique (ie: MariaDB et Derby). Pour être activé lors de l’utilisation de fichiers odb créés avec une version précédente, s’il est présent, il est nécessaire de modifier le paramètre :
Requête des valeurs générées
accessible par le menu : Edition -> Base de données -> Paramètres avancés… -> Valeurs générées par la valeur : SELECT * FROM %s WHERE %s
.
- Ajout de nouveaux paramètres pris en charge par le fichier de configuration Drivers.xcu. Ces nouveaux paramètres permettent de modifier les valeurs renvoyées par les pilotes concernant la visibilité des modifications dans les jeux de résultats (ie: insertion, mise à jour et suppression). Ils permettent également de forcer le mode SQL pour les modifications souhaitées dans les jeux de résultats.
- Finalisation de l’implémentation de l’émulation rendant tout jeu de résultats modifiable, si l’enregistrement est unique dans ce jeu de résultats. Cette implémentation, utilisant les signets (ie: bookmark), permet l’édition de jeu de résultats provenant de Requêtes Base, cela rend tout simplement les Requêtes LibreOffice Base éditables. Les requêtes joignant plusieurs tables ne sont pas encore supportées et je suis ouvert à toute proposition technique concernant une éventuelle implémentation.
- Afin de rendre modifiables les jeux de résultats retournés par le driver Trino et de précéder la demande d’amélioration #22408, une recherche de la clé primaire sera lancée afin de retrouver la première colonne, du jeu de résultats, ayant pas de doublons.
- Afin de contourner le dysfonctionnement #368 le driver HsqlDB utilise des mises à jour en mode SQL dans les jeux de résultats.
- De nombreuses corrections et améliorations…
Ce qui a été fait pour la version 1.4.1:
- Nouvelle implémentation, que j’espère définitive, des signets (bookmarks). Il est basé sur trois fichiers et est tiré de l’implémentation par Sun de
javax.sql.rowset.CachedRowSet
:
- Ces ResultSets sont capables d’éditer presque toutes les requêtes créées dans LibreOffice Base, même les vues… Mais afin de garantir une bonne fonctionnalité, certaines règles doivent être respectées afin de rendre un jeu de résultats éditable. Si la requête concerne plusieurs tables alors il est impératif d’inclure les clés primaires de chaque table dans la liste des colonnes du jeu de résultats. Si la requête ne concerne qu’une seule table alors le jeu de résultats sera modifiable s’il existe une colonne qui ne contient pas de doublon (ie: une clé naturelle). Cela permet de rendre modifiables les jeux de résultats provenant du pilote Trino.
- Suppression de l’utilisation de classes génériques là où elles n’étaient pas nécessaires. Cela a rendu le pilote plus rapide…
- Ajout de paramètres spéciaux dans: Edition -> Base de données -> Paramètres avancés… -> Paramètres spéciaux afin de répondre à la demande d’intégration du pilote Trino (voir demande d’amélioration n°8). Il est nécessaire de recréer les fichiers odb afin d’avoir accès à ces nouveaux paramètres.
Ce qui a été fait pour la version 1.4.2:
Ce qui a été fait pour la version 1.4.3:
- Mise à jour du paquet Python setuptools vers la version 73.0.1.
- La journalisation accessible dans les options de l’extension s’affiche désormais correctement sous Windows.
- Les options de l’extension sont désormais accessibles via: Outils -> Options -> LibreOffice Base -> Pilote JDBC
- Les modifications apportées aux options d’extension, qui nécessitent un redémarrage de LibreOffice, entraîneront l’affichage d’un message.
- Support de LibreOffice version 24.8.x.
Ce qui a été fait pour la version 1.4.4:
- Il est désormais possible d’insérer des données dans une table vide lors de l’utilisation d’un ResultSet
TYPE_FORWARD_ONLY
(ie: SQLite, Trino).
- Le bouton options est désormais accessible dans la liste des extensions installées obtenue par le menu : Outils -> Gestionnaire d’extensions…
- Les options de l’extension sont désormais accessibles via: Outils -> Options -> LibreOffice Base -> Pilote JDBC pur Java
- Les options de l’extension: Voir les tables système, Utiliser les signets et Forcer le mode SQL seront recherchées dans les informations fournies lors de la connexion et auront la priorité si elles sont présentes.
- Pilote Trino mis à jour vers la version 455.
Ce qui a été fait pour la version 1.4.5:
- Correction pour permettre à l’extension eMailerOOo de fonctionner correctement dans la version 1.2.5.
Ce qui a été fait pour la version 1.4.6:
- Modification de l’implémentation de l’interface UNO XPropertySet. Cette nouvelle implémentation assure l’unicité des Handle pour chaque propriété. Cette implémentation étant partagée avec l’extension vCardOOo, elle rend toutes les versions existantes de vCardOOo obsolètes. Elle est basée sur trois fichiers:
- Correction de problèmes dans l’implémentation des signets (bookmark). Ces modifications ont été testées plus particulièrement avec les pilotes HsqlDB 2.7.4 et Jaybird 5.0.6.
- Nouvelle implémentation des options de l’extension et plus particulièrement de l’onglet Options du pilote JDBC ce qui devrait permettre à terme la configuration à partir de zéro d’un pilote JDBC pour pouvoir fonctionner avec LibreOffice Base. L’opération de mise à jour de l’archive du pilote JDBC a été simplifiée. Elle prend en charge la mise à jour des pilotes qui nécessitent plusieurs archives jar pour fonctionner (ie: Derby, Jaybird 6.x). Cette nouvelle fenêtre qui semble assez simple, nécessite en réalité une gestion assez compliquée, n’hésitez donc pas à me signaler d’éventuels dysfonctionnements.
- De nombreuses autres améliorations.
Ce qui a été fait pour la version 1.5.0:
- Mise à jour du paquet Python packaging vers la version 25.0.
- Mise à jour du paquet Python setuptools vers la version 75.3.2.
- Mise à jour du paquet Python six vers la version 1.17.0.
- Déploiement de l’enregistrement passif permettant une installation beaucoup plus rapide des extensions et de différencier les services UNO enregistrés de ceux fournis par une implémentation Java ou Python. Cet enregistrement passif est assuré par l’extension LOEclipse via les PR#152 et PR#157.
- Modification de LOEclipse pour prendre en charge le nouveau format de fichier
rdb
produit par l’utilitaire de compilation unoidl-write
. Les fichiers idl
ont été mis à jour pour prendre en charge les deux outils de compilation disponibles: idlc et unoidl-write.
- Ajout de la prise en charge de l’instrumentation Java à LibreOffice avec Enhancement Request #165774 puis PR#183280. Cela permettra, à partir de LibreOffice 25.8.x, d’accéder à la journalisation pour tous les pilotes JDBC utilisant
java.lang.System.Logger
comme interface de journalisation. Cette nouvelle fonctionnalité peut être activée dans les options d’extension si la version de LibreOffice le permet. Le rétroportage vers LibreOffice 25.2.x m’a été refusé alors soyez patient.
- Toutes les commandes SQL, DDL ou DCL proviennent désormais du fichier de configuration du pilote JDBC Drivers.xcu. L’implémentation du traitement de ces commandes et de leurs paramètres a été regroupée dans le package io.github.prrvchr.driver.query.
- Compilation de toutes les archives Java contenues dans l’extension sous forme de modules et avec Java JDK version 17.
- Mise à jour de tous les pilotes JDBC intégrés, à l’exception de SQLite et Trino, vers leurs dernières versions respectives prenant en charge Java 17.
- Suppression de tous les fichiers idl definissant les structures suivantes: Date, DateTime, DateTimeWithTimezone, DateWithTimezone, Duration, Time et TimeWithTimezone. Ces fichiers étaient nécessaires à la compatibilité avec OpenOffice et sont désormais remplacés par les fichiers idl équivalents de l’API LibreOffice. Ce changement rend toutes les versions des extensions utilisant la version précédente de jdbcDriverOOo incompatibles.
- La gestion des utilisateurs, des rôles et des privilèges a été testée avec tous les pilotes intégrés à jdbcDriverOOo, à l’exception de SQLite et Trino.
- Il est désormais possible de créer le fichier oxt de l’extension jdbcDriverOOo uniquement avec Apache Ant et une copie du dépôt GitHub. La section Comment créer l’extension a été ajoutée à la documentation.
- Implémentation de PEP 570 dans la journalisation pour prendre en charge les arguments multiples uniques.
- Toute erreur survenant lors du chargement du pilote sera consignée dans le journal de l’extension si la journalisation a été préalablement activé. Cela facilite l’identification des problèmes d’installation sous Windows.
- Lorsque les pilotes JDBC intégrés à l’extension jdbcDriverOOo sont enregistrés auprès de
java.sql.DriverManager
, c’est à dire lors de la première connexion nécessitant ce pilote, si ce pilote est déjà présent dans le classpath Java, alors cela sera détecté, le pilote non enregistré, la connexion refusée et l’erreur journalisée.
Ce qui a été fait pour la version 1.5.1:
- L’instrumentation Java est désormais requise pour le bon fonctionnement de jdbcDriverOOo. Pour les versions de LibreOffice antérieures à la version 25.8.x, il est actuellement nécessaire d’installer l’instrumentation Java manuellement. Une section expliquant Comment installer l’instrumentation Java a été ajoutée à la documentation. Si l’instrumentation Java n’est pas présente, le chargement des pilotes JDBC échouera et un message d’erreur sera présent dans le journal.
- Réécriture du Service Provider Interface Java:
javax.sql.rowset.RowSetFactory
. Ce nouveau service SPI est implémenté à l’aide de l’archive RowSetFactory.jar, chargée via l’instrumentation Java. Cette nouvelle implémentation a été modifiée pour prendre en charge:
- Les identifiants avec casse mixte dans les requêtes SQL.
- L’exclusion des colonnes à incrémentation automatique et/ou calculées dans les requêtes d’insertion (requis par PostgreSQL).
- L’utilisation de l’interface
java.sql.Statement.getGeneratedKeys()
après toutes les insertions afin de récupérer la valeur des colonnes utilisant des valeurs générées par la base de données sous-jacente (ie: colonne auto-incrémentée et/ou calculée).
- La mise en conformité du code source à l’aide de CheckStyle et du modèle checkstyle.xml. Il reste encore du travail à faire.
- L’utilisation de
java.lang.System.Logger
comme facade de journalisation.
- Beaucoup de petites corrections nécessaires pour que cela fonctionne correctement car l’implémentation de base du SDK Java 11 ne me semble pas très fonctionnelle, voire même fantaisiste.
- Avec cette nouvelle implémentation de CachedRowSetImpl, toutes les colonnes de la première table d’un
java.sql.ResultSet
sont modifiables dans Base. Actuellement, seule la table de la première colonne du ResultSet est prise en compte. Cependant, il est nécessaire que les colonnes de la table de ce jeu de résultats répondent aux critères suivants:
- Si ces colonnes proviennent d’une table avec des clés primaires, ces clés doivent faire partie des colonnes du jeu de résultats.
- Si ces colonnes proviennent d’une table sans clé primaire, les enregistrements d’un ResultSet seront modifiables s’ils sont clairement identifiables par les colonnes du ResultSet. Dans le cas contraire, une exception SQL sera levée lors de toute tentative de mise à jour ou de suppression.
- Ce nouveau CachedRowSet, fonctionnant sans connexion, doit charger l’intégralité du contenu du jeu de résultats en mémoire et s’assurera, avant toute modification ou suppression, que l’enregistrement n’a pas été modifié dans la base de données sous-jacente. Si tel est le cas, une exception sera levée et l’opération sera annulée.
- L’archive a été compilée avec Java 17 et sous forme de module.
- Nous avons maintenant la possibilité d’utiliser ou non CachedRowSet. Cette option peut être configurée dans les options de l’extension. Si cette option est forcée, il est même possible de modifier les requêtes dans LibreOffice Base. Wahou…
- Les ResultSets des méthodes
getTables()
, getTableTypes()
, getTypeInfo()
et getTablePrivileges()
de l’interface XDatabaseMetaData sont désormais des CachedRowSet dont les données sont mises à jour selon le fichier de configuration Drivers.xcu. Cela permet d’obtenir les résultats attendus dans LibreOffice Base avec n’importe quel pilote sous-jacent.
- Grâce à ces ResultSets modifiables en fonction de la configuration, l’option d’affichage des tables système fonctionne avec n’importe quel pilote sous-jacent et quel que soit le niveau de l’API utilisée (sdbc, sdbcx et sdb).
- Il est désormais possible d’obtenir les numéros de ligne de code source dans les traces Java grâce au changement dans LOEclipse PR#166.
- Correction de nombreuses régressions liées à la dernière mise à jour qui a apporté de nombreux changements.
- La nouvelle version du pilote SQLite est désormais compilée sous Java 11 et utilise
java.lang.System.Logger
comme façade de journalisation, ce qui permet d’y accéder dans LibreOffice. C’est le seul qui nécessite l’utilisation de l’option CachedRowSet, sinon Base n’affichera que les tables et vues en lecture seule.
- Il semble que ce soit la mise à jour la plus importante de JdbcDriverOOo, et je ne m’attendais pas à en arriver là. La prochaine étape consistera à intégrer Trino et à pouvoir exécuter des requêtes réparties sur différentes bases de données dans LibreOffice Base.
CachedRowSet
est exactement la brique dont j’avais besoin pour pouvoir terminer cela.
Ce qui a été fait pour la version 1.5.2:
Une régression dans la gestion des conteneurs (tables, vues et colonnes) est présente depuis la dernière mise à jour. Elle provient de la nouvelle intégration du service ResultColumn, qui nécessite des conteneurs capables de gérer la duplication de noms, comme c’est parfois le cas pour les colonnes d’un ResultSet. Cet ajout provoquait une erreur dans la gestion des index après la suppression d’un élément. Ce problème vient d’être corrigé et implementé dans les deux fichiers ContainerBase.java et ContainerSuper.java.
Ce qui a été fait pour la version 1.5.3:
L’intégration de l’archive JaybirdEmbedded permet un véritable mode intégré pour Jaybird. Il n’est plus nécessaire d’installer le serveur Firebird pour utiliser Firebird en mode embarqué (ie: embedded:*
).
Ce qui a été fait pour la version 1.5.4:
Afin d’éviter toute régression sur les extensions utilisant jdbcDriverOOo :
CachedRowSet
ne sera utilisé que si des Bookmarks sont utilisés.
CachedRowSet
ne sera pas utilisé pour le niveau d’API com.sun.star.sdbc
.
Ce qui a été fait pour la version 1.5.5:
- Désormais,
RowSetFactory
affiche et/ou journalise correctement les messages en français et son code est entièrement conforme aux règles de CheckStyle.
- Deux nouvelles entrées dans le fichier de configuration
Drivers.xcu
permettent de filtrer les catalogues et schémas systèmes si nécessaire et s’ils existent:
SystemCatalogSettings
SystemSchemaSettings
- Par conséquent, les méthodes
getCatalogs()
et getSchemas()
de l’interface XDatabaseMetaData
seront filtrées respectivement pour n’afficher que les entrées nécessaires lors de la création d’une table dans Base.
- Les pilotes JDBC peuvent être ajoutés au ClassPath Java lors de leur chargement. Cette option est même requise pour le bon fonctionnement du pilote Jaybird 6.0.2 en mode intégré.
- Pour garantir un chargement systématique des pilotes, ceux-ci sont désormais chargés uniquement par la méthode
Class.forName()
, puis enregistrés auprés de java.sql.DriverManager
.
Que reste-t-il à faire pour la version 1.5.5: