db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-6185) Query against view with "where name LIKE 'Col1' ESCAPE '\' " failed
Date Tue, 16 Apr 2013 16:29:15 GMT

     [ 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

Mime
View raw message