Historical
Ce document en français.
Regarding installation, configuration and use, please consult the documentation.
What has been done for version 0.0.1:
- The writing of this driver was facilitated by a discussion with Villeroy, on the OpenOffice forum, which I would like to thank, because knowledge is only worth if it is shared…
- Using the new version of HsqlDB 2.5.1.
- Many other fix…
What has been done for version 0.0.2:
- Added a dialog box allowing to update the driver (hsqldb.jar) in: Tools -> Options -> Base drivers -> HsqlDB driver
- Many other fix…
What has been done for version 0.0.3:
- I especially want to thank fredt at hsqldb.org for:
- His welcome for this project and his permission to use the HsqlDB logo in the extension.
- Its involvement in the test phase which made it possible to produce this version 0.0.3.
- The quality of its HsqlDB database.
- Now works with OpenOffice on Windows.
- An unsupported protocol now displays an accurate error.
- A non-parsable url now displays a precise error.
- Now correctly handles spaces in filenames and paths.
- Many other fix…
What has been done for version 0.0.4:
- Rewrite of Driver in Java version 11 OpenJDK amd64 under Eclipse IDE for Java Developers version 4.23.0 with the plugins:
- LOEclipse or LibreOffice Eclipse plugin for extension development version 4.0.1.
- PyDev or Python IDE for Eclipse version 9.3.0.
- Writing the
Statement
, PreparedStatement
, CallableStatement
, ResultSet
, ...
services of JDBC (thanks to hanya for MRI which was of great help to me…)
- Integration in jdbcDriverOOo of H2 and Derby JDBC drivers in addition to HsqlDB. Implementation of Java Services:
- Renamed the HsqlDBDriverOOo repository and extension to jdbcDriverOOo.
- Support in Base for auto-incrementing primary keys for HsqlDB, H2 and Derby.
- Writing of com.sun.star.sdbcx.Driver. This high-level driver must allow the management of users, roles and privileges in Base. Its use can be disabled via the menu: Tools -> Options -> Base drivers -> JDBC Driver.
- Implemented a Java service provider UnoLogger.jar for the SLF4J API to be able to redirect driver logging from the underlying databases to the UNO API com.sun.star.logging.*.
- Rewrite, following the MVC model, of the Options dialog accessible via the menu: Tools -> Options -> Base drivers -> JDBC Driver, to allow:
- Updating and/or adding Java archives of JDBC drivers.
- Enabling driver logging of the underlying database.
- Writing, following the MVC model, administration windows for users and roles (groups) and their associated privileges, accessible in Base via the menu: Administration -> User administration and/or Administration - > Group administration, allowing:
- Many other fix…
What has been done for version 1.0.0:
- Integration of HyperSQL version 2.7.2.
What has been done for version 1.0.1:
- Integration of SQLite JDBC version 3.42.0.0. I especially want to thank gotson for the many improvements to the SQLite JDBC driver that made it possible to use SQLite in LibreOffice/OpenOffice.
- This driver can be wrapped by another driver (HyperSQLOOo or SQLiteOOo) thanks to a connection url now modifiable.
- It is possible to display or not the system tables in: Tools -> Options -> Base drivers -> JDBC Driver -> UNO drivers settings -> Show system tables
- It is possible to disallow the use of updatable resultset in: Tools -> Options -> Base drivers -> JDBC Driver -> UNO drivers settings -> Use bookmarks
- Many corrections have been made to make the extension SQLiteOOo functional.
What has been done for version 1.0.2:
What has been done for version 1.0.3:
What has been done for version 1.0.4:
- Support in the creation of tables of the TypeInfoSettings parameter allowing to recover the precision for SQL types:
- TIME
- TIMESTAMP
- TIME WITH TIME ZONE
- TIMESTAMP WITH TIME ZONE
This is only integrated for the HsqlDB driver at the moment.
What has been done for version 1.0.5:
What has been done for version 1.0.6:
- Added the Python package
packaging
to the extension’s pythonpath
. Thanks to artem78 for allowing this correction by reporting this oversight in issue #4.
What has been done for version 1.0.7:
- Now the driver throws an exception if creating a new table fails. This is to address bug #1 on the HyperSQLOOo extension.
What has been done for version 1.0.8:
- Using the latest version of the Logging API.
What has been done for version 1.1.0:
- All Python packages necessary for the extension are now recorded in a requirements.txt file following PEP 508.
- Now if you are not on Windows then the Python packages necessary for the extension can be easily installed with the command:
pip install requirements.txt
- Modification of the Requirement section.
What has been done for version 1.1.1:
- The driver no longer uses Bookmarkable ResultSets for performance reasons in LibreOffice Base. This can be changed in the extension options.
What has been done for version 1.1.2:
- Implementation of the UNO interface com.sun.star.sdbc.XGeneratedResultSet. This interface allows, when inserting several rows (ie:
INSERT INTO mytable (Column1, Column2) VALUES (data1, data2), (data1, data2), ...
) into a table with an auto-incremented primary key, to retrieve a ResultSet from the rows inserted into the table and therefore gives you access to the auto-generated keys in one go.
- Implementation of the UNO interface com.sun.star.sdbcx.XAlterTable. This interface allows the modification of columns in a table. With HsqlDB it is now possible in Base:
- Assign a description to table columns.
- To modify the type of a column if the casting (CAST) of the data contained in this column allows it, otherwise you will be asked to replace this column which results in the deletion of the data…
- All DDL commands (ie:
CREATE TABLE...
, ALTER TABLE...
) that jdbcDriverOOo generates are now logged.
- SQLite driver updated to latest version 3.45.1.0.
- Many other fix…
What has been done for version 1.1.3:
What has been done for version 1.1.4:
- SQLite driver updated to latest version SQLite-jdbc-3.45.1.6-SNAPSHOT.jar.
- Integration of the driver PostgreSQL pgJDBC version 42.7.1 in the jdbcDriverOOo archive. This integration was carried out without using a Java service specific to PostgreSQL but only by configuring the Drivers.xcu file allowing the JDBC driver to be declared to LibreOffice.
- Opened a bug for the MariaDB Connector/J driver so that it supports
java.sql.Statement.getGeneratedKeys()
as requested by JDBC 4.1.
- Normally the next versions of jdbcDriverOOo should be able to be updated in the list of extensions installed under LibreOffice: Tools -> Extension manager… -> Check for Updates.
- From now on, only the HsqlDB driver has access in Base to the administration of user and group rights. This is determined by the
IgnoreDriverPrivileges
setting in the Drivers.xcu file.
- Many improvements.
What has been done for version 1.1.5:
- You can now edit a view in SQL mode with the SQLite driver. For drivers that do not support view alteration, views are deleted and then recreated.
What has been done for version 1.1.6:
- You can now rename tables and views in Base. All the configuration required for renaming for each embedded JDBC driver is stored only in the Drivers.xcu file.
- All JDBC drivers integrated into jdbcDriverOOo are capable of renaming tables or views and even some (ie: MariaDB and PostgreSQL) allow modifying the catalog or schema.
- Many improvements.
What has been done for version 1.2.0:
- All drivers integrated into the extension are now fully functional in Base for managing tables and views.
- Smart functions are called to:
- Move with renaming of tables, for drivers allowing it and using two SQL commands, the order of the SQL commands will be optimized (PostgreSQL).
- Rename a view if the driver does not support it it will be deleted then recreated (SQLite).
- Use of generic Java class for managing containers used for managing tables, views, columns, keys and indexes. The use of generic classes for container will make it possible to do without the UNO XPropertySet interface and to be able to transcribe the existing code into pure Java.
- Many improvements.
What has been done for version 1.2.1:
- Resolution of a regression prohibiting the deletion of columns in a table.
- Updated mariadb-java-client-3.3.3.jar driver.
- Generalization of generic Java classes for all classes needing to be shared at the UNO API level (ie: sdb, sdbc and sdbcx).
- We can now rename table columns in SQLite and MariaDB.
- It is also possible to rename the columns declared as primary key in all embedded drivers.
- Many improvements.
What has been done for version 1.2.2:
- Implementation of index management.
- Renaming a column declared as a primary key will also rename the index associated with the primary key.
- Only members of Java classes responding to the UNO API have a public visibility level, all other members have protected or private visibility.
- Solved many problems and regression.
What has been done for version 1.2.3:
- Renaming a column declared as an index will also rename the associated column index.
What has been done for version 1.2.4:
- Removed SmallSQL.
- Integration of Jaybird 5.0.4 the JDBC driver for Firebird.
- You can now delete a primary key with PostgreSQL.
- Adding or removing a primary key generates an error if the underlying driver does not support it (SQLite).
- When creating a table with a primary key, if the underlying driver supports it, the creation of the primary key can be done by a separate DDL command. This allows Jaybird to work around bug #791 by creating a named primary key and allows to manage special cases like MariaDB or SQLite for their management of auto-increments.
- If the underlying driver allows it, when altering columns of a table you can now:
- Declare it as auto-increment (Identity) without it necessarily being the primary key.
- Add or remove the Identity constraint (auto-increment).
- Add comments.
- Many improvements.
What has been done for version 1.3.0:
- Integration of foreign key management into Base (Tools -> Relationships…).
- When you rename a table, it will also rename that table’s referencing in any foreign keys pointing to that table.
- When you rename a column, it will also rename that column’s referencing in any foreign keys pointing to that column.
- These foreign key updates take into account lazy loading of table and key containers and will only be performed if Base has already accessed the data involved.
- An issue persists when creating foreign keys between tables that do not have the same catalog and/or schema, see bug #160375. This issue appears to be related to Base, I hope it gets resolved soon.
- Better exception handling with the ability to know the status, SQL code and message of the exception that was generated by the underlying driver.
- Many fixes and improvements.
Normally, I managed to cover the entire scope of the UNO API (com.sun.star.sdbc, sdbcx and sdb), which took quite a while, but I didn’t initially think I would get there.
What has been done for version 1.3.1:
- Fixed the implementation of the XRowLocate interface responsible for managing Bookmarks in ResultSet. This new implementation works with all drivers except SQLite which does not support updatable ResultSet. The presence of this interface in ResultSet allows Base to edit tables even in absence of primary key. With certain drivers (HsqlDB, H2 and Derby) refreshing during entry will not be automatic and must be done manually. The use of bookmarks can be disabled in the extension’s options.
- Setting up mock ResultSet (java.sql.ResultSet) to produce ResultSets from connection data provided by the driver, more precisely from the Drivers.xcu file. The use of these simulated resultsets makes it possible to provide Base with resultsets conforming to what it expects even if the underlying driver is not capable of producing them. They are used to patch the results obtained from the
getTypeInfo()
, getTableTypes
and getTablePrivileges()
methods of the java.sql.DatabaseMetaData interface using respectively the TypeInfoSettings
, TableTypesSettings
and TablePrivilegesSettings
properties of the Drivers.xcu file.
- Writing a specific container to manage the users of a role or the roles of a role. This container is just a pointer to the elements of the user and/or role containers in the database. When deleting a user or role this container will be updated if necessary.
- Rewrote the User administration and Group administration windows accessible in Base Administration menu. Now, if the
TablePrivilegesSettings
property is provided by the underlying driver, only the privileges declared in this property will be displayed. This allows for easier use. An improvement request #160516 was made to integrate this functionality into the Base code.
- Integration of all drivers embedded in the extension (excluding SQLite) in the management of users, roles and privileges on tables and views. I suppose that many malfunctions remain to be corrected, please let me know, detecting malfunctions takes me more time than correcting them….
- Many corrections and improvements…
What has been done for version 1.3.2:
The UNO SDBCX API can now be used for creating databases, as is the case for the latest versions of extensions using jdbcDriverOOo. It is possible to create tables, using the UNO API, with the following characteristics:
- Declaration of columns of types TIMESTAMP WITH TIME ZONE, TIMESTAMP, TIME WITH TIME ZONE, TIME with precision management (ie: from 0 to 9).
- Declaration of temporal system versioned tables. These types of tables are used in the same extensions to facilitate data replication.
- Declaration of text tables. These tables allow you to use data from files in csv format.
- Declaration of primary keys, foreign keys, indexes, users, roles and associated privileges.
Using the UNO API to create databases will allow you to use code that is independent of the underlying database.
Clients using the jdbcDriverOOo driver can access features of the underlying JDBC driver through the XDriver.getPropertyInfo() method in order to access the necessary parameter when creating tables and display privileges correctly. These parameters being accessible directly by the driver can be obtained before any connection and therefore allows the creation of the database during the first connection.
What has been done for version 1.3.3:
- Modification of the handling of the
JavaDriverClassPath
connection parameter. This parameter can now designate a directory and in this case all contained jar files will be added to the Java ClassPath
. This allows dynamic loading of JDBC drivers requiring multiple archives (ie: Derby and Jaybird embedded). This change was made to allow the new JaybirdOOo extension to work.
- Resumed part of the implementation of
javax.sql.rowset.CachedRowSet
in the ScrollableResultSet.java and SensitiveResultSet.java ResultSet in order to simulate the TYPE_SCROLL_SENSITIVE
type from ResultSet of type TYPE_FORWARD_ONLY
and TYPE_SCROLL_INSENSITIVE
respectively. This allows LibreOffice Base to use bookmarks (ie: the UNO interface XRowLocate) which allow positioned insertions, updates and deletions and therefore, for databases supporting it, the possibility of edit tables containing no primary key. In addition, an SQL mode allows any ResultSet to be editable. This mode can be validated in the extension’s options, it is very powerful and should therefore be used with caution. Concerning result sets of type TYPE_FORWARD_ONLY
, their implementation progressively loading the entire data of the result set into memory can lead to a memory overflow. Implementing pagination will eliminate this risk.
- Added MySQL Connector/J version 8.4.0 driver. This driver does not seem to work correctly, quite surprising errors appear… I leave it in place in case people are ready to participate in its integration? Use with caution.
- Following the request of PeterSchmidt23 addition of the driver Trino version 448. Not knowing Trino, which also looks astonishing, only the beginning of integration has been carried out. Editing the contents of the tables is not yet possible, seer issue #22306. The name of the tables must be in lowercase in order to authorize their creation.
- The implementation of
CachedRowSet
seems to have solved the problem of inserting cells from Calc, see issue #7.
- Many corrections and improvements…
What has been done for version 1.4.0:
- Updated Jaybird driver to final version 5.0.5.
- Changed the implementation of the UNO interface com.sun.star.sdbc.XGeneratedResultSet. This new implementation supports drivers that do not follow the JDBC API but offer a specific implementation (ie: MariaDB and Derby). To be activated when using odb files created with a previous version, if present, it is necessary to modify the parameter:
Query of generated values
accessible by the menu: Edit -> Database -> Advanced Settings… -> Generated Values by the value: SELECT * FROM %s WHERE %s
.
- Added new settings supported by the Drivers.xcu configuration file. These new parameters allow you to modify the values returned by the drivers regarding the visibility of modifications in the ResultSet (ie: insertion, update and deletion). They also allow you to force SQL mode for the desired modifications in the ResultSet.
- Finalized the emulation implementation making any ResultSet modifiable, if the record is unique in this ResultSet. This implementation, using bookmarks, allows the editing of ResultSet coming from Base Queries, this simply makes LibreOffice Base Queries editable. Queries joining multiple tables are not yet supported and I am open to any technical proposals regarding a possible implementation.
- In order to make the ResultSet returned by the Trino driver modifiable and to precede feature request #22408, a search for the primary key will be launched in order to find the first column, of result set, having no duplicates.
- To work around issue #368 the HsqlDB driver uses SQL mode updates in ResultSet.
- Many fixes and improvements…
What has been done for version 1.4.1:
- New implementation, which I hope is definitive, of bookmarks. It is based on three files and is taken from Sun’s implementation of
javax.sql.rowset.CachedRowSet
:
- These ResultSets are capable of editing almost all queries created in LibreOffice Base, even views… But in order to guarantee good functionality, certain rules must be respected in order to make a result set editable. If the query concerns several tables then it is imperative to include the primary keys of each table in the list of columns of the result set. If the query only concerns a single table then the result set will be modifiable if there is a column that does not contain a duplicate (ie: a natural key). This makes it possible to make the result sets coming from the Trino driver editable.
- Removed the use of generic classes where they were not needed. This made the driver faster…
- Added special parameters in: Edit -> Database -> Advanced parameters… -> Special parameters in order to respond to the request for integration of the Trino driver (see improvement request #8 ). It is necessary to recreate the odb files in order to have access to these new parameters.
What has been done for version 1.4.2:
What has been done for version 1.4.3:
- Updated the Python setuptools package to version 73.0.1.
- Logging accessible in extension options now displays correctly on Windows.
- The extension options are now accessible via: Tools -> Options -> LibreOffice Base -> JDBC Driver
- Changes to extension options that require a restart of LibreOffice will result in a message being displayed.
- Support for LibreOffice version 24.8.x.
What has been done for version 1.4.4:
- It is now possible to insert data into an empty table when using an
TYPE_FORWARD_ONLY
ResultSet (ie: SQLite, Trino).
- The options button is now accessible in the list of installed extensions obtained by the menu: Tools -> Extensions Manager…
- The extension options are now accessible via: Tools -> Options -> LibreOffice Base -> Pure Java JDBC Driver
- The extension options: View system tables, Use bookmarks and Force SQL mode will be searched in the information provided when connecting and will take precedence if present.
- Updated Trino driver to version 455.
What has been done for version 1.4.5:
- Fix to allow the eMailerOOo extension to work properly in version 1.2.5.
What has been done for version 1.4.6:
- Modification of the implementation of the interface UNO XPropertySet. This new implementation ensures the uniqueness of Handle for each property. Since this implementation is shared with the vCardOOo extension, it makes all existing versions of vCardOOo obsolete. It is based on three files:
- Fixed issues in bookmark implementation. These modifications have been tested more particularly with the HsqlDB 2.7.4 and Jaybird 5.0.6 drivers.
- New implementation of the extension options and more specifically the JDBC Driver Options tab which should eventually allow the configuration from scratch of a JDBC driver to be able to work with LibreOffice Base. The JDBC driver archive update operation has been simplified. It supports updating drivers that require multiple jar archives to work (ie: Derby, Jaybird 6.x). This new window, which seems quite simple, actually requires quite complicated management, so please do not hesitate to report any malfunctions.
- Many other improvements.
What has been done for version 1.5.0:
- Passive registration deployment that allows for much faster installation of extensions and differentiation of registered UNO services from those provided by a Java or Python implementation. This passive registration is provided by the LOEclipse extension via PR#152 and PR#157.
- Added support for Java instrumentation to LibreOffice with Enhancement Request #165774 and then PR#183280. This will allow, starting with LibreOffice 25.8.x, access to logging for all JDBC drivers using
java.lang.System.Logger
as a logging facade. This new feature can be enabled in the extension options if the LibreOffice version allows it. I was refused to backport to LibreOffice 25.2.x so please be patient.
- All SQL, DDL, or DCL commands now come from the JDBC driver configuration file Drivers.xcu. The implementation of processing these commands and their parameters has been grouped under the package io.github.prrvchr.driver.query.
- Compilation of all Java archives contained in the extension with Java JDK version 17.
- Updated all embedded JDBC drivers, except SQLite and Trino, to their respective latest versions supporting Java 17.
- Removed all idl files defining the following struct: Date, DateTime, DateTimeWithTimezone, DateWithTimezone, Duration, Time, and TimeWithTimezone. These files were required for compatibility with OpenOffice and are now replaced by the equivalent idl files from the LibreOffice API. This change makes all versions of extensions using the previous version of jdbcDriverOOo incompatible.
- User, role, and privilege management has been tested with all drivers built into jdbcDriverOOo, excluding SQLite and Trino.
- It is now possible to build the oxt file of the jdbcDriverOOo extension only with the help of Apache Ant and a copy of the GitHub repository. The How to build the extension section has been added to the documentation.
- Any errors occurring while loading the driver will be logged in the extension’s log if logging has been previously enabled. This makes it easier to identify installation problems on Windows.
What remains to be done for version 1.5.0: