[Schmitzm-commits] r1941 - in trunk: schmitzm-adresses/src/main/java/de/schmitzm/adresses schmitzm-db/src/main/java/de/schmitzm/postgres schmitzm-gt/src/main/java/de/schmitzm/geotools/io
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Wed Apr 11 14:31:58 CEST 2012
Author: alfonx
Date: 2012-04-11 14:31:57 +0200 (Wed, 11 Apr 2012)
New Revision: 1941
Modified:
trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
Log:
Better support for PostGIS Layers in AtlasStyler 1.9
Modified: trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
===================================================================
--- trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java 2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java 2012-04-11 12:31:57 UTC (rev 1941)
@@ -561,6 +561,7 @@
static public String saeubereStrassenname(String orginal) {
String strasse = LangUtil.removeTags(orginal);
+ strasse = strasse.replaceAll("\\+", " ");
strasse = strasse.replaceAll("\\s\\s+", " ");
strasse = strasse.replaceAll("(\\d)\\s", "$1");
strasse = strasse.replaceAll("\\s+-\\s+", "-");
Modified: trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java 2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java 2012-04-11 12:31:57 UTC (rev 1941)
@@ -14,19 +14,21 @@
import de.schmitzm.lang.LangUtil;
/**
- * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection} sein. In Hibernate kann über #doWork eine
- * {@link Connection} erhalten werden.
+ * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection}
+ * sein. In Hibernate kann über #doWork eine {@link Connection} erhalten werden.
*/
public class PGUtil {
static final Logger log = Logger.getLogger(PGUtil.class);
/**
- * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden können.<br/>
+ * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden
+ * können.<br/>
*
* @see http://www.postgresql.org/docs/9.1/static/sql-grant.html
*/
public enum Privileges {
- SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES("ALL PRIVILEGES");
+ SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES(
+ "ALL PRIVILEGES");
String sql;
@@ -55,11 +57,12 @@
* List der zuzuordnenden Privilegien
* @throws SQLException
*/
- public static void grantPrivilegesOnTable(Connection c, String targetRole, String tablename,
- Privileges... privileges) throws SQLException {
+ public static void grantPrivilegesOnTable(Connection c, String targetRole,
+ String tablename, Privileges... privileges) throws SQLException {
// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
- String sql = "GRANT " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename + " TO "
- + targetRole;
+ String sql = "GRANT "
+ + LangUtil.stringConcatWithSep(",", (Object[]) privileges)
+ + " ON " + tablename + " TO " + targetRole;
c.createStatement().executeUpdate(sql);
}
@@ -72,11 +75,12 @@
* List der zuzuordnenden Privilegien
* @throws SQLException
*/
- public static void revokePrivilegesOnTable(Connection c, String tablename, String targetRole,
- Privileges... privileges) throws SQLException {
+ public static void revokePrivilegesOnTable(Connection c, String tablename,
+ String targetRole, Privileges... privileges) throws SQLException {
// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
- String sql = "REVOKE " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename
- + " FROM " + targetRole;
+ String sql = "REVOKE "
+ + LangUtil.stringConcatWithSep(",", (Object[]) privileges)
+ + " ON " + tablename + " FROM " + targetRole;
c.createStatement().executeUpdate(sql);
}
@@ -88,11 +92,13 @@
* @param inhRoles
* Rollen in denen die neue Rolle Mitglied ist
*/
- public static void createRole(Connection c, String rolename, String... inhRoles) throws SQLException {
+ public static void createRole(Connection c, String rolename,
+ String... inhRoles) throws SQLException {
String sql = "CREATE ROLE " + rolename;
c.createStatement().executeUpdate(sql);
for (String inhRole : inhRoles)
- c.createStatement().executeUpdate("GRANT " + inhRole + " TO " + rolename);
+ c.createStatement().executeUpdate(
+ "GRANT " + inhRole + " TO " + rolename);
}
/**
@@ -103,39 +109,96 @@
* @param inhRoles
* Rollen in denen die neue Rolle Mitglied ist
*/
- public static void createRoleIfNotExists(Connection c, String rolename, String... inhRoles) throws SQLException {
+ public static void createRoleIfNotExists(Connection c, String rolename,
+ String... inhRoles) throws SQLException {
if (existsRole(c, rolename))
return;
createRole(c, rolename, inhRoles);
}
+ //
+ // /**
+ // * Querys the <code>geometry_columns</code> table. It is part of every
+ // POSTGIS installation and must/should describe
+ // * the geometry columns and tables.
+ // *
+ // * @return Liste von String[], wobei jeder String[] ein Paar aus Schema
+ // und Tabelle
+ // *
+ // */
+ // static public List<String[]>
+ // getTabelsDescribedInGeometryColumnsTable(Statement s) {
+ // String[] columns = new String[0];
+ // try {
+ // ResultSet rs =
+ // s.executeQuery("SELECT distinct f_table_name FROM geometry_columns;");
+ // try {
+ //
+ // while (rs.next()) {
+ // columns = LangUtil.extendArray(columns, rs.getString(1));
+ // }
+ // } finally {
+ // rs.close();
+ // }
+ // } catch (SQLException e) {
+ // log.error(e, e);
+ // }
+ //
+ // return columns;
+ // }
+
/**
- * Querys the <code>geometry_columns</code> table. It is part of every POSTGIS installation and must/should describe
- * the geometry columns and tables.
+ * Liefert ein {@link PGPostGisMetadata} Objekt für die angefragte
+ * Geometry-Spalte in der angegebenen Tabelle.
*
- * @deprecated
+ * @param tablename
+ * (auch als Schema.Tablename erlaubt)
+ *
+ * @see #getPostGisMetadata(Connection, String)
*/
- static public String[] getColumnsDescribedInGeometryColumnsTable(Statement s) {
- String[] columns = new String[0];
+ public static PGPostGisMetadata getPostGisMetadata(Connection c,
+ String tablename, String geoCol) throws SQLException {
+
+ String schema = "public";
+ if (tablename.contains(".")) {
+ final String[] split = tablename.split("\\.");
+ schema = split[0];
+ tablename = split[1];
+ }
+
+ String sql = "SELECT coord_dimension, srid, type FROM geometry_columns where f_table_schema=? and f_table_name=? and f_geometry_column=?";
+ ResultSet rs = null;
+ PreparedStatement s = c.prepareStatement(sql);
+ s.setString(1, schema);
+ s.setString(2, tablename);
+ s.setString(3, geoCol);
+
try {
- ResultSet rs = s.executeQuery("SELECT f_table_name FROM geometry_columns;");
- try {
-
- while (rs.next()) {
- columns = LangUtil.extendArray(columns, rs.getString(1));
- }
- } finally {
+ rs = s.executeQuery();
+ if (rs.next()) {
+ PGPostGisMetadata metadata = new PGPostGisMetadata(schema,
+ tablename, geoCol, rs.getInt(1), rs.getInt(2),
+ rs.getString(3));
+ return metadata;
+ } else
+ return null;
+ } finally {
+ if (rs != null)
rs.close();
- }
- } catch (SQLException e) {
- log.error(e, e);
}
-
- return columns;
}
- public static PGPostGisMetadata getPostGisMetadata(Connection c, String tablename, String geoCol)
- throws SQLException {
+ /**
+ * Liefert ein {@link PGPostGisMetadata} Objekt für die erste
+ * Geometry-Spalte in der angegebenen Tabelle.
+ *
+ * @param tablename
+ * (auch als Schema.Tablename erlaubt)
+ *
+ * @see #getPostGisMetadata(Connection, String, String)
+ */
+ public static PGPostGisMetadata getPostGisMetadata(Connection c,
+ String tablename) throws SQLException {
String schema = "public";
if (tablename.contains(".")) {
@@ -144,15 +207,17 @@
tablename = split[1];
}
- String sql = "SELECT coord_dimension, srid, type FROM geometry_columns where f_table_catalog='' and f_table_name='"
- + tablename + "' and f_geometry_column='" + geoCol + "'";
+ String sql = "SELECT coord_dimension, srid, type, f_geometry_column FROM geometry_columns where f_table_schema=? and f_table_name=? limit 1";
ResultSet rs = null;
- Statement s = c.createStatement();
+ PreparedStatement s = c.prepareStatement(sql);
+ s.setString(1, schema);
+ s.setString(2, tablename);
try {
- rs = s.executeQuery(sql);
+ rs = s.executeQuery();
if (rs.next()) {
- PGPostGisMetadata metadata = new PGPostGisMetadata(schema, tablename, geoCol, rs.getInt(1),
- rs.getInt(2), rs.getString(3));
+ PGPostGisMetadata metadata = new PGPostGisMetadata(schema,
+ tablename, rs.getString(4), rs.getInt(1), rs.getInt(2),
+ rs.getString(3));
return metadata;
} else
return null;
@@ -175,8 +240,8 @@
* @Deprecated tut es noch nicht
*
*/
- public static void createOrUpdateGeometrysColumnsEntry(Connection c, String tableName, String geoColumnName,
- int srid, String type) {
+ public static void createOrUpdateGeometrysColumnsEntry(Connection c,
+ String tableName, String geoColumnName, int srid, String type) {
String schema = "public";
if (tableName.contains(".")) {
@@ -191,19 +256,15 @@
+ tableName
+ "', '"
+ geoColumnName
- + "', 2, "
- + srid
- + ",'"
- + type.toUpperCase()
- + "' );";
+ + "', 2, " + srid + ",'" + type.toUpperCase() + "' );";
}
/**
* @param binding
* Eine "einfache" Javaklasse, die in PG abgebildet werden soll.
- * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück, z.b. "double precision" für
- * <code>Double.class</code>
+ * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück,
+ * z.b. "double precision" für <code>Double.class</code>
*/
public static String getColTypeName(Class<?> binding) {
@@ -217,7 +278,8 @@
return "bigint";
}
- throw new RuntimeException("DB Type mapping for " + binding + " not yet implemented.");
+ throw new RuntimeException("DB Type mapping for " + binding
+ + " not yet implemented.");
}
/**
@@ -225,19 +287,24 @@
*
* @return <code>true</code> wenn das Schema neu angelegt wurde.
*/
- public static boolean createSchemaIfNotExists(Connection c, String schemaname) throws SQLException {
+ public static boolean createSchemaIfNotExists(Connection c,
+ String schemaname) throws SQLException {
if (!existsSchema(c, schemaname)) {
- c.createStatement().execute("create schema " + schemaname.toLowerCase());
+ c.createStatement().execute(
+ "create schema " + schemaname.toLowerCase());
return true;
}
return false;
}
/**
- * Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG Datenbank existiert.
+ * Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG
+ * Datenbank existiert.
*/
- public static boolean existsSchema(Connection c, String schemaname) throws SQLException {
- String sql = "select 1 from pg_catalog.pg_namespace where nspname = '" + schemaname.toLowerCase() + "'";
+ public static boolean existsSchema(Connection c, String schemaname)
+ throws SQLException {
+ String sql = "select 1 from pg_catalog.pg_namespace where nspname = '"
+ + schemaname.toLowerCase() + "'";
ResultSet rs = c.createStatement().executeQuery(sql);
try {
return rs.next();
@@ -248,10 +315,12 @@
}
/**
- * Liefert eine Liste der Rollen in denen der Übergebenen USER (Login role) ist. <br/>
+ * Liefert eine Liste der Rollen in denen der Übergebenen USER (Login role)
+ * ist. <br/>
* Tested with PG 8.4
*/
- public static List<String> listRolesForUser(Connection c, String username) throws SQLException {
+ public static List<String> listRolesForUser(Connection c, String username)
+ throws SQLException {
List<String> roles = new ArrayList<String>();
String sql = "select rolname from pg_user join pg_auth_members on (pg_user.usesysid=pg_auth_members.member) join pg_roles on (pg_roles.oid=pg_auth_members.roleid) where pg_user.usename='"
+ username.toLowerCase() + "'";
@@ -273,7 +342,8 @@
*/
public static List<String> listUsers(Connection c) throws SQLException {
List<String> roles = new ArrayList<String>();
- ResultSet rs = c.createStatement().executeQuery("select * from pg_user");
+ ResultSet rs = c.createStatement()
+ .executeQuery("select * from pg_user");
try {
while (rs.next()) {
roles.add(rs.getString(1));
@@ -285,17 +355,19 @@
}
/**
- * Liste aller Tabellennamen in diesem Schema, ohne die Schemaangabe im Namen. (Also 'anreden' und nicht
- * 'public.anreden') <br/>
+ * Liste aller Tabellennamen in diesem Schema, ohne die Schemaangabe im
+ * Namen. (Also 'anreden' und nicht 'public.anreden') <br/>
* Tested with PG 8.4
*
* @param schemaname
* if <code>null</code>, <code>public</code> is used.
*/
- public static List<String> listTablesInSchema(Connection c, String schemaname) throws SQLException {
+ public static List<String> listTablesInSchema(Connection c,
+ String schemaname) throws SQLException {
List<String> tables = new ArrayList<String>();
- String sql = "select tablename from pg_tables where schemaname = '" + schemaname.toLowerCase() + "'";
+ String sql = "select tablename from pg_tables where schemaname = '"
+ + schemaname.toLowerCase() + "'";
ResultSet rs = c.createStatement().executeQuery(sql);
try {
while (rs.next()) {
@@ -310,14 +382,16 @@
/**
* Liefert eine Liste alle Spaltennamen in einer Tabelle.
*
- * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das SChema wird ignoriert. Es gibt also probleme,
- * wenn der selbe Tabellenname noch in einem anderen Schema existiert.
+ * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das
+ * SChema wird ignoriert. Es gibt also probleme, wenn der selbe Tabellenname
+ * noch in einem anderen Schema existiert.
*
* @param tableName
* darf auch schema-informationen enthalten.
* @throws SQLException
*/
- public List<String> listColumnNamesInTable(Connection c, String tableName) throws SQLException {
+ public List<String> listColumnNamesInTable(Connection c, String tableName)
+ throws SQLException {
List<String> cols = new ArrayList<String>();
for (PGColumn pgcol : listColumnsInTable(c, tableName)) {
@@ -327,7 +401,8 @@
return cols;
}
- public static PGColumn getFirstGeometryColumn(Connection c, String tablename) throws SQLException {
+ public static PGColumn getFirstGeometryColumn(Connection c, String tablename)
+ throws SQLException {
for (PGColumn col : PGUtil.listColumnsInTable(c, tablename)) {
if (col.isGeometry())
@@ -339,14 +414,16 @@
/**
* Liefdert eine Liste alle Spaltenin einer Tabelle.
*
- * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das SChema wird ignoriert. Es gibt also probleme,
- * wenn der selbe Tabellenname noch in einem anderen Schema existiert.
+ * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das
+ * SChema wird ignoriert. Es gibt also probleme, wenn der selbe Tabellenname
+ * noch in einem anderen Schema existiert.
*
* @param tableName
* darf auch schema-informationen enthalten.
* @throws SQLException
*/
- public static List<PGColumn> listColumnsInTable(Connection c, String tableName) throws SQLException {
+ public static List<PGColumn> listColumnsInTable(Connection c,
+ String tableName) throws SQLException {
List<PGColumn> cols = new ArrayList<PGColumn>();
String schema = "public";
@@ -359,9 +436,10 @@
String sql = "SELECT a.attnum, a.attname AS field, t.typname AS type,"
+ " a.attlen AS length, a.atttypmod AS length_var,"
+ " a.attnotnull AS not_null, a.atthasdef as has_default"
- + " FROM pg_class c, pg_attribute a, pg_type t" + " WHERE c.relname = '" + tableName + "'"
- + " AND a.attnum > 0" + " AND a.attrelid = c.oid" + " AND a.atttypid = t.oid"
- + " ORDER BY a.attnum;";
+ + " FROM pg_class c, pg_attribute a, pg_type t"
+ + " WHERE c.relname = '" + tableName + "'"
+ + " AND a.attnum > 0" + " AND a.attrelid = c.oid"
+ + " AND a.atttypid = t.oid" + " ORDER BY a.attnum;";
ResultSet rs = c.createStatement().executeQuery(sql);
try {
while (rs.next()) {
@@ -371,7 +449,8 @@
Boolean notNull = rs.getBoolean(6);
Boolean hasDefault = rs.getBoolean(7);
- PGColumn pgcol = new PGColumn(fieldname, typename, notNull, hasDefault);
+ PGColumn pgcol = new PGColumn(fieldname, typename, notNull,
+ hasDefault);
cols.add(pgcol);
@@ -385,9 +464,11 @@
/**
* Liefert <code>true</code> wenn der Benutzername im DBMS Superuser ist.
*/
- public static boolean isSuperuser(Connection c, String username) throws SQLException {
+ public static boolean isSuperuser(Connection c, String username)
+ throws SQLException {
ResultSet rs = c.createStatement().executeQuery(
- "select usesuper from pg_user where usename = '" + username + "' and usesuper = true");
+ "select usesuper from pg_user where usename = '" + username
+ + "' and usesuper = true");
try {
if (rs.next()) {
return true;
@@ -398,8 +479,10 @@
return false;
}
- public static boolean existsRole(Connection c, String rolename) throws SQLException {
- String sql = "select count(1) from pg_roles where rolname = '" + rolename.toLowerCase() + "'";
+ public static boolean existsRole(Connection c, String rolename)
+ throws SQLException {
+ String sql = "select count(1) from pg_roles where rolname = '"
+ + rolename.toLowerCase() + "'";
ResultSet rs = c.createStatement().executeQuery(sql);
try {
if (rs.next())
@@ -410,16 +493,20 @@
return false;
}
- public static void removeAllPrivilegesFrom(Connection c, String rolename, String tablename) throws SQLException {
+ public static void removeAllPrivilegesFrom(Connection c, String rolename,
+ String tablename) throws SQLException {
c.createStatement().executeUpdate(
- "revoke all on TABLE " + tablename.toLowerCase() + " from " + rolename.toLowerCase() + " cascade");
+ "revoke all on TABLE " + tablename.toLowerCase() + " from "
+ + rolename.toLowerCase() + " cascade");
}
/**
* Löscht eine Rolle wenn sie vorher existiert
*/
- public static void dropRoleIfExists(Connection c, String rolename) throws SQLException {
- c.createStatement().executeUpdate("drop role if exists " + rolename.toLowerCase());
+ public static void dropRoleIfExists(Connection c, String rolename)
+ throws SQLException {
+ c.createStatement().executeUpdate(
+ "drop role if exists " + rolename.toLowerCase());
}
/**
@@ -429,8 +516,11 @@
* @param triggerName
* @param tableName
*/
- public static void dropTriggerIfExists(Connection c, String triggerName, String tableName) throws SQLException {
- c.createStatement().executeUpdate("drop TRIGGER if exists " + triggerName.toLowerCase() + " ON " + tableName);
+ public static void dropTriggerIfExists(Connection c, String triggerName,
+ String tableName) throws SQLException {
+ c.createStatement().executeUpdate(
+ "drop TRIGGER if exists " + triggerName.toLowerCase() + " ON "
+ + tableName);
}
/**
@@ -444,20 +534,26 @@
* OHNE <code>RETURN NEW</code>, das wird automatisch angehangen.
* @throws SQLException
*/
- public static void createOrReplaceTriggerFunction(Connection c, String name, String plCommands) throws SQLException {
+ public static void createOrReplaceTriggerFunction(Connection c,
+ String name, String plCommands) throws SQLException {
// System.err.println(plCommands);
- // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name
- // + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+ // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+ // " RETURNS trigger AS $" + name
+ // + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name +
+ // "$ LANGUAGE 'plpgsql'";
// PreparedStatement ps = c.prepareStatement(sql);
// ps.setString(0, plCommands);
// ps.executeUpdate();
- // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name + "$\nBEGIN\n "
- // + plCommands + " \nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+ // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+ // " RETURNS trigger AS $" + name + "$\nBEGIN\n "
+ // + plCommands + " \nRETURN NEW;" + "\nEND;\n$" + name +
+ // "$ LANGUAGE 'plpgsql'";
// c.createStatement().executeUpdate(sql);
- createOrReplaceFunction(c, name, null, "TRIGGER", null, plCommands + "\nRETURN NEW");
+ createOrReplaceFunction(c, name, null, "TRIGGER", null, plCommands
+ + "\nRETURN NEW");
}
/**
@@ -468,18 +564,24 @@
* @param parameters
* Parameter der Funcktion, kann <code>null</code> sein.
* @param returns
- * z.B. <code>TRIGGER</code> oder <code>SETOF bigint</code> oder "void"
+ * z.B. <code>TRIGGER</code> oder <code>SETOF bigint</code> oder
+ * "void"
* @param declare
* Declare block oder <code>null</code>
* @param plCommands
- * z.B. NEW.kpk_kreis = NEW.risiko_soz+NEW.risiko_emo+NEW.risiko_moti +NEW.risiko_spr+NEW.risiko_wohl;
+ * z.B. NEW.kpk_kreis =
+ * NEW.risiko_soz+NEW.risiko_emo+NEW.risiko_moti
+ * +NEW.risiko_spr+NEW.risiko_wohl;
*/
- public static void createOrReplaceFunction(Connection c, String name, String parameters, String returns,
- String declare, String plCommands) throws SQLException {
+ public static void createOrReplaceFunction(Connection c, String name,
+ String parameters, String returns, String declare, String plCommands)
+ throws SQLException {
// System.err.println(plCommands);
- // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name
- // + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+ // String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+ // " RETURNS trigger AS $" + name
+ // + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name +
+ // "$ LANGUAGE 'plpgsql'";
// PreparedStatement ps = c.prepareStatement(sql);
// ps.setString(0, plCommands);
// ps.executeUpdate();
@@ -487,13 +589,16 @@
parameters = LangUtil.removeWhitespacesToEmpty(parameters);
declare = LangUtil.removeWhitespacesToEmpty(declare);
- String sql = "CREATE OR REPLACE FUNCTION " + name + "(" + parameters + ")" + " RETURNS " + returns + " AS $$\n"
- + "DECLARE\n" + declare + "\n" + "BEGIN\n " + plCommands + ";" + "\nEND;\n$$ LANGUAGE 'plpgsql'";
+ String sql = "CREATE OR REPLACE FUNCTION " + name + "(" + parameters
+ + ")" + " RETURNS " + returns + " AS $$\n" + "DECLARE\n"
+ + declare + "\n" + "BEGIN\n " + plCommands + ";"
+ + "\nEND;\n$$ LANGUAGE 'plpgsql'";
c.createStatement().executeUpdate(sql);
}
/**
- * Erstellt einen <code>FOR EACH ROW EXECUTE PROCEDURE</code> trigger für eine Tabelle
+ * Erstellt einen <code>FOR EACH ROW EXECUTE PROCEDURE</code> trigger für
+ * eine Tabelle
*
* @param c
* @param triggerName
@@ -509,12 +614,14 @@
END IF;
</code>
*/
- public static void createOrRecreateTrigger(Connection c, String triggerName, String type, String tableName,
- String plCommands) throws SQLException {
+ public static void createOrRecreateTrigger(Connection c,
+ String triggerName, String type, String tableName, String plCommands)
+ throws SQLException {
dropTriggerIfExists(c, triggerName, tableName);
createOrReplaceTriggerFunction(c, triggerName + "_fn", plCommands);
c.createStatement().executeUpdate(
- "CREATE TRIGGER " + triggerName + " " + type + " ON " + tableName + " FOR EACH ROW EXECUTE PROCEDURE "
+ "CREATE TRIGGER " + triggerName + " " + type + " ON "
+ + tableName + " FOR EACH ROW EXECUTE PROCEDURE "
+ triggerName + "_fn" + "()");
}
@@ -526,30 +633,37 @@
* @param idxNamePostfix
* e.g. 'idx1'
* @param unique
- * <code>true</code> if the columns are unique. A UNIQUE INDEX will be created.
+ * <code>true</code> if the columns are unique. A UNIQUE INDEX
+ * will be created.
*/
- public static void addIndex(Connection c, final String tableName, final String columns, String idxPostfix,
- final boolean unique) throws SQLException {
- addIndex(c, tableName, columns, idxPostfix, unique, null, null, false, null);
+ public static void addIndex(Connection c, final String tableName,
+ final String columns, String idxPostfix, final boolean unique)
+ throws SQLException {
+ addIndex(c, tableName, columns, idxPostfix, unique, null, null, false,
+ null);
}
/**
- * Liefert eine Liste aller Indexnamen die für eine Tabelle existieren. Der Tabellenname wird mit <code>like</code>
- * verglichen, darf also <code>%</code> enthalten.<br/>
- * Achtung: Diese abfrage ist nicht Schema-Spezifisch. Eine schema. Angabe vor dem tabellennamen wird automatisch
- * entfernt.
+ * Liefert eine Liste aller Indexnamen die für eine Tabelle existieren. Der
+ * Tabellenname wird mit <code>like</code> verglichen, darf also
+ * <code>%</code> enthalten.<br/>
+ * Achtung: Diese abfrage ist nicht Schema-Spezifisch. Eine schema. Angabe
+ * vor dem tabellennamen wird automatisch entfernt.
*/
- public static List<String> listIndexesForTable(Connection c, String tableName) throws SQLException {
+ public static List<String> listIndexesForTable(Connection c,
+ String tableName) throws SQLException {
Statement s = c.createStatement();
if (tableName.contains("."))
- tableName = tableName.substring(tableName.indexOf(".") + 1, tableName.length());
+ tableName = tableName.substring(tableName.indexOf(".") + 1,
+ tableName.length());
List<String> idxes = new ArrayList<String>();
// , array_to_string(array_agg(a.attname), ', ') as column_names
String sql = "select t.relname as table_name, i.relname as index_name from pg_class t, pg_class i, pg_index ix, pg_attribute a where t.oid = ix.indrelid and i.oid = ix.indexrelid and a.attrelid = t.oid and a.attnum = ANY(ix.indkey) and t.relkind = 'r' and t.relname like '"
- + tableName + "' group by t.relname, i.relname order by t.relname, i.relname";
+ + tableName
+ + "' group by t.relname, i.relname order by t.relname, i.relname";
ResultSet rs = s.executeQuery(sql);
try {
@@ -572,20 +686,27 @@
* @param idxNamePostfix
* e.g. 'idx1'
* @param unique
- * <code>true</code> if the columns are unique. A UNIQUE INDEX will be created.
+ * <code>true</code> if the columns are unique. A UNIQUE INDEX
+ * will be created.
* @param tablespace
- * <code>null</code> oder der name des tablespace in dem der Index liegen soll.
+ * <code>null</code> oder der name des tablespace in dem der
+ * Index liegen soll.
* @param type
- * <code>null</code> für DB default oder "hash" oder "btree" oder "gin" etc...
+ * <code>null</code> für DB default oder "hash" oder "btree" oder
+ * "gin" etc...
* @param forceRecreationIfExistsAlready
- * wenn <code>true</code> dann werden der Index vorher gedroppt falls er exisitert.
+ * wenn <code>true</code> dann werden der Index vorher gedroppt
+ * falls er exisitert.
* @param fillFactor
- * Wert von >0. -> 1. Bei .5 wird für den Index doppelt so viel Platz reserviert wie aktuell benötig, um
- * auf weiteres Wachstum der Tabelle ohne Indexfragmentierung reagieren zu können.
+ * Wert von >0. -> 1. Bei .5 wird für den Index doppelt so viel
+ * Platz reserviert wie aktuell benötig, um auf weiteres Wachstum
+ * der Tabelle ohne Indexfragmentierung reagieren zu können.
*/
- public static void addIndex(Connection c, final String tableName, final String columns, String idxPostfix,
- final boolean unique, String tablespace, String type, boolean forceRecreationIfExistsAlready,
- Double fillFactor) throws SQLException {
+ public static void addIndex(Connection c, final String tableName,
+ final String columns, String idxPostfix, final boolean unique,
+ String tablespace, String type,
+ boolean forceRecreationIfExistsAlready, Double fillFactor)
+ throws SQLException {
String idxNameWithDot = tableName + "_" + idxPostfix;
final String idxName = idxNameWithDot.replace(".", "_");
@@ -599,8 +720,8 @@
if (!forceRecreationIfExistsAlready)
return;
- log.info("Aufgrund von forceRecreationIfExistsAlready=true wird der Index " + idxNameWithDot
- + " jetzt gedroppt.");
+ log.info("Aufgrund von forceRecreationIfExistsAlready=true wird der Index "
+ + idxNameWithDot + " jetzt gedroppt.");
Statement s = c.createStatement();
@@ -634,19 +755,23 @@
Statement s = c.createStatement();
if (fillFactor != null && (fillFactor <= 0. || fillFactor > 1.))
- throw new IllegalArgumentException("fillFactor muss großer 0 und kleinergleich 1 sein.");
+ throw new IllegalArgumentException(
+ "fillFactor muss großer 0 und kleinergleich 1 sein.");
String sqlFillFactor = "";
if (fillFactor != null)
- sqlFillFactor = " WITH (FILLFACTOR=" + (int) (fillFactor * 100) + ") ";
+ sqlFillFactor = " WITH (FILLFACTOR=" + (int) (fillFactor * 100)
+ + ") ";
- String sqlTableSpace = (tablespace == null || tablespace.equalsIgnoreCase("null") || !existsTablespace(c,
+ String sqlTableSpace = (tablespace == null
+ || tablespace.equalsIgnoreCase("null") || !existsTablespace(c,
tableName)) ? "" : " TABLESPACE " + tablespace;
String sqlUsing = type == null ? "" : " USING " + type;
- final String queryString = "CREATE " + (unique ? "UNIQUE " : "") + "INDEX " + idxName + " ON " + tableName
- + sqlUsing + " (" + columns + ") " + sqlFillFactor + sqlTableSpace;
+ final String queryString = "CREATE " + (unique ? "UNIQUE " : "")
+ + "INDEX " + idxName + " ON " + tableName + sqlUsing + " ("
+ + columns + ") " + sqlFillFactor + sqlTableSpace;
try {
s.execute(queryString);
c.commit();
@@ -663,9 +788,11 @@
// Ex abfangen, wenn IDX schon existiert
String msg = cause.getMessage();
- if (msg.endsWith("already exists") || msg.endsWith("existiert bereits")) {
+ if (msg.endsWith("already exists")
+ || msg.endsWith("existiert bereits")) {
// TO NOTHING, IDX already exists
- log.info("Index existierte bereits, nicht neuerstellt: " + queryString);
+ log.info("Index existierte bereits, nicht neuerstellt: "
+ + queryString);
} else
log.error(e.getLocalizedMessage(), e);
@@ -678,10 +805,12 @@
*
* @throws SQLException
*/
- private static boolean existsTablespace(Connection c, String spaceName) throws SQLException {
+ private static boolean existsTablespace(Connection c, String spaceName)
+ throws SQLException {
// SELECT count(1) FROM pg_tablespace where spcname = 'spcname';
- String stmtSql = "SELECT COUNT(*) FROM pg_tablespace where spcname = '" + spaceName + "'";
+ String stmtSql = "SELECT COUNT(*) FROM pg_tablespace where spcname = '"
+ + spaceName + "'";
PreparedStatement stmt = c.prepareStatement(stmtSql);
stmt.execute();
@@ -701,18 +830,21 @@
}
/**
- * Fügt einen Benutzer zu einer Rolle hinzu. Wenn der benutzer bereits in der Rolle enthalten ist, wird keine
- * Exception geschmisssen.
+ * Fügt einen Benutzer zu einer Rolle hinzu. Wenn der benutzer bereits in
+ * der Rolle enthalten ist, wird keine Exception geschmisssen.
*
* @throws SQLException
*/
- public static void grantRoleToUser(Connection c, String rolename, String username) throws SQLException {
- c.createStatement().executeUpdate("GRANT " + rolename + " TO " + username);
+ public static void grantRoleToUser(Connection c, String rolename,
+ String username) throws SQLException {
+ c.createStatement().executeUpdate(
+ "GRANT " + rolename + " TO " + username);
}
/**
- * Der : (Doppelpunkt) hat in PSQL eine besondere Bedeutung. Er wind mit dieser methode escaped. Diese Methode
- * sollte mit <code>like E'"+PGUtil.escape(...)+"'</code> verwendet werden.
+ * Der : (Doppelpunkt) hat in PSQL eine besondere Bedeutung. Er wind mit
+ * dieser methode escaped. Diese Methode sollte mit
+ * <code>like E'"+PGUtil.escape(...)+"'</code> verwendet werden.
*/
public static String escape(String key) {
key = key.replaceAll(":", "\\:");
@@ -725,11 +857,14 @@
* @param c
* DB-Verbindung
* @param dbName
- * Name der Datenbank fuer die die Sessions gezaehlt werden (kann {@code null} sein)
+ * Name der Datenbank fuer die die Sessions gezaehlt werden (kann
+ * {@code null} sein)
* @param userName
- * Name des Users fuer den die Sessions gezaehlt werden (kann {@code null} sein)
+ * Name des Users fuer den die Sessions gezaehlt werden (kann
+ * {@code null} sein)
*/
- public static int getOpenSessionCount(Connection c, String dbName, String userName) throws SQLException {
+ public static int getOpenSessionCount(Connection c, String dbName,
+ String userName) throws SQLException {
return getOpenSessionCount(c, dbName, userName, null);
}
@@ -739,14 +874,17 @@
* @param c
* DB-Verbindung
* @param dbName
- * Name der Datenbank fuer die die Sessions gezaehlt werden (kann {@code null} sein)
+ * Name der Datenbank fuer die die Sessions gezaehlt werden (kann
+ * {@code null} sein)
* @param userName
- * Name des Users fuer den die Sessions gezaehlt werden (kann {@code null} sein)
+ * Name des Users fuer den die Sessions gezaehlt werden (kann
+ * {@code null} sein)
* @param queryLike
- * like-Beindung auf die Query die in der Session ausgeführt wird, oder <code>null</code>
+ * like-Beindung auf die Query die in der Session ausgeführt
+ * wird, oder <code>null</code>
*/
- public static int getOpenSessionCount(Connection c, String dbName, String userName, String queryLike)
- throws SQLException {
+ public static int getOpenSessionCount(Connection c, String dbName,
+ String userName, String queryLike) throws SQLException {
String stmtSql = "SELECT COUNT(*) FROM pg_stat_activity WHERE TRUE";
if (dbName != null)
@@ -778,10 +916,12 @@
}
/**
- * Liefert <code>true</code> wenn eine Spalte mit dem Namen in der angegebenen Tabelle existiert. Die Tablle darf
- * optional mit "schema." prefixiert werden.
+ * Liefert <code>true</code> wenn eine Spalte mit dem Namen in der
+ * angegebenen Tabelle existiert. Die Tablle darf optional mit "schema."
+ * prefixiert werden.
*/
- public static boolean existsColumn(Connection c, String tableName, String columnName) throws SQLException {
+ public static boolean existsColumn(Connection c, String tableName,
+ String columnName) throws SQLException {
String schema = "public";
@@ -791,9 +931,12 @@
tableName = split[1];
}
- ResultSet nativeCheckExistsColumnQuery = c.createStatement().executeQuery(
- "SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME = '" + columnName.toLowerCase()
- + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+ ResultSet nativeCheckExistsColumnQuery = c.createStatement()
+ .executeQuery(
+ "SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+ + columnName.toLowerCase()
+ + "' AND TABLE_NAME='" + tableName
+ + "' AND TABLE_SCHEMA='" + schema + "';");
return nativeCheckExistsColumnQuery.next();
}
@@ -804,7 +947,8 @@
* Darf eine Schemaangabe mit . Trenner enthalten.
* @throws SQLException
*/
- public static boolean existsView(Connection c, String viewName) throws SQLException {
+ public static boolean existsView(Connection c, String viewName)
+ throws SQLException {
String schema = "public";
@@ -814,8 +958,8 @@
viewName = split[1];
}
- final String checkView = "SELECT * FROM information_schema.VIEWS where table_schema = '" + schema
- + "' and table_name = '" + viewName + "' LIMIT 1";
+ final String checkView = "SELECT * FROM information_schema.VIEWS where table_schema = '"
+ + schema + "' and table_name = '" + viewName + "' LIMIT 1";
ResultSet rs = c.createStatement().executeQuery(checkView);
try {
@@ -832,7 +976,8 @@
* Darf eine Schemaangabe mit . Trenner enthalten.
* @throws SQLException
*/
- public static boolean existsTable(Connection c, String tableName) throws SQLException {
+ public static boolean existsTable(Connection c, String tableName)
+ throws SQLException {
String schema = "public";
@@ -842,8 +987,8 @@
tableName = split[1];
}
- final String checkTableExists = "SELECT * FROM pg_tables where schemaname = '" + schema + "' and tablename = '"
- + tableName + "' LIMIT 1";
+ final String checkTableExists = "SELECT * FROM pg_tables where schemaname = '"
+ + schema + "' and tablename = '" + tableName + "' LIMIT 1";
ResultSet rs = c.createStatement().executeQuery(checkTableExists);
try {
@@ -853,19 +998,22 @@
}
}
- public static void dropViewIfExists(Connection c, String viewName) throws SQLException {
+ public static void dropViewIfExists(Connection c, String viewName)
+ throws SQLException {
final String dropView = "DROP VIEW IF EXISTS " + viewName;
c.createStatement().executeUpdate(dropView);
}
/**
- * Wenn der übergebene durch die PID identifizierte Process blockiert ist, dann wird die PID des (ersten?)
- * blockierenden Prozess zurückgeliefert. Sonst wird <code>null</code> geliefert.
+ * Wenn der übergebene durch die PID identifizierte Process blockiert ist,
+ * dann wird die PID des (ersten?) blockierenden Prozess zurückgeliefert.
+ * Sonst wird <code>null</code> geliefert.
*
* @param blockedPid
* @return blockingPid oder <code>null</code>
*/
- static public Long getBlockingPid(Connection c, Long blockedPid) throws SQLException {
+ static public Long getBlockingPid(Connection c, Long blockedPid)
+ throws SQLException {
final String sql = "SELECT kl.pid as blocking_pid FROM pg_catalog.pg_locks bl "
+ "JOIN pg_catalog.pg_stat_activity a on bl.pid = a.procpid "
+ "JOIN pg_catalog.pg_locks kl "
@@ -883,20 +1031,25 @@
}
/**
- * Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten zurück. Der 2. Teil der Rückgabepaare ist
- * ein String der einem PG Interval entspricht. Dieses kann mit der Klasse PGInterval geparst werden.<br/>
+ * Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten
+ * zurück. Der 2. Teil der Rückgabepaare ist ein String der einem PG
+ * Interval entspricht. Dieses kann mit der Klasse PGInterval geparst
+ * werden.<br/>
*
* @param datName
- * <code>null</code> oder der Datenbankname, auf den die Abfrage gefiltert werden soll.
+ * <code>null</code> oder der Datenbankname, auf den die Abfrage
+ * gefiltert werden soll.
*
* @param minSecondsRunning
- * <code>null</code> oder die zurückgegebenen Anfragen müssen mindestens soviele Sekunden schon laufen.
+ * <code>null</code> oder die zurückgegebenen Anfragen müssen
+ * mindestens soviele Sekunden schon laufen.
*
* @param filter
- * 0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
+ * 0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in
+ * Transaction'
*/
- static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning, int filter)
- throws SQLException {
+ static public List<SqlQueryStat> listQueries(Connection c, String datName,
+ Integer minSecondsRunning, int filter) throws SQLException {
ArrayList<SqlQueryStat> result = new ArrayList<SqlQueryStat>();
String where = "WHERE TRUE ";
@@ -913,7 +1066,8 @@
if (minSecondsRunning < 0)
throw new IllegalStateException();
- where += " AND age (now(),query_start) >= interval '" + minSecondsRunning + "s' ";
+ where += " AND age (now(),query_start) >= interval '"
+ + minSecondsRunning + "s' ";
}
final String sql = "SELECT current_query, age (now(),query_start) as qage, waiting, procpid, client_addr, usename, application_name from pg_stat_activity "
@@ -930,8 +1084,8 @@
String username = rs.getString(6);
String application_name = rs.getString(7);
- result.add(new SqlQueryStat(q, new PGInterval(age), waiting, procId, client_addr, username,
- application_name));
+ result.add(new SqlQueryStat(q, new PGInterval(age), waiting,
+ procId, client_addr, username, application_name));
}
} finally {
@@ -943,10 +1097,12 @@
/**
* Tablename der optinal als das Schema enthalten darf.
*/
- public static boolean removeColumn(Connection c, String tableName, String columnName) throws SQLException {
+ public static boolean removeColumn(Connection c, String tableName,
+ String columnName) throws SQLException {
// Das eigentliche erstellen der neuen Spalte
- String queryString = "ALTER TABLE " + tableName + " DROP COLUMN " + columnName;
+ String queryString = "ALTER TABLE " + tableName + " DROP COLUMN "
+ + columnName;
// System.out.println(queryString);
@@ -970,7 +1126,8 @@
*
* @return Primary Key. <code>NULL</code> if empty
*/
- public static String getPrimaryKey(Connection dbc, String tableName) throws SQLException {
+ public static String getPrimaryKey(Connection dbc, String tableName)
+ throws SQLException {
String schema = "public";
if (tableName.contains(".")) {
@@ -1005,8 +1162,10 @@
/**
* Returns cardinality of column in table
*/
- public long getCardinality(Connection dbc, String tableName, String column) throws SQLException {
- String sql = "select count( DISTINCT " + "(" + column + ")" + ") " + "from " + tableName;
+ public long getCardinality(Connection dbc, String tableName, String column)
+ throws SQLException {
+ String sql = "select count( DISTINCT " + "(" + column + ")" + ") "
+ + "from " + tableName;
ResultSet countRs = dbc.createStatement().executeQuery(sql);
try {
countRs.next();
@@ -1016,7 +1175,8 @@
}
}
- public static boolean isIntColumn(Connection c, String tableName, String columnName) throws SQLException {
+ public static boolean isIntColumn(Connection c, String tableName,
+ String columnName) throws SQLException {
String schema = "public";
if (tableName.contains(".")) {
final String[] split = tableName.split("\\.");
@@ -1025,8 +1185,11 @@
}
Statement s = c.createStatement();
- ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
- + columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+ ResultSet rs = s
+ .executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+ + columnName.toLowerCase()
+ + "' AND TABLE_NAME='"
+ + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
try {
rs.next();
@@ -1043,7 +1206,8 @@
/**
* Typischer Weise POSTGIS, wenn man sonst nichts anderen installiert hat.
*/
- public static boolean isUserDefinedColumn(Connection c, String tableName, String columnName) throws SQLException {
+ public static boolean isUserDefinedColumn(Connection c, String tableName,
+ String columnName) throws SQLException {
String schema = "public";
if (tableName.contains(".")) {
@@ -1053,14 +1217,18 @@
}
Statement s = c.createStatement();
- ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
- + columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+ ResultSet rs = s
+ .executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+ + columnName.toLowerCase()
+ + "' AND TABLE_NAME='"
+ + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
rs.next();
String typeDef = rs.getString(1);
return typeDef.toUpperCase().startsWith("USER-DEFINED");
}
- public static boolean isTextColumn(Connection c, String tableName, String columnName) throws SQLException {
+ public static boolean isTextColumn(Connection c, String tableName,
+ String columnName) throws SQLException {
String schema = "public";
if (tableName.contains(".")) {
@@ -1070,8 +1238,11 @@
}
Statement s = c.createStatement();
- ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
- + columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+ ResultSet rs = s
+ .executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+ + columnName.toLowerCase()
+ + "' AND TABLE_NAME='"
+ + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
try {
rs.next();
String typeDef = rs.getString(1);
@@ -1096,11 +1267,13 @@
* @return
* @throws SQLException
*/
- public static boolean addColumn(Connection dbc, String tableName, String columnName, String colTypeName,
- String comment) throws SQLException {
+ public static boolean addColumn(Connection dbc, String tableName,
+ String columnName, String colTypeName, String comment)
+ throws SQLException {
if (dbc == null)
- throw new IllegalStateException("Es besteht keine Datenbankverbindung!");
+ throw new IllegalStateException(
+ "Es besteht keine Datenbankverbindung!");
Statement s = dbc.createStatement();
@@ -1109,7 +1282,8 @@
}
// Das eigentliche erstellen der neuen Spalte
- String queryString = "ALTER TABLE " + tableName + " ADD " + columnName + " " + colTypeName;
+ String queryString = "ALTER TABLE " + tableName + " ADD " + columnName
+ + " " + colTypeName;
// JRegDBUtils.log.debug(queryString);
@@ -1120,7 +1294,8 @@
}
if (comment != null && !comment.isEmpty()) {
- queryString = "COMMENT ON COLUMN " + tableName + "." + columnName + " IS '" + comment + "';";
+ queryString = "COMMENT ON COLUMN " + tableName + "." + columnName
+ + " IS '" + comment + "';";
}
s.close();
@@ -1131,7 +1306,8 @@
/**
* Liefert alle Spalten einer Tabelle
*/
- public static ArrayList<String> getAllColumnsOf(Connection dbc, String tableName) throws SQLException {
+ public static ArrayList<String> getAllColumnsOf(Connection dbc,
+ String tableName) throws SQLException {
String schema = "public";
if (tableName.contains(".")) {
final String[] split = tableName.split("\\.");
@@ -1143,8 +1319,8 @@
// String tableName = PropertyUtils.getDbTableName(i);
- String sql = "SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_NAME = '" + tableName
- + "' and TABLE_SCHEMA = '" + schema + "';";
+ String sql = "SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_NAME = '"
+ + tableName + "' and TABLE_SCHEMA = '" + schema + "';";
ResultSet colsRs = dbc.createStatement().executeQuery(sql);
try {
@@ -1161,7 +1337,8 @@
*
* @throws SQLException
*/
- public static boolean pg_terminate_backend(Connection dbc, Long procId) throws SQLException {
+ public static boolean pg_terminate_backend(Connection dbc, Long procId)
+ throws SQLException {
String sql = "SELECT pg_terminate_backend(" + procId + ");";
ResultSet rs = dbc.createStatement().executeQuery(sql);
try {
Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java 2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java 2012-04-11 12:31:57 UTC (rev 1941)
@@ -188,7 +188,6 @@
}
private String[] cachedTypeNames = null;
- private String[] cachedGeometryTableNames;
public GtDbServerSettings() {
this(DbType.postgis);
@@ -418,7 +417,7 @@
throw new RuntimeException(e);
}
String url = "jdbc:postgresql://" + getHost()
- // + (":" + PropertyUtils.getDbPort())
+ + (":" + getPort())
+ ("/" + getDatabase());
String password = getPassword();
@@ -430,30 +429,48 @@
return DriverManager.getConnection(url, username, password);
}
- public String[] getDescribedTablesWithGeometry() {
+ //
+ // public String[] getDescribedTablesWithGeometry() {
+ //
+ // if (cachedGeometryTableNames == null) {
+ //
+ // Connection dc;
+ // try {
+ // dc = createNewDatabaseConnection();
+ // try {
+ //
+ // cachedGeometryTableNames = PGUtilGT
+ // .getPoTabelsDescribedInGeometryColumnsTable(dc
+ // .createStatement());
+ //
+ // } catch (SQLException e) {
+ // LOGGER.error(e, e);
+ // } finally {
+ // dc.close();
+ // }
+ // } catch (SQLException e1) {
+ // LOGGER.error(e1, e1);
+ // return new String[0];
+ // }
+ // }
+ // return cachedGeometryTableNames;
+ // }
- if (cachedGeometryTableNames == null) {
-
- Connection dc;
+ public boolean isGeometryColumnDescribed(String tableName) {
+ Connection dc;
+ try {
+ dc = createNewDatabaseConnection();
try {
- dc = createNewDatabaseConnection();
- try {
-
- cachedGeometryTableNames = PGUtilGT
- .getColumnsDescribedInGeometryColumnsTable(dc
- .createStatement());
-
- } catch (SQLException e) {
- LOGGER.error(e, e);
- } finally {
- dc.close();
- }
- } catch (SQLException e1) {
- LOGGER.error(e1, e1);
- return new String[0];
+ return PGUtilGT.getPostGisMetadata(dc, tableName) != null;
+ } catch (SQLException e) {
+ LOGGER.error(e, e);
+ } finally {
+ dc.close();
}
+ } catch (SQLException e1) {
+ LOGGER.error(e1, e1);
}
- return cachedGeometryTableNames;
+ return false;
}
@Override
More information about the Schmitzm-commits
mailing list