db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3880) NPE on a query with having clause involving a join
Date Mon, 20 Oct 2008 16:39:44 GMT

    [ https://issues.apache.org/jira/browse/DERBY-3880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12641062#action_12641062
] 

Kathey Marsden commented on DERBY-3880:
---------------------------------------

Thanks Mamta for looking at this. I think the reason for the difference is that sourceRow
has only 3 columns yet projectMapping has values  [3, -1, 5, -1, -1, 2, -1], the third entry
(5) does not refer to an actual column so when we get to 
	result.setColumn(index + 1, sourceRow.getColumn(projectMapping[index]));

We call ValueRow.getColumn()  which is defined as:
	public DataValueDescriptor	getColumn (int position) {
		if (position <= column.length)
			return column[position-1];
		else
			return (DataValueDescriptor)null;
	}

and return null because position is greater than column.length.

I found that projectMapping is originally generated in projectRestrictNode.generateMinion()
when we call 
	int[] mapArray = resultColumns.mapSourceColumns();

ResultColumnList. mapSourceColumns for the column in question  executes this code:
else if (resultColumn.getExpression() instanceof ColumnReference)
			{
				ColumnReference cr = (ColumnReference) resultColumn.getExpression();
                                .....
					// Virtual column #s are 1-based
					mapArray[index] = cr.getSource().getVirtualColumnId();
			}


Where the resultColumn looks like:
	ResultColumn  (id=72)	
	exposedName	"##aggregate expression"	
	virtualColumnId	3	
	expression	ColumnReference  (id=74)	
		columnName	"I2"	
		source	ResultColumn  (id=76)	
			exposedName	"I2"	
			virtualColumnId	5	
			expression	VirtualColumnNode  (id=94)	
				sourceColumn	ResultColumn  (id=100)	
					exposedName	"I2"	
					virtualColumnId	2	
					expression	VirtualColumnNode  (id=102)	
						sourceColumn	ResultColumn  (id=214)	
							expression	VirtualColumnNode  (id=227)	
							virtualColumnId	2	
								sourceColumn	ResultColumn  (id=239)	
									exposedName	"I2"	
									expression	BaseColumnNode  (id=251)	
										columnName	"I2"	
										virtualColumnId	2	


The virtualColumnId of the ColumnReference under the ##aggregate expression is *5*, yet there
are more deeply nested VirtualColumnNode's with a virtualColumnId of 2 which I think is correct.
 I think I need to better understand mapSourceColumns()  and the meaning of this deeply nested
ResultColumn structure to understand what's right here.

Kathey




> NPE on a query with having clause involving a join
> --------------------------------------------------
>
>                 Key: DERBY-3880
>                 URL: https://issues.apache.org/jira/browse/DERBY-3880
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.4.2.0
>         Environment: Windows 2003 Server 
>            Reporter: Venkateswaran Iyer
>            Priority: Minor
>         Attachments: querytree_fail.txt, querytree_works.txt
>
>
> A simple query involving a join and having clause causes a NPE. Any subsequent executions
cause severe errors. It almost looks like the underlying connection was closed out.
> ====
> C:\apps\derby\db-derby-10.4.2.0-bin\db-derby-10.4.2.0-bin\bin>ij
> ij version 10.4
> ij> connect 'jdbc:derby://speed:1527/ClassicModels;user=sa;password=sa
> ';
> ij> create table t1(i int, c varchar(20));
> 0 rows inserted/updated/deleted
> ij> create table t2(i int, c2 varchar(20), i2 int);
> 0 rows inserted/updated/deleted
> ij> insert into t1 values(1, 'abc');
> 1 row inserted/updated/deleted
> ij> insert into t1 values(2, 'abc');
> 1 row inserted/updated/deleted
> ij> insert into t2 values(1, 'xyz', 10);
> 1 row inserted/updated/deleted
> ij> insert into t2 values(1, 'aaa', 20);
> 1 row inserted/updated/deleted
> ij> insert into t2 values(2, 'xxx', 30);
> 1 row inserted/updated/deleted
> ij> select t1.i, avg(t2.i2) from t1 inner join t2 on (t1.i = t2.i) group by t1.i
>  having avg(t2.i2) > 0;
> ERROR XJ001: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ001, SQLERRMC: java.lang.
> NullPointerException¶¶XJ001.U

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message