db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "A B (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3094) Grouping of expressions causes NullPointerException
Date Mon, 25 Feb 2008 17:44:51 GMT

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

A B commented on DERBY-3094:
----------------------------

> Here's yet another variant that's hard to explain: the first statement
> works, the second is refused with error 42Y30:
> 
> select (a+b)+c, count(*) from t group by c, a+b;
> select a+(b+c), count(*) from t group by c, a+b; 

The tree for "(a+b)+c" contains the subtree "a+b" as the left-hand side of the top-most binary
operator and "c" as the right-hand side.  Since each of those matches a stand-alone expression
in the GROUP BY, the equivalence checking for GROUP BY processing passes.  But the tree for
"a+(b+c)" has "a" on one side and "b+c" on the other, neither of which shows up as a stand-alone
GROUP BY expression, so the second query is rejected.  I agree it's a tad non-inuititive,
but it appears to be "explainable", for what that's worth...

> Here's one other idea that might work: 

[ snip ]

> Does this algorithm seem like it would be worth investigating?

Yes, I definitely think this is worth investigating.  From what I can tell it solves the problem
of sub-expression substitution, and it seems a tad safer than pulling unneeded columns into
the GROUP BY expression.

There's a CollectNodesVisitor class which finds all instances of a specified class within
the subtree beneath a given ValueNode, so you might be able to use that to count the number
of ColumnReferences in the expression.  Though ColumnReferences tend to appear in lots of
places, so it'll be interesting to see if a simple CollectNodesVisitor is good enough--or
will it end up counting ColumnReferences that shouldn't be counted...?

In any event, +1 to further pursuit of the suggested approach.

> 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
>         Attachments: d3094_followup.htm, modifyVisitorDoesntWork.diff, notes.html, twoPass.diff,
TwoPassForHavingClauseAlso.diff, TwoPassVisitor.diff, TwoPassVisitorWithCommentsAndTests.diff
>
>
> 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.


Mime
View raw message