Skip to content

Commit 2473c75

Browse files
committed
Allow "out" columns
1 parent 8c64939 commit 2473c75

2 files changed

Lines changed: 21 additions & 11 deletions

File tree

diesel/src/macros/mod.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ macro_rules! __diesel_column {
2323
DB: $crate::backend::Backend,
2424
<$table as QuerySource>::FromClause: QueryFragment<DB>,
2525
{
26-
fn walk_ast(&self, mut out: $crate::query_builder::AstPass<DB>) -> $crate::result::QueryResult<()> {
27-
$table.from_clause().walk_ast(out.reborrow())?;
28-
out.push_sql(".");
29-
out.push_identifier($sql_name)
26+
#[allow(non_snake_case)]
27+
fn walk_ast(&self, mut __out: $crate::query_builder::AstPass<DB>) -> $crate::result::QueryResult<()> {
28+
$table.from_clause().walk_ast(__out.reborrow())?;
29+
__out.push_sql(".");
30+
__out.push_identifier($sql_name)
3031
}
3132
}
3233

@@ -808,9 +809,10 @@ macro_rules! __diesel_table_impl {
808809
impl<DB: Backend> QueryFragment<DB> for star where
809810
<table as QuerySource>::FromClause: QueryFragment<DB>,
810811
{
811-
fn walk_ast(&self, mut out: AstPass<DB>) -> QueryResult<()> {
812-
table.from_clause().walk_ast(out.reborrow())?;
813-
out.push_sql(".*");
812+
#[allow(non_snake_case)]
813+
fn walk_ast(&self, mut __out: AstPass<DB>) -> QueryResult<()> {
814+
table.from_clause().walk_ast(__out.reborrow())?;
815+
__out.push_sql(".*");
814816
Ok(())
815817
}
816818
}

diesel_cli/src/infer_schema_internals/inference.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ static RESERVED_NAMES: &[&str] = &[
1414
"type", "typeof", "unsafe", "unsized", "use", "virtual", "where", "while", "yield",
1515
];
1616

17+
fn is_reserved(name: &str) -> bool {
18+
RESERVED_NAMES.contains(&name) || (
19+
// Names ending in an underscore are not considered reserved so that we
20+
// can always just append an underscore to generate an unreserved name.
21+
name.starts_with("__") && !name.ends_with("_")
22+
)
23+
}
24+
1725
pub fn load_table_names(
1826
database_url: &str,
1927
schema_name: Option<&str>,
@@ -110,9 +118,9 @@ pub fn load_foreign_key_constraints(
110118
constraints.map(|mut ct| {
111119
ct.sort();
112120
ct.iter_mut().for_each(|foreign_key_constraint| {
113-
if RESERVED_NAMES.contains(&foreign_key_constraint.foreign_key_rust_name.as_str()) {
121+
if is_reserved(&foreign_key_constraint.foreign_key_rust_name) {
114122
foreign_key_constraint.foreign_key_rust_name =
115-
format!("{}_", foreign_key_constraint.foreign_key_rust_name.as_str());
123+
format!("{}_", foreign_key_constraint.foreign_key_rust_name);
116124
}
117125
});
118126
ct
@@ -141,7 +149,7 @@ pub fn load_table_data(database_url: &str, name: TableName) -> Result<TableData,
141149
let primary_key = primary_key
142150
.iter()
143151
.map(|k| {
144-
if RESERVED_NAMES.contains(&k.as_str()) {
152+
if is_reserved(&k) {
145153
format!("{}_", k)
146154
} else {
147155
k.clone()
@@ -153,7 +161,7 @@ pub fn load_table_data(database_url: &str, name: TableName) -> Result<TableData,
153161
.into_iter()
154162
.map(|c| {
155163
let ty = determine_column_type(&c, &connection)?;
156-
let rust_name = if RESERVED_NAMES.contains(&c.column_name.as_str()) {
164+
let rust_name = if is_reserved(&c.column_name) {
157165
Some(format!("{}_", c.column_name))
158166
} else {
159167
None

0 commit comments

Comments
 (0)