diff artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java @ 231:1ea35226a6de

Database cleaner: Ignoring locked artifacts is now done on database level. artifacts/trunk@1635 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 31 Mar 2011 15:56:50 +0000
parents fbd57d2eeaef
children 202b6ae2fcad
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java	Thu Mar 31 14:48:28 2011 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java	Thu Mar 31 15:56:50 2011 +0000
@@ -221,10 +221,25 @@
         int removedArtifacts = 0;
 
         DataSource dataSource = DBConnection.getDataSource();
+
+        Set<Integer> lockedIds = lockedIdsProvider != null
+            ? lockedIdsProvider.getLockedIds()
+            : EMPTY_IDS;
+
+        String questionMarks = StringUtils.repeat('?', lockedIds.size(), ',');
+
         try {
             connection = dataSource.getConnection();
             connection.setAutoCommit(false);
-            fetchIds = connection.prepareStatement(SQL_OUTDATED);
+
+            fetchIds = connection.prepareStatement(
+                SQL_OUTDATED.replace("$LOCKED_IDS$", questionMarks));
+
+            int idx = 1;
+            for (Integer id: lockedIds) {
+                fetchIds.setInt(idx++, id);
+            }
+
             deleteId = connection.prepareStatement(SQL_DELETE);
 
             // some dbms like derby do not support LIMIT
@@ -234,20 +249,13 @@
             for (;;) {
                 List<IdData> ids = new ArrayList<IdData>();
 
-                Set<Integer> filter = lockedIdsProvider != null
-                    ? lockedIdsProvider.getLockedIds()
-                    : EMPTY_IDS;
-
                 result = fetchIds.executeQuery();
 
                 while (result.next()) {
-                    int id = result.getInt(1);
-                    if (!filter.contains(id)) {
-                        ids.add(new IdData(
-                            id,
-                            result.getString(2),
-                            result.getBytes(3)));
-                    }
+                    ids.add(new IdData(
+                        result.getInt(1),
+                        result.getString(2),
+                        result.getBytes(3)));
                 }
 
                 result.close(); result = null;

http://dive4elements.wald.intevation.org