@@ -23,6 +23,7 @@ use diesel::query_builder::{InsertStatement, QueryId, ValuesClause};
23
23
use diesel:: sql_types:: HasSqlType ;
24
24
use diesel:: RunQueryDsl ;
25
25
use diesel:: { result:: * , Table } ;
26
+ use oracle:: ErrorKind ;
26
27
27
28
mod oracle_value;
28
29
pub ( crate ) use self :: oracle_value:: InnerValue ;
@@ -161,51 +162,49 @@ impl From<oracle::Error> for ErrorHelper {
161
162
162
163
impl From < ErrorHelper > for diesel:: result:: Error {
163
164
fn from ( ErrorHelper ( e) : ErrorHelper ) -> Self {
164
- match e {
165
- oracle :: Error :: OciError ( _) => {
165
+ match ( e . kind ( ) , e . db_error ( ) ) {
166
+ ( ErrorKind :: OciError , _) => {
166
167
// TODO: better handling here
167
168
diesel:: result:: Error :: QueryBuilderError ( e. into ( ) )
168
169
}
169
- oracle :: Error :: DpiError ( _) => {
170
+ ( ErrorKind :: DpiError , _) => {
170
171
// TODO: better handling here
171
172
diesel:: result:: Error :: QueryBuilderError ( e. into ( ) )
172
173
}
173
- oracle :: Error :: NullValue => diesel:: result:: Error :: DeserializationError (
174
+ ( ErrorKind :: NullValue , _ ) => diesel:: result:: Error :: DeserializationError (
174
175
diesel:: result:: UnexpectedNullError . into ( ) ,
175
176
) ,
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 ( ) )
182
180
}
183
- oracle :: Error :: InvalidBindIndex ( e ) => diesel:: result:: Error :: QueryBuilderError (
181
+ ( ErrorKind :: InvalidBindIndex , Some ( e ) ) => diesel:: result:: Error :: QueryBuilderError (
184
182
format ! ( "Invalid bind with index: {}" , e) . into ( ) ,
185
183
) ,
186
- oracle :: Error :: InvalidBindName ( e ) => diesel:: result:: Error :: QueryBuilderError (
184
+ ( ErrorKind :: InvalidBindName , Some ( e ) ) => diesel:: result:: Error :: QueryBuilderError (
187
185
format ! ( "Invalid bind with name: {}" , e) . into ( ) ,
188
186
) ,
189
- oracle :: Error :: InvalidColumnIndex ( _) => diesel:: result:: Error :: DeserializationError (
187
+ ( ErrorKind :: InvalidColumnIndex , _) => diesel:: result:: Error :: DeserializationError (
190
188
diesel:: result:: UnexpectedEndOfRow . into ( ) ,
191
189
) ,
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 ( ) ,
194
192
) ,
195
- oracle :: Error :: InvalidAttributeName ( e ) => diesel:: result:: Error :: QueryBuilderError (
193
+ ( ErrorKind :: InvalidAttributeName , _ ) => diesel:: result:: Error :: QueryBuilderError (
196
194
format ! ( "Invalid attribute name: {}" , e) . into ( ) ,
197
195
) ,
198
- oracle :: Error :: InvalidOperation ( e ) => {
196
+ ( ErrorKind :: InvalidOperation , _ ) => {
199
197
diesel:: result:: Error :: QueryBuilderError ( format ! ( "Invalid operation: {}" , e) . into ( ) )
200
198
}
201
- oracle :: Error :: UninitializedBindValue => {
199
+ ( ErrorKind :: UninitializedBindValue , _ ) => {
202
200
diesel:: result:: Error :: QueryBuilderError ( "Uninitialized bind value" . into ( ) )
203
201
}
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 , _ ) => {
207
205
diesel:: result:: Error :: QueryBuilderError ( "Batch error" . into ( ) )
208
206
}
207
+ _ => unimplemented ! ( ) ,
209
208
}
210
209
}
211
210
}
@@ -405,7 +404,7 @@ impl OciConnection {
405
404
fn with_prepared_statement < ' conn , ' query , T , R > (
406
405
& ' conn mut self ,
407
406
query : & T ,
408
- callback : impl FnOnce ( oracle:: Statement < ' conn > , OracleBindCollector ) -> QueryResult < R > ,
407
+ callback : impl FnOnce ( oracle:: Statement , OracleBindCollector ) -> QueryResult < R > ,
409
408
) -> Result < R , Error >
410
409
where
411
410
T : QueryFragment < Oracle > + QueryId + ' query ,
0 commit comments