[ 
https://issues.apache.org/jira/browse/DERBY-2352?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bryan Pendleton updated DERBY-2352:
-----------------------------------

    Attachment: substringReturnsChar.diff

Attached is substringReturnsChar.diff, which modifies the substring, trim, and 
similar functions in SQLChar so that they no longer always return a value of 
type SQLVarchar, but instead return either SQLChar or SQLVarchar, depending on 
what type of object they are called on.

That is, SQLChar.substring returns SQLChar, but SQLVarchar.substring returns 
SQLVarchar.

With this change, the reproduction code passes.

Also, with this change, derbyall and suites.All are 100% pass.

I intend to follow this up with a more complete patch proposal, including 
various new regression tests, to allow for a more complete review. In the 
meantime, any feedback about the attached code change is most welcome.

> 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.

Reply via email to