|
|
|
@ -418,6 +418,49 @@ pub fn query_to_sql(q: &Query) -> String {
|
|
|
|
|
rec(q, s);
|
|
|
|
|
s.push_str(") ");
|
|
|
|
|
}
|
|
|
|
|
Flags(v) => {
|
|
|
|
|
let total = v.len();
|
|
|
|
|
if total > 1 {
|
|
|
|
|
s.push_str("(");
|
|
|
|
|
}
|
|
|
|
|
for (i, f) in v.iter().enumerate() {
|
|
|
|
|
match f.as_str() {
|
|
|
|
|
"draft" => {
|
|
|
|
|
s.push_str(" (flags & 8 > 0) ");
|
|
|
|
|
}
|
|
|
|
|
"deleted" | "trashed" => {
|
|
|
|
|
s.push_str(" (flags & 6 > 0) ");
|
|
|
|
|
}
|
|
|
|
|
"flagged" => {
|
|
|
|
|
s.push_str(" (flags & 16 > 0) ");
|
|
|
|
|
}
|
|
|
|
|
"recent" => {
|
|
|
|
|
s.push_str(" (flags & 4 == 0) ");
|
|
|
|
|
}
|
|
|
|
|
"seen" | "read" => {
|
|
|
|
|
s.push_str(" (flags & 4 > 0) ");
|
|
|
|
|
}
|
|
|
|
|
"unseen" | "unread" => {
|
|
|
|
|
s.push_str(" (flags & 4 == 0) ");
|
|
|
|
|
}
|
|
|
|
|
"answered" | "replied" => {
|
|
|
|
|
s.push_str(" (flags & 2 > 0) ");
|
|
|
|
|
}
|
|
|
|
|
"unanswered" => {
|
|
|
|
|
s.push_str(" (flags & 2 == 0) ");
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if total > 1 && i != total - 1 {
|
|
|
|
|
s.push_str(" AND ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if total > 1 {
|
|
|
|
|
s.push_str(") ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_ => {}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|