xref: /AOO41X/main/mysqlc/source/mysqlc_databasemetadata.cxx (revision 079eb5772d0a9e49bbf5c2cd738fc5b5d43e5181)
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 #include "mysqlc_databasemetadata.hxx"
22 #include <com/sun/star/sdbc/DataType.hpp>
23 #include <com/sun/star/sdbc/ResultSetType.hpp>
24 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
25 #include <com/sun/star/sdbc/TransactionIsolation.hpp>
26 #include <com/sun/star/sdbc/KeyRule.hpp>
27 #include <com/sun/star/sdbc/Deferrability.hpp>
28 #include <com/sun/star/sdbc/IndexType.hpp>
29 #include <com/sun/star/sdbc/BestRowScope.hpp>
30 #include <com/sun/star/sdbc/ColumnType.hpp>
31 #include <com/sun/star/lang/XInitialization.hpp>
32 
33 
34 #include "mysqlc_general.hxx"
35 #include "mysqlc_statement.hxx"
36 #include "mysqlc_driver.hxx"
37 #include "mysqlc_preparedstatement.hxx"
38 
39 #include <stdio.h>
40 
41 using namespace connectivity::mysqlc;
42 using namespace com::sun::star::uno;
43 using namespace com::sun::star::lang;
44 using namespace com::sun::star::beans;
45 using namespace com::sun::star::sdbc;
46 using ::rtl::OUString;
47 using mysqlc_sdbc_driver::getStringFromAny;
48 
49 #include <preextstl.h>
50 #include <cppconn/connection.h>
51 #include <cppconn/resultset.h>
52 #include <cppconn/metadata.h>
53 #include <cppconn/statement.h>
54 #include <cppconn/prepared_statement.h>
55 #include <postextstl.h>
56 
57 static ext_std::string wild("%");
58 
59 using ::rtl::OUStringToOString;
60 
61 // -----------------------------------------------------------------------------
lcl_setRows_throw(const Reference<XResultSet> & _xResultSet,sal_Int32 _nType,const std::vector<std::vector<Any>> & _rRows)62 void lcl_setRows_throw(const Reference< XResultSet >& _xResultSet,sal_Int32 _nType,const std::vector< std::vector< Any > >& _rRows)
63 {
64     Reference< XInitialization> xIni(_xResultSet,UNO_QUERY);
65     Sequence< Any > aArgs(2);
66     aArgs[0] <<= _nType;
67 
68     Sequence< Sequence< Any > > aRows(_rRows.size());
69 
70     std::vector< std::vector< Any > >::const_iterator aIter = _rRows.begin();
71     Sequence< Any > * pRowsIter = aRows.getArray();
72     Sequence< Any > * pRowsEnd  = pRowsIter + aRows.getLength();
73     for (; pRowsIter != pRowsEnd;++pRowsIter,++aIter) {
74         if (!aIter->empty()) {
75             Sequence<Any> aSeq(&(*aIter->begin()),aIter->size());
76             (*pRowsIter) = aSeq;
77         }
78     }
79     aArgs[1] <<= aRows;
80     xIni->initialize(aArgs);
81 }
82 
83 
84 /* {{{ ODatabaseMetaData::ODatabaseMetaData() -I- */
ODatabaseMetaData(OConnection & _rCon)85 ODatabaseMetaData::ODatabaseMetaData(OConnection& _rCon)
86     :m_rConnection(_rCon)
87     ,m_bUseCatalog(sal_True)
88     ,meta(_rCon.getConnectionSettings().cppConnection->getMetaData())
89     ,identifier_quote_string_set(false)
90 {
91     OSL_TRACE("ODatabaseMetaData::ODatabaseMetaData");
92     if (!m_rConnection.isCatalogUsed())
93     {
94         osl_incrementInterlockedCount(&m_refCount);
95         m_bUseCatalog = !(usesLocalFiles() || usesLocalFilePerTable());
96         osl_decrementInterlockedCount(&m_refCount);
97     }
98 }
99 /* }}} */
100 
101 
102 /* {{{ ODatabaseMetaData::~ODatabaseMetaData() -I- */
~ODatabaseMetaData()103 ODatabaseMetaData::~ODatabaseMetaData()
104 {
105     OSL_TRACE("ODatabaseMetaData::~ODatabaseMetaData");
106 }
107 /* }}} */
108 
109 
110 /* {{{ ODatabaseMetaData::impl_getStringMetaData() -I- */
impl_getStringMetaData(const sal_Char * _methodName,const ext_std::string & (sql::DatabaseMetaData::* _Method)())111 OUString ODatabaseMetaData::impl_getStringMetaData(const sal_Char* _methodName, const ext_std::string& (sql::DatabaseMetaData::*_Method)() )
112 {
113     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
114     OUString stringMetaData;
115     try {
116         stringMetaData = mysqlc_sdbc_driver::convert((meta->*_Method)(), m_rConnection.getConnectionEncoding());
117     } catch (sql::MethodNotImplementedException) {
118         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
119     } catch (sql::InvalidArgumentException) {
120         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
121     } catch (const sql::SQLException& e) {
122         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
123     }
124     return stringMetaData;
125 }
126 /* }}} */
127 
128 
129 /* {{{ ODatabaseMetaData::impl_getStringMetaData() -I- */
impl_getStringMetaData(const sal_Char * _methodName,ext_std::string (sql::DatabaseMetaData::* _Method)())130 OUString ODatabaseMetaData::impl_getStringMetaData(const sal_Char* _methodName, ext_std::string (sql::DatabaseMetaData::*_Method)() )
131 {
132     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
133     OUString stringMetaData;
134     try {
135         stringMetaData = mysqlc_sdbc_driver::convert((meta->*_Method)(), m_rConnection.getConnectionEncoding());
136     } catch (sql::MethodNotImplementedException) {
137         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
138     } catch (sql::InvalidArgumentException) {
139         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
140     } catch (const sql::SQLException& e) {
141         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
142     }
143     return stringMetaData;
144 }
145 /* }}} */
146 
147 
148 /* {{{ ODatabaseMetaData::impl_getStringMetaData() -I- */
impl_getStringMetaData(const sal_Char * _methodName,const sql::SQLString & (sql::DatabaseMetaData::* _Method)())149 OUString ODatabaseMetaData::impl_getStringMetaData(const sal_Char* _methodName, const sql::SQLString& (sql::DatabaseMetaData::*_Method)() )
150 {
151     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
152     OUString stringMetaData;
153     try {
154         stringMetaData = mysqlc_sdbc_driver::convert((meta->*_Method)(), m_rConnection.getConnectionEncoding());
155     } catch (sql::MethodNotImplementedException) {
156         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
157     } catch (sql::InvalidArgumentException) {
158         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
159     } catch (const sql::SQLException& e) {
160         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
161     }
162     return stringMetaData;
163 }
164 /* }}} */
165 
166 
167 /* {{{ ODatabaseMetaData::impl_getStringMetaData() -I- */
impl_getStringMetaData(const sal_Char * _methodName,sql::SQLString (sql::DatabaseMetaData::* _Method)())168 OUString ODatabaseMetaData::impl_getStringMetaData(const sal_Char* _methodName, sql::SQLString (sql::DatabaseMetaData::*_Method)() )
169 {
170     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
171     OUString stringMetaData;
172     try {
173         stringMetaData = mysqlc_sdbc_driver::convert((meta->*_Method)(), m_rConnection.getConnectionEncoding());
174     } catch (sql::MethodNotImplementedException) {
175         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
176     } catch (sql::InvalidArgumentException) {
177         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
178     } catch (const sql::SQLException& e) {
179         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
180     }
181     return stringMetaData;
182 }
183 /* }}} */
184 
185 
186 /* {{{ ODatabaseMetaData::impl_getInt32MetaData() -I- */
impl_getInt32MetaData(const sal_Char * _methodName,unsigned int (sql::DatabaseMetaData::* _Method)())187 sal_Int32 ODatabaseMetaData::impl_getInt32MetaData(const sal_Char* _methodName, unsigned int (sql::DatabaseMetaData::*_Method)() )
188 {
189     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
190     sal_Int32 int32MetaData(0);
191     try {
192         int32MetaData = (meta->*_Method)();
193     } catch (sql::MethodNotImplementedException) {
194         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
195     } catch (sql::InvalidArgumentException) {
196         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
197     } catch (const sql::SQLException& e) {
198         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
199     }
200     return int32MetaData;
201 }
202 /* }}} */
203 
204 
205 /* {{{ ODatabaseMetaData::impl_getBoolMetaData() -I- */
impl_getBoolMetaData(const sal_Char * _methodName,bool (sql::DatabaseMetaData::* _Method)())206 sal_Bool ODatabaseMetaData::impl_getBoolMetaData(const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)() )
207 {
208     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
209     sal_Bool boolMetaData(0);
210     try {
211         boolMetaData = (meta->*_Method)() ? sal_True : sal_False;
212     } catch (sql::MethodNotImplementedException) {
213         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
214     } catch (sql::InvalidArgumentException) {
215         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
216     } catch (const sql::SQLException& e) {
217         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
218     }
219     return boolMetaData;
220 }
221 /* }}} */
222 
223 
224 /* {{{ ODatabaseMetaData::impl_getBoolMetaData() -I- */
impl_getBoolMetaData(const sal_Char * _methodName,bool (sql::DatabaseMetaData::* _Method)(int),sal_Int32 _arg)225 sal_Bool ODatabaseMetaData::impl_getBoolMetaData(const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)(int), sal_Int32 _arg )
226 {
227     OSL_TRACE( "mysqlc::ODatabaseMetaData::%s", _methodName);
228     sal_Bool boolMetaData(0);
229     try {
230         boolMetaData = (meta->*_Method)( _arg ) ? sal_True : sal_False;
231     } catch (sql::MethodNotImplementedException) {
232         mysqlc_sdbc_driver::throwFeatureNotImplementedException(_methodName, *this);
233     } catch (sql::InvalidArgumentException) {
234         mysqlc_sdbc_driver::throwInvalidArgumentException(_methodName, *this);
235     } catch (const sql::SQLException& e) {
236         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
237     }
238     return boolMetaData;
239 }
240 /* }}} */
241 
242 
243 /* {{{ ODatabaseMetaData::impl_getRSTypeMetaData() -I- */
impl_getRSTypeMetaData(const sal_Char * _methodName,bool (sql::DatabaseMetaData::* _Method)(int),sal_Int32 _resultSetType)244 sal_Bool ODatabaseMetaData::impl_getRSTypeMetaData(const sal_Char* _methodName, bool (sql::DatabaseMetaData::*_Method)(int), sal_Int32 _resultSetType )
245 {
246     int resultSetType(sql::ResultSet::TYPE_FORWARD_ONLY);
247     switch ( _resultSetType ) {
248         case ResultSetType::SCROLL_INSENSITIVE: resultSetType = sql::ResultSet::TYPE_SCROLL_INSENSITIVE;    break;
249         case ResultSetType::SCROLL_SENSITIVE:   resultSetType = sql::ResultSet::TYPE_SCROLL_SENSITIVE;      break;
250     }
251 
252     return impl_getBoolMetaData(_methodName, _Method, resultSetType);
253 }
254 /* }}} */
255 
256 
257 /* {{{ ODatabaseMetaData::getCatalogSeparator() -I- */
getCatalogSeparator()258 OUString SAL_CALL ODatabaseMetaData::getCatalogSeparator()
259     throw(SQLException, RuntimeException)
260 {
261     return impl_getStringMetaData("getCatalogSeparator", &sql::DatabaseMetaData::getCatalogSeparator);
262 }
263 /* }}} */
264 
265 
266 /* {{{ ODatabaseMetaData::getMaxBinaryLiteralLength() -I- */
getMaxBinaryLiteralLength()267 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength()
268     throw(SQLException, RuntimeException)
269 {
270     return impl_getInt32MetaData("getMaxBinaryLiteralLength", &sql::DatabaseMetaData::getMaxBinaryLiteralLength);
271 }
272 /* }}} */
273 
274 
275 /* {{{ ODatabaseMetaData::getMaxRowSize() -I- */
getMaxRowSize()276 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxRowSize()
277     throw(SQLException, RuntimeException)
278 {
279     return impl_getInt32MetaData("getMaxRowSize", &sql::DatabaseMetaData::getMaxRowSize);
280 }
281 /* }}} */
282 
283 
284 /* {{{ ODatabaseMetaData::getMaxCatalogNameLength() -I- */
getMaxCatalogNameLength()285 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCatalogNameLength()
286     throw(SQLException, RuntimeException)
287 {
288     return impl_getInt32MetaData("getMaxCatalogNameLength", &sql::DatabaseMetaData::getMaxCatalogNameLength);
289 }
290 /* }}} */
291 
292 
293 /* {{{ ODatabaseMetaData::getMaxCharLiteralLength() -I- */
getMaxCharLiteralLength()294 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCharLiteralLength()
295     throw(SQLException, RuntimeException)
296 {
297     return impl_getInt32MetaData("getMaxCharLiteralLength", &sql::DatabaseMetaData::getMaxCharLiteralLength);
298 }
299 /* }}} */
300 
301 
302 /* {{{ ODatabaseMetaData::getMaxColumnNameLength() -I- */
getMaxColumnNameLength()303 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnNameLength()
304     throw(SQLException, RuntimeException)
305 {
306     return impl_getInt32MetaData("getMaxColumnNameLength", &sql::DatabaseMetaData::getMaxColumnNameLength);
307 }
308 /* }}} */
309 
310 
311 /* {{{ ODatabaseMetaData::getMaxColumnsInIndex() -I- */
getMaxColumnsInIndex()312 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInIndex()
313     throw(SQLException, RuntimeException)
314 {
315     return impl_getInt32MetaData("getMaxColumnsInIndex", &sql::DatabaseMetaData::getMaxColumnsInIndex);
316 }
317 /* }}} */
318 
319 
320 /* {{{ ODatabaseMetaData::getMaxCursorNameLength() -I- */
getMaxCursorNameLength()321 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCursorNameLength()
322     throw(SQLException, RuntimeException)
323 {
324     return impl_getInt32MetaData("getMaxCursorNameLength", &sql::DatabaseMetaData::getMaxCursorNameLength);
325 }
326 /* }}} */
327 
328 
329 /* {{{ ODatabaseMetaData::getMaxConnections() -I- */
getMaxConnections()330 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxConnections()
331     throw(SQLException, RuntimeException)
332 {
333     return impl_getInt32MetaData("getMaxConnections", &sql::DatabaseMetaData::getMaxConnections);
334 }
335 /* }}} */
336 
337 
338 /* {{{ ODatabaseMetaData::getMaxColumnsInTable() -I- */
getMaxColumnsInTable()339 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInTable()
340     throw(SQLException, RuntimeException)
341 {
342     return impl_getInt32MetaData("getMaxColumnsInTable", &sql::DatabaseMetaData::getMaxColumnsInTable);
343 }
344 /* }}} */
345 
346 
347 /* {{{ ODatabaseMetaData::getMaxStatementLength() -I- */
getMaxStatementLength()348 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength()
349     throw(SQLException, RuntimeException)
350 {
351     return impl_getInt32MetaData("getMaxStatementLength", &sql::DatabaseMetaData::getMaxStatementLength);
352 }
353 /* }}} */
354 
355 
356 /* {{{ ODatabaseMetaData::getMaxTableNameLength() -I- */
getMaxTableNameLength()357 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength()
358     throw(SQLException, RuntimeException)
359 {
360     return impl_getInt32MetaData("getMaxTableNameLength", &sql::DatabaseMetaData::getMaxTableNameLength);
361 }
362 /* }}} */
363 
364 /* {{{ ODatabaseMetaData::getMaxTablesInSelect() -I- */
getMaxTablesInSelect()365 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect()
366     throw(SQLException, RuntimeException)
367 {
368     return impl_getInt32MetaData("getMaxTablesInSelect", &sql::DatabaseMetaData::getMaxTablesInSelect);
369 }
370 /* }}} */
371 
372 
373 /* {{{ ODatabaseMetaData::doesMaxRowSizeIncludeBlobs() -I- */
doesMaxRowSizeIncludeBlobs()374 sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs()
375     throw(SQLException, RuntimeException)
376 {
377     return impl_getBoolMetaData("doesMaxRowSizeIncludeBlobs", &sql::DatabaseMetaData::doesMaxRowSizeIncludeBlobs);
378 }
379 /* }}} */
380 
381 
382 /* {{{ ODatabaseMetaData::storesLowerCaseQuotedIdentifiers() -I- */
storesLowerCaseQuotedIdentifiers()383 sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseQuotedIdentifiers()
384     throw(SQLException, RuntimeException)
385 {
386     return impl_getBoolMetaData("storesLowerCaseQuotedIdentifiers", &sql::DatabaseMetaData::storesLowerCaseQuotedIdentifiers);
387 }
388 /* }}} */
389 
390 
391 /* {{{ ODatabaseMetaData::storesLowerCaseIdentifiers() -I- */
storesLowerCaseIdentifiers()392 sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseIdentifiers()
393     throw(SQLException, RuntimeException)
394 {
395     return impl_getBoolMetaData("storesLowerCaseIdentifiers", &sql::DatabaseMetaData::storesLowerCaseIdentifiers);
396 }
397 /* }}} */
398 
399 
400 /* {{{ ODatabaseMetaData::storesMixedCaseQuotedIdentifiers() -I- */
storesMixedCaseQuotedIdentifiers()401 sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseQuotedIdentifiers()
402     throw(SQLException, RuntimeException)
403 {
404     return impl_getBoolMetaData("storesMixedCaseQuotedIdentifiers", &sql::DatabaseMetaData::storesMixedCaseQuotedIdentifiers);
405 }
406 /* }}} */
407 
408 
409 /* {{{ ODatabaseMetaData::storesMixedCaseIdentifiers() -I- */
storesMixedCaseIdentifiers()410 sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseIdentifiers()
411     throw(SQLException, RuntimeException)
412 {
413     return impl_getBoolMetaData("storesMixedCaseIdentifiers", &sql::DatabaseMetaData::storesMixedCaseIdentifiers);
414 }
415 /* }}} */
416 
417 
418 /* {{{ ODatabaseMetaData::storesUpperCaseQuotedIdentifiers() -I- */
storesUpperCaseQuotedIdentifiers()419 sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseQuotedIdentifiers()
420     throw(SQLException, RuntimeException)
421 {
422     return impl_getBoolMetaData("storesUpperCaseQuotedIdentifiers", &sql::DatabaseMetaData::storesUpperCaseQuotedIdentifiers);
423 }
424 /* }}} */
425 
426 
427 /* {{{ ODatabaseMetaData::storesUpperCaseIdentifiers() -I- */
storesUpperCaseIdentifiers()428 sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseIdentifiers()
429     throw(SQLException, RuntimeException)
430 {
431     return impl_getBoolMetaData("storesUpperCaseIdentifiers", &sql::DatabaseMetaData::storesUpperCaseIdentifiers);
432 }
433 /* }}} */
434 
435 
436 /* {{{ ODatabaseMetaData::supportsAlterTableWithAddColumn() -I- */
supportsAlterTableWithAddColumn()437 sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithAddColumn()
438     throw(SQLException, RuntimeException)
439 {
440     return impl_getBoolMetaData("supportsAlterTableWithAddColumn", &sql::DatabaseMetaData::supportsAlterTableWithAddColumn);
441 }
442 /* }}} */
443 
444 
445 /* {{{ ODatabaseMetaData::supportsAlterTableWithDropColumn() -I- */
supportsAlterTableWithDropColumn()446 sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithDropColumn()
447     throw(SQLException, RuntimeException)
448 {
449     return impl_getBoolMetaData("supportsAlterTableWithDropColumn", &sql::DatabaseMetaData::supportsAlterTableWithDropColumn);
450 }
451 /* }}} */
452 
453 
454 /* {{{ ODatabaseMetaData::getMaxIndexLength() -I- */
getMaxIndexLength()455 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength()
456     throw(SQLException, RuntimeException)
457 {
458     return impl_getInt32MetaData("getMaxIndexLength", &sql::DatabaseMetaData::getMaxIndexLength);
459 }
460 /* }}} */
461 
462 
463 /* {{{ ODatabaseMetaData::supportsNonNullableColumns() -I- */
supportsNonNullableColumns()464 sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns()
465     throw(SQLException, RuntimeException)
466 {
467     return impl_getBoolMetaData("supportsNonNullableColumns", &sql::DatabaseMetaData::supportsNonNullableColumns);
468 }
469 /* }}} */
470 
471 
472 /* {{{ ODatabaseMetaData::getCatalogTerm() -I- */
getCatalogTerm()473 OUString SAL_CALL ODatabaseMetaData::getCatalogTerm()
474     throw(SQLException, RuntimeException)
475 {
476     return impl_getStringMetaData("getCatalogTerm", &sql::DatabaseMetaData::getCatalogTerm);
477 }
478 /* }}} */
479 
480 
481 /* {{{ ODatabaseMetaData::getIdentifierQuoteString() -I- */
getIdentifierQuoteString()482 OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString()
483     throw(SQLException, RuntimeException)
484 {
485     if (identifier_quote_string_set == false) {
486         identifier_quote_string = impl_getStringMetaData("getIdentifierQuoteString", &sql::DatabaseMetaData::getIdentifierQuoteString);
487         identifier_quote_string_set = true;
488     }
489     return identifier_quote_string;
490 }
491 /* }}} */
492 
493 
494 /* {{{ ODatabaseMetaData::getExtraNameCharacters() -I- */
getExtraNameCharacters()495 OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters()
496     throw(SQLException, RuntimeException)
497 {
498     return impl_getStringMetaData("getExtraNameCharacters", &sql::DatabaseMetaData::getExtraNameCharacters);
499 }
500 /* }}} */
501 
502 
503 /* {{{ ODatabaseMetaData::supportsDifferentTableCorrelationNames() -I- */
supportsDifferentTableCorrelationNames()504 sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames()
505     throw(SQLException, RuntimeException)
506 {
507     return impl_getBoolMetaData("supportsDifferentTableCorrelationNames", &sql::DatabaseMetaData::supportsDifferentTableCorrelationNames);
508 }
509 /* }}} */
510 
511 
512 /* {{{ ODatabaseMetaData::isCatalogAtStart() -I- */
isCatalogAtStart()513 sal_Bool SAL_CALL ODatabaseMetaData::isCatalogAtStart()
514     throw(SQLException, RuntimeException)
515 {
516     return impl_getBoolMetaData("isCatalogAtStart", &sql::DatabaseMetaData::isCatalogAtStart);
517 }
518 /* }}} */
519 
520 
521 /* {{{ ODatabaseMetaData::dataDefinitionIgnoredInTransactions() -I- */
dataDefinitionIgnoredInTransactions()522 sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionIgnoredInTransactions()
523     throw(SQLException, RuntimeException)
524 {
525     return impl_getBoolMetaData("dataDefinitionIgnoredInTransactions", &sql::DatabaseMetaData::dataDefinitionIgnoredInTransactions);
526 }
527 /* }}} */
528 
529 
530 /* {{{ ODatabaseMetaData::dataDefinitionCausesTransactionCommit() -I- */
dataDefinitionCausesTransactionCommit()531 sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionCausesTransactionCommit()
532     throw(SQLException, RuntimeException)
533 {
534     return impl_getBoolMetaData("dataDefinitionCausesTransactionCommit", &sql::DatabaseMetaData::dataDefinitionCausesTransactionCommit);
535 }
536 /* }}} */
537 
538 
539 /* {{{ ODatabaseMetaData::supportsDataManipulationTransactionsOnly() -I- */
supportsDataManipulationTransactionsOnly()540 sal_Bool SAL_CALL ODatabaseMetaData::supportsDataManipulationTransactionsOnly()
541     throw(SQLException, RuntimeException)
542 {
543     return impl_getBoolMetaData("supportsDataManipulationTransactionsOnly", &sql::DatabaseMetaData::supportsDataManipulationTransactionsOnly);
544 }
545 /* }}} */
546 
547 
548 /* {{{ ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions() -I- */
supportsDataDefinitionAndDataManipulationTransactions()549 sal_Bool SAL_CALL ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions()
550     throw(SQLException, RuntimeException)
551 {
552     return impl_getBoolMetaData("supportsDataDefinitionAndDataManipulationTransactions", &sql::DatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions);
553 }
554 /* }}} */
555 
556 
557 /* {{{ ODatabaseMetaData::supportsPositionedDelete() -I- */
supportsPositionedDelete()558 sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedDelete()
559     throw(SQLException, RuntimeException)
560 {
561     return impl_getBoolMetaData("supportsPositionedDelete", &sql::DatabaseMetaData::supportsPositionedDelete);
562 }
563 /* }}} */
564 
565 
566 /* {{{ ODatabaseMetaData::supportsPositionedUpdate() -I- */
supportsPositionedUpdate()567 sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedUpdate()
568     throw(SQLException, RuntimeException)
569 {
570     return impl_getBoolMetaData("supportsPositionedUpdate", &sql::DatabaseMetaData::supportsPositionedUpdate);
571 }
572 /* }}} */
573 
574 
575 /* {{{ ODatabaseMetaData::supportsOpenStatementsAcrossRollback() -I- */
supportsOpenStatementsAcrossRollback()576 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossRollback()
577     throw(SQLException, RuntimeException)
578 {
579     return impl_getBoolMetaData("supportsOpenStatementsAcrossRollback", &sql::DatabaseMetaData::supportsOpenStatementsAcrossRollback);
580 }
581 /* }}} */
582 
583 
584 /* {{{ ODatabaseMetaData::supportsOpenStatementsAcrossCommit() -I- */
supportsOpenStatementsAcrossCommit()585 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossCommit()
586     throw(SQLException, RuntimeException)
587 {
588     return impl_getBoolMetaData("supportsOpenStatementsAcrossCommit", &sql::DatabaseMetaData::supportsOpenStatementsAcrossCommit);
589 }
590 /* }}} */
591 
592 
593 /* {{{ ODatabaseMetaData::supportsOpenCursorsAcrossCommit() -I- */
supportsOpenCursorsAcrossCommit()594 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossCommit()
595     throw(SQLException, RuntimeException)
596 {
597     return impl_getBoolMetaData("supportsOpenCursorsAcrossCommit", &sql::DatabaseMetaData::supportsOpenCursorsAcrossCommit);
598 }
599 /* }}} */
600 
601 
602 /* {{{ ODatabaseMetaData::supportsOpenCursorsAcrossRollback() -I- */
supportsOpenCursorsAcrossRollback()603 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossRollback()
604     throw(SQLException, RuntimeException)
605 {
606     return impl_getBoolMetaData("supportsOpenCursorsAcrossRollback", &sql::DatabaseMetaData::supportsOpenCursorsAcrossRollback);
607 }
608 /* }}} */
609 
610 
611 /* {{{ ODatabaseMetaData::supportsTransactionIsolationLevel() -I- */
supportsTransactionIsolationLevel(sal_Int32 level)612 sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactionIsolationLevel(sal_Int32 level)
613     throw(SQLException, RuntimeException)
614 {
615     return impl_getBoolMetaData("supportsTransactionIsolationLevel", &sql::DatabaseMetaData::supportsTransactionIsolationLevel, level);
616 }
617 /* }}} */
618 
619 
620 /* {{{ ODatabaseMetaData::supportsSchemasInDataManipulation() -I- */
supportsSchemasInDataManipulation()621 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInDataManipulation()
622     throw(SQLException, RuntimeException)
623 {
624     return impl_getBoolMetaData("supportsSchemasInDataManipulation", &sql::DatabaseMetaData::supportsSchemasInDataManipulation);
625 }
626 /* }}} */
627 
628 
629 /* {{{ ODatabaseMetaData::supportsANSI92FullSQL() -I- */
supportsANSI92FullSQL()630 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92FullSQL()
631     throw(SQLException, RuntimeException)
632 {
633     return impl_getBoolMetaData("supportsANSI92FullSQL", &sql::DatabaseMetaData::supportsANSI92FullSQL);
634 }
635 /* }}} */
636 
637 
638 /* {{{ ODatabaseMetaData::supportsANSI92EntryLevelSQL() -I- */
supportsANSI92EntryLevelSQL()639 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92EntryLevelSQL()
640     throw(SQLException, RuntimeException)
641 {
642     return impl_getBoolMetaData("supportsANSI92EntryLevelSQL", &sql::DatabaseMetaData::supportsANSI92EntryLevelSQL);
643 }
644 /* }}} */
645 
646 
647 /* {{{ ODatabaseMetaData::supportsIntegrityEnhancementFacility() -I- */
supportsIntegrityEnhancementFacility()648 sal_Bool SAL_CALL ODatabaseMetaData::supportsIntegrityEnhancementFacility()
649     throw(SQLException, RuntimeException)
650 {
651     return impl_getBoolMetaData("supportsIntegrityEnhancementFacility", &sql::DatabaseMetaData::supportsIntegrityEnhancementFacility);
652 }
653 /* }}} */
654 
655 
656 /* {{{ ODatabaseMetaData::supportsSchemasInIndexDefinitions() -I- */
supportsSchemasInIndexDefinitions()657 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInIndexDefinitions()
658     throw(SQLException, RuntimeException)
659 {
660     return impl_getBoolMetaData("supportsSchemasInIndexDefinitions", &sql::DatabaseMetaData::supportsSchemasInIndexDefinitions);
661 }
662 /* }}} */
663 
664 
665 /* {{{ ODatabaseMetaData::supportsSchemasInTableDefinitions() -I- */
supportsSchemasInTableDefinitions()666 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInTableDefinitions()
667     throw(SQLException, RuntimeException)
668 {
669     return impl_getBoolMetaData("supportsSchemasInTableDefinitions", &sql::DatabaseMetaData::supportsSchemasInTableDefinitions);
670 }
671 /* }}} */
672 
673 
674 /* {{{ ODatabaseMetaData::supportsCatalogsInTableDefinitions() -I- */
supportsCatalogsInTableDefinitions()675 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInTableDefinitions()
676     throw(SQLException, RuntimeException)
677 {
678     return impl_getBoolMetaData("supportsCatalogsInTableDefinitions", &sql::DatabaseMetaData::supportsCatalogsInTableDefinitions);
679 }
680 /* }}} */
681 
682 
683 /* {{{ ODatabaseMetaData::supportsCatalogsInIndexDefinitions() -I- */
supportsCatalogsInIndexDefinitions()684 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInIndexDefinitions()
685     throw(SQLException, RuntimeException)
686 {
687     return impl_getBoolMetaData("supportsCatalogsInIndexDefinitions", &sql::DatabaseMetaData::supportsCatalogsInIndexDefinitions);
688 }
689 /* }}} */
690 
691 
692 /* {{{ ODatabaseMetaData::supportsCatalogsInDataManipulation() -I- */
supportsCatalogsInDataManipulation()693 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInDataManipulation()
694     throw(SQLException, RuntimeException)
695 {
696     return impl_getBoolMetaData("supportsCatalogsInDataManipulation", &sql::DatabaseMetaData::supportsCatalogsInDataManipulation);
697 }
698 /* }}} */
699 
700 
701 /* {{{ ODatabaseMetaData::supportsOuterJoins() -I- */
supportsOuterJoins()702 sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins()
703     throw(SQLException, RuntimeException)
704 {
705     return impl_getBoolMetaData("supportsOuterJoins", &sql::DatabaseMetaData::supportsOuterJoins);
706 }
707 /* }}} */
708 
709 
710 /* {{{ ODatabaseMetaData::getMaxStatements() -I- */
getMaxStatements()711 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatements()
712     throw(SQLException, RuntimeException)
713 {
714     return impl_getInt32MetaData("getMaxStatements", &sql::DatabaseMetaData::getMaxStatements);
715 }
716 /* }}} */
717 
718 
719 /* {{{ ODatabaseMetaData::getMaxProcedureNameLength() -I- */
getMaxProcedureNameLength()720 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxProcedureNameLength()
721     throw(SQLException, RuntimeException)
722 {
723     return impl_getInt32MetaData("getMaxProcedureNameLength", &sql::DatabaseMetaData::getMaxProcedureNameLength);
724 }
725 /* }}} */
726 
727 
728 /* {{{ ODatabaseMetaData::getMaxSchemaNameLength() -I- */
getMaxSchemaNameLength()729 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxSchemaNameLength()
730     throw(SQLException, RuntimeException)
731 {
732     return impl_getInt32MetaData("getMaxSchemaNameLength", &sql::DatabaseMetaData::getMaxSchemaNameLength);
733 }
734 /* }}} */
735 
736 
737 /* {{{ ODatabaseMetaData::supportsTransactions() -I- */
supportsTransactions()738 sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactions()
739     throw(SQLException, RuntimeException)
740 {
741     return impl_getBoolMetaData("supportsTransactions", &sql::DatabaseMetaData::supportsTransactions);
742 }
743 /* }}} */
744 
745 
746 /* {{{ ODatabaseMetaData::allProceduresAreCallable() -I- */
allProceduresAreCallable()747 sal_Bool SAL_CALL ODatabaseMetaData::allProceduresAreCallable()
748     throw(SQLException, RuntimeException)
749 {
750     return impl_getBoolMetaData("allProceduresAreCallable", &sql::DatabaseMetaData::allProceduresAreCallable);
751 }
752 /* }}} */
753 
754 
755 /* {{{ ODatabaseMetaData::supportsStoredProcedures() -I- */
supportsStoredProcedures()756 sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredProcedures()
757     throw(SQLException, RuntimeException)
758 {
759     return impl_getBoolMetaData("supportsStoredProcedures", &sql::DatabaseMetaData::supportsStoredProcedures);
760 }
761 /* }}} */
762 
763 
764 /* {{{ ODatabaseMetaData::supportsSelectForUpdate() -I- */
supportsSelectForUpdate()765 sal_Bool SAL_CALL ODatabaseMetaData::supportsSelectForUpdate()
766     throw(SQLException, RuntimeException)
767 {
768     return impl_getBoolMetaData("supportsSelectForUpdate", &sql::DatabaseMetaData::supportsSelectForUpdate);
769 }
770 /* }}} */
771 
772 
773 /* {{{ ODatabaseMetaData::allTablesAreSelectable() -I- */
allTablesAreSelectable()774 sal_Bool SAL_CALL ODatabaseMetaData::allTablesAreSelectable()
775     throw(SQLException, RuntimeException)
776 {
777     return impl_getBoolMetaData("allTablesAreSelectable", &sql::DatabaseMetaData::allTablesAreSelectable);
778 }
779 /* }}} */
780 
781 
782 /* {{{ ODatabaseMetaData::isReadOnly() -I- */
isReadOnly()783 sal_Bool SAL_CALL ODatabaseMetaData::isReadOnly()
784     throw(SQLException, RuntimeException)
785 {
786     return impl_getBoolMetaData("isReadOnly", &sql::DatabaseMetaData::isReadOnly);
787 }
788 /* }}} */
789 
790 
791 /* {{{ ODatabaseMetaData::usesLocalFiles() -I- */
usesLocalFiles()792 sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFiles()
793     throw(SQLException, RuntimeException)
794 {
795     return impl_getBoolMetaData("usesLocalFiles", &sql::DatabaseMetaData::usesLocalFiles);
796 }
797 /* }}} */
798 
799 
800 /* {{{ ODatabaseMetaData::usesLocalFilePerTable() -I- */
usesLocalFilePerTable()801 sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFilePerTable()
802     throw(SQLException, RuntimeException)
803 {
804     return impl_getBoolMetaData("usesLocalFilePerTable", &sql::DatabaseMetaData::usesLocalFilePerTable);
805 }
806 /* }}} */
807 
808 
809 /* {{{ ODatabaseMetaData::supportsTypeConversion() -I- */
supportsTypeConversion()810 sal_Bool SAL_CALL ODatabaseMetaData::supportsTypeConversion()
811     throw(SQLException, RuntimeException)
812 {
813     return impl_getBoolMetaData("supportsTypeConversion", &sql::DatabaseMetaData::supportsTypeConversion);
814 }
815 /* }}} */
816 
817 
818 /* {{{ ODatabaseMetaData::nullPlusNonNullIsNull() -I- */
nullPlusNonNullIsNull()819 sal_Bool SAL_CALL ODatabaseMetaData::nullPlusNonNullIsNull()
820     throw(SQLException, RuntimeException)
821 {
822     return impl_getBoolMetaData("nullPlusNonNullIsNull", &sql::DatabaseMetaData::nullPlusNonNullIsNull);
823 }
824 /* }}} */
825 
826 
827 /* {{{ ODatabaseMetaData::supportsColumnAliasing() -I- */
supportsColumnAliasing()828 sal_Bool SAL_CALL ODatabaseMetaData::supportsColumnAliasing()
829     throw(SQLException, RuntimeException)
830 {
831     return impl_getBoolMetaData("supportsColumnAliasing", &sql::DatabaseMetaData::supportsColumnAliasing);
832 }
833 /* }}} */
834 
835 
836 /* {{{ ODatabaseMetaData::supportsTableCorrelationNames() -I- */
supportsTableCorrelationNames()837 sal_Bool SAL_CALL ODatabaseMetaData::supportsTableCorrelationNames()
838     throw(SQLException, RuntimeException)
839 {
840     return impl_getBoolMetaData("supportsTableCorrelationNames", &sql::DatabaseMetaData::supportsTableCorrelationNames);
841 }
842 /* }}} */
843 
844 
845 /* {{{ ODatabaseMetaData::supportsConvert() -I- */
supportsConvert(sal_Int32,sal_Int32)846 sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert(sal_Int32 /* fromType */, sal_Int32 /* toType */)
847     throw(SQLException, RuntimeException)
848 {
849     OSL_TRACE("ODatabaseMetaData::supportsConvert");
850     try {
851         /* ToDo -> use supportsConvert( fromType, toType) */
852         return meta->supportsConvert()? sal_True:sal_False;
853     } catch (sql::MethodNotImplementedException) {
854         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::supportsConvert", *this);
855     } catch (sql::InvalidArgumentException) {
856         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::supportsConvert", *this);
857     } catch (const sql::SQLException& e) {
858         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
859     }
860     return sal_False;
861 }
862 /* }}} */
863 
864 
865 /* {{{ ODatabaseMetaData::supportsExpressionsInOrderBy() -I- */
supportsExpressionsInOrderBy()866 sal_Bool SAL_CALL ODatabaseMetaData::supportsExpressionsInOrderBy()
867     throw(SQLException, RuntimeException)
868 {
869     return impl_getBoolMetaData("supportsExpressionsInOrderBy", &sql::DatabaseMetaData::supportsExpressionsInOrderBy);
870 }
871 /* }}} */
872 
873 
874 /* {{{ ODatabaseMetaData::supportsGroupBy() -I- */
supportsGroupBy()875 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupBy()
876     throw(SQLException, RuntimeException)
877 {
878     return impl_getBoolMetaData("supportsGroupBy", &sql::DatabaseMetaData::supportsGroupBy);
879 }
880 /* }}} */
881 
882 
883 /* {{{ ODatabaseMetaData::supportsGroupByBeyondSelect() -I- */
supportsGroupByBeyondSelect()884 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByBeyondSelect()
885     throw(SQLException, RuntimeException)
886 {
887     return impl_getBoolMetaData("supportsGroupByBeyondSelect", &sql::DatabaseMetaData::supportsGroupByBeyondSelect);
888 }
889 /* }}} */
890 
891 
892 /* {{{ ODatabaseMetaData::supportsGroupByUnrelated() -I- */
supportsGroupByUnrelated()893 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByUnrelated()
894     throw(SQLException, RuntimeException)
895 {
896     return impl_getBoolMetaData("supportsGroupByUnrelated", &sql::DatabaseMetaData::supportsGroupByUnrelated);
897 }
898 /* }}} */
899 
900 
901 /* {{{ ODatabaseMetaData::supportsMultipleTransactions() -I- */
supportsMultipleTransactions()902 sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleTransactions()
903     throw(SQLException, RuntimeException)
904 {
905     return impl_getBoolMetaData("supportsMultipleTransactions", &sql::DatabaseMetaData::supportsMultipleTransactions);
906 }
907 /* }}} */
908 
909 
910 /* {{{ ODatabaseMetaData::supportsMultipleResultSets() -I- */
supportsMultipleResultSets()911 sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets()
912     throw(SQLException, RuntimeException)
913 {
914     return impl_getBoolMetaData("supportsMultipleResultSets", &sql::DatabaseMetaData::supportsMultipleResultSets);
915 }
916 /* }}} */
917 
918 
919 /* {{{ ODatabaseMetaData::supportsLikeEscapeClause() -I- */
supportsLikeEscapeClause()920 sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause()
921     throw(SQLException, RuntimeException)
922 {
923     return impl_getBoolMetaData("supportsLikeEscapeClause", &sql::DatabaseMetaData::supportsLikeEscapeClause);
924 }
925 /* }}} */
926 
927 
928 /* {{{ ODatabaseMetaData::supportsOrderByUnrelated() -I- */
supportsOrderByUnrelated()929 sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated()
930     throw(SQLException, RuntimeException)
931 {
932     return impl_getBoolMetaData("supportsOrderByUnrelated", &sql::DatabaseMetaData::supportsOrderByUnrelated);
933 }
934 /* }}} */
935 
936 
937 /* {{{ ODatabaseMetaData::supportsUnion() -I- */
supportsUnion()938 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion()
939     throw(SQLException, RuntimeException)
940 {
941     return impl_getBoolMetaData("supportsUnion", &sql::DatabaseMetaData::supportsUnion);
942 }
943 /* }}} */
944 
945 
946 /* {{{ ODatabaseMetaData::supportsUnionAll() -I- */
supportsUnionAll()947 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnionAll()
948     throw(SQLException, RuntimeException)
949 {
950     return impl_getBoolMetaData("supportsUnionAll", &sql::DatabaseMetaData::supportsUnionAll);
951 }
952 /* }}} */
953 
954 
955 /* {{{ ODatabaseMetaData::supportsMixedCaseIdentifiers() -I- */
supportsMixedCaseIdentifiers()956 sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseIdentifiers()
957     throw(SQLException, RuntimeException)
958 {
959     return impl_getBoolMetaData("supportsMixedCaseIdentifiers", &sql::DatabaseMetaData::supportsMixedCaseIdentifiers);
960 }
961 /* }}} */
962 
963 
964 /* {{{ ODatabaseMetaData::supportsMixedCaseQuotedIdentifiers() -I- */
supportsMixedCaseQuotedIdentifiers()965 sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseQuotedIdentifiers()
966     throw(SQLException, RuntimeException)
967 {
968     return impl_getBoolMetaData("supportsMixedCaseQuotedIdentifiers", &sql::DatabaseMetaData::supportsMixedCaseQuotedIdentifiers);
969 }
970 /* }}} */
971 
972 
973 /* {{{ ODatabaseMetaData::nullsAreSortedAtEnd() -I- */
nullsAreSortedAtEnd()974 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtEnd()
975     throw(SQLException, RuntimeException)
976 {
977     return impl_getBoolMetaData("nullsAreSortedAtEnd", &sql::DatabaseMetaData::nullsAreSortedAtEnd);
978 }
979 /* }}} */
980 
981 
982 /* {{{ ODatabaseMetaData::nullsAreSortedAtStart() -I- */
nullsAreSortedAtStart()983 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtStart()
984     throw(SQLException, RuntimeException)
985 {
986     return impl_getBoolMetaData("nullsAreSortedAtStart", &sql::DatabaseMetaData::nullsAreSortedAtStart);
987 }
988 /* }}} */
989 
990 
991 /* {{{ ODatabaseMetaData::nullsAreSortedHigh() -I- */
nullsAreSortedHigh()992 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedHigh()
993     throw(SQLException, RuntimeException)
994 {
995     return impl_getBoolMetaData("nullsAreSortedHigh", &sql::DatabaseMetaData::nullsAreSortedHigh);
996 }
997 /* }}} */
998 
999 
1000 /* {{{ ODatabaseMetaData::nullsAreSortedLow() -I- */
nullsAreSortedLow()1001 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedLow()
1002     throw(SQLException, RuntimeException)
1003 {
1004     return impl_getBoolMetaData("nullsAreSortedLow", &sql::DatabaseMetaData::nullsAreSortedLow);
1005 }
1006 /* }}} */
1007 
1008 
1009 /* {{{ ODatabaseMetaData::supportsSchemasInProcedureCalls() -I- */
supportsSchemasInProcedureCalls()1010 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInProcedureCalls()
1011     throw(SQLException, RuntimeException)
1012 {
1013     return impl_getBoolMetaData("supportsSchemasInProcedureCalls", &sql::DatabaseMetaData::supportsSchemasInProcedureCalls);
1014 }
1015 /* }}} */
1016 
1017 
1018 /* {{{ ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions() -I- */
supportsSchemasInPrivilegeDefinitions()1019 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions()
1020     throw(SQLException, RuntimeException)
1021 {
1022     return impl_getBoolMetaData("supportsSchemasInPrivilegeDefinitions", &sql::DatabaseMetaData::supportsSchemasInPrivilegeDefinitions);
1023 }
1024 /* }}} */
1025 
1026 
1027 /* {{{ ODatabaseMetaData::supportsCatalogsInProcedureCalls() -I- */
supportsCatalogsInProcedureCalls()1028 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInProcedureCalls()
1029     throw(SQLException, RuntimeException)
1030 {
1031     return impl_getBoolMetaData("supportsCatalogsInProcedureCalls", &sql::DatabaseMetaData::supportsCatalogsInProcedureCalls);
1032 }
1033 /* }}} */
1034 
1035 
1036 /* {{{ ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions() -I- */
supportsCatalogsInPrivilegeDefinitions()1037 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions()
1038     throw(SQLException, RuntimeException)
1039 {
1040     return impl_getBoolMetaData("supportsCatalogsInPrivilegeDefinitions", &sql::DatabaseMetaData::supportsCatalogsInPrivilegeDefinitions);
1041 }
1042 /* }}} */
1043 
1044 
1045 /* {{{ ODatabaseMetaData::supportsCorrelatedSubqueries() -I- */
supportsCorrelatedSubqueries()1046 sal_Bool SAL_CALL ODatabaseMetaData::supportsCorrelatedSubqueries()
1047     throw(SQLException, RuntimeException)
1048 {
1049     return impl_getBoolMetaData("supportsCorrelatedSubqueries", &sql::DatabaseMetaData::supportsCorrelatedSubqueries);
1050 }
1051 /* }}} */
1052 
1053 
1054 /* {{{ ODatabaseMetaData::supportsSubqueriesInComparisons() -I- */
supportsSubqueriesInComparisons()1055 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInComparisons()
1056     throw(SQLException, RuntimeException)
1057 {
1058     return impl_getBoolMetaData("supportsSubqueriesInComparisons", &sql::DatabaseMetaData::supportsSubqueriesInComparisons);
1059 }
1060 /* }}} */
1061 
1062 
1063 /* {{{ ODatabaseMetaData::supportsSubqueriesInExists() -I- */
supportsSubqueriesInExists()1064 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInExists()
1065     throw(SQLException, RuntimeException)
1066 {
1067     return impl_getBoolMetaData("supportsSubqueriesInExists", &sql::DatabaseMetaData::supportsSubqueriesInExists);
1068 }
1069 /* }}} */
1070 
1071 
1072 /* {{{ ODatabaseMetaData::supportsSubqueriesInIns() -I- */
supportsSubqueriesInIns()1073 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInIns()
1074     throw(SQLException, RuntimeException)
1075 {
1076     return impl_getBoolMetaData("supportsSubqueriesInIns", &sql::DatabaseMetaData::supportsSubqueriesInIns);
1077 }
1078 /* }}} */
1079 
1080 
1081 /* {{{ ODatabaseMetaData::supportsSubqueriesInQuantifieds() -I- */
supportsSubqueriesInQuantifieds()1082 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInQuantifieds()
1083     throw(SQLException, RuntimeException)
1084 {
1085     return impl_getBoolMetaData("supportsSubqueriesInQuantifieds", &sql::DatabaseMetaData::supportsSubqueriesInQuantifieds);
1086 }
1087 /* }}} */
1088 
1089 
1090 /* {{{ ODatabaseMetaData::supportsANSI92IntermediateSQL() -I- */
supportsANSI92IntermediateSQL()1091 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL()
1092     throw(SQLException, RuntimeException)
1093 {
1094     return impl_getBoolMetaData("supportsANSI92IntermediateSQL", &sql::DatabaseMetaData::supportsANSI92IntermediateSQL);
1095 }
1096 /* }}} */
1097 
1098 
1099 /* {{{ ODatabaseMetaData::getURL() -I- */
getURL()1100 OUString SAL_CALL ODatabaseMetaData::getURL()
1101     throw(SQLException, RuntimeException)
1102 {
1103     OSL_TRACE("ODatabaseMetaData::getURL");
1104     return m_rConnection.getConnectionSettings().connectionURL;
1105 }
1106 /* }}} */
1107 
1108 
1109 /* {{{ ODatabaseMetaData::getUserName() -I- */
getUserName()1110 OUString SAL_CALL ODatabaseMetaData::getUserName()
1111     throw(SQLException, RuntimeException)
1112 {
1113     return impl_getStringMetaData("getUserName", &sql::DatabaseMetaData::getUserName);
1114 }
1115 /* }}} */
1116 
1117 
1118 /* {{{ ODatabaseMetaData::getDriverName() -I- */
getDriverName()1119 OUString SAL_CALL ODatabaseMetaData::getDriverName()
1120     throw(SQLException, RuntimeException)
1121 {
1122     OSL_TRACE("ODatabaseMetaData::getDriverName");
1123     OUString aValue( RTL_CONSTASCII_USTRINGPARAM( "MySQL Connector/OO.org" ) );
1124     return aValue;
1125 }
1126 /* }}} */
1127 
1128 
1129 /* {{{ ODatabaseMetaData::getDriverVersion() -I- */
getDriverVersion()1130 OUString SAL_CALL ODatabaseMetaData::getDriverVersion()
1131     throw(SQLException, RuntimeException)
1132 {
1133     OSL_TRACE("ODatabaseMetaData::getDriverVersion");
1134     static const OUString sVersion( RTL_CONSTASCII_USTRINGPARAM( "0.9.2" ) );
1135     return sVersion;
1136 }
1137 /* }}} */
1138 
1139 
1140 /* {{{ ODatabaseMetaData::getDatabaseProductVersion() -I- */
getDatabaseProductVersion()1141 OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
1142     throw(SQLException, RuntimeException)
1143 {
1144     return impl_getStringMetaData("getDatabaseProductVersion", &sql::DatabaseMetaData::getDatabaseProductVersion);
1145 }
1146 /* }}} */
1147 
1148 
1149 /* {{{ ODatabaseMetaData::getDatabaseProductName() -I- */
getDatabaseProductName()1150 OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName()
1151     throw(SQLException, RuntimeException)
1152 {
1153     return impl_getStringMetaData("getDatabaseProductName", &sql::DatabaseMetaData::getDatabaseProductName);
1154 }
1155 /* }}} */
1156 
1157 
1158 /* {{{ ODatabaseMetaData::getProcedureTerm() -I- */
getProcedureTerm()1159 OUString SAL_CALL ODatabaseMetaData::getProcedureTerm()
1160     throw(SQLException, RuntimeException)
1161 {
1162     return impl_getStringMetaData("getProcedureTerm", &sql::DatabaseMetaData::getProcedureTerm);
1163 }
1164 /* }}} */
1165 
1166 
1167 /* {{{ ODatabaseMetaData::getSchemaTerm() -I- */
getSchemaTerm()1168 OUString SAL_CALL ODatabaseMetaData::getSchemaTerm()
1169     throw(SQLException, RuntimeException)
1170 {
1171     return impl_getStringMetaData("getSchemaTerm", &sql::DatabaseMetaData::getSchemaTerm);
1172 }
1173 /* }}} */
1174 
1175 
1176 /* {{{ ODatabaseMetaData::getDriverMajorVersion() -I- */
getDriverMajorVersion()1177 sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion()
1178     throw(RuntimeException)
1179 {
1180     OSL_TRACE("ODatabaseMetaData::getDriverMajorVersion");
1181     return MYSQLC_VERSION_MAJOR;
1182 }
1183 /* }}} */
1184 
1185 
1186 /* {{{ ODatabaseMetaData::getDefaultTransactionIsolation() -I- */
getDefaultTransactionIsolation()1187 sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation()
1188     throw(SQLException, RuntimeException)
1189 {
1190     OSL_TRACE("ODatabaseMetaData::getDefaultTransactionIsolation");
1191     try {
1192         switch (meta->getDefaultTransactionIsolation()) {
1193             case sql::TRANSACTION_SERIALIZABLE:     return TransactionIsolation::SERIALIZABLE;
1194             case sql::TRANSACTION_REPEATABLE_READ:  return TransactionIsolation::REPEATABLE_READ;
1195             case sql::TRANSACTION_READ_COMMITTED:   return TransactionIsolation::READ_COMMITTED;
1196             case sql::TRANSACTION_READ_UNCOMMITTED: return TransactionIsolation::READ_UNCOMMITTED;
1197         }
1198     } catch (sql::MethodNotImplementedException) {
1199         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getDriverMajorVersion", *this);
1200     } catch (sql::InvalidArgumentException) {
1201         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getDriverMajorVersion", *this);
1202     } catch (const sql::SQLException& e) {
1203         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1204     }
1205     return TransactionIsolation::NONE;
1206 }
1207 /* }}} */
1208 
1209 
1210 /* {{{ ODatabaseMetaData::getDriverMinorVersion() -I- */
getDriverMinorVersion()1211 sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion()
1212     throw(RuntimeException)
1213 {
1214     OSL_TRACE("ODatabaseMetaData::getDriverMinorVersion");
1215     return MYSQLC_VERSION_MINOR;
1216 }
1217 /* }}} */
1218 
1219 
1220 /* {{{ ODatabaseMetaData::getSQLKeywords() -I- */
getSQLKeywords()1221 OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
1222     throw(SQLException, RuntimeException)
1223 {
1224     return impl_getStringMetaData("getSQLKeywords", &sql::DatabaseMetaData::getSQLKeywords);
1225 }
1226 /* }}} */
1227 
1228 
1229 /* {{{ ODatabaseMetaData::getSearchStringEscape() -I- */
getSearchStringEscape()1230 OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape()
1231     throw(SQLException, RuntimeException)
1232 {
1233     return impl_getStringMetaData("getSearchStringEscape", &sql::DatabaseMetaData::getSearchStringEscape);
1234 }
1235 /* }}} */
1236 
1237 
1238 /* {{{ ODatabaseMetaData::getStringFunctions() -I- */
getStringFunctions()1239 OUString SAL_CALL ODatabaseMetaData::getStringFunctions()
1240     throw(SQLException, RuntimeException)
1241 {
1242     return impl_getStringMetaData("getStringFunctions", &sql::DatabaseMetaData::getStringFunctions);
1243 }
1244 /* }}} */
1245 
1246 
1247 /* {{{ ODatabaseMetaData::getTimeDateFunctions() -I- */
getTimeDateFunctions()1248 OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions()
1249     throw(SQLException, RuntimeException)
1250 {
1251     return impl_getStringMetaData("getTimeDateFunctions", &sql::DatabaseMetaData::getTimeDateFunctions);
1252 }
1253 /* }}} */
1254 
1255 
1256 /* {{{ ODatabaseMetaData::getSystemFunctions() -I- */
getSystemFunctions()1257 OUString SAL_CALL ODatabaseMetaData::getSystemFunctions()
1258     throw(SQLException, RuntimeException)
1259 {
1260     return impl_getStringMetaData("getSystemFunctions", &sql::DatabaseMetaData::getSystemFunctions);
1261 }
1262 /* }}} */
1263 
1264 
1265 /* {{{ ODatabaseMetaData::getNumericFunctions() -I- */
getNumericFunctions()1266 OUString SAL_CALL ODatabaseMetaData::getNumericFunctions()
1267     throw(SQLException, RuntimeException)
1268 {
1269     return impl_getStringMetaData("getNumericFunctions", &sql::DatabaseMetaData::getNumericFunctions);
1270 }
1271 /* }}} */
1272 
1273 
1274 /* {{{ ODatabaseMetaData::supportsExtendedSQLGrammar() -I- */
supportsExtendedSQLGrammar()1275 sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar()
1276     throw(SQLException, RuntimeException)
1277 {
1278     return impl_getBoolMetaData("supportsExtendedSQLGrammar", &sql::DatabaseMetaData::supportsExtendedSQLGrammar);
1279 }
1280 /* }}} */
1281 
1282 
1283 /* {{{ ODatabaseMetaData::supportsCoreSQLGrammar() -I- */
supportsCoreSQLGrammar()1284 sal_Bool SAL_CALL ODatabaseMetaData::supportsCoreSQLGrammar()
1285     throw(SQLException, RuntimeException)
1286 {
1287     return impl_getBoolMetaData("supportsCoreSQLGrammar", &sql::DatabaseMetaData::supportsCoreSQLGrammar);
1288 }
1289 /* }}} */
1290 
1291 
1292 /* {{{ ODatabaseMetaData::supportsMinimumSQLGrammar() -I- */
supportsMinimumSQLGrammar()1293 sal_Bool SAL_CALL ODatabaseMetaData::supportsMinimumSQLGrammar()
1294     throw(SQLException, RuntimeException)
1295 {
1296     return impl_getBoolMetaData("supportsMinimumSQLGrammar", &sql::DatabaseMetaData::supportsMinimumSQLGrammar);
1297 }
1298 /* }}} */
1299 
1300 
1301 /* {{{ ODatabaseMetaData::supportsFullOuterJoins() -I- */
supportsFullOuterJoins()1302 sal_Bool SAL_CALL ODatabaseMetaData::supportsFullOuterJoins()
1303     throw(SQLException, RuntimeException)
1304 {
1305     return impl_getBoolMetaData("supportsFullOuterJoins", &sql::DatabaseMetaData::supportsFullOuterJoins);
1306 }
1307 /* }}} */
1308 
1309 
1310 /* {{{ ODatabaseMetaData::supportsLimitedOuterJoins() -I- */
supportsLimitedOuterJoins()1311 sal_Bool SAL_CALL ODatabaseMetaData::supportsLimitedOuterJoins()
1312     throw(SQLException, RuntimeException)
1313 {
1314     return impl_getBoolMetaData("supportsLimitedOuterJoins", &sql::DatabaseMetaData::supportsLimitedOuterJoins);
1315 }
1316 /* }}} */
1317 
1318 
1319 /* {{{ ODatabaseMetaData::getMaxColumnsInGroupBy() -I- */
getMaxColumnsInGroupBy()1320 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInGroupBy()
1321     throw(SQLException, RuntimeException)
1322 {
1323     return impl_getInt32MetaData("getMaxColumnsInGroupBy", &sql::DatabaseMetaData::getMaxColumnsInGroupBy);
1324 }
1325 /* }}} */
1326 
1327 
1328 /* {{{ ODatabaseMetaData::getMaxColumnsInOrderBy() -I- */
getMaxColumnsInOrderBy()1329 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInOrderBy()
1330     throw(SQLException, RuntimeException)
1331 {
1332     return impl_getInt32MetaData("getMaxColumnsInOrderBy", &sql::DatabaseMetaData::getMaxColumnsInOrderBy);
1333 }
1334 /* }}} */
1335 
1336 
1337 /* {{{ ODatabaseMetaData::getMaxColumnsInSelect() -I- */
getMaxColumnsInSelect()1338 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInSelect()
1339     throw(SQLException, RuntimeException)
1340 {
1341     return impl_getInt32MetaData("getMaxColumnsInSelect", &sql::DatabaseMetaData::getMaxColumnsInSelect);
1342 }
1343 /* }}} */
1344 
1345 
1346 /* {{{ ODatabaseMetaData::getMaxUserNameLength() -I- */
getMaxUserNameLength()1347 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxUserNameLength()
1348     throw(SQLException, RuntimeException)
1349 {
1350     return impl_getInt32MetaData("getMaxUserNameLength", &sql::DatabaseMetaData::getMaxUserNameLength);
1351 }
1352 /* }}} */
1353 
1354 
1355 /* {{{ ODatabaseMetaData::supportsResultSetType() -I- */
supportsResultSetType(sal_Int32 setType)1356 sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetType(sal_Int32 setType)
1357     throw(SQLException, RuntimeException)
1358 {
1359     return impl_getRSTypeMetaData("supportsResultSetType", &sql::DatabaseMetaData::supportsResultSetType, setType);
1360 }
1361 /* }}} */
1362 
1363 
1364 /* {{{ ODatabaseMetaData::supportsResultSetConcurrency() -I- */
supportsResultSetConcurrency(sal_Int32 setType,sal_Int32 concurrency)1365 sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetConcurrency(sal_Int32 setType, sal_Int32 concurrency)
1366     throw(SQLException, RuntimeException)
1367 {
1368     OSL_TRACE("ODatabaseMetaData::supportsResultSetConcurrency");
1369     /* TODO: Check this out */
1370     try {
1371         return meta->supportsResultSetConcurrency(setType, concurrency==com::sun::star::sdbc::TransactionIsolation::READ_COMMITTED?
1372                                                     sql::TRANSACTION_READ_COMMITTED:
1373                                                     (concurrency == com::sun::star::sdbc::TransactionIsolation::SERIALIZABLE?
1374                                                         sql::TRANSACTION_SERIALIZABLE:sql::TRANSACTION_SERIALIZABLE))? sal_True:sal_False;
1375     } catch (sql::MethodNotImplementedException) {
1376         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::supportsResultSetConcurrency", *this);
1377     } catch (sql::InvalidArgumentException) {
1378         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::supportsResultSetConcurrency", *this);
1379     } catch (const sql::SQLException& e) {
1380         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1381     }
1382     return sal_False;
1383 }
1384 /* }}} */
1385 
1386 
1387 /* {{{ ODatabaseMetaData::ownUpdatesAreVisible() -I- */
ownUpdatesAreVisible(sal_Int32 setType)1388 sal_Bool SAL_CALL ODatabaseMetaData::ownUpdatesAreVisible(sal_Int32 setType)
1389     throw(SQLException, RuntimeException)
1390 {
1391     return impl_getRSTypeMetaData("ownUpdatesAreVisible", &sql::DatabaseMetaData::ownUpdatesAreVisible, setType);
1392 }
1393 /* }}} */
1394 
1395 
1396 /* {{{ ODatabaseMetaData::ownDeletesAreVisible() -I- */
ownDeletesAreVisible(sal_Int32 setType)1397 sal_Bool SAL_CALL ODatabaseMetaData::ownDeletesAreVisible(sal_Int32 setType)
1398     throw(SQLException, RuntimeException)
1399 {
1400     return impl_getRSTypeMetaData("ownDeletesAreVisible", &sql::DatabaseMetaData::ownDeletesAreVisible, setType);
1401 }
1402 /* }}} */
1403 
1404 
1405 /* {{{ ODatabaseMetaData::ownInsertsAreVisible() -I- */
ownInsertsAreVisible(sal_Int32 setType)1406 sal_Bool SAL_CALL ODatabaseMetaData::ownInsertsAreVisible(sal_Int32 setType)
1407     throw(SQLException, RuntimeException)
1408 {
1409     return impl_getRSTypeMetaData("ownInsertsAreVisible", &sql::DatabaseMetaData::ownInsertsAreVisible, setType);
1410 }
1411 /* }}} */
1412 
1413 
1414 /* {{{ ODatabaseMetaData::othersUpdatesAreVisible() -I- */
othersUpdatesAreVisible(sal_Int32 setType)1415 sal_Bool SAL_CALL ODatabaseMetaData::othersUpdatesAreVisible(sal_Int32 setType)
1416     throw(SQLException, RuntimeException)
1417 {
1418     return impl_getRSTypeMetaData("othersUpdatesAreVisible", &sql::DatabaseMetaData::othersUpdatesAreVisible, setType);
1419 }
1420 /* }}} */
1421 
1422 
1423 /* {{{ ODatabaseMetaData::othersDeletesAreVisible() -I- */
othersDeletesAreVisible(sal_Int32 setType)1424 sal_Bool SAL_CALL ODatabaseMetaData::othersDeletesAreVisible(sal_Int32 setType)
1425     throw(SQLException, RuntimeException)
1426 {
1427     return impl_getRSTypeMetaData("othersDeletesAreVisible", &sql::DatabaseMetaData::othersDeletesAreVisible, setType);
1428 }
1429 /* }}} */
1430 
1431 
1432 /* {{{ ODatabaseMetaData::othersInsertsAreVisible() -I- */
othersInsertsAreVisible(sal_Int32 setType)1433 sal_Bool SAL_CALL ODatabaseMetaData::othersInsertsAreVisible(sal_Int32 setType)
1434     throw(SQLException, RuntimeException)
1435 {
1436     return impl_getRSTypeMetaData("othersInsertsAreVisible", &sql::DatabaseMetaData::othersInsertsAreVisible, setType);
1437 }
1438 /* }}} */
1439 
1440 
1441 /* {{{ ODatabaseMetaData::updatesAreDetected() -I- */
updatesAreDetected(sal_Int32 setType)1442 sal_Bool SAL_CALL ODatabaseMetaData::updatesAreDetected(sal_Int32 setType)
1443     throw(SQLException, RuntimeException)
1444 {
1445     return impl_getRSTypeMetaData("updatesAreDetected", &sql::DatabaseMetaData::updatesAreDetected, setType);
1446 }
1447 /* }}} */
1448 
1449 
1450 /* {{{ ODatabaseMetaData::deletesAreDetected() -I- */
deletesAreDetected(sal_Int32 setType)1451 sal_Bool SAL_CALL ODatabaseMetaData::deletesAreDetected(sal_Int32 setType)
1452     throw(SQLException, RuntimeException)
1453 {
1454     return impl_getRSTypeMetaData("deletesAreDetected", &sql::DatabaseMetaData::deletesAreDetected, setType);
1455 }
1456 /* }}} */
1457 
1458 
1459 /* {{{ ODatabaseMetaData::insertsAreDetected() -I- */
insertsAreDetected(sal_Int32 setType)1460 sal_Bool SAL_CALL ODatabaseMetaData::insertsAreDetected(sal_Int32 setType)
1461     throw(SQLException, RuntimeException)
1462 {
1463     return impl_getRSTypeMetaData("insertsAreDetected", &sql::DatabaseMetaData::insertsAreDetected, setType);
1464 }
1465 /* }}} */
1466 
1467 
1468 /* {{{ ODatabaseMetaData::supportsBatchUpdates() -I- */
supportsBatchUpdates()1469 sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates()
1470     throw(SQLException, RuntimeException)
1471 {
1472     return impl_getBoolMetaData("supportsBatchUpdates", &sql::DatabaseMetaData::supportsBatchUpdates);
1473 }
1474 /* }}} */
1475 
1476 
1477 /* {{{ ODatabaseMetaData::getConnection() -I- */
getConnection()1478 Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection()
1479     throw(SQLException, RuntimeException)
1480 {
1481     OSL_TRACE("ODatabaseMetaData::getConnection");
1482     return (Reference< XConnection >)&m_rConnection;
1483 }
1484 /* }}} */
1485 
1486 
1487 /*
1488   Here follow all methods which return(a resultset
1489   the first methods is an example implementation how to use this resultset
1490   of course you could implement it on your and you should do this because
1491   the general way is more memory expensive
1492 */
1493 
1494 /* {{{ ODatabaseMetaData::getTableTypes() -I- */
getTableTypes()1495 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes()
1496     throw(SQLException, RuntimeException)
1497 {
1498     OSL_TRACE("ODatabaseMetaData::getTableTypes");
1499     const char * table_types[] = {"TABLE", "VIEW"};
1500     sal_Int32 requiredVersion[] = {0, 50000};
1501 
1502     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1503     std::vector< std::vector< Any > > rRows;
1504     rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1505 
1506     for (sal_uInt32 i = 0; i < 2; i++) {
1507         if (m_rConnection.getMysqlVersion() >= requiredVersion[i]) {
1508             std::vector< Any > aRow(1);
1509             aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)));
1510             rRows.push_back(aRow);
1511         }
1512     }
1513     lcl_setRows_throw(xResultSet, 5 ,rRows);
1514     return xResultSet;
1515 }
1516 /* }}} */
1517 
1518 
1519 /* {{{ ODatabaseMetaData::getTypeInfo() -I- */
getTypeInfo()1520 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
1521     throw(SQLException, RuntimeException)
1522 {
1523     OSL_TRACE("ODatabaseMetaData::getTypeInfo");
1524     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1525 
1526     std::vector< std::vector< Any > > rRows;
1527 
1528     rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1529     unsigned int i = 0;
1530     while (mysqlc_types[i].typeName) {
1531         std::vector< Any > aRow(1);
1532 
1533         aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)));
1534         aRow.push_back(makeAny(mysqlc_types[i].dataType));
1535         aRow.push_back(makeAny(mysqlc_types[i].precision));
1536         aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)));
1537         aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)));
1538         aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)));
1539         aRow.push_back(makeAny(mysqlc_types[i].nullable));
1540         aRow.push_back(makeAny(mysqlc_types[i].caseSensitive));
1541         aRow.push_back(makeAny(mysqlc_types[i].searchable));
1542         aRow.push_back(makeAny(mysqlc_types[i].isUnsigned));
1543         aRow.push_back(makeAny(mysqlc_types[i].fixedPrecScale));
1544         aRow.push_back(makeAny(mysqlc_types[i].autoIncrement));
1545         aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)));
1546         aRow.push_back(makeAny(mysqlc_types[i].minScale));
1547         aRow.push_back(makeAny(mysqlc_types[i].maxScale));
1548         aRow.push_back(makeAny(sal_Int32(0)));
1549         aRow.push_back(makeAny(sal_Int32(0)));
1550         aRow.push_back(makeAny(sal_Int32(10)));
1551 
1552         rRows.push_back(aRow);
1553         i++;
1554     }
1555 
1556     lcl_setRows_throw(xResultSet, 14, rRows);
1557     return xResultSet;
1558 }
1559 /* }}} */
1560 
1561 
1562 /* {{{ ODatabaseMetaData::getCatalogs() -I- */
getCatalogs()1563 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs()
1564     throw(SQLException, RuntimeException)
1565 {
1566     OSL_TRACE("ODatabaseMetaData::getCatalogs");
1567 
1568     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1569     std::vector< std::vector< Any > > rRows;
1570 
1571     try {
1572         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1573         std::auto_ptr< sql::ResultSet> rset( meta->getCatalogs());
1574         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1575         sal_uInt32 columns = rs_meta->getColumnCount();
1576         while (rset->next()) {
1577             std::vector< Any > aRow(1);
1578             for (sal_uInt32 i = 1; i <= columns; i++) {
1579                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1580             }
1581             rRows.push_back(aRow);
1582         }
1583     } catch (sql::MethodNotImplementedException) {
1584         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getCatalogs", *this);
1585     } catch (sql::InvalidArgumentException) {
1586         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getCatalogs", *this);
1587     } catch (const sql::SQLException& e) {
1588         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1589     }
1590 
1591     lcl_setRows_throw(xResultSet, 0, rRows);
1592     return xResultSet;
1593 }
1594 /* }}} */
1595 
1596 
1597 /* {{{ ODatabaseMetaData::getSchemas() -I- */
getSchemas()1598 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas()
1599     throw(SQLException, RuntimeException)
1600 {
1601     OSL_TRACE("ODatabaseMetaData::getSchemas");
1602 
1603     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1604     std::vector< std::vector< Any > > rRows;
1605 
1606     try {
1607         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1608         std::auto_ptr< sql::ResultSet> rset( meta->getSchemas());
1609         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1610         sal_uInt32 columns = rs_meta->getColumnCount();
1611         while (rset->next()) {
1612             std::vector< Any > aRow(1);
1613             bool informationSchema = false;
1614             for (sal_uInt32 i = 1; i <= columns; i++) {
1615                 sql::SQLString columnStringValue = rset->getString(i);
1616                 if (i == 1) {   // TABLE_SCHEM
1617                     informationSchema = (0 == columnStringValue.compare("information_schema"));
1618                 }
1619                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(columnStringValue, encoding)));
1620             }
1621             if (!informationSchema ) {
1622                 rRows.push_back(aRow);
1623             }
1624         }
1625     } catch (sql::MethodNotImplementedException) {
1626         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getSchemas", *this);
1627     } catch (sql::InvalidArgumentException) {
1628         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getSchemas", *this);
1629     } catch (const sql::SQLException& e) {
1630         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1631     }
1632 
1633     lcl_setRows_throw(xResultSet, 1, rRows);
1634     return xResultSet;
1635 }
1636 /* }}} */
1637 
1638 
1639 /* {{{ ODatabaseMetaData::getColumnPrivileges() -I- */
getColumnPrivileges(const Any & catalog,const OUString & schema,const OUString & table,const OUString & columnNamePattern)1640 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
1641         const Any& catalog,
1642         const OUString& schema,
1643         const OUString& table,
1644         const OUString& columnNamePattern)
1645     throw(SQLException, RuntimeException)
1646 {
1647     OSL_TRACE("ODatabaseMetaData::getColumnPrivileges");
1648     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1649     std::vector< std::vector< Any > > rRows;
1650 
1651     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1652                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
1653                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr()),
1654                 cNamePattern(OUStringToOString(columnNamePattern, m_rConnection.getConnectionEncoding()).getStr());
1655     try {
1656         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1657         std::auto_ptr< sql::ResultSet> rset( meta->getColumnPrivileges(cat, sch, tab, cNamePattern.compare("")? cNamePattern:wild));
1658 
1659         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1660         sal_uInt32 columns = rs_meta->getColumnCount();
1661         while (rset->next()) {
1662             std::vector< Any > aRow(1);
1663             for (sal_uInt32 i = 1; i <= columns; i++) {
1664                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1665             }
1666             rRows.push_back(aRow);
1667         }
1668     } catch (sql::MethodNotImplementedException) {
1669         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getColumnPrivileges", *this);
1670     } catch (sql::InvalidArgumentException) {
1671         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getColumnPrivileges", *this);
1672     } catch (const sql::SQLException& e) {
1673         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1674     }
1675 
1676     lcl_setRows_throw(xResultSet, 2, rRows);
1677     return xResultSet;
1678 }
1679 /* }}} */
1680 
1681 
1682 /* {{{ ODatabaseMetaData::getColumns() -I- */
getColumns(const Any & catalog,const OUString & schemaPattern,const OUString & tableNamePattern,const OUString & columnNamePattern)1683 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
1684         const Any& catalog,
1685         const OUString& schemaPattern,
1686         const OUString& tableNamePattern,
1687         const OUString& columnNamePattern)
1688     throw(SQLException, RuntimeException)
1689 {
1690     OSL_TRACE("ODatabaseMetaData::getColumns");
1691     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1692     std::vector< std::vector< Any > > rRows;
1693     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1694                 sPattern(OUStringToOString(schemaPattern, m_rConnection.getConnectionEncoding()).getStr()),
1695                 tNamePattern(OUStringToOString(tableNamePattern, m_rConnection.getConnectionEncoding()).getStr()),
1696                 cNamePattern(OUStringToOString(columnNamePattern, m_rConnection.getConnectionEncoding()).getStr());
1697 
1698     try {
1699         std::auto_ptr< sql::ResultSet> rset( meta->getColumns(cat,
1700                                                 sPattern.compare("")? sPattern:wild,
1701                                                 tNamePattern.compare("")? tNamePattern:wild,
1702                                                 cNamePattern.compare("")? cNamePattern:wild));
1703         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1704         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1705         sal_uInt32 columns = rs_meta->getColumnCount();
1706         while (rset->next()) {
1707             std::vector< Any > aRow(1);
1708             for (sal_uInt32 i = 1; i <= columns; i++) {
1709                 if (i == 5) { // ColumnType
1710                     sal_Int32 sdbc_type = mysqlc_sdbc_driver::mysqlToOOOType(atoi(rset->getString(i).c_str()));
1711                     aRow.push_back(makeAny(sdbc_type));
1712                 } else {
1713                     aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1714                 }
1715             }
1716             rRows.push_back(aRow);
1717         }
1718     } catch (sql::MethodNotImplementedException) {
1719         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getColumns", *this);
1720     } catch (sql::InvalidArgumentException) {
1721         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getColumns", *this);
1722     } catch (const sql::SQLException& e) {
1723         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1724     }
1725     lcl_setRows_throw(xResultSet, 3, rRows);
1726     return xResultSet;
1727 }
1728 /* }}} */
1729 
1730 
1731 /* {{{ ODatabaseMetaData::getTables() -I- */
getTables(const Any & catalog,const OUString & schemaPattern,const OUString & tableNamePattern,const Sequence<OUString> & types)1732 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
1733         const Any& catalog,
1734         const OUString& schemaPattern,
1735         const OUString& tableNamePattern,
1736         const Sequence< OUString >& types )
1737     throw(SQLException, RuntimeException)
1738 {
1739     OSL_TRACE("ODatabaseMetaData::getTables");
1740     sal_Int32 nLength = types.getLength();
1741 
1742     Reference< XResultSet > xResultSet(getOwnConnection().
1743         getDriver().getFactory()->createInstance(
1744                 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1745     std::vector< std::vector< Any > > rRows;
1746 
1747     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1748                 sPattern(OUStringToOString(schemaPattern, m_rConnection.getConnectionEncoding()).getStr()),
1749                 tNamePattern(OUStringToOString(tableNamePattern, m_rConnection.getConnectionEncoding()).getStr());
1750 
1751     ext_std::list<sql::SQLString> tabTypes;
1752     for (const OUString *pStart = types.getConstArray(), *p = pStart, *pEnd = pStart + nLength; p != pEnd; ++p) {
1753         tabTypes.push_back(OUStringToOString(*p, m_rConnection.getConnectionEncoding()).getStr());
1754     }
1755 
1756     try {
1757         std::auto_ptr< sql::ResultSet> rset( meta->getTables(cat,
1758                                                sPattern.compare("")? sPattern:wild,
1759                                                tNamePattern.compare("")? tNamePattern:wild,
1760                                                tabTypes));
1761 
1762         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1763         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1764         sal_uInt32 columns = rs_meta->getColumnCount();
1765         while (rset->next()) {
1766             std::vector< Any > aRow(1);
1767             bool informationSchema = false;
1768             for (sal_uInt32 i = 1; (i <= columns) && !informationSchema; ++i) {
1769                 sql::SQLString columnStringValue = rset->getString(i);
1770                 if (i == 2) {   // TABLE_SCHEM
1771                     informationSchema = ( 0 == columnStringValue.compare("information_schema"));
1772                 }
1773                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(columnStringValue, encoding)));
1774             }
1775             if (!informationSchema) {
1776                 rRows.push_back(aRow);
1777             }
1778         }
1779     } catch (sql::MethodNotImplementedException) {
1780         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getTables", *this);
1781     } catch (sql::InvalidArgumentException) {
1782         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getTables", *this);
1783     } catch (const sql::SQLException& e) {
1784         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1785     }
1786 
1787     lcl_setRows_throw(xResultSet, 4, rRows);
1788     return xResultSet;
1789 }
1790 /* }}} */
1791 
1792 
1793 /* {{{ ODatabaseMetaData::getProcedureColumns() -I- */
getProcedureColumns(const Any &,const OUString &,const OUString &,const OUString &)1794 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns(
1795         const Any& /* catalog */,
1796         const OUString& /* schemaPattern */,
1797         const OUString& /* procedureNamePattern */,
1798         const OUString& /* columnNamePattern */)
1799     throw(SQLException, RuntimeException)
1800 {
1801     OSL_TRACE("ODatabaseMetaData::getProcedureColumns");
1802     // Currently there is no information available
1803     return NULL;
1804 }
1805 /* }}} */
1806 
1807 
1808 /* {{{ ODatabaseMetaData::getProcedures() -I- */
getProcedures(const Any & catalog,const OUString & schemaPattern,const OUString & procedureNamePattern)1809 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures(
1810         const Any& catalog,
1811         const OUString& schemaPattern,
1812         const OUString& procedureNamePattern)
1813     throw(SQLException, RuntimeException)
1814 {
1815     OSL_TRACE("ODatabaseMetaData::getProcedures");
1816     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1817     std::vector< std::vector< Any > > rRows;
1818 
1819     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1820                 sPattern(OUStringToOString(schemaPattern, m_rConnection.getConnectionEncoding()).getStr()),
1821                 pNamePattern(OUStringToOString(procedureNamePattern, m_rConnection.getConnectionEncoding()).getStr());
1822 
1823 
1824     try {
1825         std::auto_ptr< sql::ResultSet> rset( meta->getProcedures(cat,
1826                                                    sPattern.compare("")? sPattern:wild,
1827                                                    pNamePattern.compare("")? pNamePattern:wild));
1828 
1829         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1830         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1831         sal_uInt32 columns = rs_meta->getColumnCount();
1832         while (rset->next()) {
1833             std::vector< Any > aRow(1);
1834             for (sal_uInt32 i = 1; i <= columns; i++) {
1835                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1836             }
1837             rRows.push_back(aRow);
1838         }
1839     } catch (sql::MethodNotImplementedException) {
1840         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getProcedures", *this);
1841     } catch (sql::InvalidArgumentException) {
1842         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getProcedures", *this);
1843     } catch (const sql::SQLException& e) {
1844         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1845     }
1846 
1847     lcl_setRows_throw(xResultSet, 7,rRows);
1848     return xResultSet;
1849 }
1850 /* }}} */
1851 
1852 
1853 /* {{{ ODatabaseMetaData::getVersionColumns() -I- */
getVersionColumns(const Any &,const OUString &,const OUString &)1854 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getVersionColumns(
1855         const Any& /* catalog */,
1856         const OUString& /* schema */,
1857         const OUString& /* table */)
1858     throw(SQLException, RuntimeException)
1859 {
1860     OSL_TRACE("ODatabaseMetaData::getVersionColumns");
1861     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1862     std::vector< std::vector< Any > > rRows;
1863     lcl_setRows_throw(xResultSet, 16,rRows);
1864     return xResultSet;
1865 }
1866 /* }}} */
1867 
1868 
1869 /* {{{ ODatabaseMetaData::getExportedKeys() -I- */
getExportedKeys(const Any & catalog,const OUString & schema,const OUString & table)1870 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
1871         const Any&  catalog ,
1872         const OUString&  schema ,
1873         const OUString&  table )
1874     throw(SQLException, RuntimeException)
1875 {
1876     OSL_TRACE("ODatabaseMetaData::getExportedKeys");
1877     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1878     std::vector< std::vector< Any > > rRows;
1879     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1880                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
1881                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr());
1882 
1883     try {
1884         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1885         std::auto_ptr< sql::ResultSet> rset( meta->getExportedKeys(cat, sch, tab));
1886         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1887         sal_uInt32 columns = rs_meta->getColumnCount();
1888         while (rset->next()) {
1889             std::vector< Any > aRow(1);
1890             for (sal_uInt32 i = 1; i <= columns; i++) {
1891                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1892             }
1893             rRows.push_back(aRow);
1894         }
1895     } catch (sql::MethodNotImplementedException) {
1896         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getExportedKeys", *this);
1897     } catch (sql::InvalidArgumentException) {
1898         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getExportedKeys", *this);
1899     } catch (const sql::SQLException& e) {
1900         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1901     }
1902 
1903     lcl_setRows_throw(xResultSet, 8, rRows);
1904     return xResultSet;
1905 }
1906 /* }}} */
1907 
1908 
1909 /* {{{ ODatabaseMetaData::getImportedKeys() -I- */
getImportedKeys(const Any & catalog,const OUString & schema,const OUString & table)1910 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
1911         const Any& catalog,
1912         const OUString& schema,
1913         const OUString& table)
1914     throw(SQLException, RuntimeException)
1915 {
1916     OSL_TRACE("ODatabaseMetaData::getImportedKeys");
1917 
1918     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1919     std::vector< std::vector< Any > > rRows;
1920 
1921     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1922                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
1923                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr());
1924 
1925     try {
1926         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1927         std::auto_ptr< sql::ResultSet> rset( meta->getImportedKeys(cat, sch, tab));
1928         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1929         sal_uInt32 columns = rs_meta->getColumnCount();
1930         while (rset->next()) {
1931             std::vector< Any > aRow(1);
1932             for (sal_uInt32 i = 1; i <= columns; i++) {
1933                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1934             }
1935             rRows.push_back(aRow);
1936         }
1937     } catch (sql::MethodNotImplementedException) {
1938         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getImportedKeys", *this);
1939     } catch (sql::InvalidArgumentException) {
1940         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getImportedKeys", *this);
1941     } catch (const sql::SQLException& e) {
1942         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1943     }
1944 
1945     lcl_setRows_throw(xResultSet,9,rRows);
1946     return xResultSet;
1947 }
1948 /* }}} */
1949 
1950 
1951 /* {{{ ODatabaseMetaData::getPrimaryKeys() -I- */
getPrimaryKeys(const Any & catalog,const OUString & schema,const OUString & table)1952 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
1953         const Any& catalog,
1954         const OUString& schema,
1955         const OUString& table)
1956     throw(SQLException, RuntimeException)
1957 {
1958     OSL_TRACE("ODatabaseMetaData::getPrimaryKeys");
1959     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
1960     std::vector< std::vector< Any > > rRows;
1961 
1962     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
1963                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
1964                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr());
1965 
1966     try {
1967         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
1968         std::auto_ptr< sql::ResultSet> rset( meta->getPrimaryKeys(cat, sch, tab));
1969         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
1970         sal_uInt32 columns = rs_meta->getColumnCount();
1971         while (rset->next()) {
1972             std::vector< Any > aRow(1);
1973             for (sal_uInt32 i = 1; i <= columns; i++) {
1974                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
1975             }
1976             rRows.push_back(aRow);
1977         }
1978     } catch (sql::MethodNotImplementedException) {
1979         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getPrimaryKeys", *this);
1980     } catch (sql::InvalidArgumentException) {
1981         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getPrimaryKeys", *this);
1982     } catch (const sql::SQLException& e) {
1983         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
1984     }
1985 
1986     lcl_setRows_throw(xResultSet, 10, rRows);
1987     return xResultSet;
1988 }
1989 /* }}} */
1990 
1991 
1992 /* {{{ ODatabaseMetaData::getIndexInfo() -I- */
getIndexInfo(const Any & catalog,const OUString & schema,const OUString & table,sal_Bool unique,sal_Bool approximate)1993 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
1994         const Any& catalog,
1995         const OUString& schema,
1996         const OUString& table,
1997         sal_Bool unique,
1998         sal_Bool approximate)
1999     throw(SQLException, RuntimeException)
2000 {
2001     OSL_TRACE("ODatabaseMetaData::getIndexInfo");
2002     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
2003     std::vector< std::vector< Any > > rRows;
2004 
2005     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
2006                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
2007                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr());
2008 
2009     try {
2010         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
2011         std::auto_ptr< sql::ResultSet> rset( meta->getIndexInfo(cat, sch, tab, unique, approximate));
2012         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
2013         sal_uInt32 columns = rs_meta->getColumnCount();
2014         while (rset->next()) {
2015             std::vector< Any > aRow(1);
2016             for (sal_uInt32 i = 1; i <= columns; i++) {
2017                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
2018             }
2019             rRows.push_back(aRow);
2020         }
2021     } catch (sql::MethodNotImplementedException) {
2022         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getIndexInfo", *this);
2023     } catch (sql::InvalidArgumentException) {
2024         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getIndexInfo", *this);
2025     } catch (const sql::SQLException& e) {
2026         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
2027     }
2028 
2029     lcl_setRows_throw(xResultSet, 11, rRows);
2030     return xResultSet;
2031 }
2032 /* }}} */
2033 
2034 
2035 /* {{{ ODatabaseMetaData::getBestRowIdentifier() -I- */
getBestRowIdentifier(const Any & catalog,const OUString & schema,const OUString & table,sal_Int32 scope,sal_Bool nullable)2036 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier(
2037         const Any& catalog,
2038         const OUString& schema,
2039         const OUString& table,
2040         sal_Int32 scope,
2041         sal_Bool nullable)
2042     throw(SQLException, RuntimeException)
2043 {
2044     OSL_TRACE("ODatabaseMetaData::getBestRowIdentifier");
2045     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
2046     std::vector< std::vector< Any > > rRows;
2047 
2048     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
2049                 sch(OUStringToOString(schema, m_rConnection.getConnectionEncoding()).getStr()),
2050                 tab(OUStringToOString(table, m_rConnection.getConnectionEncoding()).getStr());
2051 
2052     try {
2053         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
2054         std::auto_ptr< sql::ResultSet> rset( meta->getBestRowIdentifier(cat, sch, tab, scope, nullable));
2055         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
2056         sal_uInt32 columns = rs_meta->getColumnCount();
2057         while (rset->next()) {
2058             std::vector< Any > aRow(1);
2059             for (sal_uInt32 i = 1; i <= columns; i++) {
2060                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
2061             }
2062             rRows.push_back(aRow);
2063         }
2064     } catch (sql::MethodNotImplementedException) {
2065         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getBestRowIdentifier", *this);
2066     } catch (sql::InvalidArgumentException) {
2067         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getBestRowIdentifier", *this);
2068     } catch (const sql::SQLException& e) {
2069         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
2070     }
2071 
2072     lcl_setRows_throw(xResultSet, 15, rRows);
2073     return xResultSet;
2074 }
2075 /* }}} */
2076 
2077 
2078 /* {{{ ODatabaseMetaData::getTablePrivileges() -I- */
getTablePrivileges(const Any & catalog,const OUString & schemaPattern,const OUString & tableNamePattern)2079 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
2080         const Any& catalog,
2081         const OUString& schemaPattern,
2082         const OUString& tableNamePattern)
2083     throw(SQLException, RuntimeException)
2084 {
2085     OSL_TRACE("ODatabaseMetaData::getTablePrivileges");
2086     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
2087     std::vector< std::vector< Any > > rRows;
2088 
2089     ext_std::string cat(catalog.hasValue()? OUStringToOString(getStringFromAny(catalog), m_rConnection.getConnectionEncoding()).getStr():""),
2090                 sPattern(OUStringToOString(schemaPattern, m_rConnection.getConnectionEncoding()).getStr()),
2091                 tPattern(OUStringToOString(tableNamePattern, m_rConnection.getConnectionEncoding()).getStr());
2092 
2093     try {
2094         static bool fakeTablePrivileges = false;
2095         if (fakeTablePrivileges) {
2096             static const sal_Char* allPrivileges[] = {
2097                 "ALTER", "DELETE", "DROP", "INDEX", "INSERT", "LOCK TABLES", "SELECT", "UPDATE"
2098             };
2099             Any userName; userName <<= getUserName();
2100             for (size_t i = 0; i < sizeof( allPrivileges ) / sizeof( allPrivileges[0]); ++i) {
2101                 std::vector< Any > aRow;
2102                 aRow.push_back(makeAny( sal_Int32( i ) ));
2103                 aRow.push_back(catalog);                                                          // TABLE_CAT
2104                 aRow.push_back(makeAny( schemaPattern ));                                         // TABLE_SCHEM
2105                 aRow.push_back(makeAny( tableNamePattern ));                                      // TABLE_NAME
2106                 aRow.push_back(Any());                                                            // GRANTOR
2107                 aRow.push_back(userName);                                                         // GRANTEE
2108                 aRow.push_back(makeAny( ::rtl::OUString::createFromAscii( allPrivileges[i] ) ));  // PRIVILEGE
2109                 aRow.push_back(Any());                                                            // IS_GRANTABLE
2110 
2111                 rRows.push_back(aRow);
2112             }
2113         } else {
2114             rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
2115             std::auto_ptr< sql::ResultSet> rset( meta->getTablePrivileges(cat, sPattern.compare("")? sPattern:wild, tPattern.compare("")? tPattern:wild));
2116             sql::ResultSetMetaData * rs_meta = rset->getMetaData();
2117             sal_uInt32 columns = rs_meta->getColumnCount();
2118             while (rset->next()) {
2119                 std::vector< Any > aRow(1);
2120                 for (sal_uInt32 i = 1; i <= columns; i++) {
2121                     aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
2122                 }
2123                 rRows.push_back(aRow);
2124             }
2125         }
2126     } catch (sql::MethodNotImplementedException) {
2127         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getTablePrivileges", *this);
2128     } catch (sql::InvalidArgumentException) {
2129         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getTablePrivileges", *this);
2130     } catch (const sql::SQLException& e) {
2131         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
2132     }
2133 
2134     lcl_setRows_throw(xResultSet,12,rRows);
2135     return xResultSet;
2136 }
2137 /* }}} */
2138 
2139 
2140 /* {{{ ODatabaseMetaData::getCrossReference() -I- */
getCrossReference(const Any & primaryCatalog,const OUString & primarySchema,const OUString & primaryTable,const Any & foreignCatalog,const OUString & foreignSchema,const OUString & foreignTable)2141 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
2142         const Any& primaryCatalog,
2143         const OUString& primarySchema,
2144         const OUString& primaryTable,
2145         const Any& foreignCatalog,
2146         const OUString& foreignSchema,
2147         const OUString& foreignTable)
2148     throw(SQLException, RuntimeException)
2149 {
2150     OSL_TRACE("ODatabaseMetaData::getCrossReference");
2151     Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.DatabaseMetaDataResultSet"))),UNO_QUERY);
2152     std::vector< std::vector< Any > > rRows;
2153 
2154     ext_std::string primaryCat(primaryCatalog.hasValue()? OUStringToOString(getStringFromAny(primaryCatalog), m_rConnection.getConnectionEncoding()).getStr():""),
2155                 foreignCat(foreignCatalog.hasValue()? OUStringToOString(getStringFromAny(foreignCatalog), m_rConnection.getConnectionEncoding()).getStr():""),
2156                 pSchema(OUStringToOString(primarySchema, m_rConnection.getConnectionEncoding()).getStr()),
2157                 pTable(OUStringToOString(primaryTable, m_rConnection.getConnectionEncoding()).getStr()),
2158                 fSchema(OUStringToOString(foreignSchema, m_rConnection.getConnectionEncoding()).getStr()),
2159                 fTable(OUStringToOString(foreignTable, m_rConnection.getConnectionEncoding()).getStr());
2160 
2161     try {
2162         rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
2163         std::auto_ptr< sql::ResultSet> rset( meta->getCrossReference(primaryCat, pSchema, pTable, foreignCat, fSchema, fTable));
2164         sql::ResultSetMetaData * rs_meta = rset->getMetaData();
2165         sal_uInt32 columns = rs_meta->getColumnCount();
2166         while (rset->next()) {
2167             std::vector< Any > aRow(1);
2168             for (sal_uInt32 i = 1; i <= columns; i++) {
2169                 aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(rset->getString(i), encoding)));
2170             }
2171             rRows.push_back(aRow);
2172         }
2173     } catch (sql::MethodNotImplementedException) {
2174         mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getCrossReference", *this);
2175     } catch (sql::InvalidArgumentException) {
2176         mysqlc_sdbc_driver::throwInvalidArgumentException("ODatabaseMetaData::getCrossReference", *this);
2177     } catch (const sql::SQLException& e) {
2178         mysqlc_sdbc_driver::translateAndThrow(e, *this, m_rConnection.getConnectionEncoding());
2179     }
2180 
2181     lcl_setRows_throw(xResultSet,13,rRows);
2182     return xResultSet;
2183 }
2184 /* }}} */
2185 
2186 
2187 /* {{{ ODatabaseMetaData::getUDTs() -I- */
getUDTs(const Any &,const OUString &,const OUString &,const Sequence<sal_Int32> &)2188 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs(
2189         const Any& /* catalog */,
2190         const OUString& /* schemaPattern */,
2191         const OUString& /* typeNamePattern */,
2192         const Sequence< sal_Int32 >& /* types */)
2193     throw(SQLException, RuntimeException)
2194 {
2195     OSL_TRACE("ODatabaseMetaData::getUDTs");
2196     mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getUDTs", *this);
2197     return NULL;
2198 }
2199 /* }}} */
2200 
2201 /*
2202  * Local variables:
2203  * tab-width: 4
2204  * c-basic-offset: 4
2205  * End:
2206  * vim600: noet sw=4 ts=4 fdm=marker
2207  * vim<600: noet sw=4 ts=4
2208  */
2209 
2210