Oleg Alexeyev
unread,Jun 21, 2011, 11:35:22 AM6/21/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to H2 Database
Hi,
It looks like there is a regression on handling COUNT (DISTINCT
(column)) expression in H2 1.3.156.
Here is a sample program:
----------8<----------
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class CountTest
{
public static void main (String[] args) throws Exception
{
Class.forName ("org.h2.Driver");
Connection connection = DriverManager.getConnection ("jdbc:h2:./
test");
Statement init = connection.createStatement ();
init.execute ("CREATE TABLE packages (id BIGINT NOT NULL IDENTITY,
PRIMARY KEY (id))");
init.execute ("CREATE TABLE package_entries (package_id BIGINT NOT
NULL, name VARCHAR_IGNORECASE NOT NULL, PRIMARY KEY (package_id,
name), FOREIGN KEY (package_id) REFERENCES packages (id) ON DELETE
CASCADE)");
init.execute ("INSERT INTO packages (id) VALUES (1)");
init.close ();
PreparedStatement insert = connection.prepareStatement ("INSERT INTO
package_entries (package_id, name) VALUES (1, ?)");
for (int i = 0; i < 10; i++)
{
insert.setString (1, Integer.toString (i));
insert.execute ();
}
insert.close ();
Statement select = connection.createStatement ();
select.execute ("SELECT COUNT(DISTINCT(package_id)) FROM
package_entries");
ResultSet resultSet = select.getResultSet ();
resultSet.next ();
System.out.println (resultSet.getLong (1));
resultSet.close ();
select.close ();
select = connection.createStatement ();
select.execute ("SELECT COUNT(*) FROM (SELECT DISTINCT package_id
FROM package_entries)");
resultSet = select.getResultSet ();
resultSet.next ();
System.out.println (resultSet.getLong (1));
resultSet.close ();
select.close ();
connection.close ();
}
}
----------8<----------
With H2 1.3.155 the output is:
1
1
With 1.3.156 the output is:
10
1