Added method for deleting metadata.

This commit is contained in:
akwizgran
2016-02-10 13:58:46 +00:00
parent 00275e260f
commit a91d500263
6 changed files with 71 additions and 3 deletions

View File

@@ -225,6 +225,13 @@ interface Database<T> {
*/
void deleteMessage(T txn, MessageId m) throws DbException;
/**
* Deletes any metadata associated with the given message.
* <p>
* Locking: write.
*/
void deleteMessageMetadata(T txn, MessageId m) throws DbException;
/**
* Returns the contact with the given ID.
* <p>

View File

@@ -310,6 +310,23 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
}
}
public void deleteMessageMetadata(MessageId m) throws DbException {
lock.writeLock().lock();
try {
T txn = db.startTransaction();
try {
if (!db.containsMessage(txn, m))
throw new NoSuchMessageException();
db.deleteMessageMetadata(txn, m);
} catch (DbException e) {
db.abortTransaction(txn);
throw e;
}
} finally {
lock.writeLock().unlock();
}
}
public Ack generateAck(ContactId c, int maxMessages) throws DbException {
Collection<MessageId> ids;
lock.writeLock().lock();

View File

@@ -949,6 +949,22 @@ abstract class JdbcDatabase implements Database<Connection> {
}
}
public void deleteMessageMetadata(Connection txn, MessageId m)
throws DbException {
PreparedStatement ps = null;
try {
String sql = "DELETE FROM messageMetadata WHERE messageId = ?";
ps = txn.prepareStatement(sql);
ps.setBytes(1, m.getBytes());
int affected = ps.executeUpdate();
if (affected < 0) throw new DbStateException();
ps.close();
} catch (SQLException e) {
tryToClose(ps);
throw new DbException(e);
}
}
public Contact getContact(Connection txn, ContactId c) throws DbException {
PreparedStatement ps = null;
ResultSet rs = null;