Skip to content

Commit e0028cc

Browse files
committed
Remove Connection#query_sql
Similar to `query_sql_params`, all uses of this function can be replaced by bare select.
1 parent 0c3ad95 commit e0028cc

8 files changed

Lines changed: 85 additions & 77 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ for Rust libraries in [RFC #1105](https://github.com/rust-lang/rfcs/blob/master/
3434
will get them by default if you import `diesel::*`. For a less aggressive
3535
glob, you can import `diesel::prelude::*`, which will only export our traits.
3636

37+
### Removed
38+
39+
* `Connection#query_sql` and `Connection#query_sql_params` have been removed.
40+
These methods were not part of the public API, and were only meant to be used
41+
for testing Diesel itself. However, they were technically callable from any
42+
crate, so the removal has been noted here. Their usage can be replaced with
43+
bare `select` and `expression::dsl::sql`.
44+
3745
## [0.4.1] 2016-01-11
3846

3947
### Changed

diesel/src/connection/mod.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,6 @@ impl Connection {
137137
self.exec_sql_params(&sql, &params, &Some(types)).map(Cursor::new)
138138
}
139139

140-
#[doc(hidden)]
141-
pub fn query_sql<T, U>(&self, query: &str) -> QueryResult<Cursor<T, U>> where
142-
T: NativeSqlType,
143-
U: Queryable<T>,
144-
{
145-
let result = try!(self.execute_inner(query));
146-
Ok(Cursor::new(result))
147-
}
148-
149140
fn exec_sql_params(&self, query: &str, param_data: &Vec<Option<Vec<u8>>>, param_types: &Option<Vec<u32>>) -> QueryResult<DbResult> {
150141
let query = try!(CString::new(query));
151142
let params_pointer = param_data.iter()

diesel/src/expression/extensions/interval_dsl.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,16 @@ impl DayAndMonthIntervalDsl for f64 {
243243
mod tests {
244244
extern crate dotenv;
245245
extern crate quickcheck;
246+
246247
use self::quickcheck::quickcheck;
247248
use self::dotenv::dotenv;
248-
use super::*;
249+
250+
use ::{types, select};
249251
use connection::Connection;
250-
use types;
251252
use data_types::PgInterval;
253+
use expression::dsl::sql;
254+
use prelude::*;
255+
use super::*;
252256

253257
macro_rules! test_fn {
254258
($tpe:ty, $test_name:ident, $units:ident) => {
@@ -259,9 +263,9 @@ mod tests {
259263
.expect("DATABASE_URL must be set in order to run tests");
260264
let connection = Connection::establish(&connection_url).unwrap();
261265

262-
let query = format!(concat!("SELECT '{} ", stringify!($units), "'::interval"), val);
263-
let res: PgInterval = connection.query_sql::<types::Interval, _>(&query)
264-
.unwrap().nth(0).unwrap();
266+
let sql_str = format!(concat!("'{} ", stringify!($units), "'::interval"), val);
267+
let query = select(sql::<types::Interval>(&sql_str));
268+
let res = query.get_result::<PgInterval>(&connection).unwrap();
265269
let val = val.$units();
266270
val.months == res.months &&
267271
val.days == res.days &&

diesel/src/expression/sql_literal.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use query_builder::{QueryBuilder, BuildQueryResult};
22
use std::marker::PhantomData;
3-
use super::{Expression, SelectableExpression};
3+
use super::{Expression, SelectableExpression, NonAggregate};
44
use types::NativeSqlType;
55

66
#[derive(Debug, Clone)]
@@ -33,6 +33,9 @@ impl<ST: NativeSqlType> Expression for SqlLiteral<ST> {
3333
impl<QS, ST: NativeSqlType> SelectableExpression<QS> for SqlLiteral<ST> {
3434
}
3535

36+
impl<ST: NativeSqlType> NonAggregate for SqlLiteral<ST> {
37+
}
38+
3639
pub fn sql<ST: NativeSqlType>(sql: &str) -> SqlLiteral<ST> {
3740
SqlLiteral::new(sql.into())
3841
}

diesel_codegen/src/schema_inference/mod.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,12 @@ fn load_table_names(
174174
sp: Span,
175175
connection: &Connection,
176176
) -> Result<Vec<String>, Box<MacResult>> {
177-
connection.query_sql::<types::VarChar, String>(
178-
"SELECT table_name FROM information_schema.tables
179-
WHERE table_schema = 'public'
180-
AND table_name NOT LIKE '\\_\\_%'")
177+
use diesel::prelude::*;
178+
use diesel::expression::dsl::sql;
181179

180+
let query = select(sql::<types::VarChar>("table_name FROM information_schema.tables"))
181+
.filter(sql::<types::Bool>("table_schema = 'public' AND table_name NOT LIKE '\\_\\_%'"));
182+
query.load(&connection)
182183
.map(|r| r.collect())
183184
.map_err(|_| {
184185
cx.span_err(sp, "Error loading table names");

diesel_tests/tests/expressions/date_and_time.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,14 @@ fn time_is_deserialized_properly() {
8383

8484
#[test]
8585
fn interval_is_deserialized_properly() {
86+
use diesel::expression::dsl::sql;
8687
let connection = connection();
8788

88-
let data = connection.query_sql::
89-
<(types::Interval, types::Interval, types::Interval, types::Interval), _>(
90-
"SELECT '1 minute'::interval, '1 day'::interval, '1 month'::interval,
91-
'4 years 3 days 2 hours 1 minute'::interval").unwrap().nth(0).unwrap();
89+
let data = select(sql::
90+
<(types::Interval, types::Interval, types::Interval, types::Interval)>(
91+
"'1 minute'::interval, '1 day'::interval, '1 month'::interval,
92+
'4 years 3 days 2 hours 1 minute'::interval"))
93+
.first(&connection).unwrap();
9294

9395
let one_minute = 1.minute();
9496
let one_day = 1.day();
@@ -101,17 +103,17 @@ fn interval_is_deserialized_properly() {
101103
#[test]
102104
fn adding_interval_to_timestamp() {
103105
use self::has_timestamps::dsl::*;
106+
use diesel::expression::dsl::sql;
104107

105108
let connection = connection();
106109
setup_test_table(&connection);
107110
connection.execute("INSERT INTO has_timestamps (created_at, updated_at) VALUES
108111
('2015-11-15 06:07:41', '2015-11-15 20:07:41')").unwrap();
109112

110-
let expected_data = connection.query_sql::<types::Timestamp, PgTimestamp>("SELECT '2015-11-16 06:07:41'::timestamp")
111-
.unwrap().nth(0).unwrap();
112-
let actual_data: PgTimestamp = has_timestamps.select(created_at + 1.day())
113-
.first(&connection)
114-
.unwrap();
113+
let expected_data = select(sql::<types::Timestamp>("'2015-11-16 06:07:41'::timestamp"))
114+
.get_result::<PgTimestamp>(&connection);
115+
let actual_data = has_timestamps.select(created_at + 1.day())
116+
.first::<PgTimestamp>(&connection);
115117
assert_eq!(expected_data, actual_data);
116118
}
117119

diesel_tests/tests/transactions.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn drop_test_table(connection: &Connection, table_name: &str) {
120120
}
121121

122122
fn count_test_table(connection: &Connection, table_name: &str) -> i64 {
123-
let query = format!("SELECT COUNT(*) FROM {}", table_name);
124-
let mut cursor = connection.query_sql::<types::BigInt, _>(&query).unwrap();
125-
cursor.nth(0).unwrap()
123+
use diesel::expression::dsl::sql;
124+
select(sql::<types::BigInt>(&format!("COUNT(*) FROM {}", table_name)))
125+
.first(&connection).unwrap()
126126
}

diesel_tests/tests/types.rs

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use diesel::types::*;
44

55
#[test]
66
fn boolean_from_sql() {
7-
assert_eq!(true, query_single_value::<Bool, bool>("SELECT 't'::bool"));
8-
assert_eq!(false, query_single_value::<Bool, bool>("SELECT 'f'::bool"));
7+
assert_eq!(true, query_single_value::<Bool, bool>("'t'::bool"));
8+
assert_eq!(false, query_single_value::<Bool, bool>("'f'::bool"));
99
}
1010

1111
#[test]
@@ -18,9 +18,9 @@ fn boolean_to_sql() {
1818

1919
#[test]
2020
fn i16_from_sql() {
21-
assert_eq!(0, query_single_value::<SmallInt, i16>("SELECT 0::int2"));
22-
assert_eq!(-1, query_single_value::<SmallInt, i16>("SELECT -1::int2"));
23-
assert_eq!(1, query_single_value::<SmallInt, i16>("SELECT 1::int2"));
21+
assert_eq!(0, query_single_value::<SmallInt, i16>("0::int2"));
22+
assert_eq!(-1, query_single_value::<SmallInt, i16>("-1::int2"));
23+
assert_eq!(1, query_single_value::<SmallInt, i16>("1::int2"));
2424
}
2525

2626
#[test]
@@ -34,9 +34,9 @@ fn i16_to_sql_smallint() {
3434

3535
#[test]
3636
fn i32_from_sql() {
37-
assert_eq!(0, query_single_value::<Integer, i32>("SELECT 0"));
38-
assert_eq!(-1, query_single_value::<Integer, i32>("SELECT -1"));
39-
assert_eq!(70000, query_single_value::<Integer, i32>("SELECT 70000"));
37+
assert_eq!(0, query_single_value::<Integer, i32>("0"));
38+
assert_eq!(-1, query_single_value::<Integer, i32>("-1"));
39+
assert_eq!(70000, query_single_value::<Integer, i32>("70000"));
4040
}
4141

4242
#[test]
@@ -50,10 +50,10 @@ fn i32_to_sql_integer() {
5050

5151
#[test]
5252
fn i64_from_sql() {
53-
assert_eq!(0, query_single_value::<BigInt, i64>("SELECT 0::int8"));
54-
assert_eq!(-1, query_single_value::<BigInt, i64>("SELECT -1::int8"));
53+
assert_eq!(0, query_single_value::<BigInt, i64>("0::int8"));
54+
assert_eq!(-1, query_single_value::<BigInt, i64>("-1::int8"));
5555
assert_eq!(283745982374,
56-
query_single_value::<BigInt, i64>("SELECT 283745982374::int8"));
56+
query_single_value::<BigInt, i64>("283745982374::int8"));
5757
}
5858

5959
#[test]
@@ -69,14 +69,14 @@ use std::{f32, f64};
6969

7070
#[test]
7171
fn f32_from_sql() {
72-
assert_eq!(0.0, query_single_value::<Float, f32>("SELECT 0.0::real"));
73-
assert_eq!(0.5, query_single_value::<Float, f32>("SELECT 0.5::real"));
74-
let nan = query_single_value::<Float, f32>("SELECT 'NaN'::real");
72+
assert_eq!(0.0, query_single_value::<Float, f32>("0.0::real"));
73+
assert_eq!(0.5, query_single_value::<Float, f32>("0.5::real"));
74+
let nan = query_single_value::<Float, f32>("'NaN'::real");
7575
assert!(nan.is_nan());
7676
assert_eq!(f32::INFINITY,
77-
query_single_value::<Float, f32>("SELECT 'Infinity'::real"));
77+
query_single_value::<Float, f32>("'Infinity'::real"));
7878
assert_eq!(-f32::INFINITY,
79-
query_single_value::<Float, f32>("SELECT '-Infinity'::real"));
79+
query_single_value::<Float, f32>("'-Infinity'::real"));
8080
}
8181

8282
#[test]
@@ -94,14 +94,14 @@ fn f32_to_sql_float() {
9494

9595
#[test]
9696
fn f64_from_sql() {
97-
assert_eq!(0.0, query_single_value::<Double, f64>("SELECT 0.0::double precision"));
98-
assert_eq!(0.5, query_single_value::<Double, f64>("SELECT 0.5::double precision"));
99-
let nan = query_single_value::<Double, f64>("SELECT 'NaN'::double precision");
97+
assert_eq!(0.0, query_single_value::<Double, f64>("0.0::double precision"));
98+
assert_eq!(0.5, query_single_value::<Double, f64>("0.5::double precision"));
99+
let nan = query_single_value::<Double, f64>("'NaN'::double precision");
100100
assert!(nan.is_nan());
101101
assert_eq!(f64::INFINITY,
102-
query_single_value::<Double, f64>("SELECT 'Infinity'::double precision"));
102+
query_single_value::<Double, f64>("'Infinity'::double precision"));
103103
assert_eq!(-f64::INFINITY,
104-
query_single_value::<Double, f64>("SELECT '-Infinity'::double precision"));
104+
query_single_value::<Double, f64>("'-Infinity'::double precision"));
105105
}
106106

107107
#[test]
@@ -122,8 +122,8 @@ fn f64_to_sql_float() {
122122

123123
#[test]
124124
fn string_from_sql() {
125-
assert_eq!("hello", &query_single_value::<VarChar, String>("SELECT 'hello'"));
126-
assert_eq!("world", &query_single_value::<VarChar, String>("SELECT 'world'"));
125+
assert_eq!("hello", &query_single_value::<VarChar, String>("'hello'"));
126+
assert_eq!("world", &query_single_value::<VarChar, String>("'world'"));
127127
}
128128

129129
#[test]
@@ -144,11 +144,11 @@ fn string_to_sql_varchar() {
144144
fn binary_from_sql() {
145145
let invalid_utf8_bytes = vec![0x1Fu8, 0x8Bu8];
146146
assert_eq!(invalid_utf8_bytes,
147-
query_single_value::<Binary, Vec<u8>>("SELECT E'\\\\x1F8B'::bytea"));
147+
query_single_value::<Binary, Vec<u8>>("E'\\\\x1F8B'::bytea"));
148148
assert_eq!(Vec::<u8>::new(),
149-
query_single_value::<Binary, Vec<u8>>("SELECT ''::bytea"));
149+
query_single_value::<Binary, Vec<u8>>("''::bytea"));
150150
assert_eq!(vec![0u8],
151-
query_single_value::<Binary, Vec<u8>>("SELECT E'\\\\000'::bytea"));
151+
query_single_value::<Binary, Vec<u8>>("E'\\\\000'::bytea"));
152152
}
153153

154154
#[test]
@@ -167,19 +167,19 @@ fn bytes_to_sql_binary() {
167167
#[test]
168168
fn option_from_sql() {
169169
assert_eq!(Some(true),
170-
query_single_value::<Nullable<Bool>, Option<bool>>("SELECT 't'::bool"));
170+
query_single_value::<Nullable<Bool>, Option<bool>>("'t'::bool"));
171171
assert_eq!(None,
172-
query_single_value::<Nullable<Bool>, Option<bool>>("SELECT NULL"));
172+
query_single_value::<Nullable<Bool>, Option<bool>>("NULL"));
173173
assert_eq!(Some(1),
174-
query_single_value::<Nullable<Integer>, Option<i32>>("SELECT 1"));
174+
query_single_value::<Nullable<Integer>, Option<i32>>("1"));
175175
assert_eq!(None,
176-
query_single_value::<Nullable<Integer>, Option<i32>>("SELECT NULL"));
176+
query_single_value::<Nullable<Integer>, Option<i32>>("NULL"));
177177
assert_eq!(Some("Hello!".to_string()),
178-
query_single_value::<Nullable<VarChar>, Option<String>>("SELECT 'Hello!'"));
178+
query_single_value::<Nullable<VarChar>, Option<String>>("'Hello!'"));
179179
assert_eq!(Some("".to_string()),
180-
query_single_value::<Nullable<VarChar>, Option<String>>("SELECT ''"));
180+
query_single_value::<Nullable<VarChar>, Option<String>>("''"));
181181
assert_eq!(None,
182-
query_single_value::<Nullable<VarChar>, Option<String>>("SELECT NULL"));
182+
query_single_value::<Nullable<VarChar>, Option<String>>("NULL"));
183183
}
184184

185185
#[test]
@@ -201,12 +201,12 @@ fn option_to_sql() {
201201
fn pg_array_from_sql() {
202202
assert_eq!(vec![true, false, true],
203203
query_single_value::<Array<Bool>, Vec<bool>>(
204-
"SELECT ARRAY['t', 'f', 't']::bool[]"));
204+
"ARRAY['t', 'f', 't']::bool[]"));
205205
assert_eq!(vec![1, 2, 3],
206-
query_single_value::<Array<Integer>, Vec<i32>>("SELECT ARRAY[1, 2, 3]"));
206+
query_single_value::<Array<Integer>, Vec<i32>>("ARRAY[1, 2, 3]"));
207207
assert_eq!(vec!["Hello".to_string(), "".to_string(), "world".to_string()],
208208
query_single_value::<Array<VarChar>, Vec<String>>(
209-
"SELECT ARRAY['Hello', '', 'world']"));
209+
"ARRAY['Hello', '', 'world']"));
210210
}
211211

212212
#[test]
@@ -225,7 +225,7 @@ fn to_sql_array() {
225225

226226
#[test]
227227
fn pg_array_containing_null() {
228-
let query = "SELECT ARRAY['Hello', '', NULL, 'world']";
228+
let query = "ARRAY['Hello', '', NULL, 'world']";
229229
let data = query_single_value::<Array<Nullable<VarChar>>, Vec<Option<String>>>(query);
230230
let expected = vec![
231231
Some("Hello".to_string()),
@@ -240,10 +240,10 @@ fn pg_array_containing_null() {
240240
fn timestamp_from_sql() {
241241
use diesel::data_types::PgTimestamp;
242242

243-
let query = "SELECT '2015-11-13 13:26:48.041057-07'::timestamp";
243+
let query = "'2015-11-13 13:26:48.041057-07'::timestamp";
244244
let expected_value = PgTimestamp(500736408041057);
245245
assert_eq!(expected_value, query_single_value::<Timestamp, PgTimestamp>(query));
246-
let query = "SELECT '2015-11-13 13:26:49.041057-07'::timestamp";
246+
let query = "'2015-11-13 13:26:49.041057-07'::timestamp";
247247
let expected_value = PgTimestamp(500736409041057);
248248
assert_eq!(expected_value, query_single_value::<Timestamp, PgTimestamp>(query));
249249
}
@@ -266,30 +266,29 @@ fn pg_timestamp_to_sql_timestamp() {
266266
fn pg_numeric_from_sql() {
267267
use diesel::data_types::PgNumeric;
268268

269-
let query = "SELECT 1.0::numeric";
269+
let query = "1.0::numeric";
270270
let expected_value = PgNumeric::Positive {
271271
digits: vec![1],
272272
weight: 0,
273273
scale: 1,
274274
};
275275
assert_eq!(expected_value, query_single_value::<Numeric, PgNumeric>(query));
276-
let query = "SELECT -31.0::numeric";
276+
let query = "-31.0::numeric";
277277
let expected_value = PgNumeric::Negative {
278278
digits: vec![31],
279279
weight: 0,
280280
scale: 1,
281281
};
282282
assert_eq!(expected_value, query_single_value::<Numeric, PgNumeric>(query));
283-
let query = "SELECT 'NaN'::numeric";
283+
let query = "'NaN'::numeric";
284284
let expected_value = PgNumeric::NaN;
285285
assert_eq!(expected_value, query_single_value::<Numeric, PgNumeric>(query));
286286
}
287287

288-
fn query_single_value<T: NativeSqlType, U: Queryable<T>>(sql: &str) -> U {
288+
fn query_single_value<T: NativeSqlType, U: Queryable<T>>(sql_str: &str) -> U {
289+
use diesel::expression::dsl::sql;
289290
let connection = connection();
290-
let mut cursor = connection.query_sql::<T, U>(sql)
291-
.unwrap();
292-
cursor.nth(0).unwrap()
291+
select(sql::<T>(sql_str)).first(&connection).unwrap()
293292
}
294293

295294
use std::fmt::Debug;

0 commit comments

Comments
 (0)