improved implementation of head() for SqliteMailbox
authoradam <adam@megacz.com>
Sat, 1 Mar 2008 07:44:50 +0000 (07:44 +0000)
committeradam <adam@megacz.com>
Sat, 1 Mar 2008 07:44:50 +0000 (07:44 +0000)
darcs-hash:20080301074450-5007d-74b9c19dbf4b1e760d4f5110b662106c0d55994d.gz

src/org/ibex/mail/SqliteMailbox.java

index 2987831..5f23706 100644 (file)
@@ -298,6 +298,19 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree {
                 rs = query.executeQuery();
             } catch (Exception e) { throw new RuntimeException(e); }
         }
+        public Headers head()   {
+            if (m != null) return m.headers;
+            try {
+                PreparedStatement query = conn.prepareStatement("select headers_,flags_ from 'mail' where messageid_=?");
+                query.setString(1, rs.getString(1));
+                Log.warn("SQL", "select headers_,flags_ from 'mail' where messageid_="+rs.getString(1));
+
+                ResultSet rs2 = query.executeQuery();
+                if (!rs2.next()) { Log.error("XXX", "should not happen"); return null; }
+                flags = rs2.getInt(2);
+                return new Headers(Fountain.Util.create(rs2.getString(1)));
+            } catch (Exception e) { throw new RuntimeException(e); }
+        }
         public Message cur()    {
             try {
                 if (m!=null) return m;
@@ -328,7 +341,6 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree {
                 update.executeUpdate();
             } catch (Exception e) { throw new RuntimeException(e); }
         }
-        public Headers head()       { return cur().headers; }
         public boolean next()       {
             try { m = null; uid = -1; count++;
             boolean ret = rs.next();