You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ma...@apache.org on 2013/04/23 18:02:36 UTC

svn commit: r1471022 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: mamta
Date: Tue Apr 23 16:02:35 2013
New Revision: 1471022

URL: http://svn.apache.org/r1471022
Log:
DERBY-6185 (Query against view  with "where name LIKE 'Col1' ESCAPE '\' " failed)

During optimizer's pre-processing phase, while cloning a BinaryComparisonOperatorNode, we were not copying the entire state.


Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BetweenOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryRelationalOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnReference.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InListOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/Predicate.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ValueNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ViewsTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BetweenOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BetweenOperatorNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BetweenOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BetweenOperatorNode.java Tue Apr 23 16:02:35 2013
@@ -123,6 +123,7 @@ public class BetweenOperatorNode extends
 									C_NodeTypes.BINARY_LESS_THAN_OPERATOR_NODE,
 									leftOperand, 
 								 	rightOperandList.elementAt(0),
+								 	Boolean.FALSE,
 									cm);
 		/* Set type info for the operator node */
 		leftBCO.bindComparisonOperator();
@@ -139,6 +140,7 @@ public class BetweenOperatorNode extends
 								C_NodeTypes.BINARY_GREATER_THAN_OPERATOR_NODE,
 								leftClone,
 								rightOperandList.elementAt(1),
+							 	Boolean.FALSE,
 								cm);
 		/* Set type info for the operator node */
 		rightBCO.bindComparisonOperator();
@@ -224,6 +226,7 @@ public class BetweenOperatorNode extends
 						C_NodeTypes.BINARY_LESS_EQUALS_OPERATOR_NODE,
 						leftClone1, 
 						rightOperandList.elementAt(1),
+					 	Boolean.FALSE,
 						cm);
 
 		/* Set type info for the operator node */
@@ -243,6 +246,7 @@ public class BetweenOperatorNode extends
 					C_NodeTypes.BINARY_GREATER_EQUALS_OPERATOR_NODE,
 					leftOperand, 
 					rightOperandList.elementAt(0),
+				 	Boolean.FALSE,
 					cm);
 
 		/* Set type info for the operator node */
@@ -302,6 +306,7 @@ public class BetweenOperatorNode extends
 							C_NodeTypes.BINARY_GREATER_EQUALS_OPERATOR_NODE,
 							leftOperand, 
 							rightOperandList.elementAt(0),
+						 	Boolean.FALSE,
 							cm);
 		/* Set type info for the operator node */
 		leftBCO.bindComparisonOperator();
@@ -312,6 +317,7 @@ public class BetweenOperatorNode extends
 						C_NodeTypes.BINARY_LESS_EQUALS_OPERATOR_NODE,
 						leftOperand, 
 						rightOperandList.elementAt(1),
+					 	Boolean.FALSE,
 						cm);
 		/* Set type info for the operator node */
 		rightBCO.bindComparisonOperator();

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java Tue Apr 23 16:02:35 2013
@@ -53,14 +53,28 @@ public abstract class BinaryComparisonOp
 	 * @param operator		The name of the operator
 	 * @param methodName	The name of the method to call in the generated
 	 *						class
+	 * @param forQueryRewrite Can be true only if if this node has been 
+	 *                      added by an internal rewrite of the query. This
+	 *                      allows binding to be more liberal when checking 
+	 *                      it against allowed syntax.
+	 *                      This parameter will be passed FALSE when a new 
+	 *                      instance of the node is being created(which is 
+	 *                      the majority of the cases). But when an  
+	 *                      existing node is getting cloned, the value of
+	 *                      this parameter should be passed as the 
+	 *                      originalNode.getForQueryRewrite(). Examples of
+	 *                      this can be found in Predicate.Java and 
+	 *                      PredicateList.java
 	 */
 
 	public void init(
 				Object	leftOperand,
 				Object	rightOperand,
 				Object		operator,
-				Object		methodName)
+				Object		methodName,
+                Object      forQueryRewrite)
 	{
+        this.forQueryRewrite = ((Boolean)forQueryRewrite).booleanValue();
 		super.init(leftOperand, rightOperand, operator, methodName,
 				ClassName.DataValueDescriptor, ClassName.DataValueDescriptor);
 	}

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryRelationalOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryRelationalOperatorNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryRelationalOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryRelationalOperatorNode.java Tue Apr 23 16:02:35 2013
@@ -86,7 +86,18 @@ public class BinaryRelationalOperatorNod
 	 */
 	private InListOperatorNode inListProbeSource = null;
 
