Skip to content
Prev Previous commit
Next Next commit
issues-347 Fix all compile errors
  • Loading branch information
ikrivosheev committed Sep 13, 2022
commit bcd35c35320918c80a9861e081753d420f4f9968
2 changes: 1 addition & 1 deletion src/backend/index_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ pub trait IndexBuilder: QuotedBuilder + TableRefBuilder {
#[doc(hidden)]
/// Write the column index prefix.
fn prepare_index_columns(&self, columns: &[IndexColumn], sql: &mut dyn SqlWriter) {
write!(sql, " (").unwrap();
write!(sql, "(").unwrap();
columns.iter().fold(true, |first, col| {
if !first {
write!(sql, ", ").unwrap();
Expand Down
2 changes: 1 addition & 1 deletion src/backend/mysql/foreign_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl ForeignKeyBuilder for MysqlQueryBuilder {
}
write!(sql, " FOREIGN KEY ").unwrap();

write!(sql, " (").unwrap();
write!(sql, "(").unwrap();
create.foreign_key.columns.iter().fold(true, |first, col| {
if !first {
write!(sql, ", ").unwrap();
Expand Down
6 changes: 5 additions & 1 deletion src/backend/mysql/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ impl QueryBuilder for MysqlQueryBuilder {
}

fn prepare_on_conflict_keywords(&self, sql: &mut dyn SqlWriter) {
write!(sql, " ON DUPLICATE KEY ").unwrap();
write!(sql, " ON DUPLICATE KEY").unwrap();
}

fn prepare_on_conflict_do_update_keywords(&self, sql: &mut dyn SqlWriter) {
Expand Down Expand Up @@ -75,4 +75,8 @@ impl QueryBuilder for MysqlQueryBuilder {
fn values_list_tuple_prefix(&self) -> &str {
"ROW"
}

fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter) {
sql.push_param(value.clone(), self as _);
}
}
4 changes: 4 additions & 0 deletions src/backend/postgres/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,8 @@ impl QueryBuilder for PostgresQueryBuilder {
_ => {}
};
}

fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter) {
sql.push_param(value.clone(), self as _);
}
}
17 changes: 8 additions & 9 deletions src/backend/query_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
self.prepare_simple_expr(&r#else.into(), sql);
}

write!(sql, " END) ").unwrap();
write!(sql, " END)").unwrap();
}

/// Translate [`SelectDistinct`] into SQL statement.
Expand Down Expand Up @@ -435,7 +435,6 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
write!(sql, " ").unwrap();
self.prepare_join_table_ref(join_expr, sql);
if let Some(on) = &join_expr.on {
write!(sql, " ").unwrap();
self.prepare_join_on(on, sql);
}
}
Expand Down Expand Up @@ -801,7 +800,6 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
if !matches!(order_expr.order, Order::Field(_)) {
self.prepare_simple_expr(&order_expr.expr, sql);
}
write!(sql, " ").unwrap();
self.prepare_order(order_expr, sql);
}

Expand Down Expand Up @@ -832,7 +830,7 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
write!(sql, "CASE ").unwrap();
let mut i = 0;
for value in &values.0 {
write!(sql, " WHEN ").unwrap();
write!(sql, "WHEN ").unwrap();
self.prepare_simple_expr(&order_expr.expr, sql);
write!(sql, "=").unwrap();
let value = self.value_to_string(value);
Expand All @@ -844,9 +842,7 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
}

/// Write [`Value`] into SQL statement as parameter.
fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter) {
sql.push_param(value.clone(), &self);
}
fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter);

/// Write [`Value`] inline.
fn prepare_constant(&self, value: &Value, sql: &mut dyn SqlWriter) {
Expand All @@ -856,7 +852,6 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {

/// Translate a `&[ValueTuple]` into a VALUES list.
fn prepare_values_list(&self, value_tuples: &[ValueTuple], sql: &mut dyn SqlWriter) {
let (placeholder, numbered) = self.placeholder();
write!(sql, "VALUES ").unwrap();
value_tuples.iter().fold(true, |first, value_tuple| {
if !first {
Expand All @@ -868,7 +863,7 @@ pub trait QueryBuilder: QuotedBuilder + EscapeBuilder + TableRefBuilder {
if !first {
write!(sql, ", ").unwrap();
}
sql.push_param(value, &self);
self.prepare_value(&value, sql);
false
});

Expand Down Expand Up @@ -1400,6 +1395,10 @@ impl QueryBuilder for CommonSqlQueryBuilder {
fn prepare_query_statement(&self, query: &SubQueryStatement, sql: &mut dyn SqlWriter) {
query.prepare_statement(self, sql);
}

fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter) {
sql.push_param(value.clone(), self as _);
}
}

impl QuotedBuilder for CommonSqlQueryBuilder {
Expand Down
4 changes: 4 additions & 0 deletions src/backend/sqlite/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,8 @@ impl QueryBuilder for SqliteQueryBuilder {
// SQLite doesn't support inserting multiple rows with default values
write!(sql, "DEFAULT VALUES").unwrap()
}

fn prepare_value(&self, value: &Value, sql: &mut dyn SqlWriter) {
sql.push_param(value.clone(), self as _);
}
}
16 changes: 11 additions & 5 deletions src/prepare.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@ pub use std::fmt::Write;
pub trait SqlWriter: Write + ToString {
fn push_param(&mut self, value: Value, query_builder: &dyn QueryBuilder);

fn as_writer(&mut self) -> &mut dyn Write {
&mut self as _
}
fn as_writer(&mut self) -> &mut dyn Write;
}

impl SqlWriter for String {
fn push_param(&mut self, value: Value, query_builder: &dyn QueryBuilder) {
self.push_str(&query_builder.value_to_string(&value))
}

fn as_writer(&mut self) -> &mut dyn Write {
self as _
}
}

#[derive(Debug, Clone)]
Expand Down Expand Up @@ -60,12 +62,16 @@ impl SqlWriter for SqlWriterValues {
self.counter += 1;
if self.numbered {
let counter = self.counter;
write!(self, "{}{}", self.placeholder, counter).unwrap();
write!(self.string, "{}{}", self.placeholder, counter).unwrap();
} else {
write!(self, "{}", self.placeholder).unwrap();
write!(self.string, "{}", self.placeholder).unwrap();
}
self.values.push(value)
}

fn as_writer(&mut self) -> &mut dyn Write {
self as _
}
}

pub fn inject_parameters<I>(sql: &str, params: I, query_builder: &dyn QueryBuilder) -> String
Expand Down
4 changes: 1 addition & 3 deletions src/query/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,7 @@ pub trait QueryStatementWriter: QueryStatementBuilder {
/// );
/// ```
fn build_collect<T: QueryBuilder>(&self, query_builder: T, sql: &mut dyn SqlWriter) -> String {
let (placeholder, numbered) = query_builder.placeholder();
let mut sql = SqlWriterValues::new(placeholder, numbered);
self.build_collect_into(query_builder, &mut sql);
self.build_collect_into(query_builder, sql);
sql.to_string()
}

Expand Down
2 changes: 1 addition & 1 deletion tests/postgres/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ mod index;
mod interval;
mod query;
mod table;
mod types;
// mod types;

#[path = "../common.rs"]
mod common;
Expand Down