diff -ruN dbmail-2.0.0.orig/db.c dbmail-2.0.0/db.c
--- dbmail-2.0.0.orig/db.c	2004-10-09 06:31:37.000000000 +1000
+++ dbmail-2.0.0/db.c	2004-10-25 22:03:13.000000000 +1000
@@ -1786,7 +1786,7 @@
 		 "WHERE msg.mailbox_idnr = '%llu' "
 		 "AND msg.status < '%d' "
 		 "AND msg.physmessage_id = pm.id "
-		 "AND unique_id != '' order by status ASC",
+		 "AND length(unique_id) > 0 order by status ASC",
 		 inbox_mailbox_idnr, MESSAGE_STATUS_DELETE);
 
 	if (db_query(query) == -1) {
@@ -2520,7 +2520,7 @@
 	snprintf(query, DEF_QUERYSIZE,
 		 "SELECT message_idnr, seen_flag, recent_flag "
 		 "FROM dbmail_messages WHERE mailbox_idnr = '%llu' "
-		 "AND status < '%d' AND unique_id != '' "
+		 "AND status < '%d' AND length(unique_id) > 0 "
 		 "ORDER BY message_idnr ASC", mb->uid, MESSAGE_STATUS_DELETE);
 
 	if (db_query(query) == -1) {
@@ -2555,8 +2555,9 @@
 	 * able to restore them 
 	 */
 	snprintf(query, DEF_QUERYSIZE,
-		 "SELECT MAX(message_idnr) FROM dbmail_messages "
-		 "WHERE unique_id != ''");
+		"SELECT message_idnr FROM dbmail_messages "
+		"WHERE length(unique_id) > 0 "
+		"ORDER BY message_idnr DESC LIMIT 1");
 
 	if (db_query(query) == -1) {
 		trace(TRACE_ERROR,
@@ -3156,9 +3157,10 @@
 	u64_t id;
 
 	snprintf(query, DEF_QUERYSIZE,
-		 "SELECT MIN(message_idnr) FROM dbmail_messages "
+		 "SELECT message_idnr FROM dbmail_messages "
 		 "WHERE mailbox_idnr = '%llu' "
-		 "AND status < '%d' AND seen_flag = '0' AND unique_id != ''",
+		 "AND status < '%d' AND seen_flag = '0' AND length(unique_id) > 0 "
+		 "ORDER BY message_idnr ASC LIMIT 1",
 		 mailbox_idnr, MESSAGE_STATUS_DELETE);
 
 	if (db_query(query) == -1) {
@@ -3249,7 +3251,7 @@
 	snprintf(query, DEF_QUERYSIZE,
 		 "SELECT %s FROM dbmail_messages "
 		 "WHERE message_idnr = '%llu' AND status < '%d' "
-		 "AND unique_id != '' "
+		 "AND length(unique_id) > 0 "
 		 "AND mailbox_idnr = '%llu'",
 		 the_flag_name, msg_idnr, MESSAGE_STATUS_DELETE, mailbox_idnr);
 
@@ -3275,7 +3277,7 @@
 		 "SELECT seen_flag, answered_flag, deleted_flag, "
 		 "flagged_flag, draft_flag, recent_flag FROM dbmail_messages "
 		 "WHERE message_idnr = '%llu' AND status < '%d' "
-		 "AND unique_id != '' "
+		 "AND length(unique_id) > 0 "
 		 "AND mailbox_idnr = '%llu'", msg_idnr, MESSAGE_STATUS_DELETE,
 		 mailbox_idnr);
 
@@ -3382,7 +3384,7 @@
 	snprintf(query, DEF_QUERYSIZE,
 		 "SELECT %s FROM dbmail_physmessage pm, dbmail_messages msg "
 		 "WHERE msg.mailbox_idnr = '%llu' "
-		 "AND msg.message_idnr = '%llu' AND msg.unique_id!='' "
+		 "AND msg.message_idnr = '%llu' AND length(msg.unique_id) > 0 "
 		 "AND pm.id = msg.physmessage_id",
 		 to_char_str, mailbox_idnr, msg_idnr);
 	my_free(to_char_str);
@@ -3454,7 +3456,7 @@
 		 "WHERE pm.id = msg.physmessage_id "
 		 "AND msg.message_idnr = '%llu' "
 		 "AND msg.status< '%d' "
-		 "AND msg.unique_id != '' "
+		 "AND length(msg.unique_id) > 0 "
 		 "AND msg.mailbox_idnr = '%llu'", msg_idnr, MESSAGE_STATUS_DELETE,
 		 mailbox_idnr);
 
@@ -3500,7 +3502,7 @@
 		 "WHERE pm.id = msg.physmessage_id "
 		 "AND message_idnr BETWEEN '%llu' AND '%llu' "
 		 "AND mailbox_idnr = '%llu' AND status < '%d' "
-		 "AND unique_id != '' "
+		 "AND length(unique_id) > 0 "
 		 "ORDER BY message_idnr ASC",
 		 to_char_str, msg_idnr_low, msg_idnr_high, mailbox_idnr,
 		 MESSAGE_STATUS_DELETE);
@@ -3641,7 +3643,7 @@
 		 "SELECT message_idnr FROM dbmail_messages "
 		 "WHERE message_idnr = '%llu' "
 		 "AND mailbox_idnr = '%llu' "
-		 "AND status< '%d' AND unique_id!=''", msg_idnr,
+		 "AND status< '%d' AND length(unique_id) > 0", msg_idnr,
 		 mailbox_idnr, MESSAGE_STATUS_DELETE);
 
 	if (db_query(query) == -1) {
diff -ruN dbmail-2.0.0.orig/sql/postgresql/create_tables.pgsql dbmail-2.0.0/sql/postgresql/create_tables.pgsql
--- dbmail-2.0.0.orig/sql/postgresql/create_tables.pgsql	2004-09-07 03:34:00.000000000 +1000
+++ dbmail-2.0.0/sql/postgresql/create_tables.pgsql	2004-10-25 22:09:10.000000000 +1000
@@ -62,7 +62,6 @@
    permission INT2 DEFAULT '2' NOT NULL,
    PRIMARY KEY (mailbox_idnr)
 );
