File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed
diesel/src/query_source/aliasing Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change
1
+ use diesel_derives:: DieselNumericOps ;
2
+
1
3
use super :: { Alias , AliasSource } ;
2
4
3
5
use crate :: backend:: Backend ;
@@ -13,7 +15,7 @@ use crate::sql_types;
13
15
14
16
use std:: marker:: PhantomData ;
15
17
16
- #[ derive( Debug , Clone , Copy ) ]
18
+ #[ derive( Debug , Clone , Copy , DieselNumericOps ) ]
17
19
/// Represents an aliased field (column) within diesel's query builder
18
20
///
19
21
/// See [`alias!`](crate::alias) for more details.
Original file line number Diff line number Diff line change @@ -26,6 +26,25 @@ fn selecting_basic_data() {
26
26
assert_eq ! ( expected_data, actual_data) ;
27
27
}
28
28
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
+
29
48
#[ test]
30
49
fn select_multiple_from_join ( ) {
31
50
let connection = & mut connection_with_sean_and_tess_in_users_table ( ) ;
You can’t perform that action at this time.
0 commit comments