Author: jflesch
Date: 2007-07-08 19:07:41 +0000 (Sun, 08 Jul 2007)
New Revision: 13996
Modified:
trunk/apps/Thaw/src/thaw/core/Logger.java
trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
Log:
Fix bug #1430 : Don't let someone add twice the same key to an index
Modified: trunk/apps/Thaw/src/thaw/core/Logger.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Logger.java 2007-07-08 17:46:47 UTC (rev
13995)
+++ trunk/apps/Thaw/src/thaw/core/Logger.java 2007-07-08 19:07:41 UTC (rev
13996)
@@ -22,7 +22,7 @@
* 2 or more is recommanded.
* 4 or more is unhealthy
*/
- public final static int LOG_LEVEL = 5;
+ public final static int LOG_LEVEL = 3;
private static Vector logListeners = null;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-07-08 17:46:47 UTC (rev 13995)
+++ trunk/apps/Thaw/src/thaw/plugins/index/IndexManagementHelper.java
2007-07-08 19:07:41 UTC (rev 13996)
@@ -1387,6 +1387,7 @@
}
+
/**
* @param keys => String
*/
@@ -1396,14 +1397,20 @@
Hsqldb db;
PreparedStatement st;
+ PreparedStatement preSt;
int nextId;
db = indexBrowser.getDb();
synchronized(db.dbLock) {
try {
+ preSt =
db.getConnection().prepareStatement("SELECT id FROM files "+
+
"WHERE indexParent = ? AND "+
+
"LOWER(publicKey) LIKE ? LIMIT 1");
+
st =
db.getConnection().prepareStatement("INSERT INTO files "+
- "(id,
filename, publicKey, localPath, mime, size, category, indexParent) "+
+ "(id,
filename, publicKey, localPath, "+
+ "
mime, size, category, indexParent) "+
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
nextId = DatabaseManager.getNextId(db, "files");
@@ -1420,18 +1427,28 @@
final String key = (String)it.next();
try {
- st.setInt(1, nextId);
- st.setString(2,
FreenetURIHelper.getFilenameFromKey(key));
- st.setString(3, key);
- st.setNull(4, Types.VARCHAR /*
localPath */);
- st.setString(5,
thaw.plugins.insertPlugin.DefaultMIMETypes.guessMIMEType(FreenetURIHelper.getFilenameFromKey(key)));
- st.setLong(6, 0L);
- st.setNull(7 /* category */,
Types.INTEGER /* not used at the moment */);
- st.setInt(8, target.getId());
+ preSt.setInt(1, target.getId());
+ preSt.setString(2,
FreenetURIHelper.getComparablePart(key) +"%");
- st.execute();
+ ResultSet res = preSt.executeQuery();
- nextId++;
+ if (!res.next()) {
+
+ st.setInt(1, nextId);
+ st.setString(2,
FreenetURIHelper.getFilenameFromKey(key));
+ st.setString(3, key);
+ st.setNull(4, Types.VARCHAR /*
localPath */);
+ st.setString(5,
thaw.plugins.insertPlugin.DefaultMIMETypes.guessMIMEType(FreenetURIHelper.getFilenameFromKey(key)));
+ st.setLong(6, 0L);
+ st.setNull(7 /* category */,
Types.INTEGER /* not used at the moment */);
+ st.setInt(8, target.getId());
+
+ st.execute();
+
+ nextId++;
+ } else {
+ Logger.notice(target, "Key
already in the specified index, not added");
+ }
} catch(SQLException e) {
Logger.error(new
IndexManagementHelper(), "Error while adding file: "+e.toString());
}