[Schmitzm-commits] r1781 - in trunk: schmitzm-adresses/src/main/java/de/schmitzm/adresses schmitzm-adresses/src/test/java/de/schmitzm/adresses schmitzm-core/src/main/java/de/schmitzm/postgres schmitzm-core/src/test/java/de/schmitzm/lang
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Nov 16 19:24:22 CET 2011
Author: alfonx
Date: 2011-11-16 19:24:20 +0100 (Wed, 16 Nov 2011)
New Revision: 1781
Modified:
trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java
trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java
trunk/schmitzm-core/src/test/java/de/schmitzm/lang/TimedLimitedHashmapTest.java
Log:
Erste Aufr?\195?\164umanse?\195?\164tzt um Jregmatch 2.0-SNAPSHOT zu erstellen.
Modified: trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
===================================================================
--- trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java 2011-11-16 15:34:45 UTC (rev 1780)
+++ trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java 2011-11-16 18:24:20 UTC (rev 1781)
@@ -2,17 +2,16 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
+import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-import com.sun.tools.internal.xjc.Language;
-
import de.schmitzm.lang.LangUtil;
-import de.schmitzm.regex.RegexCache;
/**
* Diese Klasse bietete nützliche Methoden zur Bearbeitung von Addressschreibweisen. Zur Zeit werden nur Strings mit
@@ -50,7 +49,6 @@
return normalize(RuleRegistry.getRulesStr(), strasse);
}
-
/**
* Normalisiert die Schreibweise einer Hausnummer, z.B. " 5 " -> "5"
*/
@@ -305,8 +303,21 @@
}
// TODO sauberes rewrite unter besserer Ausnutzung von Rekursion
- public static List<String> getHausnummernInterpreted(final String hausnummern) {
- final List<String> result = new ArrayList<String>();
+ public static TreeSet<String> getHausnummernInterpreted(final String hausnummern) {
+ final TreeSet<String> result = new TreeSet<String>(new Comparator<String>() {
+
+ @Override
+ public int compare(String o1, String o2) {
+ try {
+ Integer i1 = Integer.parseInt(o1);
+ Integer i2 = Integer.parseInt(o2);
+ return i1.compareTo(i2);
+ } catch (Exception e) {
+ return o1.compareTo(o2);
+ }
+ }
+ });
+
if (hausnummern != null) {
final Matcher m = Pattern.compile("(\\d)+\\s*([a-z]+)[,]([a-z]+)").matcher(hausnummern);
if (m.find()) {
@@ -422,8 +433,6 @@
return Ebene.BUNDESLAND;
return null;
}
-
-
/**
* Normalisiert die Schreibweise eines Straßennamens, z.B. "Dr.-Vogeler-Str." -> "drvogelerstrasse"
@@ -440,8 +449,7 @@
strasse = strasse.replaceAll("\\s*s$", "strasse");
strasse = strasse.replaceAll("alle(\b|$)", "allee");
strasse = strasse.replaceAll("alee(\b|$)", "allee");
-
-
+
strasse = strasse.replaceAll("ü", "ue");
strasse = strasse.replaceAll("ö", "oe");
strasse = strasse.replaceAll("ä", "ae");
@@ -458,8 +466,6 @@
return strasse;
}
-
-
/**
* Normalisiert die Schreibweise eines Straßennamens, z.B. "Dr.-Vogeler-Str." -> "drvogelerstrasse"
@@ -474,10 +480,10 @@
ort = ort.replaceAll("st(\\.|\\s)", "sankt");
ort = ort.replaceAll("sta(\\.|\\s)", "sankt");
ort = ort.replaceAll("im breisgau", "ib");
-
+
ort = ort.replaceAll("a(\\.|\\s)d(\\.|\\s)", "an der");
ort = ort.replaceAll("i(\\.|\\s)", "im");
-
+
ort = ort.replaceAll("ü", "ue");
ort = ort.replaceAll("ö", "oe");
ort = ort.replaceAll("ä", "ae");
Modified: trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java
===================================================================
--- trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java 2011-11-16 15:34:45 UTC (rev 1780)
+++ trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java 2011-11-16 18:24:20 UTC (rev 1781)
@@ -3,8 +3,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.util.Collections;
-import java.util.List;
+import java.util.Set;
import org.junit.Test;
@@ -15,7 +14,7 @@
*
*/
public class AddrStringUtilTest {
-
+
@Test
public void testXXX() {
final RegexCache rc = RegexCache.getInstance();
@@ -25,15 +24,15 @@
@Test
public void testGetHausnummernInterpreted() {
- checkHausnummern("6 - 14", "6", "7", "8", "9", "10", "11", "12", "13",
- "14");
+ checkHausnummern("6 - 14", "6", "7", "8", "9", "10", "11", "12", "13", "14");
checkHausnummern("0175-123456789");
checkHausnummern("1-", "1");
+ checkHausnummern("1/1", "1");
checkHausnummern("3/4", "3", "4");
-
+
checkHausnummern(" 2, 2 a, 4,", "2", "2a", "4");
checkHausnummern("22 - 23", "22", "23");
@@ -43,7 +42,7 @@
checkHausnummern(" 23/24;77 ", "23", "24", "77");
checkHausnummern("1,2,3,8", "1", "2", "3", "8");
checkHausnummern("1,3a,3ab", "1", "3a", "3ab");
- checkHausnummern("1a-c,3b,3a", "1a", "1b", "1c", "3b", "3a");
+ checkHausnummern("1a-c,3b,3a", "1a", "1b", "1c", "3a", "3b");
checkHausnummern(" 3/4/8 ", "3", "4", "8");
checkHausnummern("1 a-c", "1a", "1b", "1c");
@@ -67,109 +66,83 @@
checkHausnummern("2 a", "2a");
checkHausnummern("2 a", "2a");
checkHausnummern("2,3", "2", "3");
- checkHausnummern("9a - 10d", "9a", "10d");
+ checkHausnummern("9a - 10d", "10d", "9a");
checkHausnummern(" 2 - 4 ", "2", "3", "4");
checkHausnummern(" 5 bis 8 ", "5", "6", "7", "8");
}
private void checkHausnummern(String ist, String... soll) {
- List<String> check = AddrStringUtil.getHausnummernInterpreted(ist);
+ Set<String> check = AddrStringUtil.getHausnummernInterpreted(ist);
if (soll.length == 0)
- assertEquals(Collections.EMPTY_LIST, check);
+ assertEquals(0, check.size());
String[] array = check.toArray(new String[] {});
- assertEquals(LangUtil.stringConcatWithSep(";", soll),
- LangUtil.stringConcatWithSep(";", array));
+ assertEquals(LangUtil.stringConcatWithSep(";", soll), LangUtil.stringConcatWithSep(";", array));
}
@Test
public void testSplit() {
-// TODO
-// checkSplit("Strahlenberger Straße", "Strahlenberger Straße 11 13 15 und 17", "11 13 15 und 17", null,
-// null, null);
-//
-// TODO
-// checkSplit("Olbrichtstr.", "Olbrichtstr. 2 (Seehaus 1)", "2", null,
-// "(Seehaus 1)", null);
-
- checkSplit("Leypoldt Strasse", "Leypoldt Strasse 6,/10 8/1", "6", null,
- ",/10 8/1", null);
-
-
+ // TODO
+ // checkSplit("Strahlenberger Straße", "Strahlenberger Straße 11 13 15 und 17", "11 13 15 und 17", null,
+ // null, null);
+ //
+ // TODO
+ // checkSplit("Olbrichtstr.", "Olbrichtstr. 2 (Seehaus 1)", "2", null,
+ // "(Seehaus 1)", null);
+
+ checkSplit("Leypoldt Strasse", "Leypoldt Strasse 6,/10 8/1", "6", null, ",/10 8/1", null);
+
checkSplit("ander B2", "ander B2 5-6", "5-6", null, null, null);
- checkSplit("Bettina Strasse", "Bettina Strasse 52-54 2.OG", "52-54",
- null, "2.OG", null);
+ checkSplit("Bettina Strasse", "Bettina Strasse 52-54 2.OG", "52-54", null, "2.OG", null);
- checkSplit("Dieselstr.", "Dieselstr .11 - 13", "11 - 13", null, null,
- null);
+ checkSplit("Dieselstr.", "Dieselstr .11 - 13", "11 - 13", null, null, null);
- checkSplit("Clarenbachstrasse", "Clarenbachstrasse 6 & 8", "6 & 8",
- null, null, null);
+ checkSplit("Clarenbachstrasse", "Clarenbachstrasse 6 & 8", "6 & 8", null, null, null);
checkSplit(null, "Flurstück 3 a 2", null, null, null, null);
- checkSplit("Ober-Ramstädter Str.", "Ober-Ramstädter Str . 96 G 1",
- "96", null, "G 1", null);
+ checkSplit("Ober-Ramstädter Str.", "Ober-Ramstädter Str . 96 G 1", "96", null, "G 1", null);
- checkSplit("Kocherstrasse", "Kocherstrasse , 5 - 9 -", "5 - 9", null,
- null, null);
+ checkSplit("Kocherstrasse", "Kocherstrasse , 5 - 9 -", "5 - 9", null, null, null);
- checkSplit("H.-Weigel-Str.", "H . -Weigel-Str . 5 b/ 0402 -", "5",
- null, "b/0402", null);
+ checkSplit("H.-Weigel-Str.", "H . -Weigel-Str . 5 b/ 0402 -", "5", null, "b/0402", null);
- checkSplit("Richard Strauss Straße", "Richard Strauss Straße 80 &",
- "80", null, "&", null);
+ checkSplit("Richard Strauss Straße", "Richard Strauss Straße 80 &", "80", null, "&", null);
checkSplit(null, "'W 10 / 0170'", null, null, null, null);
checkSplit("Marder Weg", "Marder Weg", null, null, null, null);
- checkSplit("Gänsepforte", "Gänsepforte 10a-12b", "10a-12b", null, null,
- null);
+ checkSplit("Gänsepforte", "Gänsepforte 10a-12b", "10a-12b", null, null, null);
checkSplit("Marder Weg", "Marder Weg 2-4", "2-4", null, null, null);
- checkSplit("Hochgericht", "Hochgericht 33,35", "33,35", null, null,
- null);
- checkSplit("Annenstr.", "Annenstr. 23, 25, 27, 29,", "23,25,27,29,",
- null, null, null);
+ checkSplit("Hochgericht", "Hochgericht 33,35", "33,35", null, null, null);
+ checkSplit("Annenstr.", "Annenstr. 23, 25, 27, 29,", "23,25,27,29,", null, null, null);
- checkSplit("Maternistraße", "Maternistraße 6 - 14", "6 - 14", null,
- null, null);
+ checkSplit("Maternistraße", "Maternistraße 6 - 14", "6 - 14", null, null, null);
- checkSplit("Berliner Str.", "Berliner Str. 2,2a,4", "2,2a,4", null,
- null, null);
- checkSplit("Berliner Str.", "Berliner Str. 2,2a,4,", "2,2a,4,", null,
- null, null);
- checkSplit("Berliner Str.", "Berliner Str. 2,2 a,4", "2,2 a,4", null,
- null, null);
- checkSplit("Berliner Str.", "Berliner Str. 2, 4", "2,4", null, null,
- null);
- checkSplit("Berliner Str.", "Berliner Str. 2, 4", "2,4", null, null,
- null);
- checkSplit("Berliner Str.", "Berliner Str. 2a,4", "2a,4", null, null,
- null);
- checkSplit("Berliner Str.", "Berliner Str. 2a, 4", "2a,4", null, null,
- null);
- checkSplit("Berliner Str.", "Berliner Str. 2,2a, 4", "2,2a,4", null,
- null, null);
- checkSplit("Berliner Str.", "Berliner Str. 2, 2 a, 4,", "2,2 a,4,",
- null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2,2a,4", "2,2a,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2,2a,4,", "2,2a,4,", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2,2 a,4", "2,2 a,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2, 4", "2,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2, 4", "2,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2a,4", "2a,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2a, 4", "2a,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2,2a, 4", "2,2a,4", null, null, null);
+ checkSplit("Berliner Str.", "Berliner Str. 2, 2 a, 4,", "2,2 a,4,", null, null, null);
checkSplit("Dammweg", "Dammweg 3/4", "3/4", null, null, null);
- checkSplit("Hochgericht", "Hochgericht 33,35,66,78", "33,35,66,78",
- null, null, null);
+ checkSplit("Hochgericht", "Hochgericht 33,35,66,78", "33,35,66,78", null, null, null);
- checkSplit("Marder Weg", "Marder Weg 2/4/10", "2/4/10", null, null,
- null);
+ checkSplit("Marder Weg", "Marder Weg 2/4/10", "2/4/10", null, null, null);
// checkSplit("Burgstr.", "Burgstr. 16,16A-B", "16,16A-B", null, null,
// null);
checkSplit("Marder Weg", "Marder Weg 2 - 4 ", "2 - 4", null, null, null);
- checkSplit("Marder Weg", "Marder Weg 2 bis 4", "2 bis 4", null, null,
- null);
+ checkSplit("Marder Weg", "Marder Weg 2 bis 4", "2 bis 4", null, null, null);
checkSplit("Marder Weg", "Marder Weg 2\\4", "2\\4", null, null, null);
checkSplit("Marder Weg", "Marder Weg 2/4", "2/4", null, null, null);
@@ -203,8 +176,8 @@
checkSplit(null, null, "2", "2", "blub", "blub");
}
- private void checkSplit(String sollStrasse, String istStrasse,
- String sollHn, String istHn, String sollZusatz, String istZusatz) {
+ private void checkSplit(String sollStrasse, String istStrasse, String sollHn, String istHn, String sollZusatz,
+ String istZusatz) {
String[] objects = AddrStringUtil.split(istStrasse, istHn, istZusatz);
@@ -267,18 +240,15 @@
@Test
public void testRemoveLeadingSpacesInfrontOfNumbers() {
- assertEquals("2a,4",
- AddrStringUtil.removeLeadingSpacesInfrontOfNumbers("2a, 4"));
+ assertEquals("2a,4", AddrStringUtil.removeLeadingSpacesInfrontOfNumbers("2a, 4"));
}
@Test
- public void testNormalizeOrt()
- {
- assertEquals("sanktaugustin",AddrStringUtil.normalizeOrt("St. Augustin"));
- assertEquals("freiburgib",AddrStringUtil.normalizeOrt("Freiburg im Breisgau"));
+ public void testNormalizeOrt() {
+ assertEquals("sanktaugustin", AddrStringUtil.normalizeOrt("St. Augustin"));
+ assertEquals("freiburgib", AddrStringUtil.normalizeOrt("Freiburg im Breisgau"));
}
-
@Test
public void testNormalizeStrasse2() {
@@ -288,7 +258,7 @@
assertEquals("hatschiergasse", AddrStringUtil.normalizeStr(" hatschiergasse "));
assertEquals("eichendorfstrasse", AddrStringUtil.normalizeStr("Eichendorfstr."));
assertEquals("burgstrasse", AddrStringUtil.normalizeStr("Burgstr."));
- assertEquals("burgstrasse",AddrStringUtil.normalizeStr( "Burg Straße"));
+ assertEquals("burgstrasse", AddrStringUtil.normalizeStr("Burg Straße"));
assertEquals("drosselweg", AddrStringUtil.normalizeStr("Drossel Weg"));
assertEquals("drvogelerstrasse", AddrStringUtil.normalizeStr("Dr.-Vogeler-Str."));
assertEquals("drvogelerstrasse", AddrStringUtil.normalizeStr("Dr. Vogeler Str."));
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java 2011-11-16 15:34:45 UTC (rev 1780)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java 2011-11-16 18:24:20 UTC (rev 1781)
@@ -13,15 +13,14 @@
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
*/
@@ -82,20 +81,26 @@
/**
* Erstellt eine neue Rolle
- * @param rolename Name der neuen Rolle
- * @param inhRoles Rollen in denen die neue Rolle Mitglied ist
+ *
+ * @param rolename
+ * Name der neuen Rolle
+ * @param inhRoles
+ * Rollen in denen die neue Rolle Mitglied ist
*/
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);
}
/**
* Erstellt eine neue Rolle, wenn diese noch nicht existiert.
- * @param rolename Name der neuen Rolle
- * @param inhRoles Rollen in denen die neue Rolle Mitglied ist
+ *
+ * @param rolename
+ * Name der neuen Rolle
+ * @param inhRoles
+ * Rollen in denen die neue Rolle Mitglied ist
*/
public static void createRoleIfNotExists(Connection c, String rolename, String... inhRoles) throws SQLException {
if (existsRole(c, rolename))
@@ -104,8 +109,8 @@
}
/**
- * Querys the <code>geometry_columns</code> table is part of every POSTGIS
- * installation and must/should describe the geometry columns and tables.
+ * Querys the <code>geometry_columns</code> table is part of every POSTGIS installation and must/should describe the
+ * geometry columns and tables.
*/
static public String[] getColumnsDescribedInGeometryColumnsTable(Statement s) {
String[] columns = new String[0];
@@ -147,8 +152,8 @@
/**
* @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) {
@@ -179,8 +184,7 @@
}
/**
- * 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() + "'";
@@ -194,8 +198,7 @@
}
/**
- * 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 {
@@ -232,8 +235,8 @@
}
/**
- * 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
@@ -311,9 +314,7 @@
* @param name
* z.B.: keckformel wird dann zu keckformel()
* @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;
* @throws SQLException
*/
public static void createOrReplaceFunction(Connection c, String name, String plCommands) throws SQLException {
@@ -349,8 +350,7 @@
* @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 {
@@ -358,11 +358,10 @@
}
/**
- * 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 {
Statement s = c.createStatement();
@@ -397,21 +396,16 @@
* @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,
@@ -503,8 +497,8 @@
}
/**
- * 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
*/
@@ -513,9 +507,8 @@
}
/**
- * 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(":", "\\:");
@@ -528,11 +521,9 @@
* @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 {
return getOpenSessionCount(c, dbName, userName, null);
@@ -544,14 +535,11 @@
* @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 {
@@ -586,6 +574,26 @@
}
/**
+ * 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 {
+
+ String schema = "public";
+
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ 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 + "';");
+ return nativeCheckExistsColumnQuery.next();
+ }
+
+ /**
* Existiert ein relationsname als View?
*
* @param viewName
@@ -619,18 +627,14 @@
}
/**
- * 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.
*/
static public List<String[]> listQueries(Connection c, String datName, Integer minSecondsRunning)
throws SQLException {
@@ -667,4 +671,219 @@
return result;
}
+ /**
+ * Tablename der optinal als das Schema enthalten darf.
+ */
+ 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;
+
+ // System.out.println(queryString);
+
+ int result = c.createStatement().executeUpdate(queryString);
+
+ if (result != 0) {
+ // JRegDBUtils.log.error(queryString + " returned not 0 = " +
+ // result);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Liefert die COLUMN-NAMES eines PKs einer Tabelle
+ *
+ * @param dbc
+ * Connection to Postgressql Database
+ * @param tableName
+ * darf Schemanamen enthalten.
+ *
+ * @return Primary Key. <code>NULL</code> if empty
+ */
+ public static String getPrimaryKey(Connection dbc, String tableName) throws SQLException {
+
+ String schema = "public";
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ tableName = split[1];
+ }
+
+ Statement s = dbc.createStatement();
+ ResultSet rs = s
+ .executeQuery("select distinct(column_name) from INFORMATION_SCHEMA.KEY_COLUMN_USAGE a,INFORMATION_SCHEMA.TABLE_CONSTRAINTS b where constraint_type = 'PRIMARY KEY' and a.table_name='"
+ + tableName + "' and a.table_schema='" + schema + "';");
+
+ String pk = "";
+ try {
+
+ while (rs.next()) {
+ pk += rs.getString("column_name");
+ }
+
+ } finally {
+ rs.close();
+ }
+
+ if (pk.endsWith(","))
+ pk = pk.substring(0, pk.length() - 1);
+
+ return pk.isEmpty() ? null : pk;
+
+ }
+
+ /**
+ * 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;
+ ResultSet countRs = dbc.createStatement().executeQuery(sql);
+ try {
+ countRs.next();
+ return ((Number) countRs.getLong(1)).longValue();
+ } finally {
+ countRs.close();
+ }
+ }
+
+ public static boolean isIntColumn(Connection c, String tableName, String columnName) throws SQLException {
+ String schema = "public";
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ tableName = split[1];
+ }
+
+ 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 + "';");
+ try {
+
+ rs.next();
+ String typeDef = rs.getString(1);
+ Boolean isNumeric = false;
+ isNumeric |= typeDef.startsWith("numeric");
+
+ return isNumeric;
+ } finally {
+ rs.close();
+ }
+ }
+
+ /**
+ * Typischer Weise POSTGIS, wenn man sonst nichts anderen installiert hat.
+ */
+ public static boolean isUserDefinedColumn(Connection c, String tableName, String columnName) throws SQLException {
+
+ String schema = "public";
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ tableName = split[1];
+ }
+
+ 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 + "';");
+ 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 {
+
+ String schema = "public";
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ tableName = split[1];
+ }
+
+ 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 + "';");
+ try {
+ rs.next();
+ String typeDef = rs.getString(1);
+ Boolean isText = false;
+ isText |= typeDef.startsWith("text");
+ isText |= typeDef.startsWith("character");
+
+ return isText;
+ } finally {
+ rs.close();
+ }
+ }
+
+ /**
+ * Creates a new Column.
+ *
+ * @param dbc
+ * @param tableName
+ * @param columnName
+ * @param colTypeName
+ * @param comment
+ * @return
+ * @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!");
+
+ Statement s = dbc.createStatement();
+
+ if (existsColumn(dbc, tableName, columnName)) {
+ return false;
+ }
+
+ // Das eigentliche erstellen der neuen Spalte
+ String queryString = "ALTER TABLE " + tableName + " ADD " + columnName + " " + colTypeName;
+
+ // JRegDBUtils.log.debug(queryString);
+
+ int result = s.executeUpdate(queryString);
+
+ if (result != 0) {
+ return false;
+ }
+
+ if (comment != null && !comment.isEmpty()) {
+ queryString = "COMMENT ON COLUMN " + tableName + "." + columnName + " IS '" + comment + "';";
+ }
+
+ s.close();
+
+ return true;
+ }
+
+ /**
+ * Liefert alle Spalten einer Tabelle
+ */
+ public static ArrayList<String> getAllColumnsOf(Connection dbc, String tableName) throws SQLException {
+ String schema = "public";
+ if (tableName.contains(".")) {
+ final String[] split = tableName.split("\\.");
+ schema = split[0];
+ tableName = split[1];
+ }
+
+ ArrayList<String> cols = new ArrayList<String>();
+
+ // String tableName = PropertyUtils.getDbTableName(i);
+
+ String sql = "SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_NAME = '" + tableName
+ + "' and TABLE_SCHEMA = '" + schema + "';";
+
+ ResultSet colsRs = dbc.createStatement().executeQuery(sql);
+ try {
+ while (colsRs.next())
+ cols.add(colsRs.getString(1));
+ } finally {
+ colsRs.close();
+ }
+ return cols;
+ }
}
Modified: trunk/schmitzm-core/src/test/java/de/schmitzm/lang/TimedLimitedHashmapTest.java
===================================================================
--- trunk/schmitzm-core/src/test/java/de/schmitzm/lang/TimedLimitedHashmapTest.java 2011-11-16 15:34:45 UTC (rev 1780)
+++ trunk/schmitzm-core/src/test/java/de/schmitzm/lang/TimedLimitedHashmapTest.java 2011-11-16 18:24:20 UTC (rev 1781)
@@ -1,6 +1,5 @@
package de.schmitzm.lang;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
More information about the Schmitzm-commits
mailing list