-	public void init(Object leftOperand, Object rightOperand)
+	//DERBY-6185 (Query against view  with "where name LIKE 
+	// 'Col1' ESCAPE '\' " failed)
+	//4th argument forQueryRewrite can be true only if this node has been 
+	//  added by an internal rewrite of the query. This allows binding to 
+	//  be more liberal when checking it against allowed syntax.
+	//  This parameter will be passed FALSE when a new instance of the node
+	//  is being created(which is the majority of the cases). But when an 
+	//  existing node is getting cloned, the value of this parameter should 
+	//  be passed as the originalNode.getForQueryRewrite(). Examples of this
+	//  can be found in Predicate.Java and PredicateList.java
+	public void init(Object leftOperand, Object rightOperand,
+        Object forQueryRewrite)
 	{
 		String methodName = "";
 		String operatorName = "";
@@ -135,7 +146,7 @@ public class BinaryRelationalOperatorNod
 				}
 			    break;
 		}
-		super.init(leftOperand, rightOperand, operatorName, methodName);
+		super.init(leftOperand, rightOperand, operatorName, methodName, forQueryRewrite);
 		btnVis = null;
 	}
 
@@ -144,10 +155,21 @@ public class BinaryRelationalOperatorNod
 	 * an InListOperatorNode.  This version is used during IN-list
 	 * preprocessing to create a "probe predicate" for the IN-list.
 	 * See InListOperatorNode.preprocess() for more.
+	 * DERBY-6185 (Query against view  with "where name LIKE 
+	 *  'Col1' ESCAPE '\' " failed)
+	 * 4th argument forQueryRewrite can be true only if this node has been
+	 *  added by an internal rewrite of the query. This allows binding to
+	 *  be more liberal when checking it against allowed syntax.
+	 *  This parameter will be passed FALSE when a new instance of the node
+	 *  is being created(which is the majority of the cases). But when an 
+	 *  existing node is getting cloned, the value of this parameter should
+	 *  be passed as the originalNode.getForQueryRewrite(). Examples of this
+	 *  can be found in Predicate.Java and PredicateList.java
 	 */
-	public void init(Object leftOperand, Object rightOperand, Object inListOp)
+	public void init(Object leftOperand, Object rightOperand,
+			 Object inListOp, Object forQueryRewrite)
 	{
-		init(leftOperand, rightOperand);
+		init(leftOperand, rightOperand, forQueryRewrite);
 		this.inListProbeSource = (InListOperatorNode)inListOp;
 	}
 
@@ -1047,6 +1069,7 @@ public class BinaryRelationalOperatorNod
 		negation = (BinaryOperatorNode)
 			getNodeFactory().getNode(getNegationNode(),
 									 leftOperand, rightOperand,
+									 Boolean.FALSE,
 									 getContextManager());
 		negation.setType(getTypeServices());
 		return negation;
@@ -1092,6 +1115,7 @@ public class BinaryRelationalOperatorNod
     BinaryOperatorNode getSwappedEquivalent() throws StandardException {
         BinaryOperatorNode newNode = (BinaryOperatorNode) getNodeFactory().getNode(getNodeTypeForSwap(),
                 rightOperand, leftOperand,
+                Boolean.FALSE,
                 getContextManager());
         newNode.setType(getTypeServices());
         return newNode;
@@ -1319,6 +1343,7 @@ public class BinaryRelationalOperatorNod
 		return (RelationalOperator)getNodeFactory().getNode(getNodeType(),
 														  otherCR,
 														  rightOperand,
+														  Boolean.FALSE,
 														  getContextManager());
 	}
 	

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnReference.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnReference.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnReference.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnReference.java Tue Apr 23 16:02:35 2013
@@ -603,6 +603,7 @@ public class ColumnReference extends Val
 										C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 										this,
 										trueNode,
+										Boolean.FALSE,
 										getContextManager());
 		/* Set type info for the operator node */
 		equalsNode.bindComparisonOperator();

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InListOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InListOperatorNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InListOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InListOperatorNode.java Tue Apr 23 16:02:35 2013
@@ -145,6 +145,7 @@ public final class InListOperatorNode ex
 						C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 						leftOperand, 
 						(ValueNode) rightOperandList.elementAt(0),
+						Boolean.FALSE,
 						getContextManager());
 			/* Set type info for the operator node */
 			equal.bindComparisonOperator();
@@ -287,6 +288,7 @@ public final class InListOperatorNode ex
 							C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 							leftOperand, 
 							minValue,
+							Boolean.FALSE,
 							getContextManager());
 					/* Set type info for the operator node */
 					equal.bindComparisonOperator();
@@ -356,6 +358,7 @@ public final class InListOperatorNode ex
 					leftOperand, 
 					pNode,
 					this,
