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 2007/04/20 07:08:15 UTC
[jira] Resolved: (DDLUTILS-170)
org.apache.ddlutils.platform.PlatformImplBase Problem
[ https://issues.apache.org/jira/browse/DDLUTILS-170?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Dudziak resolved DDLUTILS-170.
-------------------------------------
Resolution: Fixed
> org.apache.ddlutils.platform.PlatformImplBase Problem
> -----------------------------------------------------
>
> Key: DDLUTILS-170
> URL: https://issues.apache.org/jira/browse/DDLUTILS-170
> Project: DdlUtils
> Issue Type: Bug
> Components: Core (No specific database)
> Reporter: Rico Setiawan
> Assigned To: Thomas Dudziak
> Fix For: 1.0
>
>
> Hi I found a bug at org.apache.ddlutils.platform.PlatformImplBase, when you want to fecth database per-n data then you will use fecth(...,start,end). But it seems the method doesn't work properly.
> org.apache.ddlutils.platform.PlatformImplBase at line 990 :
> public List fetch(Database model, String sql, Table[] queryHints, int start, int end) throws DatabaseOperationException
> {
> Connection connection = borrowConnection();
> Statement statement = null;
> ResultSet resultSet = null;
> List result = new ArrayList();
> try
> {
> statement = connection.createStatement();
> resultSet = statement.executeQuery(sql);
> int rowIdx = 0;
> for (Iterator it = createResultSetIterator(model, resultSet, queryHints); ((end < 0) || (rowIdx <= end)) && it.hasNext(); rowIdx++)
> {
> if (rowIdx >= start)
> {
> result.add(it.next());
> }
> }
> }
> catch (SQLException ex)
> {
> throw new DatabaseOperationException("Error while fetching data from the database", ex);
> }
> finally
> {
> // the iterator should return the connection automatically
> // so this is usually not necessary (but just in case)
> closeStatement(statement);
> returnConnection(connection);
> }
> return result;
> }
> Take a look line 1008, the pointer (Iterator it) never come forward if rowIdx >=start..Indeed at the real case its really possible the start point is not came from 0..
> For example start=10 and end=100
> In current code, the pointer will always start from 0 since nobody move that pointer..
> My fixed code :
> if (rowIdx >= start)
> {
> result.add(it.next());
> }
> else
> it.next();
> In My fixed code, the pointer will start from 10 since I added it.next();
>
> Regards,
> Rico Setiawan
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.