-CREATE INDEX dbmail_mailboxes_owner_idx ON dbmail_mailboxes(owner_idnr);  CREATE INDEX dbmail_mailboxes_name_idx ON dbmail_mailboxes(name);  CREATE UNIQUE INDEX dbmail_mailboxes_owner_name_idx 
 	ON dbmail_mailboxes(owner_idnr, name); @@ -116,14 +115,10 @@
    status INT2 DEFAULT '0' NOT NULL,
    PRIMARY KEY (message_idnr)
 );
-CREATE INDEX dbmail_messages_mailbox_idx ON dbmail_messages(mailbox_idnr); -CREATE INDEX dbmail_messages_physmessage_idx 
-	ON dbmail_messages(physmessage_id);
+CREATE INDEX dbmail_messages_physmessage_idx ON 
+dbmail_messages(physmessage_id);
 CREATE INDEX dbmail_messages_seen_flag_idx ON dbmail_messages(seen_flag); -CREATE INDEX dbmail_messages_unique_id_idx ON dbmail_messages(unique_id);  CREATE INDEX dbmail_messages_status_idx ON dbmail_messages(status); -CREATE INDEX dbmail_messages_status_notdeleted_idx 
-	ON dbmail_messages(status) WHERE status < '2';
+CREATE INDEX dbmail_messages_mailbox_idnr_status_unique_id_idx ON 
+dbmail_messages(mailbox_idnr,status,length(unique_id::text));
 
 CREATE SEQUENCE dbmail_messageblk_idnr_seq;  CREATE TABLE dbmail_messageblks ( @@ -135,8 +130,6 @@
    is_header INT2 DEFAULT '0' NOT NULL,
    PRIMARY KEY (messageblk_idnr)
 );
-CREATE INDEX dbmail_messageblks_physmessage_idx 
-	ON dbmail_messageblks(physmessage_id);
 CREATE INDEX dbmail_messageblks_physmessage_is_header_idx 
 	ON dbmail_messageblks(physmessage_id, is_header);
 

