Date: prev next · Thread: first prev next last
2014 Archives by date, by thread · List index


On Fri, Jun 13, 2014 at 11:46:07AM +0100, Caolán McNamara wrote:
in published api

offapi/com/sun/star/sdbc/XDatabaseMetaData.idl

two methods...

    long getDriverMajorVersion();
    long getDriverMinorVersion();

have no raises (SQLException) spec unlike all the other members,

That's inherited from JDBC, of which SDBC is basically a C++ "port".

and the following four coverity ids show that there are 4
implementations of these that actually could throw SQLException

I'd rather fix those.

706317 Uncaught exception
  line 1215 connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
        sal_Int32 SAL_CALL
java_sql_DatabaseMetaData::getDriverMajorVersion(  )

This one will throw SQLException only if JNI fails to find a
"getMajorDriverVersion" method in the JDBC driver (the Java code we
make calls to). This comes from file
connectivity/source/drivers/jdbc/Object.cxx
method java_lang_Object::obtainMethodId

1) In this particular case, I don't think this will happen (assuming
   JNI as a whole functions OK) since it is part of the JDBC
   interface. Doesn't Java check that an implementation that claims to
   implement the interface has the right methods with the right
   signature? I think it does.

   Obviously, Coverity cannot see that.

2) Frankly, I'm not sure SQLException is the right exception. It could
   be for other methods than "getMajorDriverVersion" that would be
   optional in some way? If that is the case, then, well, the code
   cannot distinguish between these two cases.

706361 Uncaught exception

That's in ODBC. It will throw (from
connectivity/source/drivers/odbc/OTools.cxx
method OTools::ThrowException) only if we make the ODBC call with an
invalid handle. I'm not aware of all scenarios out of the top of my
head, but there is a good possibility that it happens only if the
LibreOffice ODBC code deeply screws up *internally* by giving a
different handle than what it was given by the ODBC driver, or by
using a handle after it was freed, ... That is, it is not an error of
the calling code, and throwing an SQLException to the calling code is
maybe not the best choice. I'm a bit undecided on that.

706318 Uncaught exception

Same as 706317

706362 Uncaught exception

Same as 706361


So, one question is, what is the LibreOffice "coding standard" for
"internal inconsistency"? Do we have a specific exception for that, do
we rather abort() (in debug mode) and return "no value / empty value /
0" to the caller?

-- 
Lionel

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.