[
https://issues.apache.org/jira/browse/DERBY-4946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12972537#action_12972537
]
Kathey Marsden commented on DERBY-4946:
---------------------------------------
Yes I think the only risk in fixing it could be if someone started depending on
the new behavior. Since I think we do not currently have infrastructure for
a variable query for DatabaseMetaData, a fix might be hard, and there doesn't
seem to be anyone with bandwidth to fix it right now, so I think it would make
sense to add a release note to DERBY-4730 pointing to this bug and indicating
that BOOLEAN will be removed from getTypeInfo() as soon as this issue is fixed.
It might also be helpful to users that encounter the issue in the repro. I
am not exactly sure how they could work around that problem with Generic JDBC
code or even with something specific to Derby. We have the open issue
https://issues.apache.org/jira/browse/DERBY-4259 which would work but that is
not fixed yet. Does anyone have ideas how users can work around this issue and
recognize if the database is in soft upgrade mode and whether BOOLEAN is
actually available to create a table? Then we could add that to the release
note too.
Thanks
Kathey
> 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
> Attachments: 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.