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