update, remove the has_attachment field from the envelopes table.

This commit is contained in:
rustmailer
2026-03-26 21:53:19 +08:00
parent 3f11c5dbbf
commit 0914bf710e
9 changed files with 27 additions and 20 deletions
+1 -5
View File
@@ -16,7 +16,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
use arrow::array::{BooleanArray, Int32Array, Int64Array, ListBuilder, StringBuilder, UInt64Array};
use arrow::array::{Int32Array, Int64Array, ListBuilder, StringBuilder, UInt64Array};
use arrow::datatypes::{DataType, Field, Schema};
use arrow::record_batch::RecordBatch;
use std::sync::Arc;
@@ -57,7 +57,6 @@ pub fn build_record_batch(items: &[Envelope]) -> RecordBatch {
Field::new("size_bytes", DataType::UInt64, true),
Field::new("thread_id", DataType::Utf8, true),
Field::new("message_id", DataType::Utf8, true),
Field::new("has_attachment", DataType::Boolean, false),
Field::new("attachment_count", DataType::Int32, false),
Field::new("regular_attachment_count", DataType::Int32, false),
Field::new(
@@ -87,7 +86,6 @@ pub fn build_record_batch(items: &[Envelope]) -> RecordBatch {
let mut size_b = UInt64Array::builder(capacity);
let mut thread_id_b = StringBuilder::with_capacity(capacity, capacity * 20);
let mut msg_id_b = StringBuilder::with_capacity(capacity, capacity * 30);
let mut has_att_b = BooleanArray::builder(capacity);
let mut att_count_b = Int32Array::builder(capacity);
let mut regular_att_count_b = Int32Array::builder(capacity);
let mut tags_b = ListBuilder::new(StringBuilder::new());
@@ -119,7 +117,6 @@ pub fn build_record_batch(items: &[Envelope]) -> RecordBatch {
size_b.append_value(e.size as u64);
thread_id_b.append_value(&e.thread_id);
msg_id_b.append_value(&e.message_id);
has_att_b.append_value(e.regular_attachment_count > 0);
att_count_b.append_value(e.attachment_count as i32);
regular_att_count_b.append_value(e.regular_attachment_count as i32);
tags_b.append(true);
@@ -145,7 +142,6 @@ pub fn build_record_batch(items: &[Envelope]) -> RecordBatch {
Arc::new(size_b.finish()),
Arc::new(thread_id_b.finish()),
Arc::new(msg_id_b.finish()),
Arc::new(has_att_b.finish()),
Arc::new(att_count_b.finish()),
Arc::new(regular_att_count_b.finish()),
Arc::new(tags_b.finish()),
+6 -3
View File
@@ -1212,7 +1212,7 @@ impl DuckDBManager {
{
let sql = format!(
r#"
SELECT has_attachment, COUNT(*) AS cnt
SELECT (regular_attachment_count > 0) AS has_attachment, COUNT(*) AS cnt
FROM envelopes
{account_filter}
GROUP BY has_attachment
@@ -1559,8 +1559,11 @@ impl DuckDBManager {
}
if let Some(has) = filter.has_attachment {
base_sql.push_str(" AND e.has_attachment = ? ");
args.push(has.into());
if has {
base_sql.push_str(" AND e.regular_attachment_count > 0 ");
} else {
base_sql.push_str(" AND e.regular_attachment_count = 0 ");
}
}
if let Some(tags) = filter.tags {
@@ -34,7 +34,6 @@ CREATE TABLE IF NOT EXISTS envelopes (
message_id TEXT,
-- attachment summary
has_attachment BOOLEAN NOT NULL,
attachment_count INTEGER NOT NULL CHECK (attachment_count >= 0),
regular_attachment_count INTEGER NOT NULL CHECK (regular_attachment_count >= 0),
tags VARCHAR[],
+1 -1
View File
@@ -390,7 +390,7 @@ pub async fn reattach_eml_content(
)
})?;
if !envelope.has_attachments() {
if !envelope.has_any_attachments() {
return Ok((envelope, restored_eml));
}
+1 -1
View File
@@ -49,7 +49,7 @@ pub struct Envelope {
}
impl Envelope {
pub fn has_attachments(&self) -> bool {
pub fn has_any_attachments(&self) -> bool {
self.attachment_count > 0
}