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