[
https://issues.apache.org/jira/browse/DERBY-4946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12972693#action_12972693
]
Kathey Marsden commented on DERBY-4946:
---------------------------------------
Yay, Knut! One less worry! I did not have a chance to apply the patch but
looked at it and looks good to me.
> 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
> Assignee: Knut Anders Hatlen
> Attachments: bool.diff, odbc+tests.diff, UseDBMetaForBool.java
>
>
> 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.