This is an automated email from the ASF dual-hosted git repository.
jimjag pushed a commit to branch hsqldb2
in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 699a1355513597a25dd45dad88c19038612b4e71
Author: Pedro Giffuni <=>
AuthorDate: Thu Oct 29 17:13:42 2026 -0500
Upgrade bundled HSQLDB from 1.8.0.11 to 2.5.0
Upgrade the bundled HSQLDB database engine from 1.8.0.11 to 2.5.0.
While newer versions exist, 2.5.0 is chosen for two key advantages:
- It still opens older 1.8.x databases.
- It doesn't require Java 11 or alternative hacks like newer versions.
Changes to build configuration:
- main/hsqldb/version.mk: Update version numbers (1.8.0 -> 2.5.0)
- main/hsqldb/makefile.mk: Update TARFILE_NAME, TARFILE_ROOTDIR,
TARFILE_MD5 to match upstream hsqldb-2.5.0.zip. Remove obsolete
CONVERTFILES entry for Library.java (removed in 2.5.0). Change
Ant target from 'jar' to 'hsqldb'. Clear PATCH_FILES (all old
patches are obsolete).
- main/external_deps.lst: Update MD5 and name for hsqldb-2.5.0.zip
- main/hsqldb/prj/d.lst: Update jar delivery path for new directory
structure (hsqldb-2.5.0/hsqldb/lib/).
- main/configure.ac: Update version check for system hsqldb to accept
2.5.0+.
API compatibility changes for connectivity drivers:
- StorageAccess.java: Implement org.hsqldb.lib.Storage instead of
org.hsqldb.persist.ScaledRAInterface (removed in HSQLDB 2.0+).
- StorageFileAccess.java: Update openOutputStreamElement() to
accept a boolean 'append' parameter per the new FileAccess
interface. Update renameElement() to accept a boolean
'copyIfFailed' parameter.
Native code compatibility:
- HStorageMap.cxx: Fix StreamHelper destructor to properly close
read-only streams.
- HStorageAccess.cxx: Add missing include for Unicode handling.
- HDriver.cxx: Add shutdown required prompt and database conversion
handling for HSQLDB 2.x database compatibility.
- hsqldb_res.hrc: Add STR_CONVERT_TO_NEW_VERSION and
STR_SHUTDOWN_REQUIRED resource string IDs.
- conn_shared_res.src: Add resource strings for database upgrade
and shutdown prompts.
Patch removals:
- Remove obsolete patches: i121754.patch, runfinalizers.patch,
script.patch, text_tables.patch
---
main/configure.ac | 32 +-
.../comp/hsqldb/NativeOutputStreamHelper.java | 7 +
.../sun/star/sdbcx/comp/hsqldb/StorageAccess.java | 12 +
.../star/sdbcx/comp/hsqldb/StorageFileAccess.java | 12 +-
.../comp/hsqldb/StorageNativeOutputStream.java | 6 +
.../qa/connectivity/tools/CRMDatabase.java | 2 +-
main/connectivity/source/commontools/FValue.cxx | 10 +-
.../connectivity/source/drivers/hsqldb/HDriver.cxx | 80 +++-
.../source/drivers/hsqldb/HStorageAccess.cxx | 2 +
.../source/drivers/hsqldb/HStorageMap.cxx | 4 +-
.../source/inc/resource/hsqldb_res.hrc | 2 +
.../source/resource/conn_shared_res.src | 8 +
main/dbaccess/source/core/api/KeySet.cxx | 2 +-
main/external_deps.lst | 6 +-
main/hsqldb/makefile.mk | 19 +-
main/hsqldb/patches/aoo_integration.patch | 160 ++++++++
main/hsqldb/patches/i121754.patch | 430 ---------------------
main/hsqldb/patches/runfinalizers.patch | 22 --
main/hsqldb/patches/script.patch | 13 -
main/hsqldb/patches/text_tables.patch | 13 -
main/hsqldb/prj/d.lst | 2 +-
main/hsqldb/version.mk | 6 +-
22 files changed, 305 insertions(+), 545 deletions(-)
diff --git a/main/configure.ac b/main/configure.ac
index 91bcd9e573..f63397d0f1 100644
--- a/main/configure.ac
+++ b/main/configure.ac
@@ -5010,32 +5010,32 @@ if test -n "$with_system_hsqldb" -o -n
"$with_system_libs" && \
fi
AC_CHECK_FILE($HSQLDB_JAR, [],
[AC_MSG_ERROR(hsqldb.jar not found.)], [])
- AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
+AC_MSG_CHECKING([whether hsqldb is newer than 2.7])
export HSQLDB_JAR
if $PERL -e 'use Archive::Zip;
my $file = "$ENV{'HSQLDB_JAR'}";
my $zip = Archive::Zip->new( $file );
my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
- if ( $mf =~ m/Specification-Version: 1.8.*/ ) {
- push @l, split(/\n/, $mf);
- foreach my $line (@l) {
- if ($line =~ m/Specification-Version:/) {
- ($t, $version) = split (/:/,$line);
- $version =~ s/^\s//;
- ($a, $b, $c, $d) = split (/\./,$version);
- if ($c == "0" && $d > "8") {
- exit 0;
- } else {
- exit 1;
- }
- }
- }
+ if ( $mf =~ m/Specification-Version: 2\.\d+\.\d+/ ) {
+ push @l, split(/\n/, $mf);
+ foreach my $line (@l) {
+ if ($line =~ m/Specification-Version:/) {
+ ($t, $version) = split (/:/,$line);
+ $version =~ s/^\s//;
+ ($a, $b, $c) = split (/\./,$version);
+ if ($a == 2 && ($b > 7 || ($b == 7 && $c > 0))) {
+ exit 0;
+ } else {
+ exit 1;
+ }
+ }
+ }
} else {
exit 1;
}'; then
AC_MSG_RESULT([yes])
else
- AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
+ AC_MSG_ERROR([no, you need hsqldb > 2.7])
fi
else
AC_MSG_RESULT([internal])
diff --git
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/NativeOutputStreamHelper.java
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/NativeOutputStreamHelper.java
index fbd14bced9..9847ab7556 100644
---
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/NativeOutputStreamHelper.java
+++
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/NativeOutputStreamHelper.java
@@ -43,6 +43,13 @@ public class NativeOutputStreamHelper extends
java.io.OutputStream{
out = new StorageNativeOutputStream(file,key);
}
+ public NativeOutputStreamHelper(String key,String _file, boolean append) {
+ file = _file;
+ this.key = key;
+ int mode = append ? NativeStorageAccess.WRITE :
(NativeStorageAccess.WRITE | NativeStorageAccess.TRUNCATE);
+ out = new StorageNativeOutputStream(file,key, mode);
+ }
+
public void write(byte[] b, int off, int len) throws java.io.IOException{
out.write(key,file,b, off, len);
}
diff --git
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageAccess.java
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageAccess.java
index bb9ee38bec..b9da661433 100644
---
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageAccess.java
+++
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageAccess.java
@@ -149,6 +149,18 @@ public class StorageAccess implements
org.hsqldb.lib.Storage {
return false;
}
+ public boolean canAccess(int length) {
+ return true;
+ }
+
+ public boolean canSeek(long position) {
+ return true;
+ }
+
+ public org.hsqldb.Database getDatabase() {
+ return null;
+ }
+
public void writeLong(long v) throws java.io.IOException {
//appLog.sendLine("NIOScaledRAFile.writeLong(" +v+") ");
byte [] oneByte = new byte [8];
diff --git
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageFileAccess.java
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageFileAccess.java
index 472ad30065..e904edf9e6 100644
---
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageFileAccess.java
+++
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageFileAccess.java
@@ -55,8 +55,8 @@ public class StorageFileAccess implements
org.hsqldb.lib.FileAccess{
return new NativeInputStreamHelper(key,streamName);
}
- public java.io.OutputStream openOutputStreamElement(java.lang.String
streamName) throws java.io.IOException {
- return new NativeOutputStreamHelper(key,streamName);
+ public java.io.OutputStream openOutputStreamElement(java.lang.String
streamName, boolean append) throws java.io.IOException {
+ return new NativeOutputStreamHelper(key, streamName, append);
}
public void removeElement(java.lang.String filename) throws
java.util.NoSuchElementException {
@@ -68,15 +68,15 @@ public class StorageFileAccess implements
org.hsqldb.lib.FileAccess{
}
}
- public void renameElement(java.lang.String oldName, java.lang.String
newName) throws java.util.NoSuchElementException {
+ public void renameElement(java.lang.String oldName, java.lang.String
newName, boolean bPreserve) throws java.util.NoSuchElementException {
try {
if ( isStreamElement(key,oldName) ){
removeElement(key,newName);
renameElement(key,oldName, newName);
}
- } catch (java.io.IOException e) {
- throw new FileSystemRuntimeException( e,
FileSystemRuntimeException.fileAccessRenameElementFailed );
- }
+ } catch (java.io.IOException e) {
+ throw new FileSystemRuntimeException( e,
FileSystemRuntimeException.fileAccessRenameElementFailed );
+ }
}
public class FileSync implements FileAccess.FileSync
diff --git
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageNativeOutputStream.java
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageNativeOutputStream.java
index e765db7027..6a56307942 100644
---
a/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageNativeOutputStream.java
+++
b/main/connectivity/java/sdbc_hsqldb/src/main/java/com/sun/star/sdbcx/comp/hsqldb/StorageNativeOutputStream.java
@@ -44,6 +44,12 @@ public class StorageNativeOutputStream {
openStream(name, (String)key, NativeStorageAccess.WRITE |
NativeStorageAccess.TRUNCATE);
}
+ public StorageNativeOutputStream(String _name,Object _key, int mode) {
+ name = _name;
+ key = _key;
+ openStream(name, (String)key, mode);
+ }
+
public native void openStream(String name,String key, int mode);
/**
* Writes <code>len</code> bytes from the specified byte array
diff --git a/main/connectivity/qa/connectivity/tools/CRMDatabase.java
b/main/connectivity/qa/connectivity/tools/CRMDatabase.java
index 16e6536cc9..97115dc1ce 100644
--- a/main/connectivity/qa/connectivity/tools/CRMDatabase.java
+++ b/main/connectivity/qa/connectivity/tools/CRMDatabase.java
@@ -180,7 +180,7 @@ public class CRMDatabase
new HsqlColumnDescriptor( "Address",VARCHAR50),
new HsqlColumnDescriptor( "City",VARCHAR50),
new HsqlColumnDescriptor( "Postal",VARCHAR50),
- new HsqlColumnDescriptor( "Comment","LONGVARCHAR")} );
+ new HsqlColumnDescriptor( "Comment","CLOB")} );
m_database.createTable( table, true );
m_database.executeSQL( "INSERT INTO \"customers\" VALUES(1,'Food,
Inc.','Down Under','Melbourne','509','Prefered') " );
diff --git a/main/connectivity/source/commontools/FValue.cxx
b/main/connectivity/source/commontools/FValue.cxx
index e3f09e3ae0..a449c8c565 100644
--- a/main/connectivity/source/commontools/FValue.cxx
+++ b/main/connectivity/source/commontools/FValue.cxx
@@ -783,12 +783,6 @@ sal_Bool operator==(const DateTime& _rLH,const DateTime&
_rRH)
bool ORowSetValue::operator==(const ORowSetValue& _rRH) const
{
- if ( m_bNull != _rRH.isNull() )
- return false;
-
- if(m_bNull && _rRH.isNull())
- return true;
-
if ( m_eTypeKind != _rRH.m_eTypeKind )
{
switch(m_eTypeKind)
@@ -811,6 +805,10 @@ bool ORowSetValue::operator==(const ORowSetValue& _rRH)
const
}
return false;
}
+ if ( m_bNull != _rRH.isNull() )
+ return false;
+ if(m_bNull && _rRH.isNull())
+ return true;
bool bRet = false;
OSL_ENSURE(!m_bNull,"SHould not be null!");
diff --git a/main/connectivity/source/drivers/hsqldb/HDriver.cxx
b/main/connectivity/source/drivers/hsqldb/HDriver.cxx
index 50c754a2d5..7dae08691d 100644
--- a/main/connectivity/source/drivers/hsqldb/HDriver.cxx
+++ b/main/connectivity/source/drivers/hsqldb/HDriver.cxx
@@ -40,6 +40,7 @@
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/util/XFlushable.hpp>
+#include <com/sun/star/task/XInteractionHandler.hpp>
#include "HTerminateListener.hxx"
#include "hsqldb/HCatalog.hxx"
#include "diagnose_ex.h"
@@ -48,8 +49,10 @@
#include <osl/process.h>
#include <connectivity/dbexception.hxx>
#include <comphelper/namedvaluecollection.hxx>
+#include <comphelper/interaction.hxx>
#include <unotools/confignode.hxx>
#include <unotools/ucbstreamhelper.hxx>
+#include <memory>
#include "resource/hsqldb_res.hrc"
#include "resource/sharedresources.hxx"
#include <functional>
@@ -59,6 +62,7 @@ namespace connectivity
{
//........................................................................
using namespace hsqldb;
+ using namespace ::comphelper;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
@@ -66,9 +70,9 @@ namespace connectivity
using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::embed;
- using namespace ::com::sun::star::io;
+ using namespace ::com::sun::star::io;
+ using namespace ::com::sun::star::util;
using namespace ::com::sun::star::task;
- using namespace ::com::sun::star::util;
using namespace ::com::sun::star::reflection;
namespace hsqldb
@@ -183,6 +187,7 @@ namespace connectivity
{
::rtl::OUString sURL;
Reference<XStorage> xStorage;
+ Reference< XInteractionHandler > xInteraction;
const PropertyValue* pIter =
info.getConstArray();
const PropertyValue* pEnd = pIter +
info.getLength();
@@ -196,6 +201,10 @@ namespace connectivity
{
pIter->Value >>= sURL;
}
+ else if ( pIter->Name.equalsAscii("InteractionHandler") )
+ {
+ pIter->Value >>= xInteraction;
+ }
}
if ( !xStorage.is() || !sURL.getLength() )
@@ -230,7 +239,7 @@ namespace connectivity
// JDBC driver and driver's classpath
aProperties.put( "JavaDriverClass",
- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
"org.hsqldb.jdbcDriver" ) ) );
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
"org.hsqldb.jdbc.JDBCDriver" ) ) );
aProperties.put( "JavaDriverClassPath",
::rtl::OUString(
#ifdef SYSTEM_HSQLDB
@@ -251,6 +260,8 @@ namespace connectivity
// don't want to expose HSQLDB's schema capabilities which
exist since 1.8.0RC10
aProperties.put( "default_schema",
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) );
+ aProperties.put( "hsqldb.default_table_type",
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cached" ) )
);
// security: permitted Java classes
NamedValue aPermittedClasses(
@@ -259,8 +270,12 @@ namespace connectivity
);
aProperties.put( "SystemProperties", Sequence< NamedValue >(
&aPermittedClasses, 1 ) );
- const ::rtl::OUString sProperties(
RTL_CONSTASCII_USTRINGPARAM( "properties" ) );
- ::rtl::OUString sMessage;
+ aProperties.put( "jdbc.interval_as_varchar",
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) );
+ aProperties.put( "get_column_name",
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) ) );
+
+ bool bAskUser = false,bModified = false;
+ ::rtl::OUString sMessage;
+ ::rtl::OUString sProperties( RTL_CONSTASCII_USTRINGPARAM(
"properties" ) );
try
{
if ( !bIsNewDatabase &&
xStorage->isStreamElement(sProperties) )
@@ -268,8 +283,8 @@ namespace connectivity
Reference<XStream > xStream =
xStorage->openStreamElement(sProperties,ElementModes::READ);
if ( xStream.is() )
{
- ::std::unique_ptr<SvStream> pStream(
::utl::UcbStreamHelper::CreateStream(xStream) );
- if ( pStream.get() )
+ std::unique_ptr<SvStream> pStream(
::utl::UcbStreamHelper::CreateStream(xStream) );
+ if ( pStream )
{
ByteString sLine;
ByteString sVersionString;
@@ -283,27 +298,32 @@ namespace connectivity
{
sVersionString = sValue;
}
+ else if
( sLine.Equals("modified=yes",0,sizeof("modified=yes")-1) )
+ {
+
bModified = true;
+ }
else
{
- if ( sIniKey.Equals( "version" )
- && ( sVersionString.Len() == 0 )
+ if ( ( sVersionString.Len() == 0 )
+
&& sIniKey.Equals( "version" )
)
{
sVersionString = sValue;
}
}
}
- if ( sVersionString.Len() )
+ if ( sVersionString.Len() )
{
const
sal_Int32 nMajor = sVersionString.GetToken(0,'.').ToInt32();
const
sal_Int32 nMinor = sVersionString.GetToken(1,'.').ToInt32();
- const
sal_Int32 nMicro = sVersionString.GetToken(2,'.').ToInt32();
- if (
nMajor > 1
-
|| ( nMajor == 1 && nMinor > 8 )
-
|| ( nMajor == 1 && nMinor == 8 && nMicro > 0 ) )
- {
+ if (
nMajor > 2 || (nMajor == 2 && nMinor > 5) )
+ {
::connectivity::SharedResources aResources;
sMessage =
aResources.getResourceString(STR_ERROR_NEW_VERSION);
+ }
+ else if
( nMajor < 2 )
+ {
+
bAskUser = true;
}
}
}
@@ -314,10 +334,30 @@ namespace connectivity
catch(Exception&)
{
}
+ // reject databases from newer HSQLDB versions
that cannot be opened
if ( sMessage.getLength() )
{
::dbtools::throwGenericSQLException(sMessage ,*this);
}
+ // need to convert file, ask for user
approvement
+ if ( xInteraction.is() && bAskUser )
+ {
+ ::connectivity::SharedResources
aResources;
+ const ::rtl::OUString sRequest(
aResources.getResourceString(STR_CONVERT_TO_NEW_VERSION));
+ SQLException
aInfo(sRequest,*this,::rtl::OUString(),0,Any());
+ OInteractionRequest* pRequest = new
OInteractionRequest(makeAny(aInfo));
+ Reference< XInteractionRequest >
xRequest(pRequest);
+ OInteraction< XInteractionApprove >* pApprove = new
OInteraction< XInteractionApprove >();
+ pRequest->addContinuation(pApprove);
+ OInteraction< XInteractionDisapprove >* pDisApprove = new
OInteraction< XInteractionDisapprove >;
+ pRequest->addContinuation(pDisApprove);
+ xInteraction->handle(xRequest);
+ if ( !pDisApprove->wasSelected() )
+ {
+ bAskUser = false;
+ }
+ aProperties.put( "sql.enforce_size", ::rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "false" ) ) );
+ }
// readonly?
Reference<XPropertySet>
xProp(xStorage,UNO_QUERY);
@@ -327,7 +367,7 @@ namespace connectivity
xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OpenMode")))
>>= nMode;
if ( (nMode & ElementModes::WRITE) !=
ElementModes::WRITE )
{
- aProperties.put( "readonly", ::rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM( "true" ) ) );
+ aProperties.put( "readonly",
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) );
}
}
@@ -341,11 +381,17 @@ namespace connectivity
try
{
xOrig = xDriver->connect( sConnectURL, aConnectionArgs );
+ }
+ catch(const SQLException& e)
+ {
+ StorageContainer::revokeStorage(sKey,NULL);
+ OSL_UNUSED(e);
+ throw;
}
catch(const Exception& e)
{
StorageContainer::revokeStorage(sKey,NULL);
- (void)e;
+ OSL_UNUSED(e);
throw;
}
diff --git a/main/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
b/main/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
index 91da80c0b6..5909c29c6c 100644
--- a/main/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
+++ b/main/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
@@ -435,6 +435,8 @@ void write_to_storage_stream_from_buffer( JNIEnv* env,
jobject /*obj_this*/, jst
if ( xOut.is() )
{
jbyte *buf = env->GetByteArrayElements(buffer,NULL);
+ OSL_ENSURE(len <= env->GetArrayLength(buffer),"Length is greater
than the buffer!");
+
if (JNI_FALSE != env->ExceptionCheck())
{
env->ExceptionClear();
diff --git a/main/connectivity/source/drivers/hsqldb/HStorageMap.cxx
b/main/connectivity/source/drivers/hsqldb/HStorageMap.cxx
index 1300df1c79..56607a1ac8 100644
--- a/main/connectivity/source/drivers/hsqldb/HStorageMap.cxx
+++ b/main/connectivity/source/drivers/hsqldb/HStorageMap.cxx
@@ -58,8 +58,8 @@ namespace connectivity
{
try
{
- m_xStream.clear();
- m_xSeek.clear();
+ m_xStream.clear();
+ m_xSeek.clear();
if ( m_xInputStream.is() )
{
m_xInputStream->closeInput();
diff --git a/main/connectivity/source/inc/resource/hsqldb_res.hrc
b/main/connectivity/source/inc/resource/hsqldb_res.hrc
index c76ab33519..e3cdec1adb 100644
--- a/main/connectivity/source/inc/resource/hsqldb_res.hrc
+++ b/main/connectivity/source/inc/resource/hsqldb_res.hrc
@@ -38,5 +38,7 @@
#define STR_NO_TABLENAME ( STR_HSQLDB_BASE + 4 )
#define STR_NO_DOCUMENTUI ( STR_HSQLDB_BASE + 5 )
#define STR_ERROR_NEW_VERSION ( STR_HSQLDB_BASE + 6 )
+#define STR_CONVERT_TO_NEW_VERSION ( STR_HSQLDB_BASE + 7 )
+#define STR_SHUTDOWN_REQUIRED ( STR_HSQLDB_BASE + 8 )
#endif // CONNECTIVITY_RESOURCE_HSQLDB_HRC
diff --git a/main/connectivity/source/resource/conn_shared_res.src
b/main/connectivity/source/resource/conn_shared_res.src
index 598e9dfd81..8fce2a26cb 100644
--- a/main/connectivity/source/resource/conn_shared_res.src
+++ b/main/connectivity/source/resource/conn_shared_res.src
@@ -633,5 +633,13 @@ String STR_ERROR_NEW_VERSION
{
Text = "The connection could not be established. The database was
created by a newer version of %PRODUCTNAME." ;
};
+String STR_CONVERT_TO_NEW_VERSION
+{
+ Text = "The database file is stored in an old version. Do you want to
convert into the new version?" ;
+};
+String STR_SHUTDOWN_REQUIRED
+{
+ Text = "The database file was not stored correctly by a previous
version of %PRODUCTNAME.\nPlease open the file with Apache OpenOffice 4.1.x,
then click the Tables icon and save." ;
+};
// ********************************************************************** EOF
diff --git a/main/dbaccess/source/core/api/KeySet.cxx
b/main/dbaccess/source/core/api/KeySet.cxx
index 0d4721a330..929a5f5482 100644
--- a/main/dbaccess/source/core/api/KeySet.cxx
+++ b/main/dbaccess/source/core/api/KeySet.cxx
@@ -1338,7 +1338,7 @@ sal_Bool OKeySet::previous_checked( sal_Bool i_bFetchRow )
if ( i_bFetchRow )
refreshRow();
}
- return m_aKeyIter != m_aKeyMap.begin();
+ return m_aKeyIter != m_aKeyMap.end() && m_aKeyIter != m_aKeyMap.begin();
}
//
-----------------------------------------------------------------------------
sal_Bool SAL_CALL OKeySet::previous( )
diff --git a/main/external_deps.lst b/main/external_deps.lst
index 2f754194b5..b9ec18f3a8 100644
--- a/main/external_deps.lst
+++ b/main/external_deps.lst
@@ -81,9 +81,9 @@ if (SYSTEM_LIBTEXTCAT != YES)
URL3 = https://software.wise-guys.nl/download/libtextcat-2.2.tar.gz
if (SOLAR_JAVA == TRUE)
- MD5 = 17410483b5b5f267aa18b7e00b65e6e0
- name = hsqldb_1_8_0.zip
- URL1 =
https://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_1_8_0/hsqldb_1_8_0_10.zip
+ MD5 = 8140e899c4cdf04e31a06743230f8523
+ name = hsqldb-2.5.0.zip
+ URL1 =
https://downloads.sourceforge.net/project/hsqldb/hsqldb/hsqldb_2_5/hsqldb-2.5.0.zip
URL2 = $(OOO_EXTRAS)$(MD5)-$(name)
if ( true )
diff --git a/main/hsqldb/makefile.mk b/main/hsqldb/makefile.mk
index 0583bb51c7..8843054009 100644
--- a/main/hsqldb/makefile.mk
+++ b/main/hsqldb/makefile.mk
@@ -40,30 +40,27 @@ ANT_BUILDFILE=build$/build.xml
.IF "$(SOLAR_JAVA)" != ""
# --- Files --------------------------------------------------------
-TARFILE_NAME=hsqldb_$(HSQLDB_VERSION)
-TARFILE_MD5=17410483b5b5f267aa18b7e00b65e6e0
+TARFILE_NAME=hsqldb-$(HSQLDB_VERSION)
+TARFILE_MD5=8140e899c4cdf04e31a06743230f8523
-TARFILE_ROOTDIR=hsqldb
+TARFILE_ROOTDIR=hsqldb-$(HSQLDB_VERSION)$/hsqldb
CONVERTFILES=build$/build.xml \
- src$/org$/hsqldb$/persist$/HsqlDatabaseProperties.java \
- src$/org$/hsqldb$/Library.java
+ src$/org$/hsqldb$/persist$/HsqlDatabaseProperties.java
-PATCH_FILES=patches$/i121754.patch patches$/script.patch
patches$/runfinalizers.patch patches$/text_tables.patch
+PATCH_FILES=patches$/aoo_integration.patch
-# hsqldb's build.xml javac tasks specify no source/target; pin them so bytecode
-# stays Java 8 compatible regardless of the (possibly much newer) build JDK.
JAVAC_SRCTGT=-Dant.build.javac.source=1.8 -Dant.build.javac.target=1.8
.IF "$(JAVACISGCJ)"=="yes"
JAVA_HOME=
.EXPORT : JAVA_HOME
-BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj
$(JAVAC_SRCTGT) -f $(ANT_BUILDFILE) jar
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.compiler=gcj
$(JAVAC_SRCTGT) -f $(ANT_BUILDFILE) hsqldb
.ELSE
.IF "$(debug)"!=""
-BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.debug="on"
$(JAVAC_SRCTGT) -f $(ANT_BUILDFILE) jar
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" -Dbuild.debug="on"
$(JAVAC_SRCTGT) -f $(ANT_BUILDFILE) hsqldb
.ELSE
-BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" $(JAVAC_SRCTGT) -f
$(ANT_BUILDFILE) jar
+BUILD_ACTION=$(ANT) -Dbuild.label="build-$(RSCREVISION)" $(JAVAC_SRCTGT) -f
$(ANT_BUILDFILE) hsqldb
.ENDIF
.ENDIF
diff --git a/main/hsqldb/patches/aoo_integration.patch
b/main/hsqldb/patches/aoo_integration.patch
new file mode 100644
index 0000000000..02ff348dd2
--- /dev/null
+++ b/main/hsqldb/patches/aoo_integration.patch
@@ -0,0 +1,160 @@
+--- misc/build/hsqldb-2.5.0/hsqldb/src/org/hsqldb/persist/Logger.java
2019-05-31 10:26:20.000000000 -0500
++++ misc/build/hsqldb-2.5.0/hsqldb/src/org/hsqldb/persist/Logger.java
2026-11-06 10:22:37.173757415 -0500
+@@ -62,6 +62,7 @@
+ import org.hsqldb.lib.FileAccess;
+ import org.hsqldb.lib.FileUtil;
+ import org.hsqldb.lib.FrameworkLogger;
++import java.lang.reflect.Constructor;
+ import org.hsqldb.lib.HsqlArrayList;
+ import org.hsqldb.lib.InputStreamInterface;
+ import org.hsqldb.lib.InputStreamWrapper;
+@@ -183,6 +184,26 @@
+ this.database = database;
+ }
+
++ private static FileAccess getFileAccessCustom(Database database) {
++ String fileAccessClassName =
database.urlProperties.getProperty("fileaccess_class_name");
++ if (fileAccessClassName != null && !fileAccessClassName.isEmpty()) {
++ try {
++ Class<?> fileAccessClass = Class.forName(fileAccessClassName);
++ String storageKey =
database.urlProperties.getProperty("storage_key");
++ if (storageKey != null) {
++ Constructor<?> ctor =
fileAccessClass.getConstructor(Object.class);
++ return (FileAccess) ctor.newInstance(storageKey);
++ } else {
++ Constructor<?> ctor = fileAccessClass.getConstructor();
++ return (FileAccess) ctor.newInstance();
++ }
++ } catch (Exception e) {
++ return FileUtil.getFileAccess(database.isFilesInJar());
++ }
++ }
++ return FileUtil.getFileAccess(database.isFilesInJar());
++ }
++
+ /**
+ * Opens the specified Database object's database files and starts up
+ * the logging process. <p>
+@@ -198,7 +219,7 @@
+ boolean hasFileProps = false;
+ boolean hasScript = false;
+
+- fileAccess = FileUtil.getFileAccess(database.isFilesInJar());
++ fileAccess = getFileAccessCustom(database);
+ propIsFileDatabase = database.getType().isFileBased();
+ database.databaseProperties = new HsqlDatabaseProperties(database);
+ propTextAllowFullPath = database.databaseProperties.isPropertyTrue(
+--- misc/build/hsqldb-2.5.0/hsqldb/src/org/hsqldb/persist/RAFile.java
2019-04-27 08:55:26.000000000 -0500
++++ misc/build/hsqldb-2.5.0/hsqldb/src/org/hsqldb/persist/RAFile.java
2026-11-06 10:22:37.174321115 -0500
+@@ -43,6 +43,8 @@
+ import org.hsqldb.lib.ArrayUtil;
+ import org.hsqldb.lib.HsqlByteArrayInputStream;
+ import org.hsqldb.lib.HsqlByteArrayOutputStream;
++import org.hsqldb.lib.Storage;
++import java.lang.reflect.Constructor;
+
+ /**
+ * This class is a wrapper for a random access file such as that used for
+@@ -93,6 +95,20 @@
+ String name, boolean readonly,
+ int type) throws FileNotFoundException, IOException {
+
++ String storageClassName =
database.urlProperties.getProperty("storage_class_name");
++ if (storageClassName != null && !storageClassName.isEmpty()) {
++ try {
++ Class<?> storageClass = Class.forName(storageClassName);
++ String storageKey =
database.urlProperties.getProperty("storage_key");
++ Constructor<?> ctor = storageClass.getConstructor(
++ String.class, Boolean.class, Object.class);
++ Storage storage = (Storage) ctor.newInstance(
++ name, Boolean.valueOf(readonly), storageKey);
++ return new RAStorageWrapper(storage);
++ } catch (Exception e) {
++ // fall through to default implementation
++ }
++ }
+ if (type == DATA_FILE_JAR) {
+ return new RAFileInJar(name);
+ } else if (type == DATA_FILE_TEXT) {
+@@ -424,6 +440,81 @@
+ }
+ }
+
++ /**
++ * Wrapper that adapts org.hsqldb.lib.Storage to
++ * org.hsqldb.persist.RandomAccessInterface.
++ * Used for OpenOffice.org storage integration.
++ */
++ static class RAStorageWrapper implements RandomAccessInterface {
++ private final Storage storage;
++
++ RAStorageWrapper(Storage storage) {
++ this.storage = storage;
++ }
++
++ public long length() throws IOException {
++ return storage.length();
++ }
++
++ public void seek(long position) throws IOException {
++ storage.seek(position);
++ }
++
++ public long getFilePointer() throws IOException {
++ return storage.getFilePointer();
++ }
++
++ public int read() throws IOException {
++ return storage.read();
++ }
++
++ public void read(byte[] b, int offset, int length) throws IOException
{
++ storage.read(b, offset, length);
++ }
++
++ public void write(byte[] b, int offset, int length) throws
IOException {
++ storage.write(b, offset, length);
++ }
++
++ public int readInt() throws IOException {
++ return storage.readInt();
++ }
++
++ public void writeInt(int i) throws IOException {
++ storage.writeInt(i);
++ }
++
++ public long readLong() throws IOException {
++ return storage.readLong();
++ }
++
++ public void writeLong(long i) throws IOException {
++ storage.writeLong(i);
++ }
++
++ public void close() throws IOException {
++ storage.close();
++ }
++
++ public boolean isReadOnly() {
++ return storage.isReadOnly();
++ }
++
++ public void synch() {
++ // Storage interface does not have synch, delegate to no-op
++ }
++
++ public boolean ensureLength(long newLength) {
++ // Storage interface does not have ensureLength
++ return true;
++ }
++
++ public boolean setLength(long newLength) {
++ // Storage interface does not have setLength
++ return false;
++ }
++ }
++
+ private void resetPointer() {
+
+ try {
diff --git a/main/hsqldb/patches/i121754.patch
b/main/hsqldb/patches/i121754.patch
deleted file mode 100644
index fe3d6fb9e5..0000000000
--- a/main/hsqldb/patches/i121754.patch
+++ /dev/null
@@ -1,430 +0,0 @@
-diff -urbwB ext_sources/hsqldb/build/build.xml
ext_sources/hsqldb_1_8_0_11/build/build.xml
---- misc/hsqldb/build/build.xml 2008-06-01 23:56:57.000000000 +0200
-+++ misc/build/hsqldb/build/build.xml 2013-07-05 23:25:40.000000000 +0200
-@@ -1,6 +1,6 @@
- <?xml version="1.0"?>
--<!-- author [email protected] 2001 - 2008 -->
--<!-- additional targets by [email protected] 2004 - 2008 -->
-+<!-- author [email protected] 2001 - 2009 -->
-+<!-- additional targets by [email protected] 2004 - 2009 -->
-
- <project name="hsqldb" default="help" basedir="../">
- <!-- This loads properties in the same exact way as if you ran
-@@ -14,10 +14,10 @@
- Do not address questions about property file(s) to the
- hsqldb community. -->
- <property file='build/build.properties'/>
-- <property name="hsqldb.version" value="1.8.0.10"/>
-+ <property name="hsqldb.version" value="1.8.0.11"/>
-
- <tstamp>
-- <format property="_tmpstamp" pattern="yyyy/MM/dd-hh:mm:ss"
-+ <format property="_tmpstamp" pattern="yyyy/MM/dd-HH:mm:ss"
- locale="en"/>
- </tstamp>
-
-@@ -26,7 +26,7 @@
- <property name="hsqldb.title" value="HSQLDB"/>
- <property name="hsqldb.vendor" value="The HSQLDB Development Group"/>
- <property name="src" value="${basedir}/src"/>
-- <property name="build.debug" value="off"/>
-+ <property name="build.debug" value="false"/>
-
- <target name="init">
- </target>
-@@ -213,10 +213,11 @@
- </java>
- </target>
-
-- <target name="switchtojdk14" depends="switches"
-+ <target name="switchtojdk14" depends="switchtojdk13"
- description="self explanatory" if="ant.java.iscjava14">
- <java classname="org.hsqldb.util.CodeSwitcher" classpath="classes" >
- <arg file="${src}/org/hsqldb/lib/java/JavaSystem.java"/>
-+ <arg file="${src}/org/hsqldb/jdbcDriver.java"/>
- <arg file="${src}/org/hsqldb/lib/HsqlTimer.java"/>
- <arg file="${src}/org/hsqldb/jdbc/jdbcBlob.java"/>
- <arg file="${src}/org/hsqldb/jdbc/jdbcDatabaseMetaData.java"/>
-@@ -251,6 +252,7 @@
- <target name="switchtojdk16" depends="switchtojdk14"
- description="self explanatory" if="ant.java.iscjava16">
- <java classname="org.hsqldb.util.CodeSwitcher" classpath="classes" >
-+ <arg file="${src}/org/hsqldb/jdbcDriver.java"/>
- <arg file="${src}/org/hsqldb/lib/java/JavaSystem.java"/>
- <arg file="${src}/org/hsqldb/lib/HsqlTimer.java"/>
- <arg file="${src}/org/hsqldb/jdbc/jdbcBlob.java"/>
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/Expression.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/Expression.java
---- misc/hsqldb/src/org/hsqldb/Expression.java 2008-05-27 17:15:05.000000000
+0200
-+++ misc/build/hsqldb/src/org/hsqldb/Expression.java 2013-07-05
23:40:51.000000000 +0200
-@@ -807,6 +807,14 @@
-
- case COUNT :
- buf.append(' ').append(Token.T_COUNT).append('(');
-+
-+ if ("(*)".equals(left)) {
-+ buf.append('*');
-+ } else {
-+ buf.append(left);
-+ }
-+
-+ buf.append(')');
- break;
-
- case SUM :
-@@ -858,11 +866,15 @@
- buf.append(' ').append(Token.T_VAR_SAMP).append('(');
- buf.append(left).append(')');
- break;
-- }
-
-+ default :
- throw Trace.error(Trace.EXPRESSION_NOT_SUPPORTED);
- }
-
-+ // changes used in OpenOffice 3.4 have been incorporated
-+ return buf.toString();
-+ }
-+
- private String describe(Session session, int blanks) {
-
- int lIType;
-@@ -1523,6 +1535,12 @@
- return columnName;
- }
-
-+ if (isAggregate(exprType)) {
-+ try {
-+ return getDDL();
-+ } catch (Exception e) {}
-+ }
-+
- return "";
- }
-
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcCallableStatement.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcCallableStatement.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcCallableStatement.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcCallableStatement.java
2013-07-05 23:45:50.000000000 +0200
-@@ -3376,7 +3376,26 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
--*/
-
-+ public <T>T getObject(int parameterIndex,
-+ Class<T> type) throws SQLException {
-+ return (T) this.getObject(parameterIndex);
-+ }
-+
-+ public <T>T getObject(String parameterName,
-+ Class<T> type) throws SQLException {
-+ return getObject(this.findParameterIndex(parameterName), type);
-+ }
-+
-+ public void closeOnCompletion() throws SQLException {
-+ throw new UnsupportedOperationException("Not supported yet.");
-+ }
-+
-+ public boolean isCloseOnCompletion() throws SQLException {
-+ throw new UnsupportedOperationException("Not supported yet.");
-+ }
-+
-+*/
- //#endif JAVA6
-+
- }
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcConnection.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcConnection.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcConnection.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcConnection.java 2013-07-05
23:46:02.000000000 +0200
-@@ -2794,6 +2794,36 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-+
-+ public int getNetworkTimeout() throws SQLException {
-+ return 0;
-+ }
-+
-+ public void setNetworkTimeout(java.util.concurrent.Executor executor,
-+ int milliseconds) throws SQLException {
-+
-+ checkClosed();
-+
-+ throw Util.notSupported();
-+ }
-+
-+ public void setSchema(String schema) throws SQLException {
-+ checkClosed();
-+
-+ throw Util.notSupported();
-+ }
-+
-+ public String getSchema() throws SQLException {
-+ checkClosed();
-+
-+ throw Util.notSupported();
-+ }
-+ public void abort(
-+ java.util.concurrent.Executor executor) throws SQLException {
-+ checkClosed();
-+
-+ throw Util.notSupported();
-+ }
- */
-
- //#endif JAVA6
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcDatabaseMetaData.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcDatabaseMetaData.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcDatabaseMetaData.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcDatabaseMetaData.java
2013-07-05 23:46:18.000000000 +0200
-@@ -5694,7 +5694,17 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
--*/
-
-+ public ResultSet getPseudoColumns(
-+ String catalog, String schemaPattern, String tableNamePattern,
-+ String columnNamePattern) throws SQLException {
-+ throw Util.notSupported();
-+ }
-+
-+ public boolean generatedKeyAlwaysReturned() throws SQLException {
-+ return true;
-+ }
-+
-+*/
- //#endif JAVA6
- }
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcDataSource.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcDataSource.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcDataSource.java 2008-05-28
22:23:02.000000000 +0200
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcDataSource.java 2013-07-05
23:46:39.000000000 +0200
-@@ -322,6 +322,11 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-+
-+ public java.util.logging.Logger getParentLogger()
-+ throws java.sql.SQLFeatureNotSupportedException {
-+ throw (java.sql.SQLFeatureNotSupportedException) Util.notSupported();
-+ }
- */
-
- //#endif JAVA6
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcPreparedStatement.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcPreparedStatement.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcPreparedStatement.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcPreparedStatement.java
2013-07-05 23:46:54.000000000 +0200
-@@ -2403,6 +2403,15 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-+
-+ public void closeOnCompletion() throws SQLException {
-+ checkClosed();
-+ }
-+
-+ public boolean isCloseOnCompletion() throws SQLException {
-+ checkClosed();
-+ return false;
-+ }
- */
-
- //#endif JAVA6
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcResultSet.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcResultSet.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcResultSet.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcResultSet.java 2013-07-05
23:47:15.000000000 +0200
-@@ -5325,7 +5325,16 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
--*/
-
-+ public <T>T getObject(int columnIndex, Class<T> type) throws SQLException
{
-+ return (T) getObject(columnIndex);
-+ }
-+
-+ public <T>T getObject(String columnLabel,
-+ Class<T> type) throws SQLException {
-+ return getObject(findColumn(columnLabel), type);
-+ }
-+
-+*/
- //#endif JAVA6
- }
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbc/jdbcStatement.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbc/jdbcStatement.java
---- misc/hsqldb/src/org/hsqldb/jdbc/jdbcStatement.java 2008-03-20
02:44:28.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/jdbc/jdbcStatement.java 2013-07-05
23:47:29.000000000 +0200
-@@ -1608,6 +1608,16 @@
- {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-+
-+ public void closeOnCompletion() throws SQLException {
-+ checkClosed();
-+ }
-+
-+ public boolean isCloseOnCompletion() throws SQLException {
-+ checkClosed();
-+ return false;
-+ }
-+
- */
- //#endif JAVA6
- }
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/jdbcDriver.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/jdbcDriver.java
---- misc/hsqldb/src/org/hsqldb/jdbcDriver.java 2006-04-11 17:03:24.000000000
+0200
-+++ misc/build/hsqldb/src/org/hsqldb/jdbcDriver.java 2013-07-05
23:48:06.000000000 +0200
-@@ -321,4 +321,16 @@
- DriverManager.registerDriver(new jdbcDriver());
- } catch (Exception e) {}
- }
-+
-+//#ifdef JAVA6
-+/*
-+ public java.util.logging
-+ .Logger getParentLogger() throws java.sql
-+ .SQLFeatureNotSupportedException {
-+ throw new UnsupportedOperationException("Not supported yet.");
-+ }
-+*/
-+
-+//#endif
-+
- }
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/lib/StringComparator.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/lib/StringComparator.java
---- misc/hsqldb/src/org/hsqldb/lib/StringComparator.java 2013-07-06
00:32:59.000000000 +0200
-+++ misc/build/hsqldb/src/org/hsqldb/lib/StringComparator.java 2013-07-06
00:09:04.000000000 +0200
-@@ -0,0 +1,53 @@
-+/* Copyright (c) 2001-2008, The HSQL Development Group
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions are met:
-+ *
-+ * Redistributions of source code must retain the above copyright notice, this
-+ * list of conditions and the following disclaimer.
-+ *
-+ * Redistributions in binary form must reproduce the above copyright notice,
-+ * this list of conditions and the following disclaimer in the documentation
-+ * and/or other materials provided with the distribution.
-+ *
-+ * Neither the name of the HSQL Development Group nor the names of its
-+ * contributors may be used to endorse or promote products derived from this
-+ * software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
-+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS
-+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+
-+package org.hsqldb.lib;
-+
-+public class StringComparator implements ObjectComparator {
-+
-+ public int compare(Object a, Object b) {
-+
-+ // handle nulls
-+ if (a == b) {
-+ return 0;
-+ }
-+
-+ if (a == null) {
-+ return -1;
-+ }
-+
-+ if (b == null) {
-+ return 1;
-+ }
-+
-+ return ((String) a).compareTo((String) b);
-+ }
-+}
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/Library.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/Library.java
---- misc/hsqldb/src/org/hsqldb/Library.java 2006-07-17 00:29:33.000000000
+0200
-+++ misc/build/hsqldb/src/org/hsqldb/Library.java 2013-07-05
23:51:13.000000000 +0200
-@@ -1957,7 +1957,7 @@
- functionMap.put("bitand", bitand);
- functionMap.put("bitlength", bitLength);
- functionMap.put("bitor", bitor);
-- functionMap.put("bitxor", bitor);
-+ functionMap.put("bitxor", bitxor);
- functionMap.put("character", character);
- functionMap.put("concat", concat);
- functionMap.put("cot", cot);
-diff -urbwB
ext_sources/hsqldb/src/org/hsqldb/persist/HsqlDatabaseProperties.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/persist/HsqlDatabaseProperties.java
---- misc/hsqldb/src/org/hsqldb/persist/HsqlDatabaseProperties.java
2008-03-17 17:05:41.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/persist/HsqlDatabaseProperties.java
2013-07-05 23:52:14.000000000 +0200
-@@ -429,6 +429,7 @@
- setProperty(hsqldb_log_size, 10);
- setProperty(sql_enforce_strict_size, true);
- setProperty(hsqldb_nio_data_file, false);
-+ setProperty(hsqldb_lock_file, true);
- }
-
- // OOo end
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/Select.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/Select.java
---- misc/hsqldb/src/org/hsqldb/Select.java 2007-07-17 18:14:09.000000000
+0200
-+++ misc/build/hsqldb/src/org/hsqldb/Select.java 2013-07-05
23:57:48.000000000 +0200
-@@ -33,7 +33,7 @@
- *
- * For work added by the HSQL Development Group:
- *
-- * Copyright (c) 2001-2008, The HSQL Development Group
-+ * Copyright (c) 2001-2005, The HSQL Development Group
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
-@@ -1255,6 +1255,7 @@
- for (int i = 0; i < iResultLen; i++) {
- e = exprColumns[i];
- rmd.colTypes[i] = e.getDataType();
-+ rmd.classNames[i] = e.getValueClassName();
- rmd.colSizes[i] = e.getColumnSize();
- rmd.colScales[i] = e.getColumnScale();
- rmd.colLabels[i] = e.getAlias();
-@@ -1263,6 +1264,7 @@
- rmd.colNames[i] = e.getColumnName();
-
- if (rmd.isTableColumn(i)) {
-+ rmd.schemaNames[i] = e.getTableSchemaName();
- rmd.colNullable[i] = e.nullability;
- rmd.isIdentity[i] = e.isIdentity;
- rmd.isWritable[i] = e.isWritable;
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/Table.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/Table.java
---- misc/hsqldb/src/org/hsqldb/Table.java 2007-10-19 23:59:07.000000000
+0200
-+++ misc/build/hsqldb/src/org/hsqldb/Table.java 2013-07-05
23:58:46.000000000 +0200
-@@ -149,10 +149,10 @@
- Constraint[] constraintList; // constrainst for the
table
- HsqlArrayList[] triggerLists; // array of trigger
lists
- private int[] colTypes; // fredt - types of
columns
-- private int[] colSizes; // fredt - copy of SIZE
values for columns
-+ int[] colSizes; // fredt - copy of SIZE
values for columns
- private int[] colScales; // fredt - copy of
SCALE values for columns
- private boolean[] colNullable; // fredt - modified
copy of isNullable() values
-- private Expression[] colDefaults; // fredt - expressions
of DEFAULT values
-+ Expression[] colDefaults; // fredt - expressions
of DEFAULT values
- private int[] defaultColumnMap; // fred - holding
0,1,2,3,...
- private boolean hasDefaultValues; //fredt - shortcut for
above
- boolean sqlEnforceSize; // inherited from the
database -
-diff -urbwB ext_sources/hsqldb/src/org/hsqldb/TableWorks.java
ext_sources/hsqldb_1_8_0_11/src/org/hsqldb/TableWorks.java
---- misc/hsqldb/src/org/hsqldb/TableWorks.java 2007-01-14 06:48:16.000000000
+0100
-+++ misc/build/hsqldb/src/org/hsqldb/TableWorks.java 2013-07-05
23:59:03.000000000 +0200
-@@ -670,7 +670,10 @@
- // default expressions can change
- oldCol.setType(newCol);
- oldCol.setDefaultExpression(newCol.getDefaultExpression());
-- table.setColumnTypeVars(colIndex);
-+
-+ table.colSizes[colIndex] = oldCol.getSize();
-+ table.colDefaults[colIndex] = oldCol.getDefaultExpression();
-+
- table.resetDefaultsFlag();
-
- return;
diff --git a/main/hsqldb/patches/runfinalizers.patch
b/main/hsqldb/patches/runfinalizers.patch
deleted file mode 100644
index dfeafdfee2..0000000000
--- a/main/hsqldb/patches/runfinalizers.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- misc/build/hsqldb/src/org/hsqldb/lib/java/JavaSystem.java
-+++ misc/build/hsqldb/src/org/hsqldb/lib/java/JavaSystem.java
-@@ -160,7 +160,7 @@
- public static void runFinalizers() {
-
- //#ifdef JAVA2FULL
-- System.runFinalizersOnExit(true);
-+ // System.runFinalizersOnExit(boolean) was removed in Java 11+;
dropped for modern JDK compatibility
-
- //#endif
- }
---- misc/build/hsqldb/src/org/hsqldb/lib/HsqlArrayList.java
-+++ misc/build/hsqldb/src/org/hsqldb/lib/HsqlArrayList.java
-@@ -57,7 +57,7 @@
- Reporter() {
-
- try {
-- System.runFinalizersOnExit(true);
-+ // System.runFinalizersOnExit(boolean) was removed in Java
11+; dropped for modern JDK compatibility
- } catch (SecurityException e) {}
- }
-
diff --git a/main/hsqldb/patches/script.patch b/main/hsqldb/patches/script.patch
deleted file mode 100644
index dc722d8198..0000000000
--- a/main/hsqldb/patches/script.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru misc/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java
misc/build/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java
---- misc/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java 2008-05-27
14:26:44.000000000 +0200
-+++ misc/build/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java
2023-02-19 15:28:44.167555700 +0100
-@@ -402,6 +402,9 @@
- if (tokenizer.getType() != Types.VARCHAR) {
- throw Trace.error(Trace.INVALID_IDENTIFIER);
- }
-+ if (session.isProcessingScript() ||
session.isProcessingLog()) {
-+ return new Result(ResultConstants.UPDATECOUNT);
-+ }
-
- dsw = new ScriptWriterText(database, token, true, true, true);
-
diff --git a/main/hsqldb/patches/text_tables.patch
b/main/hsqldb/patches/text_tables.patch
deleted file mode 100644
index 896c8dc3ce..0000000000
--- a/main/hsqldb/patches/text_tables.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru misc/hsqldb/src/org/hsqldb/persist/Log.java
misc/build/hsqldb/src/org/hsqldb/persist/Log.java
---- misc/hsqldb/src/org/hsqldb/persist/Log.java 2008-03-14
16:47:42.000000000 +0100
-+++ misc/build/hsqldb/src/org/hsqldb/persist/Log.java 2026-09-08
22:40:39.681242533 +0200
-@@ -763,7 +763,7 @@
-
- closeTextCache(table);
-
-- if (!properties.isPropertyTrue(
-+ if (database.isStoredFileAccess() || !properties.isPropertyTrue(
- HsqlDatabaseProperties.textdb_allow_full_path)) {
- if (source.indexOf("..") != -1) {
- throw (Trace.error(Trace.ACCESS_IS_DENIED, source));
-
diff --git a/main/hsqldb/prj/d.lst b/main/hsqldb/prj/d.lst
index 8801f4fecf..38758af25b 100644
--- a/main/hsqldb/prj/d.lst
+++ b/main/hsqldb/prj/d.lst
@@ -1 +1 @@
-..\%__SRC%\misc\build\hsqldb\lib\hsqldb.jar %_DEST%\bin%_EXT%\hsqldb.jar
+..\%__SRC%\misc\build\hsqldb-2.5.0\hsqldb\lib\hsqldb.jar
%_DEST%\bin%_EXT%\hsqldb.jar
diff --git a/main/hsqldb/version.mk b/main/hsqldb/version.mk
index 2ca6ca2df5..9413eaef6f 100644
--- a/main/hsqldb/version.mk
+++ b/main/hsqldb/version.mk
@@ -20,7 +20,7 @@
# *************************************************************
# when you want to change the HSQLDB version, you must update the d.lst
# in the HSQLDB_thon project accordingly !!!
-HSQLDB_MAJOR=1
-HSQLDB_MINOR=8
+HSQLDB_MAJOR=2
+HSQLDB_MINOR=5
HSQLDB_MICRO=0
-HSQLDB_VERSION=$(HSQLDB_MAJOR)_$(HSQLDB_MINOR)_$(HSQLDB_MICRO)
+HSQLDB_VERSION=$(HSQLDB_MAJOR).$(HSQLDB_MINOR).$(HSQLDB_MICRO)