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