Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

issues-347 Add SqlWriter trait #436

Merged
merged 6 commits into from
Sep 18, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
issues-347 Remove SqlStringWriter (instead use String)
  • Loading branch information
ikrivosheev committed Sep 13, 2022
commit 877042fe4d4fea6e17b2ff0db8049de9ac0367f6
2 changes: 1 addition & 1 deletion src/backend/index_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 57,7 @@ pub trait IndexBuilder: QuotedBuilder TableRefBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.name.prepare(sql, self.quote());
col.name.prepare(sql.as_writer(), self.quote());
self.write_column_index_prefix(&col.prefix, sql);
if let Some(order) = &col.order {
match order {
Expand Down
4 changes: 2 additions & 2 deletions src/backend/mysql/foreign_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 50,7 @@ impl ForeignKeyBuilder for MysqlQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand All @@ -70,7 70,7 @@ impl ForeignKeyBuilder for MysqlQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand Down
2 changes: 1 addition & 1 deletion src/backend/mysql/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 52,7 @@ impl QueryBuilder for MysqlQueryBuilder {

fn prepare_on_conflict_excluded_table(&self, col: &DynIden, sql: &mut dyn SqlWriter) {
write!(sql, "VALUES(").unwrap();
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
write!(sql, ")").unwrap();
}

Expand Down
8 changes: 4 additions & 4 deletions src/backend/mysql/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 2,7 @@ use super::*;

impl TableBuilder for MysqlQueryBuilder {
fn prepare_column_def(&self, column_def: &ColumnDef, sql: &mut dyn SqlWriter) {
column_def.name.prepare(sql, self.quote());
column_def.name.prepare(sql.as_writer(), self.quote());

if let Some(column_type) = &column_def.types {
write!(sql, " ").unwrap();
Expand Down Expand Up @@ -161,13 161,13 @@ impl TableBuilder for MysqlQueryBuilder {
}
TableAlterOption::RenameColumn(from_name, to_name) => {
write!(sql, "RENAME COLUMN ").unwrap();
from_name.prepare(sql, self.quote());
from_name.prepare(sql.as_writer(), self.quote());
write!(sql, " TO ").unwrap();
to_name.prepare(sql, self.quote());
to_name.prepare(sql.as_writer(), self.quote());
}
TableAlterOption::DropColumn(column_name) => {
write!(sql, "DROP COLUMN ").unwrap();
column_name.prepare(sql, self.quote());
column_name.prepare(sql.as_writer(), self.quote());
}
TableAlterOption::DropForeignKey(name) => {
let mut foreign_key = TableForeignKey::new();
Expand Down
4 changes: 2 additions & 2 deletions src/backend/postgres/foreign_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 49,7 @@ impl ForeignKeyBuilder for PostgresQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand All @@ -69,7 69,7 @@ impl ForeignKeyBuilder for PostgresQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand Down
2 changes: 1 addition & 1 deletion src/backend/postgres/index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 32,7 @@ impl IndexBuilder for PostgresQueryBuilder {
match table {
TableRef::Table(_) => {}
TableRef::SchemaTable(schema, _) => {
schema.prepare(sql, self.quote());
schema.prepare(sql.as_writer(), self.quote());
write!(sql, ".").unwrap();
}
_ => panic!("Not supported"),
Expand Down
2 changes: 1 addition & 1 deletion src/backend/postgres/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 93,7 @@ impl QueryBuilder for PostgresQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
c.prepare(sql, self.quote());
c.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand Down
12 changes: 6 additions & 6 deletions src/backend/postgres/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 2,7 @@ use super::*;

impl TableBuilder for PostgresQueryBuilder {
fn prepare_column_def(&self, column_def: &ColumnDef, sql: &mut dyn SqlWriter) {
column_def.name.prepare(sql, self.quote());
column_def.name.prepare(sql.as_writer(), self.quote());

self.prepare_column_type_check_auto_increment(column_def, sql);

Expand Down Expand Up @@ -150,7 150,7 @@ impl TableBuilder for PostgresQueryBuilder {
TableAlterOption::ModifyColumn(column_def) => {
if column_def.types.is_some() {
write!(sql, "ALTER COLUMN ").unwrap();
column_def.name.prepare(sql, self.quote());
column_def.name.prepare(sql.as_writer(), self.quote());
write!(sql, " TYPE").unwrap();
self.prepare_column_type_check_auto_increment(column_def, sql);
}
Expand All @@ -163,7 163,7 @@ impl TableBuilder for PostgresQueryBuilder {
} else {
write!(sql, " ALTER COLUMN ").unwrap();
}
column_def.name.prepare(sql, self.quote());
column_def.name.prepare(sql.as_writer(), self.quote());
match column_spec {
ColumnSpec::Null => write!(sql, " DROP NOT NULL").unwrap(),
_ => {
Expand All @@ -175,13 175,13 @@ impl TableBuilder for PostgresQueryBuilder {
}
TableAlterOption::RenameColumn(from_name, to_name) => {
write!(sql, "RENAME COLUMN ").unwrap();
from_name.prepare(sql, self.quote());
from_name.prepare(sql.as_writer(), self.quote());
write!(sql, " TO ").unwrap();
to_name.prepare(sql, self.quote());
to_name.prepare(sql.as_writer(), self.quote());
}
TableAlterOption::DropColumn(column_name) => {
write!(sql, "DROP COLUMN ").unwrap();
column_name.prepare(sql, self.quote());
column_name.prepare(sql.as_writer(), self.quote());
}
TableAlterOption::DropForeignKey(name) => {
let mut foreign_key = TableForeignKey::new();
Expand Down
59 changes: 35 additions & 24 deletions src/backend/query_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 31,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
if !first {
write!(sql, ", ").unwrap()
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand Down Expand Up @@ -158,7 158,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {

if let Some((name, query)) = &select.window {
write!(sql, " WINDOW ").unwrap();
name.prepare(sql, self.quote());
name.prepare(sql.as_writer(), self.quote());
write!(sql, " AS ").unwrap();
self.prepare_window_statement(query, sql);
}
Expand Down Expand Up @@ -409,7 409,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
match &select_expr.window {
Some(WindowSelectType::Name(name)) => {
write!(sql, " OVER ").unwrap();
name.prepare(sql, self.quote())
name.prepare(sql.as_writer(), self.quote())
}
Some(WindowSelectType::Query(window)) => {
write!(sql, " OVER ").unwrap();
Expand All @@ -423,7 423,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
match &select_expr.alias {
Some(alias) => {
write!(sql, " AS ").unwrap();
alias.prepare(sql, self.quote());
alias.prepare(sql.as_writer(), self.quote());
}
None => {}
};
Expand Down Expand Up @@ -455,39 455,39 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
self.prepare_select_statement(query, sql);
write!(sql, ")").unwrap();
write!(sql, " AS ").unwrap();
alias.prepare(sql, self.quote());
alias.prepare(sql.as_writer(), self.quote());
}
TableRef::ValuesList(values, alias) => {
write!(sql, "(").unwrap();
self.prepare_values_list(values, sql);
write!(sql, ")").unwrap();
write!(sql, " AS ").unwrap();
alias.prepare(sql, self.quote());
alias.prepare(sql.as_writer(), self.quote());
}
_ => self.prepare_table_ref_iden(table_ref, sql),
}
}

fn prepare_column_ref(&self, column_ref: &ColumnRef, sql: &mut dyn SqlWriter) {
match column_ref {
ColumnRef::Column(column) => column.prepare(sql, self.quote()),
ColumnRef::Column(column) => column.prepare(sql.as_writer(), self.quote()),
ColumnRef::TableColumn(table, column) => {
table.prepare(sql, self.quote());
table.prepare(sql.as_writer(), self.quote());
write!(sql, ".").unwrap();
column.prepare(sql, self.quote());
column.prepare(sql.as_writer(), self.quote());
}
ColumnRef::SchemaTableColumn(schema, table, column) => {
schema.prepare(sql, self.quote());
schema.prepare(sql.as_writer(), self.quote());
write!(sql, ".").unwrap();
table.prepare(sql, self.quote());
table.prepare(sql.as_writer(), self.quote());
write!(sql, ".").unwrap();
column.prepare(sql, self.quote());
column.prepare(sql.as_writer(), self.quote());
}
ColumnRef::Asterisk => {
write!(sql, "*").unwrap();
}
ColumnRef::TableAsterisk(table) => {
table.prepare(sql, self.quote());
table.prepare(sql.as_writer(), self.quote());
write!(sql, ".*").unwrap();
}
};
Expand Down Expand Up @@ -581,7 581,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
/// Translate [`Function`] into SQL statement.
fn prepare_function_common(&self, function: &Function, sql: &mut dyn SqlWriter) {
if let Function::Custom(iden) = function {
iden.unquoted(sql);
iden.unquoted(sql.as_writer());
} else {
write!(
sql,
Expand Down Expand Up @@ -654,7 654,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
.alias
.as_ref()
.unwrap()
.prepare(sql, self.quote());
.prepare(sql.as_writer(), self.quote());
write!(sql, " ").unwrap();
}
if let Some(cycle) = &with_clause.cycle {
Expand All @@ -664,9 664,17 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {

write!(sql, " SET ").unwrap();

cycle.set_as.as_ref().unwrap().prepare(sql, self.quote());
cycle
.set_as
.as_ref()
.unwrap()
.prepare(sql.as_writer(), self.quote());
write!(sql, " USING ").unwrap();
cycle.using.as_ref().unwrap().prepare(sql, self.quote());
cycle
.using
.as_ref()
.unwrap()
.prepare(sql.as_writer(), self.quote());
write!(sql, " ").unwrap();
}
}
Expand Down Expand Up @@ -704,7 712,10 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
cte: &CommonTableExpression,
sql: &mut dyn SqlWriter,
) {
cte.table_name.as_ref().unwrap().prepare(sql, self.quote());
cte.table_name
.as_ref()
.unwrap()
.prepare(sql.as_writer(), self.quote());

if cte.cols.is_empty() {
write!(sql, " ").unwrap();
Expand All @@ -717,7 728,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
write!(sql, ", ").unwrap();
}
col_first = false;
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
}

write!(sql, ") ").unwrap();
Expand Down Expand Up @@ -882,7 893,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
/// Translate [`Keyword`] into SQL statement.
fn prepare_keyword(&self, keyword: &Keyword, sql: &mut dyn SqlWriter) {
if let Keyword::Custom(iden) = keyword {
iden.unquoted(sql);
iden.unquoted(sql.as_writer());
} else {
write!(
sql,
Expand Down Expand Up @@ -1059,7 1070,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
if !first {
write!(sql, ", ").unwrap()
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand All @@ -1086,7 1097,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
if !first {
write!(sql, ", ").unwrap()
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
write!(sql, " = ").unwrap();
self.prepare_on_conflict_excluded_table(col, sql);
false
Expand All @@ -1098,7 1109,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
if !first {
write!(sql, ", ").unwrap()
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
write!(sql, " = ").unwrap();
self.prepare_simple_expr(expr, sql);
false
Expand All @@ -1125,7 1136,7 @@ pub trait QueryBuilder: QuotedBuilder EscapeBuilder TableRefBuilder {
fn prepare_on_conflict_excluded_table(&self, col: &DynIden, sql: &mut dyn SqlWriter) {
write!(sql, "{0}excluded{0}", self.quote()).unwrap();
write!(sql, ".").unwrap();
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
}

#[doc(hidden)]
Expand Down
4 changes: 2 additions & 2 deletions src/backend/sqlite/foreign_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 32,7 @@ impl ForeignKeyBuilder for SqliteQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand All @@ -50,7 50,7 @@ impl ForeignKeyBuilder for SqliteQueryBuilder {
if !first {
write!(sql, ", ").unwrap();
}
col.prepare(sql, self.quote());
col.prepare(sql.as_writer(), self.quote());
false
});
write!(sql, ")").unwrap();
Expand Down
6 changes: 3 additions & 3 deletions src/backend/sqlite/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 2,7 @@ use super::*;

impl TableBuilder for SqliteQueryBuilder {
fn prepare_column_def(&self, column_def: &ColumnDef, sql: &mut dyn SqlWriter) {
column_def.name.prepare(sql, self.quote());
column_def.name.prepare(sql.as_writer(), self.quote());

if let Some(column_type) = &column_def.types {
write!(sql, " ").unwrap();
Expand Down Expand Up @@ -160,9 160,9 @@ impl TableBuilder for SqliteQueryBuilder {
}
TableAlterOption::RenameColumn(from_name, to_name) => {
write!(sql, "RENAME COLUMN ").unwrap();
from_name.prepare(sql, self.quote());
from_name.prepare(sql.as_writer(), self.quote());
write!(sql, " TO ").unwrap();
to_name.prepare(sql, self.quote());
to_name.prepare(sql.as_writer(), self.quote());
}
TableAlterOption::DropColumn(_) => {
panic!("Sqlite not support dropping table column")
Expand Down
Loading