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());
                                }


Reply via email to