Derby 10.7 DatabaseMetaData.getTypeInfo() should not return BOOLEAN for a soft 
upgraded database
------------------------------------------------------------------------------------------------

                 Key: DERBY-4946
                 URL: https://issues.apache.org/jira/browse/DERBY-4946
             Project: Derby
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 10.7.1.1, 10.8.0.0
            Reporter: Kathey Marsden


Derby 10.7 DatabaseMetaData.getTypeInfo() should not return the BOOLEAN data 
type with a soft upgraded database as often applications use getTypeInfo() to 
determine if tables can be created with this type.

To reproduce and see the impact of the problem, first create the database 
testdb with 10.6
ij version 10.6
ij> connect 'jdbc:derby:testdb;create=true';
ij>

run the attached program UseDBMetaForBool with 10.6  and it runs fine.
$ java UseDBMetaForBool
getDriverVersion10.6.2.3 - (1026030M)
supportsBoolean = false Make my table accordingly
CREATING SMALLINT TABLE SINCE NO BOOLEAN
getBoolean=true
getString=1

Next run the program against 10.7 in soft upgrade mode and it fails with:
$ java UseDBMetaForBool
getDriverVersion10.7.1.2 - (1040699M)
supportsBoolean = true Make my table accordingly
CREATING BOOLEAN TABLE
Exception in thread "main" java.sql.SQLException: Use of 'BOOLEAN' requires data
base to be upgraded from version 10.6 to version 10.7 or later.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLE
xceptionFactory40.java:95)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:256)

        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException
(TransactionResourceImpl.java:396)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Tr
ansactionResourceImpl.java:348)
        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConne
ction.java:2284)
        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Connection
Child.java:82)
        at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java
:616)
        at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatemen
t.java:176)
        at UseDBMetaForBool.main(UseDBMetaForBool.java:28)
Caused by: java.sql.SQLException: Use of 'BOOLEAN' requires database to be upgra
ded from version 10.6 to version 10.7 or later.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExc
eptionFactory.java:45)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransport
AcrossDRDA(SQLExceptionFactory40.java:119)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLE
xceptionFactory40.java:70)
        ... 8 more
Caused by: ERROR XCL47: Use of 'BOOLEAN' requires database to be upgraded from v
ersion 10.6 to version 10.7 or later.
        at org.apache.derby.iapi.error.StandardException.newException(StandardEx
ception.java:343)
        at org.apache.derby.impl.sql.catalog.DD_Version.checkVersion(DD_Version.
java:845)
        at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.checkVersion(Dat
aDictionaryImpl.java:9662)
        at org.apache.derby.impl.sql.compile.SQLParser.checkVersion(SQLParser.ja
va:327)
        at org.apache.derby.impl.sql.compile.SQLParser.dataTypeCommon(SQLParser.
java:3336)
        at org.apache.derby.impl.sql.compile.SQLParser.dataTypeDDL(SQLParser.jav
a:3260)
        at org.apache.derby.impl.sql.compile.SQLParser.columnDefinition(SQLParse
r.java:3125)
        at org.apache.derby.impl.sql.compile.SQLParser.tableElement(SQLParser.ja
va:3090)
        at org.apache.derby.impl.sql.compile.SQLParser.tableElementList(SQLParse
r.java:3061)
        at org.apache.derby.impl.sql.compile.SQLParser.tableDefinition(SQLParser
.java:10204)
        at org.apache.derby.impl.sql.compile.SQLParser.createStatements(SQLParse
r.java:2079)
        at org.apache.derby.impl.sql.compile.SQLParser.StatementPart(SQLParser.j
ava:1974)
        at org.apache.derby.impl.sql.compile.SQLParser.Statement(SQLParser.java:
1892)
        at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(ParserImp
l.java:151)
        at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatemen
t.java:282)
        at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.j
ava:90)
        at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepa
reInternalStatement(GenericLanguageConnectionContext.java:1101)
        at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java
:607)
        ... 2 more


Finally, hard upgrade and see it runs again once the upgrade has been performed:
$ java org.apache.derby.tools.ij
ij version 10.7
ij> connect 'jdbc:derby:testdb;upgrade=true';
ij>

kmars...@ibm-93ae43e63c0 ~/repro/softUpgr
$ java UseDBMetaForBool
getDriverVersion10.7.1.2 - (1040699M)
supportsBoolean = true Make my table accordingly
CREATING BOOLEAN TABLE
getBoolean=true
getString=true


The application  should run in soft upgrade mode and 
DatabaseMetaData.getTypeInfo() should not return the BOOLEAN type in soft 
upgrade before it is available to use.





-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to