[ https://issues.apache.org/jira/browse/DERBY-2352?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12543301 ]
Bryan Pendleton commented on DERBY-2352: ---------------------------------------- Here is the generated projection (e1) and rowAllocator (e2) code for select ltrim('abcd') from d2352 order by trim('abcd'); public Object e1() throws StandardException, Exception { StringDataValue stringdatavalue = getDataValueFactory().getCharDataValue("abcd", null). ansiTrim(2, getDataValueFactory().getCharDataValue(" ", null), e3); e3 = stringdatavalue; e2.setColumn(1, (DataValueDescriptor)stringdatavalue); StringDataValue stringdatavalue1 = getDataValueFactory().getCharDataValue("abcd", null). ansiTrim(2, getDataValueFactory().getCharDataValue(" ", null), e4); e4 = stringdatavalue1; e2.setColumn(2, (DataValueDescriptor)stringdatavalue1); return e2; } public Object e2() throws StandardException { e5.setColumn(1, getDataValueFactory().getNullVarchar(null)); e5.setColumn(2, getDataValueFactory().getNullVarchar(null)); return e5; } Note that the generated projection code calls SQLChar.ansiTrim, and also note that the rowAllocator allocates columns of Varchar type, not of Char type. I believe this explains why the CHAR vs VARCHAR assertion does not arise in the cases of LTRIM and TRIM(TRAILING), but only for SUBSTR. > 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 > Attachments: substringReturnsChar.diff > > > 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.