use crate::Syntax;
use crate::query::clause::OrderBy;
use crate::query::clause::orderby;
use crate::writers::limit_skip::LimitSkipWriter;
use std::collections::VecDeque;
pub(crate) fn write(
syntax: Syntax,
limit: &Option<i64>,
offset: &Option<i64>,
orders: &[OrderBy],
table_alias: &str,
) -> Option<String> {
let w = LimitSkipWriter::new(syntax);
let mut parts = VecDeque::default();
if let Some(skiplimit) = w.skiplimit(offset, limit) {
parts.push_back(skiplimit);
}
if !parts.is_empty() && orders.is_empty() {
parts.push_front("ORDER BY 1".to_owned())
}
if !orders.is_empty() {
parts.push_front(orderby::to_sql(syntax, orders, table_alias));
}
if parts.is_empty() {
return None;
}
let parts: Vec<String> = parts.drain(..).collect();
Some(parts.join(" "))
}