X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FSqliteMailbox.java;h=49a270097f54d1b56ec84b6a05fbbc11a7106aae;hb=dc886ec931da530791b1062ad51e9dbc0a627a87;hp=45ff89012fcca955b77b0553fd15ec61864010aa;hpb=9bf699d8880e4077c427befac7234122d9dc3c7e;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/SqliteMailbox.java b/src/org/ibex/mail/SqliteMailbox.java index 45ff890..49a2700 100644 --- a/src/org/ibex/mail/SqliteMailbox.java +++ b/src/org/ibex/mail/SqliteMailbox.java @@ -48,7 +48,7 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { */ // FIXME: should messageid_ be decared unique? private static final String columns_ = - "uid_ INTEGER PRIMARY KEY AUTOINCREMENT, messageid_ unique,from_,to_,date_,subject_,headers_,body_,flags_"; + "uid_ INTEGER PRIMARY KEY AUTOINCREMENT, messageid_,from_,to_,date_,subject_,headers_,body_,flags_"; private final int uidValidity; private final File file; @@ -235,8 +235,10 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { return super.count(q); } } - public void insert(Message m, int flags) { + public synchronized void insert(Message m, int flags) { try { + + /* PreparedStatement query = conn.prepareStatement("select headers_,body_,flags_ from 'mail' where messageid_=?"); query.setString(1, m.messageid); Log.warn("SQL", "select headers_,body_,flags_ from 'mail' where messageid_="+m.messageid); @@ -260,6 +262,7 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { return; } } + */ PreparedStatement add = conn.prepareStatement("insert "+/*"or replace "+*/"into 'mail' ("+columns+") values (?,?,?,?,?,?,?,?)"); add.setString(1, m.messageid+""); @@ -267,8 +270,8 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { add.setString(3, m.to+""); add.setString(4, m.date+""); add.setString(5, m.subject+""); - add.setString(6, streamToString(m.headers.getStream())); - add.setString(7, streamToString(m.getBody().getStream())); + add.setString(6, SqliteDB.streamToString(m.headers.getStream())); + add.setString(7, SqliteDB.streamToString(m.getBody().getStream())); add.setInt (8, flags); add.executeUpdate(); @@ -298,12 +301,25 @@ 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 uid_=?"); + query.setString(1, rs.getString(2)); + Log.warn("SQL", "select headers_,flags_ from 'mail' where uid_="+rs.getString(2)); + + 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; - PreparedStatement query = conn.prepareStatement("select headers_,body_,flags_ from 'mail' where messageid_=?"); - query.setString(1, rs.getString(1)); - Log.warn("SQL", "select headers_,body_,flags_ from 'mail' where messageid_="+rs.getString(1)); + PreparedStatement query = conn.prepareStatement("select headers_,body_,flags_ from 'mail' where uid_=?"); + query.setString(1, rs.getString(2)); + Log.warn("SQL", "select headers_,body_,flags_ from 'mail' where uid_="+rs.getString(2)); ResultSet rs2 = query.executeQuery(); if (!rs2.next()) { Log.error("XXX", "should not happen"); return null; } @@ -322,13 +338,13 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { int oldflags = rs.getInt("flags_"); if (oldflags==flags) return; Log.info(this, "setflags (old="+oldflags+")" + "update mail set flags_="+(flags)+" where uid_="+uid()+""); + if ((flags & Mailbox.Flag.DELETED) != 0) Log.printStackTrace("deletion", Log.WARN); PreparedStatement update = conn.prepareStatement("update mail set flags_=? where uid_=?"); update.setInt(1, flags); update.setInt(2, uid()); 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(); @@ -341,11 +357,7 @@ public class SqliteMailbox extends Mailbox.Default implements MailTree { } public int imapNumber() { if ("".equals(whereClause)) return count; - try { - ResultSet rs = conn.prepareStatement("select count(*) from mail where uid_ <= " + uid()).executeQuery(); - rs.next(); - return rs.getInt(1); - } catch (Exception e) { throw new RuntimeException(e); } + try { return queryImapNumberCache(uid()); } catch (SQLException s) { throw new RuntimeException(s); } } public int nntpNumber() { return uid(); } public void delete() {