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)

Reply via email to