1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbtools.hxx"
26 #include <connectivity/dbexception.hxx>
27 #include <comphelper/types.hxx>
28 #include <cppuhelper/exc_hlp.hxx>
29 #include <osl/diagnose.h>
30 #include <com/sun/star/sdb/SQLContext.hpp>
31 #include <com/sun/star/sdbc/SQLWarning.hpp>
32 #include <com/sun/star/sdb/SQLErrorEvent.hpp>
33 #include "TConnection.hxx"
34 #include "resource/common_res.hrc"
35 #include "resource/sharedresources.hxx"
36
37 //.........................................................................
38 namespace dbtools
39 {
40 //.........................................................................
41
42 using namespace ::com::sun::star::uno;
43 using namespace ::com::sun::star::sdb;
44 using namespace ::com::sun::star::sdbc;
45 using namespace ::comphelper;
46 using namespace ::connectivity;
47
48 //==============================================================================
49 //= SQLExceptionInfo - encapsulating the type info of an SQLException-derived class
50 //==============================================================================
51 //------------------------------------------------------------------------------
SQLExceptionInfo()52 SQLExceptionInfo::SQLExceptionInfo()
53 :m_eType(UNDEFINED)
54 {
55 }
56
57 //------------------------------------------------------------------------------
SQLExceptionInfo(const::com::sun::star::sdbc::SQLException & _rError)58 SQLExceptionInfo::SQLExceptionInfo(const ::com::sun::star::sdbc::SQLException& _rError)
59 {
60 m_aContent <<= _rError;
61 implDetermineType();
62 }
63
64 //------------------------------------------------------------------------------
SQLExceptionInfo(const::com::sun::star::sdbc::SQLWarning & _rError)65 SQLExceptionInfo::SQLExceptionInfo(const ::com::sun::star::sdbc::SQLWarning& _rError)
66 {
67 m_aContent <<= _rError;
68 implDetermineType();
69 }
70
71 //------------------------------------------------------------------------------
SQLExceptionInfo(const::com::sun::star::sdb::SQLContext & _rError)72 SQLExceptionInfo::SQLExceptionInfo(const ::com::sun::star::sdb::SQLContext& _rError)
73 {
74 m_aContent <<= _rError;
75 implDetermineType();
76 }
77
78 //------------------------------------------------------------------------------
SQLExceptionInfo(const::rtl::OUString & _rSimpleErrorMessage)79 SQLExceptionInfo::SQLExceptionInfo( const ::rtl::OUString& _rSimpleErrorMessage )
80 {
81 SQLException aError;
82 aError.Message = _rSimpleErrorMessage;
83 m_aContent <<= aError;
84 implDetermineType();
85 }
86
87 //------------------------------------------------------------------------------
SQLExceptionInfo(const SQLExceptionInfo & _rCopySource)88 SQLExceptionInfo::SQLExceptionInfo(const SQLExceptionInfo& _rCopySource)
89 :m_aContent(_rCopySource.m_aContent)
90 ,m_eType(_rCopySource.m_eType)
91 {
92 }
93
94 //------------------------------------------------------------------------------
operator =(const::com::sun::star::sdbc::SQLException & _rError)95 const SQLExceptionInfo& SQLExceptionInfo::operator=(const ::com::sun::star::sdbc::SQLException& _rError)
96 {
97 m_aContent <<= _rError;
98 implDetermineType();
99 return *this;
100 }
101
102 //------------------------------------------------------------------------------
operator =(const::com::sun::star::sdbc::SQLWarning & _rError)103 const SQLExceptionInfo& SQLExceptionInfo::operator=(const ::com::sun::star::sdbc::SQLWarning& _rError)
104 {
105 m_aContent <<= _rError;
106 implDetermineType();
107 return *this;
108 }
109
110 //------------------------------------------------------------------------------
operator =(const::com::sun::star::sdb::SQLContext & _rError)111 const SQLExceptionInfo& SQLExceptionInfo::operator=(const ::com::sun::star::sdb::SQLContext& _rError)
112 {
113 m_aContent <<= _rError;
114 implDetermineType();
115 return *this;
116 }
117
118 //------------------------------------------------------------------------------
operator =(const::com::sun::star::sdb::SQLErrorEvent & _rErrorEvent)119 const SQLExceptionInfo& SQLExceptionInfo::operator=(const ::com::sun::star::sdb::SQLErrorEvent& _rErrorEvent)
120 {
121 m_aContent = _rErrorEvent.Reason;
122 implDetermineType();
123 return *this;
124 }
125
126 //------------------------------------------------------------------------------
operator =(const::com::sun::star::uno::Any & _rCaughtSQLException)127 const SQLExceptionInfo& SQLExceptionInfo::operator=(const ::com::sun::star::uno::Any& _rCaughtSQLException)
128 {
129 m_aContent = _rCaughtSQLException;
130 implDetermineType();
131 return *this;
132 }
133
134 //------------------------------------------------------------------------------
SQLExceptionInfo(const::com::sun::star::sdb::SQLErrorEvent & _rError)135 SQLExceptionInfo::SQLExceptionInfo(const ::com::sun::star::sdb::SQLErrorEvent& _rError)
136 {
137 m_aContent = _rError.Reason;
138 implDetermineType();
139 }
140
141 //------------------------------------------------------------------------------
SQLExceptionInfo(const staruno::Any & _rError)142 SQLExceptionInfo::SQLExceptionInfo(const staruno::Any& _rError)
143 {
144 const staruno::Type& aSQLExceptionType = ::getCppuType(static_cast< ::com::sun::star::sdbc::SQLException*>(NULL));
145 sal_Bool bValid = isAssignableFrom(aSQLExceptionType, _rError.getValueType());
146 if (bValid)
147 m_aContent = _rError;
148 // no assertion here : if used with the NextException member of an SQLException bValid==sal_False is allowed.
149
150 implDetermineType();
151 }
152
153 //------------------------------------------------------------------------------
implDetermineType()154 void SQLExceptionInfo::implDetermineType()
155 {
156 staruno::Type aContentType = m_aContent.getValueType();
157
158 const Type& aSQLExceptionType = ::getCppuType( static_cast< SQLException* >( NULL ) );
159 const Type& aSQLWarningType = ::getCppuType( static_cast< SQLWarning* >( NULL ) );
160 const Type& aSQLContextType = ::getCppuType( static_cast< SQLContext* >( NULL ) );
161
162 if ( isAssignableFrom( aSQLContextType, m_aContent.getValueType() ) )
163 m_eType = SQL_CONTEXT;
164 else if ( isAssignableFrom( aSQLWarningType, m_aContent.getValueType() ) )
165 m_eType = SQL_WARNING;
166 else if ( isAssignableFrom( aSQLExceptionType, m_aContent.getValueType() ) )
167 m_eType = SQL_EXCEPTION;
168 else
169 {
170 m_eType = UNDEFINED;
171 m_aContent.clear();
172 }
173 }
174
175 //------------------------------------------------------------------------------
isKindOf(TYPE _eType) const176 sal_Bool SQLExceptionInfo::isKindOf(TYPE _eType) const
177 {
178 switch (_eType)
179 {
180 case SQL_CONTEXT:
181 return (m_eType == SQL_CONTEXT);
182 case SQL_WARNING:
183 return (m_eType == SQL_CONTEXT) || (m_eType == SQL_WARNING);
184 case SQL_EXCEPTION:
185 return (m_eType == SQL_CONTEXT) || (m_eType == SQL_WARNING) || (m_eType == SQL_EXCEPTION);
186 case UNDEFINED:
187 return (m_eType == UNDEFINED);
188 }
189 return sal_False;
190 }
191
192 //------------------------------------------------------------------------------
operator const::com::sun::star::sdbc::SQLException*() const193 SQLExceptionInfo::operator const ::com::sun::star::sdbc::SQLException*() const
194 {
195 OSL_ENSURE(isKindOf(SQL_EXCEPTION), "SQLExceptionInfo::operator SQLException* : invalid call !");
196 return reinterpret_cast<const ::com::sun::star::sdbc::SQLException*>(m_aContent.getValue());
197 }
198
199 //------------------------------------------------------------------------------
operator const::com::sun::star::sdbc::SQLWarning*() const200 SQLExceptionInfo::operator const ::com::sun::star::sdbc::SQLWarning*() const
201 {
202 OSL_ENSURE(isKindOf(SQL_WARNING), "SQLExceptionInfo::operator SQLException* : invalid call !");
203 return reinterpret_cast<const ::com::sun::star::sdbc::SQLWarning*>(m_aContent.getValue());
204 }
205
206 //------------------------------------------------------------------------------
operator const::com::sun::star::sdb::SQLContext*() const207 SQLExceptionInfo::operator const ::com::sun::star::sdb::SQLContext*() const
208 {
209 OSL_ENSURE(isKindOf(SQL_CONTEXT), "SQLExceptionInfo::operator SQLException* : invalid call !");
210 return reinterpret_cast<const ::com::sun::star::sdb::SQLContext*>(m_aContent.getValue());
211 }
212
213 //------------------------------------------------------------------------------
prepend(const::rtl::OUString & _rErrorMessage,const sal_Char * _pAsciiSQLState,const sal_Int32 _nErrorCode)214 void SQLExceptionInfo::prepend( const ::rtl::OUString& _rErrorMessage, const sal_Char* _pAsciiSQLState, const sal_Int32 _nErrorCode )
215 {
216 SQLException aException;
217 aException.Message = _rErrorMessage;
218 aException.ErrorCode = _nErrorCode;
219 aException.SQLState = ::rtl::OUString::createFromAscii( _pAsciiSQLState ? _pAsciiSQLState : "S1000" );
220 aException.NextException = m_aContent;
221 m_aContent <<= aException;
222
223 m_eType = SQL_EXCEPTION;
224 }
225
226 //------------------------------------------------------------------------------
append(TYPE _eType,const::rtl::OUString & _rErrorMessage,const sal_Char * _pAsciiSQLState,const sal_Int32 _nErrorCode)227 void SQLExceptionInfo::append( TYPE _eType, const ::rtl::OUString& _rErrorMessage, const sal_Char* _pAsciiSQLState, const sal_Int32 _nErrorCode )
228 {
229 // create the to-be-appended exception
230 Any aAppend;
231 switch ( _eType )
232 {
233 case SQL_EXCEPTION: aAppend <<= SQLException(); break;
234 case SQL_WARNING: aAppend <<= SQLWarning(); break;
235 case SQL_CONTEXT: aAppend <<= SQLContext(); break;
236 default:
237 OSL_ENSURE( false, "SQLExceptionInfo::append: invalid exception type: this will crash!" );
238 break;
239 }
240
241 SQLException* pAppendException( static_cast< SQLException* >( const_cast< void* >( aAppend.getValue() ) ) );
242 pAppendException->Message = _rErrorMessage;
243 pAppendException->SQLState = ::rtl::OUString::createFromAscii( _pAsciiSQLState );
244 pAppendException->ErrorCode = _nErrorCode;
245
246 // find the end of the current chain
247 Any* pChainIterator = &m_aContent;
248 SQLException* pLastException = NULL;
249 const Type& aSQLExceptionType( ::getCppuType< SQLException >() );
250 while ( pChainIterator )
251 {
252 if ( !pChainIterator->hasValue() )
253 break;
254
255 if ( !isAssignableFrom( aSQLExceptionType, pChainIterator->getValueType() ) )
256 break;
257
258 pLastException = static_cast< SQLException* >( const_cast< void* >( pChainIterator->getValue() ) );
259 pChainIterator = &pLastException->NextException;
260 }
261
262 // append
263 if ( pLastException )
264 pLastException->NextException = aAppend;
265 else
266 {
267 m_aContent = aAppend;
268 m_eType = _eType;
269 }
270 }
271
272 //------------------------------------------------------------------------------
doThrow()273 void SQLExceptionInfo::doThrow()
274 {
275 if ( m_aContent.getValueTypeClass() == TypeClass_EXCEPTION )
276 ::cppu::throwException( m_aContent );
277 throw RuntimeException();
278 }
279
280 //==============================================================================
281 //= SQLExceptionIteratorHelper
282 //==============================================================================
283
284 //------------------------------------------------------------------------------
SQLExceptionIteratorHelper(const SQLExceptionInfo & _rChainStart)285 SQLExceptionIteratorHelper::SQLExceptionIteratorHelper( const SQLExceptionInfo& _rChainStart )
286 :m_pCurrent( NULL )
287 ,m_eCurrentType( SQLExceptionInfo::UNDEFINED )
288 {
289 if ( _rChainStart.isValid() )
290 {
291 m_pCurrent = (const SQLException*)_rChainStart;
292 m_eCurrentType = _rChainStart.getType();
293 }
294 }
295
296 //------------------------------------------------------------------------------
SQLExceptionIteratorHelper(const::com::sun::star::sdbc::SQLException & _rChainStart)297 SQLExceptionIteratorHelper::SQLExceptionIteratorHelper( const ::com::sun::star::sdbc::SQLException& _rChainStart )
298 :m_pCurrent( &_rChainStart )
299 ,m_eCurrentType( SQLExceptionInfo::SQL_EXCEPTION )
300 {
301 }
302
303 //------------------------------------------------------------------------------
SQLExceptionIteratorHelper(const::com::sun::star::sdbc::SQLWarning & _rChainStart)304 SQLExceptionIteratorHelper::SQLExceptionIteratorHelper( const ::com::sun::star::sdbc::SQLWarning& _rChainStart )
305 :m_pCurrent( &_rChainStart )
306 ,m_eCurrentType( SQLExceptionInfo::SQL_WARNING )
307 {
308 }
309
310 //------------------------------------------------------------------------------
SQLExceptionIteratorHelper(const::com::sun::star::sdb::SQLContext & _rChainStart)311 SQLExceptionIteratorHelper::SQLExceptionIteratorHelper( const ::com::sun::star::sdb::SQLContext& _rChainStart )
312 :m_pCurrent( &_rChainStart )
313 ,m_eCurrentType( SQLExceptionInfo::SQL_CONTEXT )
314 {
315 }
316
317 //------------------------------------------------------------------------------
current(SQLExceptionInfo & _out_rInfo) const318 void SQLExceptionIteratorHelper::current( SQLExceptionInfo& _out_rInfo ) const
319 {
320 switch ( m_eCurrentType )
321 {
322 case SQLExceptionInfo::SQL_EXCEPTION:
323 _out_rInfo = *m_pCurrent;
324 break;
325
326 case SQLExceptionInfo::SQL_WARNING:
327 _out_rInfo = *static_cast< const SQLWarning* >( m_pCurrent );
328 break;
329
330 case SQLExceptionInfo::SQL_CONTEXT:
331 _out_rInfo = *static_cast< const SQLContext* >( m_pCurrent );
332 break;
333
334 default:
335 _out_rInfo = Any();
336 break;
337 }
338 }
339
340 //------------------------------------------------------------------------------
next()341 const ::com::sun::star::sdbc::SQLException* SQLExceptionIteratorHelper::next()
342 {
343 OSL_ENSURE( hasMoreElements(), "SQLExceptionIteratorHelper::next : invalid call (please use hasMoreElements)!" );
344
345 const ::com::sun::star::sdbc::SQLException* pReturn = current();
346 if ( !m_pCurrent )
347 return pReturn;
348
349 // check for the next element within the chain
350 const Type aTypeException( ::cppu::UnoType< SQLException >::get() );
351
352 Type aNextElementType = m_pCurrent->NextException.getValueType();
353 if ( !isAssignableFrom( aTypeException, aNextElementType ) )
354 {
355 // no SQLException at all in the next chain element
356 m_pCurrent = NULL;
357 m_eCurrentType = SQLExceptionInfo::UNDEFINED;
358 return pReturn;
359 }
360
361 m_pCurrent = static_cast< const SQLException* >( m_pCurrent->NextException.getValue() );
362
363 // no finally determine the proper type of the exception
364 const Type aTypeContext( ::cppu::UnoType< SQLContext >::get() );
365 if ( isAssignableFrom( aTypeContext, aNextElementType ) )
366 {
367 m_eCurrentType = SQLExceptionInfo::SQL_CONTEXT;
368 return pReturn;
369 }
370
371 const Type aTypeWarning( ::cppu::UnoType< SQLWarning >::get() );
372 if ( isAssignableFrom( aTypeWarning, aNextElementType ) )
373 {
374 m_eCurrentType = SQLExceptionInfo::SQL_WARNING;
375 return pReturn;
376 }
377
378 // a simple SQLException
379 m_eCurrentType = SQLExceptionInfo::SQL_EXCEPTION;
380 return pReturn;
381 }
382
383 //------------------------------------------------------------------------------
next(SQLExceptionInfo & _out_rInfo)384 void SQLExceptionIteratorHelper::next( SQLExceptionInfo& _out_rInfo )
385 {
386 current( _out_rInfo );
387 next();
388 }
389
390 //------------------------------------------------------------
throwFunctionSequenceException(const Reference<XInterface> & _Context,const Any & _Next)391 void throwFunctionSequenceException(const Reference< XInterface >& _Context, const Any& _Next)
392 {
393 ::connectivity::SharedResources aResources;
394 throw SQLException(
395 aResources.getResourceString(STR_ERRORMSG_SEQUENCE),
396 _Context,
397 getStandardSQLState( SQL_FUNCTION_SEQUENCE_ERROR ),
398 0,
399 _Next
400 );
401 }
402 // -----------------------------------------------------------------------------
throwInvalidIndexException(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _Context,const::com::sun::star::uno::Any & _Next)403 void throwInvalidIndexException(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _Context,
404 const ::com::sun::star::uno::Any& _Next)
405 {
406 ::connectivity::SharedResources aResources;
407 throw SQLException(
408 aResources.getResourceString(STR_INVALID_INDEX),
409 _Context,
410 getStandardSQLState( SQL_INVALID_DESCRIPTOR_INDEX ),
411 0,
412 _Next
413 );
414 }
415 // -----------------------------------------------------------------------------
throwFunctionNotSupportedException(const::rtl::OUString & _rMsg,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _Context,const::com::sun::star::uno::Any & _Next)416 void throwFunctionNotSupportedException(const ::rtl::OUString& _rMsg,
417 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _Context,
418 const ::com::sun::star::uno::Any& _Next)
419 {
420 throw SQLException(
421 _rMsg,
422 _Context,
423 getStandardSQLState( SQL_FUNCTION_NOT_SUPPORTED ),
424 0,
425 _Next
426 );
427 }
428 // -----------------------------------------------------------------------------
throwFunctionNotSupportedException(const sal_Char * _pAsciiFunctionName,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _rxContext,const::com::sun::star::uno::Any * _pNextException)429 void throwFunctionNotSupportedException( const sal_Char* _pAsciiFunctionName, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxContext,
430 const ::com::sun::star::uno::Any* _pNextException )
431 {
432 ::connectivity::SharedResources aResources;
433 const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
434 STR_UNSUPPORTED_FUNCTION,
435 "$functionname$", ::rtl::OUString::createFromAscii( _pAsciiFunctionName )
436 ) );
437 throw SQLException(
438 sError,
439 _rxContext,
440 getStandardSQLState( SQL_FUNCTION_NOT_SUPPORTED ),
441 0,
442 _pNextException ? *_pNextException : Any()
443 );
444 }
445 // -----------------------------------------------------------------------------
throwGenericSQLException(const::rtl::OUString & _rMsg,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _rxSource)446 void throwGenericSQLException(const ::rtl::OUString& _rMsg, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxSource)
447 {
448 throwGenericSQLException(_rMsg, _rxSource, Any());
449 }
450
451 // -----------------------------------------------------------------------------
throwGenericSQLException(const::rtl::OUString & _rMsg,const Reference<XInterface> & _rxSource,const Any & _rNextException)452 void throwGenericSQLException(const ::rtl::OUString& _rMsg, const Reference< XInterface >& _rxSource, const Any& _rNextException)
453 {
454 throw SQLException( _rMsg, _rxSource, getStandardSQLState( SQL_GENERAL_ERROR ), 0, _rNextException);
455 }
456
457 // -----------------------------------------------------------------------------
throwFeatureNotImplementedException(const sal_Char * _pAsciiFeatureName,const Reference<XInterface> & _rxContext,const Any * _pNextException)458 void throwFeatureNotImplementedException( const sal_Char* _pAsciiFeatureName, const Reference< XInterface >& _rxContext, const Any* _pNextException )
459 {
460 ::connectivity::SharedResources aResources;
461 const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
462 STR_UNSUPPORTED_FEATURE,
463 "$featurename$", ::rtl::OUString::createFromAscii( _pAsciiFeatureName )
464 ) );
465
466 throw SQLException(
467 sError,
468 _rxContext,
469 getStandardSQLState( SQL_FEATURE_NOT_IMPLEMENTED ),
470 0,
471 _pNextException ? *_pNextException : Any()
472 );
473 }
474
475 // -----------------------------------------------------------------------------
throwSQLException(const sal_Char * _pAsciiMessage,const sal_Char * _pAsciiState,const Reference<XInterface> & _rxContext,const sal_Int32 _nErrorCode,const Any * _pNextException)476 void throwSQLException( const sal_Char* _pAsciiMessage, const sal_Char* _pAsciiState,
477 const Reference< XInterface >& _rxContext, const sal_Int32 _nErrorCode, const Any* _pNextException )
478 {
479 throw SQLException(
480 ::rtl::OUString::createFromAscii( _pAsciiMessage ),
481 _rxContext,
482 ::rtl::OUString::createFromAscii( _pAsciiState ),
483 _nErrorCode,
484 _pNextException ? *_pNextException : Any()
485 );
486 }
487
488 // -----------------------------------------------------------------------------
throwSQLException(const sal_Char * _pAsciiMessage,StandardSQLState _eSQLState,const Reference<XInterface> & _rxContext,const sal_Int32 _nErrorCode,const Any * _pNextException)489 void throwSQLException( const sal_Char* _pAsciiMessage, StandardSQLState _eSQLState,
490 const Reference< XInterface >& _rxContext, const sal_Int32 _nErrorCode,
491 const Any* _pNextException )
492 {
493 throwSQLException( _pAsciiMessage, getStandardSQLStateAscii( _eSQLState ), _rxContext, _nErrorCode, _pNextException );
494 }
495
496 // -----------------------------------------------------------------------------
throwSQLException(const::rtl::OUString & _rMessage,StandardSQLState _eSQLState,const Reference<XInterface> & _rxContext,const sal_Int32 _nErrorCode,const Any * _pNextException)497 void throwSQLException( const ::rtl::OUString& _rMessage, StandardSQLState _eSQLState,
498 const Reference< XInterface >& _rxContext, const sal_Int32 _nErrorCode,
499 const Any* _pNextException )
500 {
501 throw SQLException(
502 _rMessage,
503 _rxContext,
504 getStandardSQLState( _eSQLState ),
505 _nErrorCode,
506 _pNextException ? *_pNextException : Any()
507 );
508 }
509
510 // -----------------------------------------------------------------------------
getStandardSQLStateAscii(StandardSQLState _eState)511 const sal_Char* getStandardSQLStateAscii( StandardSQLState _eState )
512 {
513 const sal_Char* pAsciiState = NULL;
514 switch ( _eState )
515 {
516 case SQL_WRONG_PARAMETER_NUMBER: pAsciiState = "07001"; break;
517 case SQL_INVALID_DESCRIPTOR_INDEX: pAsciiState = "07009"; break;
518 case SQL_UNABLE_TO_CONNECT: pAsciiState = "08001"; break;
519 case SQL_NUMERIC_OUT_OF_RANGE: pAsciiState = "22003"; break;
520 case SQL_INVALID_DATE_TIME: pAsciiState = "22007"; break;
521 case SQL_INVALID_CURSOR_STATE: pAsciiState = "24000"; break;
522 case SQL_TABLE_OR_VIEW_EXISTS: pAsciiState = "42S01"; break;
523 case SQL_TABLE_OR_VIEW_NOT_FOUND: pAsciiState = "42S02"; break;
524 case SQL_INDEX_ESISTS: pAsciiState = "42S11"; break;
525 case SQL_INDEX_NOT_FOUND: pAsciiState = "42S12"; break;
526 case SQL_COLUMN_EXISTS: pAsciiState = "42S21"; break;
527 case SQL_COLUMN_NOT_FOUND: pAsciiState = "42S22"; break;
528 case SQL_GENERAL_ERROR: pAsciiState = "HY000"; break;
529 case SQL_INVALID_SQL_DATA_TYPE: pAsciiState = "HY004"; break;
530 case SQL_OPERATION_CANCELED: pAsciiState = "HY008"; break;
531 case SQL_FUNCTION_SEQUENCE_ERROR: pAsciiState = "HY010"; break;
532 case SQL_INVALID_CURSOR_POSITION: pAsciiState = "HY109"; break;
533 case SQL_INVALID_BOOKMARK_VALUE: pAsciiState = "HY111"; break;
534 case SQL_FEATURE_NOT_IMPLEMENTED: pAsciiState = "HYC00"; break;
535 case SQL_FUNCTION_NOT_SUPPORTED: pAsciiState = "IM001"; break;
536 case SQL_CONNECTION_DOES_NOT_EXIST: pAsciiState = "08003"; break;
537
538 default:
539 break;
540 }
541 if ( !pAsciiState )
542 throw RuntimeException();
543 return pAsciiState;
544 }
545
546 // -----------------------------------------------------------------------------
getStandardSQLState(StandardSQLState _eState)547 ::rtl::OUString getStandardSQLState( StandardSQLState _eState )
548 {
549 return ::rtl::OUString::createFromAscii( getStandardSQLStateAscii( _eState ) );
550 }
551
552 // -----------------------------------------------------------------------------
553 //.........................................................................
554 } // namespace dbtools
555 //.........................................................................
556