[
https://issues.apache.org/jira/browse/DERBY-4282?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12722625#action_12722625
]
Bryan Pendleton commented on DERBY-4282:
----------------------------------------
Dag Wanvik posted an alternate reproduction case to the derby-dev list:
Another data point.
This also fails when using updatable result set, as could be expected
since it uses an underlying cursor:
Statement st1=conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
st1.setCursorName("c1");
ResultSet rs = st1.executeQuery("select * from t1 for update");
rs.next();
rs.updateInt(1, rs.getInt(1));
rs.updateRow();
Caused by: ERROR 42X04: Column 'C2' is either not in any table in the FROM list
or appears within a join specification and is outside the scope of the join
specification or appears in a HAVING clause and is not in the GROUP BY list. If
this is a CREATE or ALTER TABLE statement then 'C2' is not a column in the
target table.
at
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:286)
at
org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(ColumnReference.java:354)
at
org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(BinaryOperatorNode.java:298)
at
org.apache.derby.impl.sql.compile.BinaryComparisonOperatorNode.bindExpression(BinaryComparisonOperatorNode.java:133)
at
org.apache.derby.impl.sql.compile.UnaryOperatorNode.bindOperand(UnaryOperatorNode.java:333)
at
org.apache.derby.impl.sql.compile.TestConstraintNode.bindExpression(TestConstraintNode.java:92)
at
org.apache.derby.impl.sql.compile.BinaryOperatorNode.bindExpression(BinaryOperatorNode.java:298)
at
org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode.bindExpression(BinaryLogicalOperatorNode.java:94)
at
org.apache.derby.impl.sql.compile.AndNode.bindExpression(AndNode.java:68)
at
org.apache.derby.impl.sql.compile.DMLModStatementNode.bindRowScopedExpression(DMLModStatementNode.java:809)
at
org.apache.derby.impl.sql.compile.DMLModStatementNode.bindConstraints(DMLModStatementNode.java:735)
at
org.apache.derby.impl.sql.compile.UpdateNode.bindStatement(UpdateNode.java:618)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:316)
at
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:80)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:831)
at
org.apache.derby.impl.jdbc.EmbedResultSet.updateRow(EmbedResultSet.java:3710)
... 1 more
> strange behavior with the "update ... where current of c1" in the
> CheckConstraintTest
> -------------------------------------------------------------------------------------
>
> Key: DERBY-4282
> URL: https://issues.apache.org/jira/browse/DERBY-4282
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.5.1.1
> Reporter: Eranda Sooriyabandara
> Assignee: Eranda Sooriyabandara
> Priority: Critical
> Fix For: 10.5.1.1
>
>
> import java.sql.*;
> public class cons
> {
> public static void main(String []args)
> throws Exception
> {
> Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
> Connection conn =
> DriverManager.getConnection("jdbc:derby:testdb;create=true");
> Statement st = conn.createStatement();
> st.executeUpdate(
> "create table t1(c1 int, c2 int, constraint ck1 "
> + "check(c1 = c2), constraint ck2 check(c2=c1))");
> st.executeUpdate("insert into t1 values (1, 1),(2, 2),(3, 3),(4, 4)");
> Statement st1=conn.createStatement();
> st1.setCursorName("c1");
> ResultSet rs = st1.executeQuery("select * from t1 for update");
> rs.next();
> st.executeUpdate("update t1 set c1 = c1 where current of \"c1\"");
> }
> }
> Exception in thread "main" java.sql.SQLException: Column 'C2' is either not
> in any
> table in the FROM list or appears within a join specification and is outside
> the scope of the join specification or appears in a HAVING clause and is not
> in
> the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'C2' is
> not
> a column in the target table.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExc
> eptionFactory.java:45)
> at
> org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:201)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException
> (TransactionResourceImpl.java:391)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Tr
> ansactionResourceImpl.java:346)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConne
> ction.java:2201)
> at
> org.apache.derby.impl.jdbc.ConnectionChild.handleException(Connection
> Child.java:81)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java
> :614)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatemen
> t.java:175)
> at cons.main(cons.java:25)
> Caused by: ERROR 42X04: Column 'C2' is either not in any table in the FROM
> list
> or appears within a join specification and is outside the scope of the join
> spec
> - Show quoted text -
> ... 2 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.