[
https://issues.apache.org/jira/browse/DERBY-2352?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12534436
]
Bryan Pendleton commented on DERBY-2352:
----------------------------------------
Here is the generated code for the "projection" method (e1) and the
"rowAllocator" method (e3)
for the "order by" variant of the select statement:
public Object e1()
throws StandardException, Exception
{
ConcatableDataValue concatabledatavalue =
getDataValueFactory().getCharDataValue("abc", null).
substring(getDataValueFactory().getDataValue(1, null), null,
e3, 3);
e3 = concatabledatavalue;
e2.setColumn(1, (DataValueDescriptor)concatabledatavalue);
ConcatableDataValue concatabledatavalue1 =
getDataValueFactory().getCharDataValue("abc", null).
substring(getDataValueFactory().getDataValue(1, null), null,
e4, 3);
e4 = concatabledatavalue1;
e2.setColumn(2, (DataValueDescriptor)concatabledatavalue1);
return e2;
}
public Object e2()
throws StandardException
{
e5.setColumn(1, getDataValueFactory().getNullChar(null));
e5.setColumn(2, getDataValueFactory().getNullChar(null));
return e5;
}
The projection method's call to getCharDataValue() constructs a SQLChar,
and SQLChar.substring() then returns a SQLVarchar.
But the rowAllocator's getNullChar() method constructs a SQLChar.
It is the mismatch between the SQLVarchar that is returned by substring,
and the SQLChar that is created by the rowAllocator's getNullChar, that
is causing the assertion to trip in the sorter.
> Assertion Failure with order by and group by expression
> -------------------------------------------------------
>
> Key: DERBY-2352
> URL: https://issues.apache.org/jira/browse/DERBY-2352
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.2.2.0, 10.3.1.4
> Environment: Any
> Reporter: Yip Ng
> Assignee: Bryan Pendleton
>
> Assertion failure with order by expression:
> ij> select substr('abc', 1) from t1 order by substr('abc', 1);
> ERROR XJ001: Java exception: 'ASSERT FAILED col1.getClass() (class
> org.apache.derby.iapi.types.SQLVarchar) expected to be the same as
> col2.getClass() (class org.apache.derby.iapi.types.SQLChar):
> org.apache.derby.shared.common.sanity.AssertFailure'.
> Stacktrace:
> org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED
> col1.getClass() (class org.apache.derby.iapi.types.SQLVarchar) expected to be
> the same as col2.getClass() (class org.apache.derby.iapi.types.SQLChar)
> at
> org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:149)
> at
> org.apache.derby.impl.store.access.sort.MergeSort.checkColumnTypes(MergeSort.java:472)
> at
> org.apache.derby.impl.store.access.sort.MergeInserter.insert(MergeInserter.java:106)
> at
> org.apache.derby.impl.sql.execute.SortResultSet.loadSorter(SortResultSet.java:318)
> at
> org.apache.derby.impl.sql.execute.SortResultSet.openCore(SortResultSet.java:269)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(ProjectRestrictResultSet.java:169)
> at
> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.open(BasicNoPutResultSetImpl.java:260)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:358)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1182)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:585)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:517)
> at org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:321)
> at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:517)
> at
> org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:370)
> at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:268)
> at org.apache.derby.impl.tools.ij.Main.go(Main.java:204)
> at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:170)
> at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:56)
> at org.apache.derby.tools.ij.main(ij.java:71)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.