Skip to content

Commit 26b8803

Browse files
committed
Merge pull request #3979 from formlogic-kirk/alias_op_impls
Alias op impls
1 parent 6a9bfdf commit 26b8803

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

diesel/src/query_source/aliasing/aliased_field.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use diesel_derives::DieselNumericOps;
2+
13
use super::{Alias, AliasSource};
24

35
use crate::backend::Backend;
@@ -13,7 +15,7 @@ use crate::sql_types;
1315

1416
use std::marker::PhantomData;
1517

16-
#[derive(Debug, Clone, Copy)]
18+
#[derive(Debug, Clone, Copy, DieselNumericOps)]
1719
/// Represents an aliased field (column) within diesel's query builder
1820
///
1921
/// See [`alias!`](crate::alias) for more details.

diesel_tests/tests/alias.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@ fn selecting_basic_data() {
2626
assert_eq!(expected_data, actual_data);
2727
}
2828

29+
#[test]
30+
fn ops_with_aliases() {
31+
// This test should fail to compile if the std::ops::{Add, Sub, ...} impls are missing for AliasedField.
32+
let likes_alias = alias!(likes as likes_alias);
33+
let pokes_alias = alias!(pokes as pokes_alias);
34+
35+
// Using pokes::poke_count and comment_id as they are columns of the same type
36+
let _unaliased = likes::table
37+
.inner_join(pokes::table.on(likes::user_id.eq(pokes::user_id)))
38+
.select(pokes::poke_count + likes::comment_id);
39+
let _aliased = likes_alias
40+
.inner_join(
41+
pokes_alias.on(likes_alias
42+
.field(likes::user_id)
43+
.eq(pokes_alias.field(pokes::user_id))),
44+
)
45+
.select(pokes_alias.field(pokes::poke_count) + likes_alias.field(likes::comment_id));
46+
}
47+
2948
#[test]
3049
fn select_multiple_from_join() {
3150
let connection = &mut connection_with_sean_and_tess_in_users_table();

0 commit comments

Comments
 (0)