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 "A B (JIRA)" <ji...@apache.org> on 2007/01/20 00:12:30 UTC

[jira] Updated: (DERBY-2218) Null Pointer Exception when an untyped NULL subquery ("values null") appears outside of the FROM list in a SELECT query.

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

A B updated DERBY-2218:
-----------------------

    Description: 
If a SELECT query contains a subquery which includes an untyped NULL value at any place other than in the FROM list, Derby will throw an NPE at bind time.

ij> create table t1 (i int);
0 rows inserted/updated/deleted

-- If the untyped NULL is in the FROM list, a reasonable error is thrown.

ij> select * from (values null) x;
ERROR 42X07: Null is only allowed in a VALUES clause within an INSERT statement.

ij> select * from (select * from t1, (values null) x )y;
ERROR 42X07: Null is only allowed in a VALUES clause within an INSERT statement.

-- But if it appears anywhere else, the result is an NPE:

-- IN-list
ij> select * from t1 where i in (1, 2, (values null));
ERROR XJ001: Java exception: ': java.lang.NullPointerException'.

-- where clause
select * from t1 where (values null);

-- order by clause
select * from t1 order by (values null);

-- result column
select (values null) from t1;

-- group by clause (only works in 10.2 and later)
select * from t1 group by (values null);

-- having clause
select * from t1 group by i having (values null);

Stack trace (from 10.2.2) is:

java.lang.NullPointerException
	at org.apache.derby.impl.sql.compile.SubqueryNode.setDataTypeServices(SubqueryNode.java:2289)
	at org.apache.derby.impl.sql.compile.SubqueryNode.bindExpression(SubqueryNode.java:529)
	at org.apache.derby.impl.sql.compile.ValueNodeList.bindExpression(ValueNodeList.java:130)
	at org.apache.derby.impl.sql.compile.BinaryListOperatorNode.bindExpression(BinaryListOperatorNode.java:161)
	at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(SelectNode.java:540)
	at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(DMLStatementNode.java:249)
	at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(DMLStatementNode.java:162)
	at org.apache.derby.impl.sql.compile.CursorNode.bind(CursorNode.java:253)
	at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:345)
	at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:119)

  was:
If a query specifies an IN list that contains a subquery which returns an untyped NULL value, Derby will throw an NPE at bind time.

ij> create table t1 (i int);
0 rows inserted/updated/deleted
ij> select * from t1 where i in (1, 2, (values null));
ERROR XJ001: Java exception: ': java.lang.NullPointerException'.

I verified the error against the latest 10.2 and 10.3 trunks; it could very well exist in earlier versions, too, but I haven't checked.

Stack trace (from 10.2.2) is:

java.lang.NullPointerException
	at org.apache.derby.impl.sql.compile.SubqueryNode.setDataTypeServices(SubqueryNode.java:2289)
	at org.apache.derby.impl.sql.compile.SubqueryNode.bindExpression(SubqueryNode.java:529)
	at org.apache.derby.impl.sql.compile.ValueNodeList.bindExpression(ValueNodeList.java:130)
	at org.apache.derby.impl.sql.compile.BinaryListOperatorNode.bindExpression(BinaryListOperatorNode.java:161)
	at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(SelectNode.java:540)
	at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(DMLStatementNode.java:249)
	at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(DMLStatementNode.java:162)
	at org.apache.derby.impl.sql.compile.CursorNode.bind(CursorNode.java:253)
	at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:345)
	at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:119)

        Summary: Null Pointer Exception when an untyped NULL subquery ("values null") appears outside of the FROM list in a SELECT query.  (was: Null Pointer Exception when an IN list contains an untyped NULL subquery ("values null").)

Changed Summary and Description to match the behavior described in my preceding comment.

> Null Pointer Exception when an untyped NULL subquery ("values null") appears outside of the FROM list in a SELECT query.
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2218
>                 URL: https://issues.apache.org/jira/browse/DERBY-2218
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.1.3.2, 10.2.2.1, 10.2.3.0, 10.3.0.0
>            Reporter: A B
>         Assigned To: Yip Ng
>            Priority: Minor
>         Attachments: derby2218-trunk-diff01.txt, derby2218-trunk-diff02.txt, derby2218-trunk-stat01.txt, derby2218-trunk-stat02.txt
>
>
> If a SELECT query contains a subquery which includes an untyped NULL value at any place other than in the FROM list, Derby will throw an NPE at bind time.
> ij> create table t1 (i int);
> 0 rows inserted/updated/deleted
> -- If the untyped NULL is in the FROM list, a reasonable error is thrown.
> ij> select * from (values null) x;
> ERROR 42X07: Null is only allowed in a VALUES clause within an INSERT statement.
> ij> select * from (select * from t1, (values null) x )y;
> ERROR 42X07: Null is only allowed in a VALUES clause within an INSERT statement.
> -- But if it appears anywhere else, the result is an NPE:
> -- IN-list
> ij> select * from t1 where i in (1, 2, (values null));
> ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
> -- where clause
> select * from t1 where (values null);
> -- order by clause
> select * from t1 order by (values null);
> -- result column
> select (values null) from t1;
> -- group by clause (only works in 10.2 and later)
> select * from t1 group by (values null);
> -- having clause
> select * from t1 group by i having (values null);
> Stack trace (from 10.2.2) is:
> java.lang.NullPointerException
> 	at org.apache.derby.impl.sql.compile.SubqueryNode.setDataTypeServices(SubqueryNode.java:2289)
> 	at org.apache.derby.impl.sql.compile.SubqueryNode.bindExpression(SubqueryNode.java:529)
> 	at org.apache.derby.impl.sql.compile.ValueNodeList.bindExpression(ValueNodeList.java:130)
> 	at org.apache.derby.impl.sql.compile.BinaryListOperatorNode.bindExpression(BinaryListOperatorNode.java:161)
> 	at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(SelectNode.java:540)
> 	at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(DMLStatementNode.java:249)
> 	at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(DMLStatementNode.java:162)
> 	at org.apache.derby.impl.sql.compile.CursorNode.bind(CursorNode.java:253)
> 	at org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:345)
> 	at org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:119)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira