You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by "Thomas Dudziak (JIRA)" <ji...@apache.org> on 2008/11/04 00:56:46 UTC

[jira] Updated: (DDLUTILS-227) NullPointerException in ModelBasedResultSetIterator

     [ https://issues.apache.org/jira/browse/DDLUTILS-227?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thomas Dudziak updated DDLUTILS-227:
------------------------------------

    Fix Version/s: 1.1

> 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.