[ https://issues.apache.org/jira/browse/DERBY-3094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12567336#action_12567336 ]
Bryan Pendleton commented on DERBY-3094: ---------------------------------------- Note that there are *two* ProjectRestrictResultSet instances in the tree: - the inner PRN operates on the bulk table scan, and projects columns "a" and "b" from table "xx" out of the table scan using projection "e1". - then the GroupedAggregateResultSet processes the rows, and computes the COUNT(*) into the 3rd column of the template row - then the outer PRN takes the grouped results and projects columns "a", "(expression)", and "COUNT(*)" out of the grouped result row. At the instant of the crash, the outer PRN is performing that final projection, and it is looking for a row from result set 2. But this is wrong; it ought to be looking for a row from result set 1. In the debugger, I can see that result set 1's current row is correct: it has the right columns, with the right values. I can also see that, *later* in projection method "e3", there is another call to getColumnFromRow() which passes result set number 1. So that seems like additional evidence that the core of the problem is that projection method "e3" generated invalid code which is trying to access result set 2 when it should have been accessing result set 1. Since the column in question is column 2, which is the expression a*(b/100.000000), I'm wondering whether the inner PRN and the outer PRN are somehow accidentally sharing the expression information for this result column expression, when one of them should have renumbered the result set for the expression to point to the different result set. This feels really familiar, like we just worked on some problems with result set number handling and result column expressions recently; I'll spend a bit of time searching JIRA to see if I can refresh that memory. > Grouping of expressions causes NullPointerException > --------------------------------------------------- > > Key: DERBY-3094 > URL: https://issues.apache.org/jira/browse/DERBY-3094 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.3.1.4 > Environment: Windows XP, Eclipse 3.2.2, java 1.5.0.11 > Reporter: Peter Balon > Assignee: Bryan Pendleton > Priority: Critical > > Following steps to reproduce the bug: > create table xx (a double, b double); > insert into xx values (2, 3); > select a, a*(b/100.000000), count(*) from xx group by a, a*(b/100.000000); > Starting run > select a, a*(b/100.000000), count(*) from xx > group by a, a*(b/100.000000) > Run successful > SQL State = 38000 SQL Code = 20000 SQL Message = Bei der Auswertung eines > Ausdrucks wurde die Ausnahme 'java.lang.NullPointerException' ausgelöst. > Exception message = java.sql.SQLException: Bei der Auswertung eines Ausdrucks > wurde die Ausnahme 'java.lang.NullPointerException' ausgelöst. > Work around: > select a, a*(b/100.000000), count(*) from xx group by a, b, a*(b/100.000000) > Stack trace from application: > java.sql.SQLException: Bei der Auswertung eines Ausdrucks wurde die Ausnahme > 'java.lang.NullPointerException' ausgelöst. > at > org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) > at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) > at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) > at > org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown > Source) > at > org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown > Source) > at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown > Source) > at > org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown > Source) > at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source) > at > de.arcor.billy.report.views.designer.ReportViewerView.setInput(ReportViewerView.java:255) > at > de.arcor.billy.report.views.designer.ReportViewerView.createPartControl(ReportViewerView.java:113) > at > org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332) > at > org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197) > at > org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566) > at org.eclipse.ui.internal.Perspective.showView(Perspective.java:1675) > at > org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:987) > at > org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:968) > at org.eclipse.ui.internal.WorkbenchPage$13.run(WorkbenchPage.java:3514) > at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67) > at > org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3511) > at > de.arcor.billy.report.data.ReportDataAdvisor$2.perspectiveChanged(ReportDataAdvisor.java:268) > at > de.arcor.billy.system.actions.AbstractOpenPerspectiveActionDelegate$1.run(AbstractOpenPerspectiveActionDelegate.java:66) > at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) > at > org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123) > at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3325) > at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971) > at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1930) > at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1894) > at > org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422) > at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) > at de.arcor.billy.product.Billy.run(Billy.java:15) > at > org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) > at org.eclipse.core.launcher.Main.basicRun(Main.java:280) > at org.eclipse.core.launcher.Main.run(Main.java:977) > at org.eclipse.core.launcher.Main.main(Main.java:952) > Caused by: java.sql.SQLException: Java-Ausnahme: ': > java.lang.NullPointerException'. > at > org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) > at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) > at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source) > at > org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown > Source) > ... 42 more > Caused by: java.lang.NullPointerException > at > org.apache.derby.exe.ac9b638174x0115x5f93x1332x0000046fd8a01b.e10(Unknown > Source) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown > Source) > at > org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.doProjection(Unknown > Source) > at > org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRowFromSource(Unknown > Source) > at > org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRowCore(Unknown > Source) > at > org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown > Source) > ... 37 more -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.