1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use ::{Assignments, Conditions, Orders};
use itertools::Itertools;
use std::borrow::Cow;

pub fn escape(keyword: &str) -> String {
    let mut result = keyword.replace("\"", "\\\"");
    result.insert(0, '"');
    result.push('"');
    result
}

#[doc(hidden)]
pub fn keyword_list<'a, I: Iterator<Item=&'a Cow<'static, str>>>(keywords: I) -> String {
    keywords.map(|i| i.to_owned()).join(", ")
}

#[doc(hidden)]
pub fn assignment_list(assignments: &Assignments, offset: usize) -> String {
    assignments.iter()
        .map(|a| &a.0)
        .enumerate()
        .map(|(i, n)| format!("{} = ${}", n, offset + i))
        .join(", ")
}

#[doc(hidden)]
pub fn condition_list(conditions: &Conditions, mut offset: usize) -> String {
    conditions.iter()
        .map(|c| format!("{} {}", c.0, c.1.to_placeholder_string(&mut offset)))
        .join(" AND ")
}

#[doc(hidden)]
pub fn order_list(orders: &Orders) -> String {
    orders.iter()
        .map(|o| format!("{} {}", o.0, o.1))
        .join(", ")
}

#[doc(hidden)]
pub fn placeholders(offset: usize, n: usize) -> String {
    (offset..offset+n).map(|i| format!("${}", i)).join(", ")
}