Skip to content

Commit 1858ed4

Browse files
committed
Better error output
1 parent a008437 commit 1858ed4

1 file changed

Lines changed: 24 additions & 5 deletions

File tree

src/lib.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,20 @@ impl PostgresDbError {
134134
routine: map.pop(&('R' as u8)).unwrap()
135135
}
136136
}
137+
138+
fn pretty_error(&self, query: &str) -> ~str {
139+
match self.position {
140+
Some(Position(pos)) =>
141+
format!("{}: {} at position {} in\n{}", self.severity,
142+
self.message, pos, query),
143+
Some(InternalPosition { position, query: ref inner_query }) =>
144+
format!("{}: {} at position {} in\n{} called from\n{}",
145+
self.severity, self.message, position, *inner_query,
146+
query),
147+
None => format!("{}: {} in\n{}", self.severity, self.message,
148+
query)
149+
}
150+
}
137151
}
138152

139153
pub struct PostgresConnection {
@@ -328,8 +342,8 @@ impl PostgresConnection {
328342
pub fn prepare<'a>(&'a self, query: &str) -> NormalPostgresStatement<'a> {
329343
match self.try_prepare(query) {
330344
Ok(stmt) => stmt,
331-
Err(err) => fail2!("Error preparing \"{}\": {}", query,
332-
err.to_str())
345+
Err(err) => fail2!("Error preparing statement:\n{}",
346+
err.pretty_error(query))
333347
}
334348
}
335349

@@ -385,6 +399,7 @@ impl PostgresConnection {
385399

386400
Ok(NormalPostgresStatement {
387401
conn: self,
402+
query: query.to_owned(),
388403
name: stmt_name,
389404
param_types: param_types,
390405
result_desc: result_desc,
@@ -414,7 +429,8 @@ impl PostgresConnection {
414429
pub fn update(&self, query: &str, params: &[&ToSql]) -> uint {
415430
match self.try_update(query, params) {
416431
Ok(res) => res,
417-
Err(err) => fail2!("Error running update: {}", err.to_str())
432+
Err(err) => fail2!("Error running update:\n{}",
433+
err.pretty_error(query))
418434
}
419435
}
420436

@@ -522,6 +538,7 @@ pub trait PostgresStatement {
522538

523539
pub struct NormalPostgresStatement<'self> {
524540
priv conn: &'self PostgresConnection,
541+
priv query: ~str,
525542
priv name: ~str,
526543
priv param_types: ~[PostgresType],
527544
priv result_desc: ~[ResultDescription],
@@ -612,7 +629,8 @@ impl<'self> NormalPostgresStatement<'self> {
612629
-> PostgresResult<'a> {
613630
match self.try_lazy_query(row_limit, params) {
614631
Ok(result) => result,
615-
Err(err) => fail2!("Error executing query: {}", err.to_str())
632+
Err(err) => fail2!("Error executing query:\n{}",
633+
err.pretty_error(self.query))
616634
}
617635
}
618636

@@ -654,7 +672,8 @@ impl<'self> PostgresStatement for NormalPostgresStatement<'self> {
654672
fn update(&self, params: &[&ToSql]) -> uint {
655673
match self.try_update(params) {
656674
Ok(count) => count,
657-
Err(err) => fail2!("Error running update: {}", err.to_str())
675+
Err(err) => fail2!("Error running update\n{}",
676+
err.pretty_error(self.query))
658677
}
659678
}
660679

0 commit comments

Comments
 (0)