Skip to content

Commit 9aa1a1e

Browse files
committed
fixup! RunQueryDsl: match same trait constraints as diesel
1 parent b04e408 commit 9aa1a1e

File tree

3 files changed

+147
-1
lines changed

3 files changed

+147
-1
lines changed

src/run_query_dsl/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ pub trait RunQueryDsl<Conn>: Sized {
643643

644644
// Note: Match the same types that diesel::RunQueryDsl applies to this
645645
// seems safe currently, as the trait imposes no restrictions based on Conn, only on T.
646-
impl<T, Conn> RunQueryDsl<Conn> for T where T: diesel::RunQueryDsl<Conn> {}
646+
impl<T, Conn> RunQueryDsl<Conn> for T where T: diesel::query_builder::AsQuery {}
647647

648648
/// Sugar for types which implement both `AsChangeset` and `Identifiable`
649649
///

tests/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ mod pooling;
1313
#[cfg(feature = "async-connection-wrapper")]
1414
mod sync_wrapper;
1515
mod type_check;
16+
mod run_query_dsl_impl_match;
1617

1718
async fn transaction_test<C: AsyncConnection<Backend = TestBackend>>(
1819
conn: &mut C,

tests/run_query_dsl_impl_match.rs

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
use super::{users, User, connection};
2+
use diesel::prelude::*;
3+
use diesel_async::RunQueryDsl;
4+
5+
#[derive(Debug, QueryableByName, PartialEq)]
6+
struct CountType {
7+
#[diesel(sql_type = diesel::sql_types::BigInt)]
8+
pub count: i64,
9+
}
10+
11+
#[tokio::test]
12+
async fn test_boxed_sql() {
13+
use diesel::query_builder::BoxedSqlQuery;
14+
15+
let mut con = connection().await;
16+
17+
let boxed: BoxedSqlQuery<_, _> = diesel::sql_query("select count(*) as count from users").into_boxed();
18+
19+
let result = boxed.get_result::<CountType>(&mut con).await.unwrap();
20+
21+
assert_eq!(result.count, 0);
22+
}
23+
24+
#[tokio::test]
25+
async fn test_select_statement() {
26+
use diesel::query_builder::SelectStatement;
27+
28+
let mut con = connection().await;
29+
30+
let select: SelectStatement<_, _, _, _, _, _, _> = users::table.select(User::as_select());
31+
32+
let result = select.get_results(&mut con).await.unwrap();
33+
34+
assert_eq!(result.len(), 0);
35+
}
36+
37+
#[tokio::test]
38+
async fn test_sql_query() {
39+
use diesel::query_builder::SqlQuery;
40+
41+
let mut con = connection().await;
42+
43+
let sql: SqlQuery<_> = diesel::sql_query("select count(*) as count from users");
44+
45+
let result: CountType = sql.get_result(&mut con).await.unwrap();
46+
47+
assert_eq!(result.count, 0);
48+
}
49+
50+
#[tokio::test]
51+
async fn test_unchecked_bind() {
52+
use diesel::expression::UncheckedBind;
53+
use diesel::sql_types::{Integer, Text};
54+
55+
let mut con = connection().await;
56+
57+
let unchecked: UncheckedBind<_, _> = diesel::dsl::sql::<Integer>("SELECT count(id) FROM users WHERE name = ")
58+
.bind::<Text, _>("Bob");
59+
60+
let result = unchecked.get_result(&mut con).await;
61+
62+
assert_eq!(Ok(0), result);
63+
}
64+
65+
#[tokio::test]
66+
async fn test_alias() {
67+
use diesel::query_source::Alias;
68+
69+
let mut con = connection().await;
70+
71+
let aliased: Alias<_> = diesel::alias!(users as other);
72+
73+
let result = aliased.get_results::<User>(&mut con).await.unwrap();
74+
75+
assert_eq!(result.len(), 0);
76+
}
77+
78+
#[tokio::test]
79+
async fn test_boxed_select() {
80+
use diesel::query_builder::BoxedSelectStatement;
81+
82+
let mut con = connection().await;
83+
84+
let select: BoxedSelectStatement<_, _, _, _> = users::table.select(User::as_select()).into_boxed();
85+
86+
let result = select.get_results(&mut con).await.unwrap();
87+
88+
assert_eq!(result.len(), 0);
89+
}
90+
91+
#[tokio::test]
92+
async fn test_sql_literal() {
93+
use diesel::expression::SqlLiteral;
94+
use diesel::sql_types::Integer;
95+
96+
let mut con = connection().await;
97+
98+
let literal: SqlLiteral<_> = diesel::dsl::sql::<Integer>("SELECT 6");
99+
100+
let result = literal.get_result(&mut con).await;
101+
102+
assert_eq!(Ok(6), result);
103+
}
104+
105+
#[tokio::test]
106+
async fn test_delete() {
107+
use diesel::query_builder::DeleteStatement;
108+
109+
let mut con = connection().await;
110+
111+
let delete: DeleteStatement<_, _, _> = diesel::delete(users::table);
112+
113+
let result = delete.execute(&mut con).await;
114+
115+
assert_eq!(Ok(0), result);
116+
}
117+
118+
#[tokio::test]
119+
async fn test_insert_statement() {
120+
use diesel::query_builder::InsertStatement;
121+
122+
let mut con = connection().await;
123+
124+
let inserted_names: InsertStatement<_, _, _, _> = diesel::insert_into(users::table)
125+
.values(users::name.eq("Timmy"));
126+
127+
let result = inserted_names.execute(&mut con).await;
128+
129+
assert_eq!(Ok(1), result);
130+
}
131+
132+
#[tokio::test]
133+
async fn test_update_statement() {
134+
use diesel::query_builder::UpdateStatement;
135+
136+
let mut con = connection().await;
137+
138+
let update: UpdateStatement<_, _, _, _> = diesel::update(users::table)
139+
.set(users::name.eq("Jim"))
140+
.filter(users::name.eq("Sean"));
141+
142+
let result = update.execute(&mut con).await;
143+
144+
assert_eq!(Ok(0), result);
145+
}

0 commit comments

Comments
 (0)