@@ -23,6 +23,7 @@ use diesel::query_builder::{InsertStatement, QueryId, ValuesClause};
2323use diesel:: sql_types:: HasSqlType ;
2424use diesel:: RunQueryDsl ;
2525use diesel:: { result:: * , Table } ;
26+ use oracle:: ErrorKind ;
2627
2728mod oracle_value;
2829pub ( crate ) use self :: oracle_value:: InnerValue ;
@@ -161,51 +162,49 @@ impl From<oracle::Error> for ErrorHelper {
161162
162163impl From < ErrorHelper > for diesel:: result:: Error {
163164 fn from ( ErrorHelper ( e) : ErrorHelper ) -> Self {
164- match e {
165- oracle :: Error :: OciError ( _) => {
165+ match ( e . kind ( ) , e . db_error ( ) ) {
166+ ( ErrorKind :: OciError , _) => {
166167 // TODO: better handling here
167168 diesel:: result:: Error :: QueryBuilderError ( e. into ( ) )
168169 }
169- oracle :: Error :: DpiError ( _) => {
170+ ( ErrorKind :: DpiError , _) => {
170171 // TODO: better handling here
171172 diesel:: result:: Error :: QueryBuilderError ( e. into ( ) )
172173 }
173- oracle :: Error :: NullValue => diesel:: result:: Error :: DeserializationError (
174+ ( ErrorKind :: NullValue , _ ) => diesel:: result:: Error :: DeserializationError (
174175 diesel:: result:: UnexpectedNullError . into ( ) ,
175176 ) ,
176- oracle:: Error :: ParseError ( e) => diesel:: result:: Error :: SerializationError ( e) ,
177- oracle:: Error :: OutOfRange ( e) => diesel:: result:: Error :: DeserializationError ( e. into ( ) ) ,
178- oracle:: Error :: InvalidTypeConversion ( from, to) => {
179- diesel:: result:: Error :: DeserializationError (
180- format ! ( "Cannot convert from {} to {}" , from, to) . into ( ) ,
181- )
177+ ( ErrorKind :: ParseError , _) => diesel:: result:: Error :: SerializationError ( e. into ( ) ) ,
178+ ( ErrorKind :: OutOfRange | ErrorKind :: InvalidTypeConversion , _) => {
179+ diesel:: result:: Error :: DeserializationError ( e. into ( ) )
182180 }
183- oracle :: Error :: InvalidBindIndex ( e ) => diesel:: result:: Error :: QueryBuilderError (
181+ ( ErrorKind :: InvalidBindIndex , Some ( e ) ) => diesel:: result:: Error :: QueryBuilderError (
184182 format ! ( "Invalid bind with index: {}" , e) . into ( ) ,
185183 ) ,
186- oracle :: Error :: InvalidBindName ( e ) => diesel:: result:: Error :: QueryBuilderError (
184+ ( ErrorKind :: InvalidBindName , Some ( e ) ) => diesel:: result:: Error :: QueryBuilderError (
187185 format ! ( "Invalid bind with name: {}" , e) . into ( ) ,
188186 ) ,
189- oracle :: Error :: InvalidColumnIndex ( _) => diesel:: result:: Error :: DeserializationError (
187+ ( ErrorKind :: InvalidColumnIndex , _) => diesel:: result:: Error :: DeserializationError (
190188 diesel:: result:: UnexpectedEndOfRow . into ( ) ,
191189 ) ,
192- oracle :: Error :: InvalidColumnName ( c ) => diesel:: result:: Error :: DeserializationError (
193- format ! ( "Invalid column name: {}" , c ) . into ( ) ,
190+ ( ErrorKind :: InvalidColumnName , _ ) => diesel:: result:: Error :: DeserializationError (
191+ format ! ( "Invalid column name: {}" , e ) . into ( ) ,
194192 ) ,
195- oracle :: Error :: InvalidAttributeName ( e ) => diesel:: result:: Error :: QueryBuilderError (
193+ ( ErrorKind :: InvalidAttributeName , _ ) => diesel:: result:: Error :: QueryBuilderError (
196194 format ! ( "Invalid attribute name: {}" , e) . into ( ) ,
197195 ) ,
198- oracle :: Error :: InvalidOperation ( e ) => {
196+ ( ErrorKind :: InvalidOperation , _ ) => {
199197 diesel:: result:: Error :: QueryBuilderError ( format ! ( "Invalid operation: {}" , e) . into ( ) )
200198 }
201- oracle :: Error :: UninitializedBindValue => {
199+ ( ErrorKind :: UninitializedBindValue , _ ) => {
202200 diesel:: result:: Error :: QueryBuilderError ( "Uninitialized bind value" . into ( ) )
203201 }
204- oracle :: Error :: NoDataFound => diesel:: result:: Error :: NotFound ,
205- oracle :: Error :: InternalError ( e ) => diesel:: result:: Error :: QueryBuilderError ( e. into ( ) ) ,
206- oracle :: Error :: BatchErrors ( _e ) => {
202+ ( ErrorKind :: NoDataFound , _ ) => diesel:: result:: Error :: NotFound ,
203+ ( ErrorKind :: InternalError , _ ) => diesel:: result:: Error :: QueryBuilderError ( e. into ( ) ) ,
204+ ( ErrorKind :: BatchErrors , _ ) => {
207205 diesel:: result:: Error :: QueryBuilderError ( "Batch error" . into ( ) )
208206 }
207+ _ => unimplemented ! ( ) ,
209208 }
210209 }
211210}
@@ -405,7 +404,7 @@ impl OciConnection {
405404 fn with_prepared_statement < ' conn , ' query , T , R > (
406405 & ' conn mut self ,
407406 query : & T ,
408- callback : impl FnOnce ( oracle:: Statement < ' conn > , OracleBindCollector ) -> QueryResult < R > ,
407+ callback : impl FnOnce ( oracle:: Statement , OracleBindCollector ) -> QueryResult < R > ,
409408 ) -> Result < R , Error >
410409 where
411410 T : QueryFragment < Oracle > + QueryId + ' query ,
0 commit comments