Mercurial > dive4elements > framework
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;