/*
 * LargeGeomSpeed.java
 *
 * (C) 2005 Markus Schaber, schabios@logi-track.com
 *
 * $Id: LargeGeomSpeed.java,v 1.5 2005/02/08 14:53:29 mschaber Exp $
 */

package test;

import org.postgis.Geometry;
import org.postgis.PGgeometry;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class LargeGeomSpeed {

    public static void main(String[] args) throws Exception {
        // The databases we connect
        String[] databases = {
            "lwgeom", //PostGIS 1.0.0CVS
            "hwgeom09", //PostGIS 0.9.1
            "logigis", //PostGIS 0.8.1
        };
        String dbprefix = "jdbc:postgresql_postGIS://localhost:5432/";
        String dbuser = "psql";
        String dbpass = "guess";
        // initialize the driver
        Class.forName("org.postgis.DriverWrapper");

        for (int i = 0; i < databases.length; i++) {
            System.out.print("Creating JDBC connection to " + databases[i] + "...");
            Connection conn = DriverManager.getConnection(dbprefix + databases[i], dbuser, dbpass);
            conn.setReadOnly(true);
            conn.setAutoCommit(true);
            Statement statement = conn.createStatement();
            statement.setFetchSize(5);
            System.out.println(" fetching...");
            for (int round = 0; round < 4; round++) {
                int count = 0;
                long start = System.currentTimeMillis();
                ResultSet rs = statement.executeQuery("SELECT geom FROM adminbndy1;");
                while (rs.next()) {
                    Geometry temp = ((PGgeometry) rs.getObject(1)).getGeometry();
                    if (temp == null) {
                        System.out.println("null geometry");
                    }
                    count++;
                }
                long end = System.currentTimeMillis();
                System.out.println("Result " + round + ": " + count + " rows fetched in "
                        + ((end - start) / 1000.0) + "s.");
                rs.close();
                System.gc();
                Thread.sleep(1000);
                System.gc();
            }
            statement.close();
            conn.close();
        }
    }
}