You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by "Andy Malakov (JIRA)" <ji...@apache.org> on 2005/12/16 17:31:48 UTC
[jira] Created: (OJB-83) NullPointerException in SqlQueryStatement OJB 1.0.3
NullPointerException in SqlQueryStatement OJB 1.0.3
---------------------------------------------------
Key: OJB-83
URL: http://issues.apache.org/jira/browse/OJB-83
Project: OJB
Type: Bug
Components: PB-API
Versions: 1.0.3, 1.0.4
Environment: Windows, Oracle 9.2
Reporter: Andy Malakov
Hello All,
When org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.TableAlias is used for abstract class (has extent classes declared, but not mapped to any table itself) it may initialized with tableName=null. This situation later produces a problem, because tableName is being used for TableAlias identity (equals/hashcode):
java.lang.NullPointerException
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode(SqlQueryStatement.java:1977)
at java.util.HashMap.hash(HashMap.java:261)
at java.util.HashMap.put(HashMap.java:379)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQueryStatement.java:1686)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryStatement.java:132)
at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelectStatement.java:64)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(SqlQueryStatement.java:976)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(SqlQueryStatement.java:957)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(SqlQueryStatement.java:942)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(SqlQueryStatement.java:770)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(SqlQueryStatement.java:849)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(SqlQueryStatement.java:922)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(SqlQueryStatement.java:671)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(SqlQueryStatement.java:592)
at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(SqlQueryStatement.java:544)
at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(SqlSelectStatement.java:243)
at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSelectStatement(SqlGeneratorDefaultImpl.java:151)
at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:305)
at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:74)
at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:185)
at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:58)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:1918)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1493)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:112)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:251)
at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:271)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1367)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
Additional information: Unfortunately problem remains in OJB_1_0_RELEASE.
Please look at SqlQueryStatement [line 128]: m_root =
createTableAlias(m_baseCld, hints=null, path="");
When above line is called for abstract class descriptor (the one that has
extent, but not mapped to a table itself) empty path causes variable
lookForExtents=false, which in turn will result in
TableAlias.tableName=null.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org
[jira] Commented: (OJB-83) NullPointerException in SqlQueryStatement OJB 1.0.3
Posted by "Jakob Braeuchi (JIRA)" <ji...@apache.org>.
[ http://issues.apache.org/jira/browse/OJB-83?page=comments#action_12360625 ]
Jakob Braeuchi commented on OJB-83:
-----------------------------------
reproduced the bug using andy's testcase.
the 'null' table is a problem in the subquery, but these are not extent aware
known-bugs:
Subqueries are not extent aware. see QueryTest#testSubQueryAgainstExtents
> NullPointerException in SqlQueryStatement OJB 1.0.3
> ---------------------------------------------------
>
> Key: OJB-83
> URL: http://issues.apache.org/jira/browse/OJB-83
> Project: OJB
> Type: Bug
> Components: PB-API
> Versions: 1.0.3, 1.0.4
> Environment: Windows, Oracle 9.2
> Reporter: Andy Malakov
> Attachments: testcase.zip
>
> Hello All,
> When org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.TableAlias is used for abstract class (has extent classes declared, but not mapped to any table itself) it may initialized with tableName=null. This situation later produces a problem, because tableName is being used for TableAlias identity (equals/hashcode):
> java.lang.NullPointerException
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode(SqlQueryStatement.java:1977)
> at java.util.HashMap.hash(HashMap.java:261)
> at java.util.HashMap.put(HashMap.java:379)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQueryStatement.java:1686)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryStatement.java:132)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelectStatement.java:64)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(SqlQueryStatement.java:976)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(SqlQueryStatement.java:957)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(SqlQueryStatement.java:942)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(SqlQueryStatement.java:770)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(SqlQueryStatement.java:849)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(SqlQueryStatement.java:922)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(SqlQueryStatement.java:671)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(SqlQueryStatement.java:592)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(SqlQueryStatement.java:544)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(SqlSelectStatement.java:243)
> at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSelectStatement(SqlGeneratorDefaultImpl.java:151)
> at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:305)
> at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:74)
> at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:185)
> at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:58)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:1918)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1493)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:112)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:251)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:271)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1367)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> Additional information: Unfortunately problem remains in OJB_1_0_RELEASE.
> Please look at SqlQueryStatement [line 128]: m_root =
> createTableAlias(m_baseCld, hints=null, path="");
> When above line is called for abstract class descriptor (the one that has
> extent, but not mapped to a table itself) empty path causes variable
> lookForExtents=false, which in turn will result in
> TableAlias.tableName=null.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org
[jira] Commented: (OJB-83) NullPointerException in SqlQueryStatement OJB 1.0.3
Posted by "Jakob Braeuchi (JIRA)" <ji...@apache.org>.
[ http://issues.apache.org/jira/browse/OJB-83?page=comments#action_12360619 ]
Jakob Braeuchi commented on OJB-83:
-----------------------------------
this problem only occurs when classes are mapped to the same table.
i'm trying to reproduce it using already existing testclasses
> NullPointerException in SqlQueryStatement OJB 1.0.3
> ---------------------------------------------------
>
> Key: OJB-83
> URL: http://issues.apache.org/jira/browse/OJB-83
> Project: OJB
> Type: Bug
> Components: PB-API
> Versions: 1.0.3, 1.0.4
> Environment: Windows, Oracle 9.2
> Reporter: Andy Malakov
> Attachments: testcase.zip
>
> Hello All,
> When org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.TableAlias is used for abstract class (has extent classes declared, but not mapped to any table itself) it may initialized with tableName=null. This situation later produces a problem, because tableName is being used for TableAlias identity (equals/hashcode):
> java.lang.NullPointerException
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode(SqlQueryStatement.java:1977)
> at java.util.HashMap.hash(HashMap.java:261)
> at java.util.HashMap.put(HashMap.java:379)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQueryStatement.java:1686)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryStatement.java:132)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelectStatement.java:64)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(SqlQueryStatement.java:976)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(SqlQueryStatement.java:957)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(SqlQueryStatement.java:942)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(SqlQueryStatement.java:770)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(SqlQueryStatement.java:849)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(SqlQueryStatement.java:922)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(SqlQueryStatement.java:671)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(SqlQueryStatement.java:592)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(SqlQueryStatement.java:544)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(SqlSelectStatement.java:243)
> at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSelectStatement(SqlGeneratorDefaultImpl.java:151)
> at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:305)
> at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:74)
> at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:185)
> at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:58)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:1918)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1493)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:112)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:251)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:271)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1367)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> Additional information: Unfortunately problem remains in OJB_1_0_RELEASE.
> Please look at SqlQueryStatement [line 128]: m_root =
> createTableAlias(m_baseCld, hints=null, path="");
> When above line is called for abstract class descriptor (the one that has
> extent, but not mapped to a table itself) empty path causes variable
> lookForExtents=false, which in turn will result in
> TableAlias.tableName=null.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org
[jira] Updated: (OJB-83) NullPointerException in SqlQueryStatement OJB 1.0.3
Posted by "Andy Malakov (JIRA)" <ji...@apache.org>.
[ http://issues.apache.org/jira/browse/OJB-83?page=all ]
Andy Malakov updated OJB-83:
----------------------------
Attachment: testcase.zip
Added test case attachment:
Please do the following to reproduce:
1. Initialize your schema using OJB-test-tablealiasbug.SQL .
2. Run class test.tablealiasbug.TestTableAliasBug - it is JUnit testcase that also has main().
> NullPointerException in SqlQueryStatement OJB 1.0.3
> ---------------------------------------------------
>
> Key: OJB-83
> URL: http://issues.apache.org/jira/browse/OJB-83
> Project: OJB
> Type: Bug
> Components: PB-API
> Versions: 1.0.3, 1.0.4
> Environment: Windows, Oracle 9.2
> Reporter: Andy Malakov
> Attachments: testcase.zip
>
> Hello All,
> When org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.TableAlias is used for abstract class (has extent classes declared, but not mapped to any table itself) it may initialized with tableName=null. This situation later produces a problem, because tableName is being used for TableAlias identity (equals/hashcode):
> java.lang.NullPointerException
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode(SqlQueryStatement.java:1977)
> at java.util.HashMap.hash(HashMap.java:261)
> at java.util.HashMap.put(HashMap.java:379)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQueryStatement.java:1686)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryStatement.java:132)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelectStatement.java:64)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(SqlQueryStatement.java:976)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(SqlQueryStatement.java:957)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(SqlQueryStatement.java:942)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(SqlQueryStatement.java:770)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(SqlQueryStatement.java:849)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(SqlQueryStatement.java:922)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(SqlQueryStatement.java:671)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(SqlQueryStatement.java:592)
> at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(SqlQueryStatement.java:544)
> at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(SqlSelectStatement.java:243)
> at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSelectStatement(SqlGeneratorDefaultImpl.java:151)
> at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:305)
> at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:74)
> at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:185)
> at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:58)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:1918)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1493)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:112)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:251)
> at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:271)
> at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1367)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:338)
> Additional information: Unfortunately problem remains in OJB_1_0_RELEASE.
> Please look at SqlQueryStatement [line 128]: m_root =
> createTableAlias(m_baseCld, hints=null, path="");
> When above line is called for abstract class descriptor (the one that has
> extent, but not mapped to a table itself) empty path causes variable
> lookForExtents=false, which in turn will result in
> TableAlias.tableName=null.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org