[ https://issues.apache.org/jira/browse/DDLUTILS-227?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12645157#action_12645157 ]
Thomas Dudziak commented on DDLUTILS-227: ----------------------------------------- I don't quite understand the problem here. Could you post a DB model and some sample code to exhibit the problem ? > NullPointerException in ModelBasedResultSetIterator > --------------------------------------------------- > > Key: DDLUTILS-227 > URL: https://issues.apache.org/jira/browse/DDLUTILS-227 > Project: DdlUtils > Issue Type: Bug > Components: Core (No specific database), Core - HSQLDB > Environment: HSQLDB > Reporter: Rijk van Haaften > Assignee: Thomas Dudziak > Fix For: 1.1 > > > The bug is in initFromMetaData(Database) > For subqueries in HSQLDB, tableOfColumn = metaData.getTableName(idx) = > "SYSTEM_SUBQUERY", rather than null or "", so the if-block (see below) is > executed. > That table, of course is not in the model, so table = model.findTable... will > set table to null. > That is correct. But unlike the else-block, tableOfColumn is left unchanged. > This causes the tableName to be wrong, which later on sets the _dynaClass to > be null: _dynaClass = model.getDynaClassFor(tableName); // model does not > contain a "SYSTEM_SUBQUERY"-table > This finally causes a NullPointerException in the implementation of next(): > DynaBean bean = _dynaClass.newInstance(); > The solution is simple: Update the tableOfColumn not only in the else-block, > but always (only the last few lines changed): > if ((tableOfColumn != null) && (tableOfColumn.length() > 0)) > { > _log.debug("Table from metadata: " + tableOfColumn); > // jConnect might return a table name enclosed in quotes > if (tableOfColumn.startsWith("\"") && > tableOfColumn.endsWith("\"") && (tableOfColumn.length() > 1)) > { > tableOfColumn = tableOfColumn.substring(1, > tableOfColumn.length() - 1); > } > // the JDBC driver gave us enough meta data info > table = model.findTable(tableOfColumn, _caseSensitive); > } > else > { > _log.debug("Try query hints"); > // not enough info in the meta data of the result set, lets > try the > // user-supplied query hints > table = (Table)_preparedQueryHints.get(_caseSensitive > ? columnName : columnName.toLowerCase()); > } > tableOfColumn = (table == null ? null : table.getName()); // > Moved out of the else-block -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.