[ 
http://issues.apache.org/jira/browse/DERBY-756?page=comments#action_12363503 ] 

Satheesh Bandaram commented on DERBY-756:
-----------------------------------------

Thanks for your patch, Manish... I have submitted your patch. Please RESOLVE 
this bug and after confirming CLOSE the fix, CLOSE it. Let me know if you need 
any help testing or closing the issue.

Sending        
java\engine\org\apache\derby\impl\sql\execute\DistinctScalarAggregateResultSet.java
Transmitting file data .
Committed revision 370978.


> OutOfMemory Error on continous execution of select statement using COUNT() 
> and DISTINCT on same connection
> ----------------------------------------------------------------------------------------------------------
>
>          Key: DERBY-756
>          URL: http://issues.apache.org/jira/browse/DERBY-756
>      Project: Derby
>         Type: Bug
>   Components: Demos/Scripts, JDBC, Network Client, Network Server, SQL
>     Versions: 10.0.2.1, 10.1.2.1
>  Environment: Windows XP, Java 1.5.0_05, Derby network server 10.0.2.1, 
> 10.1.2.1, Derby heapsize 128m, IBM Universal JDBC driver
>     Reporter: Bill Chen
>     Assignee: Manish Khettry
>     Priority: Critical
>  Attachments: mem_leak.diff
>
> The OutOfMemory is thrown when I continously execute a sql statement on an 
> openned JDBC connection. A PreparedStatement and ResultSet is created on the 
> connection everytime and close after each execution. I suspect that the bug 
> is related to function COUNT() with keyword DISTINCT. For example, "select 
> count(distinct ID) from TEST where FLAG <> 2". It will be fine if DISTINCT is 
> not used, or select count(*) is used.
> The exception like "Exception in thread "DRDAConnThread_2" 
> java.lang.OutOfMemoryError: Java heap space" could be thrown on Derby side, 
> or sometimes on client side.
> Please find the test code and schema I used for testing:
> create table:
> CREATE TABLE Test
> (
>     ID BIGINT NOT NULL,
>     NAME VARCHAR(512) NOT NULL,
>     FLAG int,
>       CONSTRAINT PK_ID PRIMARY KEY (ID)
> );
> insert data:
> insert into TEST values (0, 'name0', 0);
> insert into TEST values (1, 'name1', 1);
> insert into TEST values (2, 'name2', 2);
> Java client:
> import java.sql.Connection;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.DriverManager;
> import java.sql.SQLException;
> public class DerbyTest
> {
>     static public void main(String args[]) throws Exception
>     {
>         Class.forName("com.ibm.db2.jcc.DB2Driver");
>         Connection conn = null;
>         try
>         {
>             conn = 
> DriverManager.getConnection("jdbc:derby:net://localhost:1527/testDB", 
> "admin", "admin");
>             for (int i = 0; i < 10000000; i++)
>             {
>                 System.out.println("Query "+i);
>                 String sql = "select count(distinct ID) from TEST where FLAG 
> <> 2";
>                 PreparedStatement pStmt = null;
>                 ResultSet rs = null;
>                 try
>                 {
>                     pStmt = conn.prepareStatement(sql);
>                     rs = pStmt.executeQuery();
>                     if (rs.next())
>                     {
>                         rs.getInt(1);
>                     }
>                 }
>                 catch (SQLException e)
>                 {
>                     e.printStackTrace();
>                 }
>                 finally
>                 {
>                     if (rs != null)
>                         rs.close();
>                     if (pStmt != null)
>                         pStmt.close();
>                 }
>             }
>         }
>         finally
>         {
>             if (conn != null)
>                 conn.close();
>         }
>     }
> }

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

Reply via email to