+					Boolean.FALSE,
 					getContextManager());
 
 			/* Set type info for the operator node */
@@ -450,6 +453,7 @@ public final class InListOperatorNode ex
 						C_NodeTypes.BINARY_NOT_EQUALS_OPERATOR_NODE,
 						leftClone,
 						(ValueNode) rightOperandList.elementAt(0),
+						Boolean.FALSE,
 						getContextManager());
 		/* Set type info for the operator node */
 		leftBCO.bindComparisonOperator();
@@ -466,6 +470,7 @@ public final class InListOperatorNode ex
 							C_NodeTypes.BINARY_NOT_EQUALS_OPERATOR_NODE,
 							leftClone,
 							(ValueNode) rightOperandList.elementAt(elemsDone),
+							Boolean.FALSE,
 							getContextManager());
 			/* Set type info for the operator node */
 			rightBCO.bindComparisonOperator();

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java Tue Apr 23 16:02:35 2013
@@ -903,6 +903,7 @@ public class JoinNode extends TableOpera
 										C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 										leftCR,
 										rightCR,
+										Boolean.FALSE,
 										getContextManager());
 				equalsNode.bindComparisonOperator();
 

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java Tue Apr 23 16:02:35 2013
@@ -396,6 +396,7 @@ public final class LikeEscapeOperatorNod
                                 C_NodeTypes.CHAR_CONSTANT_NODE,
                                 newPattern,
                                 getContextManager()),
+                                Boolean.FALSE,
                             getContextManager());
 
                     // Set forQueryRewrite to bypass comparability checks
@@ -675,7 +676,8 @@ public final class LikeEscapeOperatorNod
                     C_NodeTypes.BINARY_LESS_THAN_OPERATOR_NODE,
                     receiver.getClone(), 
                     likeLTopt,
-                    getContextManager());
+                    Boolean.FALSE,
+                   getContextManager());
 
             // Disable comparability checks
             lessThan.setForQueryRewrite(true);
@@ -734,6 +736,7 @@ public final class LikeEscapeOperatorNod
                 C_NodeTypes.BINARY_GREATER_EQUALS_OPERATOR_NODE,
                 receiver.getClone(), 
                 likeGEopt,
+                Boolean.FALSE,
                 getContextManager());
 
 

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/Predicate.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/Predicate.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/Predicate.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/Predicate.java Tue Apr 23 16:02:35 2013
@@ -994,6 +994,7 @@ public final class Predicate extends Que
 					parentRSNsTables,
 					childRSN,
 					whichRC),
+					Boolean.valueOf(opNode.getForQueryRewrite()),
 				getContextManager());
 
 		// Bind the new op node.

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java Tue Apr 23 16:02:35 2013
@@ -1571,6 +1571,7 @@ public class PredicateList extends Query
 										newCRNode,
 										opNode.getRightOperand(),
 										inNode,
+										Boolean.valueOf(opNode.getForQueryRewrite()),
 										getContextManager());
 					newRelop.bindComparisonOperator();
 					leftOperand = newRelop;
@@ -2159,6 +2160,7 @@ public class PredicateList extends Query
 										C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 										outerCR.getClone(),
 										innerCR.getClone(),
+										Boolean.FALSE,
 										getContextManager());
 					newEquals.bindComparisonOperator();
 					/* Create the AND */

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java Tue Apr 23 16:02:35 2013
@@ -1615,6 +1615,7 @@ public class SubqueryNode extends ValueN
 							nodeType,
 							leftOperand,
 							rightOperand,
+							Boolean.FALSE,
 							getContextManager());
 
 		bcoNode.bindComparisonOperator();
@@ -2379,6 +2380,7 @@ public class SubqueryNode extends ValueN
   									C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
   									leftOperand,
   									this,
+  									Boolean.FALSE,
   									getContextManager());
   				break;
 
@@ -2387,6 +2389,7 @@ public class SubqueryNode extends ValueN
   								C_NodeTypes.BINARY_NOT_EQUALS_OPERATOR_NODE,
   								leftOperand,
   								this,
+  								Boolean.FALSE,
   								getContextManager());
   				break;
 
@@ -2395,6 +2398,7 @@ public class SubqueryNode extends ValueN
   								C_NodeTypes.BINARY_LESS_EQUALS_OPERATOR_NODE,
   								leftOperand,
   								this,
+  								Boolean.FALSE,
   								getContextManager());
   				break;
 
@@ -2403,6 +2407,7 @@ public class SubqueryNode extends ValueN
   							C_NodeTypes.BINARY_LESS_THAN_OPERATOR_NODE,
   							leftOperand,
   							this,
+  							Boolean.FALSE,
   							getContextManager());
   				break;
 
