You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Richard N. Hillegas (Jira)" <ji...@apache.org> on 2020/07/02 12:26:00 UTC
[jira] [Closed] (DERBY-7081) A rotten comment in
DataDictionaryImpl.java
[ https://issues.apache.org/jira/browse/DERBY-7081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard N. Hillegas closed DERBY-7081.
--------------------------------------
> 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)