Skip to content

Commit 8fe93b2

Browse files
authored
Merge pull request #20 from prrvchr/v1.5.6
V1.5.6
2 parents f2f8a8f + 96eefaf commit 8fe93b2

File tree

129 files changed

+5156
-3257
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+5156
-3257
lines changed

CHANGELOG.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,48 @@ In order to avoid any regressions on extensions using jdbcDriverOOo:
376376
- JDBC drivers can be added to the Java ClassPath when they are loaded. This option is even required for the Jaybird 6.0.2 driver to work properly in embedded mode.
377377
- To ensure consistent driver loading, drivers are now loaded only using the `Class.forName()` method and then registered in `java.sql.DriverManager`.
378378

379-
### What remains to be done for version 1.5.5:
379+
### What has been done for version 1.5.6:
380+
381+
Integration of the [Oracle JDBC driver][112] `ojdbc17.jar`. This integration required the following modifications to the underlying code:
382+
- Added two additional parameters to the `Drivers.xcu` file:
383+
- `QuotedMetaData`, which forces quotes on identifier names if they are not uppercase for method `DatabaseMetaData.getIndexInfo()`.
384+
- `CompletedMetaData`, which determines whether the underlying driver provides ResultSets with missing metadata.
385+
- [QueryHelper][113] is now able to determine whether the executed SQL query is a `SELECT` query on a single table.
386+
- If so, when constructing an XResultSet, [QueryHelper][113] provides the fully qualified table name used in the SQL `SELECT` query to the `CachedRowSet` emulating this XResultSet.
387+
- When initializing this CachedRowSet, missing data from the Oracle driver's ResultSet metadata (ie: `getTableName(int index)` and `getSchemaName(int index)`) will be extracted from the table name and assigned to the CachedRowSet's metadata.
388+
389+
Due to these limitations of the Oracle driver, only ResultSets from SQL `SELECT` queries that apply to a single table will be editable in LibreOffice Base.
390+
391+
The implementation of containers for tables, views, columns, indexes, keys, users, groups and descriptors has been completely redesigned. Now containers delegate the management of their elements to three classes implementing the [BiMap][114] interface:
392+
- [BiMapMain][115] allows element management using two `java.util.List` lists. This implementation will list elements in insertion order and allows duplicate management.
393+
- [BiMapBase][116] allows element management using three `java.util.List` lists and one `java.util.Set` set. This implementation will list elements using a comparator that can take case-sensitive elements into account when sorting. It will reject duplicate insertions.
394+
- [BiMapSuper][117] allows element management through the use of one list `java.util.List`, one set `java.util.Set` and one `BiMap`. This implementation allows to manage a sublist of elements coming from a `BiMap` interface implementation instance. It is this which ensures the management of groups and/or users for a given group and/or user.
395+
396+
As for the containers themselves, they now use one of the previous classes implementing `BiMap` depending on their needs. This choice is made in one of the following four containers and according to their class inheritance level:
397+
- [ContainerMain][118] uses `BiMapMain` and implements the UNO interfaces: `XNameAccess`, `XIndexAccess` and `XEnumerationAccess`. It allows management of `ResultColumn` elements.
398+
- [ContainerBase][119] extends the previous class and implements the UNO interfaces: `XAppend`, `XDrop`, `XDataDescriptorFactory` and `XRefreshable`. This container has the particularity of allowing addition and deletion, and allows management of `Column`, `Index`, `Key` elements and their associated `Descriptor` services.
399+
- [ContainerSuper][120] uses `BiMapBase` and extends the previous class. It does not implement any additional interfaces and allows the management of the following elements: `Table`, `View`, `User`, and `Group`.
400+
- [RoleContainer][121] uses `BiMapSuper` and extends the previous class. It is simply a facade for filtering the contents of the `UserContainer` and `GroupContainer` containers to allow the management of users and roles belonging to a group and/or user.
401+
402+
The creation of the three classes implementing the `BiMap` interface now allows all containers to inherit from the parent `ContainerMain` class, which was not possible until now. This greatly simplifies the implementation of containers, which have been able to get rid of all this machinery. Everything has become so much simpler that I don't understand why I didn't think of it sooner?
403+
Furthermore, regarding users and roles, this new implementation will guarantee:
404+
- That there is only one instance of the `Group` or `User` class per user or role, regardless of their access.
405+
- That any necessary updates following the deletion of a user or role are performed by a new [RoleListener][122].
406+
407+
On this same principle, it would be possible to have only one instance of a loaded column, whether it is accessed through a `Table` or a `ResultSet`. Something to think about...
408+
409+
The refresh management following the creation or deletion of an element has problems in LibreOffice Base, see issue [tdf#167920][123]. I don't know yet how to proceed to get rid of this. Use of listener or that Base uses the `XRefresable` interface supported by the containers after any modification requiring it. In the second case it is the code of LibreOffice Base which remains to be improved. In the meantime, to work around this problem I advise you to manually refresh LibreOffice Base via the menu **View -> Refresh tables** after any insertion or deletion.
410+
411+
Many small fixes:
412+
- `CachedRowSet` now allows inserting records with null values if the columns allow it.
413+
- The `cancelRowUpdates` method of the `CachedRowSetImpl` class now supports execution on an empty `RowSet`. This is necessary to work around issue [tdf#167434][124].
414+
- It is again possible to add a column to an existing table with SQLite.
415+
416+
Supporting an additional driver like Oracle's requires a lot of work for functionality testing. I'm counting on you to report any issues, as tracking down these issues is the most time-consuming task. Thanks in advance.
417+
418+
If you use multiple accounts to connect to a database, you will not be able to reconnect to that database again if you opened it with an account other than the one offered and then closed it without saving the file. You must restart LibreOffice. See [tdf#167960][125].
419+
420+
### What remains to be done for version 1.5.6:
380421

381422
- Add new languages for internationalization...
382423

@@ -493,3 +534,17 @@ In order to avoid any regressions on extensions using jdbcDriverOOo:
493534
[109]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerBase.java>
494535
[110]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerSuper.java>
495536
[111]: <https://prrvchr.github.io/JaybirdEmbedded/>
537+
[112]: <https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html>
538+
[113]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/helper/QueryHelper.java>
539+
[114]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMap.java>
540+
[115]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapMain.java>
541+
[116]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapBase.java>
542+
[117]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapSuper.java>
543+
[118]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerMain.java>
544+
[119]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerBase.java>
545+
[120]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerSuper.java>
546+
[121]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/RoleContainer.java>
547+
[122]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/RoleListener.java>
548+
[123]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167920>
549+
[124]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167434>
550+
[125]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167960>

CHANGELOG_fr.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,48 @@ Afin d'éviter toute régression sur les extensions utilisant jdbcDriverOOo :
376376
- 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é.
377377
- 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`.
378378

379-
### Que reste-t-il à faire pour la version 1.5.5:
379+
### Ce qui a été fait pour la version 1.5.6:
380+
381+
Intégration du [pilote JDBC Oracle][112] `ojdbc17.jar`. Cette intégration a nécessité les modifications suivantes du code sous-jacent:
382+
- Ajout de deux paramètres supplémentaires au fichier `Drivers.xcu`:
383+
- `QuotedMetaData`, qui force la mise entre guillemets des noms d'identifiants s'ils ne sont pas en majuscules pour la méthode `DatabaseMetaData.getIndexInfo()`.
384+
- `CompletedMetaData`, qui permet de déterminer si le pilote sous-jacent fournit des ResultSets avec des métadonnées manquantes.
385+
- [QueryHelper][113] est désormais capable de déterminer si la requête SQL exécutée est une requête `SELECT` sur une seule table.
386+
- Si tel est le cas, lors de la construction d'un XResultSet, [QueryHelper][113] fournit le nom complet de la table utilisée dans la requête SQL `SELECT` au CachedRowSet émulant ce XResultSet.
387+
- Lors de l'initialisation de ce CachedRowSet, les données manquantes des métadonnées du ResultSet du pilote Oracle (ie: `getTableName(int index)` et `getSchemaName(int index)`) seront déduites du nom de la table et affectées aux métadonnées du CachedRowSet.
388+
389+
En raison de ces limitations du pilote Oracle, seuls les ResultSets des requêtes SQL `SELECT` qui ne s'appliquent qu'à une seule table seront modifiables dans LibreOffice Base.
390+
391+
L'implémentation des conteneurs pour les tables, les vues, les colonnes, les index, les clés, les utilisateurs, les groupes et descripteurs a été entièrement repensée. Désormais les conteneurs déléguent la gestion de leurs elements à trois classes implémentant l'interface [BiMap][114]:
392+
- [BiMapMain][115] permet la gestion des éléments à l'aide de deux listes `java.util.List`. Cette implémentation liste les éléments par ordre d'insertion et permet la gestion des doublons.
393+
- [BiMapBase][116] permet la gestion des éléments à l'aide de trois listes `java.util.List` et d'un ensemble `java.util.Set`. Cette implémentation liste les éléments à l'aide d'un comparateur prenant en compte les éléments sensibles à la casse lors du tri. Les doublons sont rejetés.
394+
- [BiMapSuper][117] permet la gestion des éléments à l'aide d'une liste `java.util.List`, d'un ensemble `java.util.Set` et d'un ensemble `BiMap`. Cette implémentation permet de gérer une sous-liste d'éléments provenant d'une instance de l'implémentation de l'interface `BiMap`. Elle assure la gestion des groupes et/ou des utilisateurs pour un groupe et/ou un utilisateur donné.
395+
396+
Quant aux conteneurs eux-mêmes, ils utilisent désormais l'une des précédente classes implémentant `BiMap` selon leurs besoins. Ce choix s'effectue dans l'un des quatre conteneurs suivants et selon leur niveau d'héritage de classe:
397+
- [ContainerMain][118] utilise `BiMapMain` et implémente les interfaces UNO: `XNameAccess`, `XIndexAccess` et `XEnumerationAccess`. Il permet la gestion des éléments `ResultColumn`.
398+
- [ContainerBase][119] étend la classe précédente et implémente les interfaces UNO: `XAppend`, `XDrop`, `XDataDescriptorFactory` et `XRefreshable`. Ce conteneur a la particularité de permettre l'ajout et la suppression d'éléments, et de gérer les éléments `Column`, `Index`, `Key` et leurs services `Descriptor` associés.
399+
- [ContainerSuper][120] utilise `BiMapBase` et étend la classe précédente. Elle n'implémente aucune interface supplémentaire et permet la gestion des éléments suivants: `Table`, `View`, `User` et `Group`.
400+
- [RoleContainer][121] utilise `BiMapSuper` et étend la classe précédente. Il s'agit simplement d'une façade permettant de filtrer le contenu des conteneurs `UserContainer` et `GroupContainer` afin de gérer les utilisateurs et les rôles appartenant à un groupe et/ou un utilisateur.
401+
402+
La création des trois classes implémentant l'interface `BiMap` permet désormais à tous les conteneurs d'hériter de la classe parente `ContainerMain`, ce qui n'était pas possible jusqu'à présent. Cela simplifie grandement l'implémentation des conteneurs, qui ont pu être débarrassés de toute cette machinerie. Tout est devenu tellement plus simple que je ne comprends pas pourquoi je n'y ai pas pensé plus tôt?
403+
De plus, concernant les utilisateurs et les rôles, cette nouvelle implémentation garantira:
404+
- Une seule instance de la classe `Group` ou `User` par utilisateur ou rôle, quel que soit son accès.
405+
- Les mises à jour nécessaires suite à la suppression d'un utilisateur ou d'un rôle seront effectuées par un nouveau [RoleListener][122].
406+
407+
Sur ce même principe, il serait possible de n'avoir qu'une seule instance d'une colonne chargée, qu'elle soit accédée au travers d'une `Table` ou d'un `ResultSet`. À méditer...
408+
409+
La gestion du rafraîchissement suite à la création ou à la suppression d'un élément pose problème dans LibreOffice Base, voir le problème [tdf#167920][123]. Je ne sais pas encore comment résoudre ce problème. Si il faut utiliser un listener ou faire en sorte que Base utilise l'interface `XRefresable` prise en charge par les conteneurs après toute modification le nécessitant. Dans le second cas, c'est le code de LibreOffice Base qui doit encore être amélioré. En attendant pour contourner ce problème, je vous conseille d'actualiser manuellement LibreOffice Base via le menu **Affichage -> Rafraîchir les tables** après toute insertion ou suppression.
410+
411+
De nombreuses petites corrections:
412+
- `CachedRowSet` permet désormais d'insérer des enregistrements avec des valeurs nulles si les colonnes le permettent.
413+
- La méthode `cancelRowUpdates` de la classe `CachedRowSetImpl` accepte désormais l'exécution sur un `RowSet` vide. Ceci est nécessaire pour contourner le problème [tdf#167434][124].
414+
- Il est à nouveau possible d'ajouter une colonne à une table existante avec SQLite.
415+
416+
La prise en charge d'un pilote supplémentaire comme celui d'Oracle me demande beaucoup de travail pour les tests de fonctionnalités. Je compte sur vous pour me signaler tout dysfonctionnement, car la recherche de ces dysfonctionnements est la tâche la plus chronophage. Merci d'avance.
417+
418+
Si vous utilisez plusieurs comptes pour vous connecter à une base de données, vous ne pourrez pas vous reconnecter à cette base de données à nouveau si vous l'aviez ouverte avec un compte autre que celui proposé puis fermée sans enregistrer le fichier. Vous devez redémarrer LibreOffice. Voir [tdf#167960][125].
419+
420+
### Que reste-t-il à faire pour la version 1.5.6:
380421

381422
- Ajouter de nouvelles langues pour l'internationalisation...
382423

@@ -493,3 +534,17 @@ Afin d'éviter toute régression sur les extensions utilisant jdbcDriverOOo :
493534
[109]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerBase.java>
494535
[110]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerSuper.java>
495536
[111]: <https://prrvchr.github.io/JaybirdEmbedded/README_fr>
537+
[112]: <https://www.oracle.com/fr/database/technologies/appdev/jdbc-downloads.html>
538+
[113]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/helper/QueryHelper.java>
539+
[114]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMap.java>
540+
[115]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapMain.java>
541+
[116]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapBase.java>
542+
[117]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/driver/container/BiMapSuper.java>
543+
[118]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerMain.java>
544+
[119]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerBase.java>
545+
[120]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/ContainerSuper.java>
546+
[121]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/RoleContainer.java>
547+
[122]: <https://github.com/prrvchr/jdbcDriverOOo/blob/master/source/jdbcDriverOOo/source/io/github/prrvchr/uno/sdbcx/RoleListener.java>
548+
[123]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167920>
549+
[124]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167434>
550+
[125]: <https://bugs.documentfoundation.org/show_bug.cgi?id=167960>

0 commit comments

Comments
 (0)