[ 
https://issues.apache.org/jira/browse/DERBY-2970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12516037
 ] 

Bryan Pendleton commented on DERBY-2970:
----------------------------------------

Thanks for the bug report! I'm having a little trouble boiling this down to a 
pure-SQL Derby repro. Here's what I tried:

ij> create table customer (id int, name varchar(80));
0 rows inserted/updated/deleted
ij> create table keys (id int, customerid int, licensekey varchar(256));
0 rows inserted/updated/deleted
ij> select customer0.id as id_0, keys1.id as id_1 from customer customer0 inner 
join keys keys1 on customer0.id = keys1.customerid where keys1.licensekey = 
'abc';
ID_0       |ID_1
-----------------------

0 rows selected
ij> select customer0.id as id_0, keys1.id as id_1 from app.customer customer0 
inner join app.keys keys1 on customer0.id = keys1.customerid where 
keys1.licensekey = 'abc';
ID_0       |ID_1
-----------------------

0 rows selected

With respect to table and column aliases, I'm not sure I see anything different 
between my example and yours, but mine doesn't trigger the 42X04 error.

Can you construct a variation of my SQL which demonstrates the problem?


> Hibernate Joins fail if you use Derby (aliases in select clause trump aliases 
> in from and where clauses)
> --------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2970
>                 URL: https://issues.apache.org/jira/browse/DERBY-2970
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.3.1.2
>         Environment: Hibernate v3, Derby 10.3.1.2, Sun's Java 1.6.0_01
>            Reporter: Charlie Hubbard
>
> Using hibernate to do a simple join causes an unknown field exception from 
> derby's libraries.  Hibernate uses a mixture of aliases to specify the select 
> clause which is different from the aliases used in the from and where 
> clauses.  While strange this is perfectly legal to do.  My tables have a very 
> simple structure.  Customer has many licenses and they are linked by the 
> shared customer ID field.  So it looks something like:
> Customers:
> ---------------
> id : identity
> name : varchar(80)
> ...
> LicenseKeys:
> -----------------
> id : identity
> CustomerID : int
> LicenseKey : varchar(256)
> ...
> Here is the HQL I tried to execute against the DB:
> select c, key from Customer c join c.keys as key where key.expirationDate < 
> current_timestamp() or key.maintenanceDate < current_timestamp()
> Here is the SQL generated by hibernate:
> Hibernate: 
>     select
>         customer0_.id as id0_0_,
>         keys1_.id as id1_1_,
>         customer0_.address as address0_0_,
>         customer0_.city as city0_0_,
>         customer0_.company as company0_0_,
>         customer0_.email as email0_0_,
>         customer0_.name as name0_0_,
>         customer0_.state as state0_0_,
>         customer0_.zipcode as zipcode0_0_,
>         keys1_.creationDate as creation2_1_1_,
>         keys1_.CustomerID as CustomerID1_1_,
>         keys1_.expirationDate as expirati3_1_1_,
>         keys1_.licenseKey as licenseKey1_1_,
>         keys1_.maintenanceDate as maintena5_1_1_,
>         keys1_.serialNumber as serialNu6_1_1_,
>         keys1_.trial as trial1_1_ 
>     from
>         APP.Customers customer0_ 
>     inner join
>         APP.LicenseKeys keys1_ 
>             on customer0_.id=keys1_.CustomerID 
>     where
>         keys1_.expirationDate<current timestamp 
>         or keys1_.maintenanceDate<current timestamp
> Here is the error coming out of my log file:
> 2007-07-24 09:48:38,357 [btpool0-4] WARN  
> org.hibernate.util.JDBCExceptionReporter  - SQL Error: 30000, SQLState: 42X04
> 2007-07-24 09:48:38,357 [btpool0-4] ERROR 
> org.hibernate.util.JDBCExceptionReporter  - Column 'CUSTOMER0_.ID' 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 'CUSTOMER0_.ID' is not a column in the target table.
> 2007-07-24 09:48:40,107 [Mail loader] INFO  
> com.emailarchive.demon.MailDemonLoader  - Completed polling cycle in 922 ms.  
> Found 0 messages.
> 2007-07-24 09:48:40,482 [btpool0-4] WARN  
> org.hibernate.util.JDBCExceptionReporter  - SQL Warning: 10000, SQLState: 
> 01J01
> 2007-07-24 09:48:40,482 [btpool0-4] WARN  
> org.hibernate.util.JDBCExceptionReporter  - Database 
> 'webapps/licensingserver/WEB-INF/licensing' not created, connection made to 
> existing database instead.
> 2007-07-24 09:48:40.482::WARN:  EXCEPTION 
> net.sourceforge.stripes.exception.StripesServletException: Unhandled 
> exception caught by the default exception handler.
>       at 
> net.sourceforge.stripes.exception.DefaultExceptionHandler.handle(DefaultExceptionHandler.java:40)
>       at 
> net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:184)
>       at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065)
>       at 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
>       at 
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:185)
>       at 
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>       at 
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:689)
>       at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:391)
>       at 
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:146)
>       at 
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>       at 
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>       at org.mortbay.jetty.Server.handle(Server.java:285)
>       at 
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:457)
>       at 
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:751)
>       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:500)
>       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
>       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
>       at 
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:329)
>       at 
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
> Caused by: org.hibernate.exception.SQLGrammarException: could not execute 
> query
>       at 
> org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
>       at 
> org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
>       at org.hibernate.loader.Loader.doList(Loader.java:2223)
>       at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
>       at org.hibernate.loader.Loader.list(Loader.java:2099)
>       at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
>       at 
> org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
>       at 
> org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
>       at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
>       at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
>       at 
> com.emailarchive.licensing.web.controller.AdministrationActionBean.expired(AdministrationActionBean.java:44)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:445)
>       at 
> net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:157)
>       at 
> net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:107)
>       at 
> net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:154)
>       at 
> net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:73)
>       at 
> net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:443)
>       at 
> net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:241)
>       at 
> net.sourceforge.stripes.controller.DispatcherServlet.doPost(DispatcherServlet.java:154)
>       at 
> net.sourceforge.stripes.controller.DispatcherServlet.doGet(DispatcherServlet.java:61)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>       at 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:491)
>       at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1074)
>       at 
> net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:181)
>       ... 17 more
> Caused by: java.sql.SQLSyntaxErrorException: Column 'CUSTOMER0_.ID' 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 'CUSTOMER0_.ID' is not a column in the target table.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.Util.generateCsSQLException(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.EmbedPreparedStatement.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>       at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at 
> org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
>       at 
> org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
>       at 
> org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
>       at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
>       at org.hibernate.loader.Loader.doQuery(Loader.java:673)
>       at 
> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
>       at org.hibernate.loader.Loader.doList(Loader.java:2220)
>       ... 43 more
> Caused by: java.sql.SQLException: Column 'CUSTOMER0_.ID' 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 
> 'CUSTOMER0_.ID' is not a column in the target table.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
>  Source)
>       ... 63 more
> Caused by: ERROR 42X04: Column 'CUSTOMER0_.ID' 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 
> 'CUSTOMER0_.ID' is not a column in the target table.
>       at org.apache.derby.iapi.error.StandardException.newException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown 
> Source)
>       at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown 
> Source)
>       at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown 
> Source)
>       at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)
>       ... 57 more

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

Reply via email to