@@ -2411,6 +2416,7 @@ public class SubqueryNode extends ValueN
   							C_NodeTypes.BINARY_GREATER_EQUALS_OPERATOR_NODE,
   							leftOperand,
   							this,
+  							Boolean.FALSE,
   							getContextManager());
   				break;
 
@@ -2419,6 +2425,7 @@ public class SubqueryNode extends ValueN
   								C_NodeTypes.BINARY_GREATER_THAN_OPERATOR_NODE,
   								leftOperand,
   								this,
+  								Boolean.FALSE,
   								getContextManager());
   				break;
   		}

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ValueNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ValueNode.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ValueNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ValueNode.java Tue Apr 23 16:02:35 2013
@@ -549,6 +549,7 @@ public abstract class ValueNode extends 
 								C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 								this,
 								falseNode,
+								Boolean.FALSE,
 								getContextManager());
 		nullableResult = getTypeServices().isNullable();
 		equalsNode.setType(new DataTypeDescriptor(

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Tue Apr 23 16:02:35 2013
@@ -5671,6 +5671,7 @@ additiveExpression(ValueNode farLeftOper
 							nodeType,
 							farLeftOperand,
 							leftOperand,
+							Boolean.FALSE,
 							getContextManager());
 	}
 }
@@ -12621,6 +12622,7 @@ valueSpecification() throws StandardExce
 														C_NodeTypes.BINARY_EQUALS_OPERATOR_NODE,
 														leftExpression,
 														rightExpression,
+														Boolean.FALSE,
 														cm),
 											thenElseList,
 											Boolean.TRUE,//this node is for nullif 

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ViewsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ViewsTest.java?rev=1471022&r1=1471021&r2=1471022&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ViewsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ViewsTest.java Tue Apr 23 16:02:35 2013
@@ -52,6 +52,88 @@ public final class ViewsTest extends Bas
         return new CleanDatabaseTestSetup(suite);
     }
 
+    //DERBY-6185(Query against view  with 
+    // "where name LIKE 'Col1' ESCAPE '\' " failed)
+    //Problem was that we clone binary comparison operator node during the
+    // optimize phase but we did not copy the entire state of the original
+    // node
+    public void test_DERBY6185() throws Exception
+    {
+        ResultSet rs = null;
+        
+        Statement st = createStatement();
+        PreparedStatement ps;
+
+        // create 2 tables and a view
+        st.executeUpdate(
+            "create table mytbl1 (name clob(10K))");
+        st.executeUpdate("insert into mytbl1 "+
+            "values ('Col1'),('Col2')");
+        st.executeUpdate(
+            "create table mytbl2 (name clob(10K))");
+        st.executeUpdate("insert into mytbl2 "+
+                "values ('Col1'),('Col2')");
+        st.executeUpdate(
+            "create view myview (name) as select t1.name from " +
+            "mytbl1 t1 union all select t2.name from mytbl2 t2");
+
+        //test base table's CLOB and LIKE clause with Statement
+        rs = st.executeQuery("select name from mytbl1 " +
+                "where name LIKE 'Col1'");
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"}
+        });
+
+        //test base table's CLOB and LIKE clause with PreparedStatement
+        ps = prepareStatement("select name from mytbl1 " +
+                "where name LIKE ?");
+        ps.setString(1, "Col1");
+        rs = ps.executeQuery();
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"}
+        });
+
+        //test view's CLOB and LIKE clause with Statement
+        rs = st.executeQuery("select name from myview " +
+            "where name LIKE 'Col1'");
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"},
+                {"Col1"}
+        });
+
+        //test view's CLOB and LIKE clause with PreparedStatement
+        ps = prepareStatement("select name from myview " +
+                "where name LIKE ?");
+        ps.setString(1, "Col1");
+        rs = ps.executeQuery();
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"},
+                {"Col1"}
+        });
+
+        //test UNION's CLOB and LIKE clause with Statement
+        rs = st.executeQuery("select name from " +
+             "(select name from mytbl1 t1 union all " +
+             "select t2.name from mytbl2 t2) " +
+             "as s where name like 'Col1'");
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"},
+                {"Col1"}
+        });
+
+        //test UNION's CLOB and LIKE clause with PreparedStatement
+        ps = prepareStatement("select name from " +
+             "(select name from mytbl1 t1 union all " +
+             "select t2.name from mytbl2 t2) " +
+             "as s where name like ?");
+        ps.setString(1, "Col1");
+        rs = ps.executeQuery();
+        JDBC.assertFullResultSet(rs, new String[][]{
+                {"Col1"},
+                {"Col1"}
+        });
+    }
+
     public void test_views() throws Exception
     {
         ResultSet rs = null;