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 "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2013/04/16 18:29:15 UTC

[jira] [Updated] (DERBY-6185) Query against view with "where name LIKE 'Col1' ESCAPE '\' " failed

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

Knut Anders Hatlen updated DERBY-6185:
--------------------------------------

    Component/s:     (was: JDBC)
                 SQL

My guess is that name LIKE 'Col1' gets optimized to name = 'Col1', which fails because Derby does not support equality comparisons between CLOBs. There is code in place to prevent this optimization for CLOBs, for example in LikeEscapeOperatorNode.preprocess():

        /* Don't try to optimize for (C)LOB type since it doesn't allow 
         * comparison.
         * RESOLVE: should this check be for LONG VARCHAR also?
         */
        if (receiver.getTypeId().getSQLTypeName().equals("CLOB")) 
        {
            return this;
        }

But maybe the query in question takes a different code path and doesn't bump into this check.
                
> Query against view  with "where name LIKE 'Col1' ESCAPE '\' " failed
> --------------------------------------------------------------------
>
>                 Key: DERBY-6185
>                 URL: https://issues.apache.org/jira/browse/DERBY-6185
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.8.2.2, 10.8.3.0
>         Environment: windows 7
>            Reporter: Rong Qu
>
> The error can be reproduced,
> 1) create table mytbl1 (name clob(10K));
> 2) create table mytbl2 (name clob(10K));
> 3) create view myview (name) as select t1.name from mytbl1 t1 union all select t2.name from mytbl2 t2;
> 4) select name from myview where name LIKE 'Col1' ESCAPE '\';
> "4)" failed with error message "
> ERROR 42818: Comparisons between 'CLOB (UCS_BASIC)' and 'CHAR (UCS_BASIC)' are not supported. Types must be comparable. String types must also have matching collation. If collation does not match, a possible solution is to cast operands to force them to the default collation (e.g. SELECT tablename FROM sys.systables WHERE CAST(tablename AS VARCHAR(128)) = 'T1')
> 	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.BinaryComparisonOperatorNode.bindComparisonOperator(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.PredicateList.pushExpressionsIntoSelect(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.UnionNode.pushExpressions(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.UnionNode.pushExpressions(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.ProjectRestrictNode.pushExpressions(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.FromList.pushPredicates(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.SelectNode.preprocess(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.DMLStatementNode.optimizeStatement(Unknown Source)
> 	at org.apache.derby.impl.sql.compile.CursorNode.optimizeStatement(Unknown Source)
> 	at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
> 	at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
> 	at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
> 	... 19 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira