@@ -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
139153pub 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
523539pub 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