[ https://issues.apache.org/jira/browse/DERBY-7081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard N. Hillegas resolved DERBY-7081. ---------------------------------------- Resolution: Not A Problem > A rotten comment in DataDictionaryImpl.java > ------------------------------------------- > > Key: DERBY-7081 > URL: https://issues.apache.org/jira/browse/DERBY-7081 > Project: Derby > Issue Type: Bug > Reporter: ackelcn > Priority: Major > > When I read the code of DataDictionaryImpl.java, I found a comment: > > {code:java} > private String genColumnReferenceSQL(private String genColumnReferenceSQL( > TableDescriptor td, String colName, String tabName, boolean isOldTable, int > colPositionInRuntimeResultSet ) throws StandardException > { > ColumnDescriptor colDesc = null; > if ((colDesc = td.getColumnDescriptor(colName)) == null) > { > throw StandardException.newException(SQLState.LANG_COLUMN_NOT_FOUND, > tabName+"."+colName); > } > /* ** Generate something like this: ** > ** CAST (org.apache.derby.iapi.db.Factory:: > ** getTriggerExecutionContext().getNewRow(). > ** getObject(<colPosition>) AS DECIMAL(6,2)) > ** > ** Column position is used to avoid the wrong column being > ** selected problem (DERBY-1258) caused by the case insensitive > ** JDBC rules for fetching a column by name. > ... > }{code} > The comment mentions DERBY-1258. I found that DERBY-1258 modified > CreateTriggerNode.java, and the patch is as follows: > > > > {code:java} > @@ -587,7 +587,11 @@@@ -587,7 +587,11 @@ > ** > ** cast (org.apache.derby.iapi.db.Factory:: > ** getTriggerExecutionContext().getNewRow(). > - ** getObject('<colName>') AS DECIMAL(6,2)) > + ** getObject(<colPosition>) AS DECIMAL(6,2)) > + ** > + ** Column position is used to avoid the wrong column being > + ** selected problem (DERBY-1258) caused by the case insensitive > + ** JDBC rules for fetching a column by name. > ** > ** The cast back to the SQL Domain may seem redundant > ** but we need it to make the column reference appear > @@ -599,9 +603,11 @@ > ** CREATE TRIGGER ... INSERT INTO T length(Column), ... > */ StringBuffer methodCall = new StringBuffer(); > - methodCall.append("cast > (org.apache.derby.iapi.db.Factory::getTriggerExecutionContext()."); > + methodCall.append("CAST > (org.apache.derby.iapi.db.Factory::getTriggerExecutionContext()."); > methodCall.append(isOldTable ? "getOldRow()" : "getNewRow()"); > - methodCall.append(".getObject('"+colName+"') AS "); > + methodCall.append(".getObject("); > + methodCall.append(colDesc.getPosition()); > + methodCall.append(") AS "); DataTypeDescriptor dts = > colDesc.getType(); TypeId typeId = dts.getTypeId(); > @@ -611,8 +617,9 @@ > ** case. > */ methodCall.append( > - (typeId.userType() ? typeId.getSQLTypeName() : dts.getSQLstring()) > - + ") "); > + (typeId.userType() ? typeId.getSQLTypeName() : dts.getSQLstring())); > + > + methodCall.append(") "); return methodCall.toString(); } > {code} > The patch modified the genColumnReferenceSQL method. However, the method does > not appear in the latest version of CreateTriggerNode.java. I found that > DERBY-4874 deleted the whole method. > > > I am wondering whether DataDictionaryImpl.java mentions a rotten issue report > (DERBY-1258), in that all the modifications of this issue do not appear in > the latest version. > > Would you please check the problem? If it is, the reference of DERBY-1258 > shall be removed from the comment of DataDictionaryImpl.java. -- This message was sent by Atlassian Jira (v8.3.4#803005)