package jeql.command.db;
import jeql.api.function.FunctionClass;
import jeql.api.row.RowList;
import jeql.api.table.Table;
import jeql.command.db.driver.JdbcTemplate;
import jeql.command.db.driver.PostgisRowMapper;
import jeql.command.db.driver.RowMapper;
public class PostgisFunction implements FunctionClass
{
/**
* Executes a SQL query against a PostGIS database,
* and returns the results as a table.
*
* The query results are read eagerly (i.e. the
* table which is returned is in-memory)
*
* @param connectString is in the form "host:port/database"
* @param user the username to connect with
* @param password the password to use
* @param sql the SQL string to execute
* @return
* @throws Exception
*/
public static Table query(String connectString, String user, String password,
String sql) throws Exception {
PostGISQuery query = new PostGISQuery();
query.setConnect(connectString);
query.setUser(user);
query.setPassword(password);
return query.execute(sql);
}
}
class PostGISQuery
{
public static final String JDBC_CLASS = "org.postgresql.Driver";
private String connectString;
private String user;
private String password;
public PostGISQuery() {
}
public void setConnect(String connectString) {
this.connectString = connectString;
}
public void setUser(String user) {
this.user = user;
}
public void setPassword(String password) {
this.password = password;
}
public Table execute(String sql) throws Exception {
String url = PostgisReader.URL_PREFIX + connectString;
JdbcTemplate template = new JdbcTemplate(JDBC_CLASS, url, user, password);
RowMapper rowMapper = new PostgisRowMapper();
RowList rl = template.query(sql, rowMapper);
return new Table(rl);
}
/*
private Connection createConnection(String connectString) throws Exception {
String url = URL_PREFIX + connectString;
registerJDBCDriver(JDBC_CLASS, URL_PREFIX);
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
private static void registerJDBCDriver(String driverClassName, String driverURL)
throws InstantiationException, SQLException, ClassNotFoundException, IllegalAccessException
{
Class driverClass = Class.forName(driverClassName);
Driver currDriver = DriverManager.getDriver(driverURL);
if (currDriver != null && currDriver.getClass() == driverClass)
return;
Driver driver = (Driver) driverClass.newInstance();
DriverManager.registerDriver(driver);
}
*/
}