1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_connectivity.hxx"
26 #include "odbc/ODatabaseMetaData.hxx"
27 #include "odbc/OTools.hxx"
28 #ifndef _CONNECTIVITY_ODBC_ORESULTSET_HXX_
29 #include "odbc/ODatabaseMetaDataResultSet.hxx"
30 #endif
31 #include "FDatabaseMetaDataResultSet.hxx"
32 #include <com/sun/star/sdbc/DataType.hpp>
33 #include <com/sun/star/sdbc/ResultSetType.hpp>
34 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
35 #include "odbc/OFunctiondefs.hxx"
36 #include "stdio.h"
37 #include "TPrivilegesResultSet.hxx"
38 #include <connectivity/dbexception.hxx>
39 #include <rtl/ustrbuf.hxx>
40
41 using namespace connectivity::odbc;
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
ODatabaseMetaData(const SQLHANDLE _pHandle,OConnection * _pCon)47 ODatabaseMetaData::ODatabaseMetaData(const SQLHANDLE _pHandle,OConnection* _pCon)
48 : ::connectivity::ODatabaseMetaDataBase(_pCon,_pCon->getConnectionInfo())
49 ,m_aConnectionHandle(_pHandle)
50 ,m_pConnection(_pCon)
51 ,m_bUseCatalog(sal_True)
52 ,m_bOdbc3(sal_True)
53 {
54 OSL_ENSURE(m_pConnection,"ODatabaseMetaData::ODatabaseMetaData: No connection set!");
55 if(!m_pConnection->isCatalogUsed())
56 {
57 osl_incrementInterlockedCount( &m_refCount );
58 try
59 {
60 m_bUseCatalog = !(usesLocalFiles() || usesLocalFilePerTable());
61 ::rtl::OUString sVersion = getDriverVersion();
62 m_bOdbc3 = sVersion != ::rtl::OUString::createFromAscii("02.50") && sVersion != ::rtl::OUString::createFromAscii("02.00");
63 }
64 catch(SQLException& )
65 { // doesn't matter here
66 }
67 osl_decrementInterlockedCount( &m_refCount );
68 }
69 }
70 // -------------------------------------------------------------------------
~ODatabaseMetaData()71 ODatabaseMetaData::~ODatabaseMetaData()
72 {
73 }
74 // -------------------------------------------------------------------------
impl_getTypeInfo_throw()75 Reference< XResultSet > ODatabaseMetaData::impl_getTypeInfo_throw( )
76 {
77 Reference< XResultSet > xRef;
78 try
79 {
80 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
81 xRef = pResult;
82 pResult->openTypeInfo();
83 }
84 catch(SQLException&)
85 {
86 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
87 }
88
89 return xRef;
90 }
91 // -------------------------------------------------------------------------
getCatalogs()92 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( ) throw(SQLException, RuntimeException)
93 {
94 Reference< XResultSet > xRef;
95 if(!m_bUseCatalog)
96 {
97 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eCatalogs);
98 }
99 else
100 {
101 try
102 {
103 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
104 xRef = pResult;
105 pResult->openCatalogs();
106 }
107 catch(SQLException&)
108 {
109 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eCatalogs);
110 }
111 }
112
113 return xRef;
114 }
115 // -------------------------------------------------------------------------
impl_getCatalogSeparator_throw()116 ::rtl::OUString ODatabaseMetaData::impl_getCatalogSeparator_throw( )
117 {
118 ::rtl::OUString aVal;
119 if ( m_bUseCatalog )
120 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_NAME_SEPARATOR,aVal,*this,m_pConnection->getTextEncoding());
121
122 return aVal;
123 }
124 // -------------------------------------------------------------------------
getSchemas()125 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas( ) throw(SQLException, RuntimeException)
126 {
127 Reference< XResultSet > xRef;
128 try
129 {
130 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
131 xRef = pResult;
132 pResult->openSchemas();
133 }
134 catch(SQLException&)
135 {
136 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eSchemas);
137 }
138 return xRef;
139 }
140 // -------------------------------------------------------------------------
getColumnPrivileges(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table,const::rtl::OUString & columnNamePattern)141 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
142 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table,
143 const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException)
144 {
145 Reference< XResultSet > xRef;
146 try
147 {
148 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
149 xRef = pResult;
150 pResult->openColumnPrivileges(m_bUseCatalog ? catalog : Any(),schema,table,columnNamePattern);
151 }
152 catch(SQLException&)
153 {
154 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumnPrivileges);
155 }
156 return xRef;
157 }
158 // -------------------------------------------------------------------------
getColumns(const Any & catalog,const::rtl::OUString & schemaPattern,const::rtl::OUString & tableNamePattern,const::rtl::OUString & columnNamePattern)159 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
160 const Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern,
161 const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException)
162 {
163 Reference< XResultSet > xRef;
164 try
165 {
166 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
167 xRef = pResult;
168 pResult->openColumns(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern,columnNamePattern);
169 }
170 catch(SQLException&)
171 {
172 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns);
173 }
174 return xRef;
175 }
176 // -------------------------------------------------------------------------
getTables(const Any & catalog,const::rtl::OUString & schemaPattern,const::rtl::OUString & tableNamePattern,const Sequence<::rtl::OUString> & types)177 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
178 const Any& catalog, const ::rtl::OUString& schemaPattern,
179 const ::rtl::OUString& tableNamePattern, const Sequence< ::rtl::OUString >& types ) throw(SQLException, RuntimeException)
180 {
181 Reference< XResultSet > xRef;
182 try
183 {
184 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
185 xRef = pResult;
186 pResult->openTables(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern,types);
187 }
188 catch(SQLException&)
189 {
190 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables);
191 }
192 return xRef;
193 }
194 // -------------------------------------------------------------------------
getProcedureColumns(const Any & catalog,const::rtl::OUString & schemaPattern,const::rtl::OUString & procedureNamePattern,const::rtl::OUString & columnNamePattern)195 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns(
196 const Any& catalog, const ::rtl::OUString& schemaPattern,
197 const ::rtl::OUString& procedureNamePattern, const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException)
198 {
199 Reference< XResultSet > xRef;
200 try
201 {
202 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
203 xRef = pResult;
204 pResult->openProcedureColumns(m_bUseCatalog ? catalog : Any(),schemaPattern,procedureNamePattern,columnNamePattern);
205 }
206 catch(SQLException&)
207 {
208 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eProcedureColumns);
209 }
210 return xRef;
211 }
212 // -------------------------------------------------------------------------
getProcedures(const Any & catalog,const::rtl::OUString & schemaPattern,const::rtl::OUString & procedureNamePattern)213 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures(
214 const Any& catalog, const ::rtl::OUString& schemaPattern,
215 const ::rtl::OUString& procedureNamePattern ) throw(SQLException, RuntimeException)
216 {
217 Reference< XResultSet > xRef;
218 try
219 {
220 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
221 xRef = pResult;
222 pResult->openProcedures(m_bUseCatalog ? catalog : Any(),schemaPattern,procedureNamePattern);
223 }
224 catch(SQLException&)
225 {
226 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eProcedures);
227 }
228 return xRef;
229 }
230 // -------------------------------------------------------------------------
getVersionColumns(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table)231 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getVersionColumns(
232 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
233 {
234 Reference< XResultSet > xRef;
235 bool bSuccess = false;
236 try
237 {
238 if ( !m_pConnection->preventGetVersionColumns() )
239 {
240 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
241 xRef = pResult;
242 pResult->openVersionColumns(m_bUseCatalog ? catalog : Any(),schema,table);
243 bSuccess = true;
244 }
245 }
246 catch(SQLException&)
247 {
248 }
249
250 if ( !bSuccess )
251 {
252 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns);
253 }
254
255 return xRef;
256 }
257 // -------------------------------------------------------------------------
getMaxBinaryLiteralLength()258 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException)
259 {
260 SQLUINTEGER nValue;
261 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_BINARY_LITERAL_LEN,nValue,*this);
262 return nValue;
263 }
264 // -------------------------------------------------------------------------
getMaxRowSize()265 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxRowSize( ) throw(SQLException, RuntimeException)
266 {
267 SQLUINTEGER nValue;
268 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_ROW_SIZE,nValue,*this);
269 return nValue;
270 }
271 // -------------------------------------------------------------------------
getMaxCatalogNameLength()272 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCatalogNameLength( ) throw(SQLException, RuntimeException)
273 {
274 SQLUSMALLINT nValue;
275 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_CATALOG_NAME_LEN,nValue,*this);
276 return nValue;
277 }
278 // -------------------------------------------------------------------------
getMaxCharLiteralLength()279 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException)
280 {
281 SQLUINTEGER nValue;
282 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_CHAR_LITERAL_LEN,nValue,*this);
283 return nValue;
284 }
285 // -------------------------------------------------------------------------
getMaxColumnNameLength()286 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException)
287 {
288 SQLUSMALLINT nValue;
289 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMN_NAME_LEN,nValue,*this);
290 return nValue;
291 }
292 // -------------------------------------------------------------------------
getMaxColumnsInIndex()293 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException)
294 {
295 SQLUSMALLINT nValue;
296 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMNS_IN_INDEX,nValue,*this);
297 return nValue;
298 }
299 // -------------------------------------------------------------------------
getMaxCursorNameLength()300 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCursorNameLength( ) throw(SQLException, RuntimeException)
301 {
302 SQLUSMALLINT nValue;
303 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_CURSOR_NAME_LEN,nValue,*this);
304 return nValue;
305 }
306 // -------------------------------------------------------------------------
getMaxConnections()307 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxConnections( ) throw(SQLException, RuntimeException)
308 {
309 SQLUSMALLINT nValue;
310 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_DRIVER_CONNECTIONS/*SQL_ACTIVE_CONNECTIONS*/,nValue,*this);
311 return nValue;
312 }
313 // -------------------------------------------------------------------------
getMaxColumnsInTable()314 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException)
315 {
316 SQLUSMALLINT nValue;
317 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMNS_IN_TABLE,nValue,*this);
318 return nValue;
319 }
320 // -------------------------------------------------------------------------
getMaxStatementLength()321 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength( ) throw(SQLException, RuntimeException)
322 {
323 SQLUINTEGER nValue;
324 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_STATEMENT_LEN,nValue,*this);
325 return nValue;
326 }
327 // -------------------------------------------------------------------------
getMaxTableNameLength()328 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength( ) throw(SQLException, RuntimeException)
329 {
330 SQLUSMALLINT nValue;
331 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_TABLE_NAME_LEN,nValue,*this);
332 return nValue;
333 }
334 // -------------------------------------------------------------------------
impl_getMaxTablesInSelect_throw()335 sal_Int32 ODatabaseMetaData::impl_getMaxTablesInSelect_throw( )
336 {
337 SQLUSMALLINT nValue;
338 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_TABLES_IN_SELECT,nValue,*this);
339 return nValue;
340 }
341 // -------------------------------------------------------------------------
getExportedKeys(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table)342 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
343 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
344 {
345 Reference< XResultSet > xRef;
346 try
347 {
348 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
349 xRef = pResult;
350 pResult->openExportedKeys(m_bUseCatalog ? catalog : Any(),schema,table);
351 }
352 catch(SQLException&)
353 {
354 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eExportedKeys);
355 }
356 return xRef;
357 }
358 // -------------------------------------------------------------------------
getImportedKeys(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table)359 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
360 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
361 {
362 Reference< XResultSet > xRef;
363 try
364 {
365 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
366 xRef = pResult;
367 pResult->openImportedKeys(m_bUseCatalog ? catalog : Any(),schema,table);
368 }
369 catch(SQLException&)
370 {
371 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eImportedKeys);
372 }
373 return xRef;
374 }
375 // -------------------------------------------------------------------------
getPrimaryKeys(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table)376 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
377 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(SQLException, RuntimeException)
378 {
379 Reference< XResultSet > xRef;
380 try
381 {
382 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
383 xRef = pResult;
384 pResult->openPrimaryKeys(m_bUseCatalog ? catalog : Any(),schema,table);
385 }
386 catch(SQLException&)
387 {
388 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::ePrimaryKeys);
389 }
390 return xRef;
391 }
392 // -------------------------------------------------------------------------
getIndexInfo(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table,sal_Bool unique,sal_Bool approximate)393 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
394 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table,
395 sal_Bool unique, sal_Bool approximate ) throw(SQLException, RuntimeException)
396 {
397 Reference< XResultSet > xRef;
398 try
399 {
400 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
401 xRef = pResult;
402 pResult->openIndexInfo(m_bUseCatalog ? catalog : Any(),schema,table,unique,approximate);
403 }
404 catch(SQLException&)
405 {
406 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo);
407 }
408 return xRef;
409 }
410 // -------------------------------------------------------------------------
getBestRowIdentifier(const Any & catalog,const::rtl::OUString & schema,const::rtl::OUString & table,sal_Int32 scope,sal_Bool nullable)411 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier(
412 const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table, sal_Int32 scope,
413 sal_Bool nullable ) throw(SQLException, RuntimeException)
414 {
415 Reference< XResultSet > xRef;
416 try
417 {
418 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
419 xRef = pResult;
420 pResult->openBestRowIdentifier(m_bUseCatalog ? catalog : Any(),schema,table,scope,nullable);
421 }
422 catch(SQLException&)
423 {
424 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eBestRowIdentifier);
425 }
426 return xRef;
427 }
428 // -------------------------------------------------------------------------
getTablePrivileges(const Any & catalog,const::rtl::OUString & schemaPattern,const::rtl::OUString & tableNamePattern)429 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
430 const Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern ) throw(SQLException, RuntimeException)
431 {
432 if ( m_pConnection->isIgnoreDriverPrivilegesEnabled() )
433 {
434 return new OResultSetPrivileges(this,catalog,schemaPattern,tableNamePattern);
435 }
436 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
437 Reference< XResultSet > xRef = pResult;
438 pResult->openTablePrivileges(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern);
439 return xRef;
440 }
441 // -------------------------------------------------------------------------
getCrossReference(const Any & primaryCatalog,const::rtl::OUString & primarySchema,const::rtl::OUString & primaryTable,const Any & foreignCatalog,const::rtl::OUString & foreignSchema,const::rtl::OUString & foreignTable)442 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
443 const Any& primaryCatalog, const ::rtl::OUString& primarySchema,
444 const ::rtl::OUString& primaryTable, const Any& foreignCatalog,
445 const ::rtl::OUString& foreignSchema, const ::rtl::OUString& foreignTable ) throw(SQLException, RuntimeException)
446 {
447 Reference< XResultSet > xRef;
448 try
449 {
450 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection);
451 xRef = pResult;
452 pResult->openForeignKeys(m_bUseCatalog ? primaryCatalog : Any(),primarySchema.toChar() == '%' ? &primarySchema : NULL,&primaryTable,
453 m_bUseCatalog ? foreignCatalog : Any(), foreignSchema.toChar() == '%' ? &foreignSchema : NULL,&foreignTable);
454 }
455 catch(SQLException&)
456 {
457 xRef = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eCrossReference);
458 }
459 return xRef;
460 }
461 // -------------------------------------------------------------------------
doesMaxRowSizeIncludeBlobs()462 sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) throw(SQLException, RuntimeException)
463 {
464 ::rtl::OUString aVal;
465 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_ROW_SIZE_INCLUDES_LONG,aVal,*this,m_pConnection->getTextEncoding());
466 return aVal.toChar() == 'Y';
467 }
468 // -------------------------------------------------------------------------
storesLowerCaseQuotedIdentifiers()469 sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException)
470 {
471 SQLUSMALLINT nValue;
472 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_QUOTED_IDENTIFIER_CASE,nValue,*this);
473 return nValue == SQL_IC_LOWER;
474 }
475 // -------------------------------------------------------------------------
storesLowerCaseIdentifiers()476 sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseIdentifiers( ) throw(SQLException, RuntimeException)
477 {
478 SQLUSMALLINT nValue;
479 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_IDENTIFIER_CASE,nValue,*this);
480 return nValue == SQL_IC_LOWER;
481 }
482 // -------------------------------------------------------------------------
impl_storesMixedCaseQuotedIdentifiers_throw()483 sal_Bool ODatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw( )
484 {
485 SQLUSMALLINT nValue;
486 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_QUOTED_IDENTIFIER_CASE,nValue,*this);
487 return nValue == SQL_IC_MIXED;
488 }
489 // -------------------------------------------------------------------------
storesMixedCaseIdentifiers()490 sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseIdentifiers( ) throw(SQLException, RuntimeException)
491 {
492 SQLUSMALLINT nValue;
493 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_IDENTIFIER_CASE,nValue,*this);
494 return nValue == SQL_IC_MIXED;
495 }
496 // -------------------------------------------------------------------------
storesUpperCaseQuotedIdentifiers()497 sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException)
498 {
499 SQLUSMALLINT nValue;
500 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_QUOTED_IDENTIFIER_CASE,nValue,*this);
501 return nValue == SQL_IC_UPPER;
502 }
503 // -------------------------------------------------------------------------
storesUpperCaseIdentifiers()504 sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseIdentifiers( ) throw(SQLException, RuntimeException)
505 {
506 SQLUSMALLINT nValue;
507 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_IDENTIFIER_CASE,nValue,*this);
508 return nValue == SQL_IC_UPPER;
509 }
510 // -------------------------------------------------------------------------
impl_supportsAlterTableWithAddColumn_throw()511 sal_Bool ODatabaseMetaData::impl_supportsAlterTableWithAddColumn_throw( )
512 {
513 SQLUINTEGER nValue;
514 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ALTER_TABLE,nValue,*this);
515 return (nValue & SQL_AT_ADD_COLUMN) == SQL_AT_ADD_COLUMN;
516 }
517 // -------------------------------------------------------------------------
impl_supportsAlterTableWithDropColumn_throw()518 sal_Bool ODatabaseMetaData::impl_supportsAlterTableWithDropColumn_throw( )
519 {
520 SQLUINTEGER nValue;
521 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ALTER_TABLE,nValue,*this);
522 return ((nValue & SQL_AT_DROP_COLUMN) == SQL_AT_DROP_COLUMN) ||
523 ((nValue & SQL_AT_DROP_COLUMN_CASCADE) == SQL_AT_DROP_COLUMN_CASCADE) ||
524 ((nValue & SQL_AT_DROP_COLUMN_RESTRICT) == SQL_AT_DROP_COLUMN_RESTRICT);
525 }
526 // -------------------------------------------------------------------------
getMaxIndexLength()527 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength( ) throw(SQLException, RuntimeException)
528 {
529 SQLUINTEGER nValue;
530 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_INDEX_SIZE,nValue,*this);
531 return nValue;
532 }
533 // -------------------------------------------------------------------------
supportsNonNullableColumns()534 sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns( ) throw(SQLException, RuntimeException)
535 {
536 SQLUSMALLINT nValue;
537 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NON_NULLABLE_COLUMNS,nValue,*this);
538 return nValue == SQL_NNC_NON_NULL;
539 }
540 // -------------------------------------------------------------------------
getCatalogTerm()541 ::rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogTerm( ) throw(SQLException, RuntimeException)
542 {
543 ::rtl::OUString aVal;
544 if(m_bUseCatalog)
545 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_TERM,aVal,*this,m_pConnection->getTextEncoding());
546 return aVal;
547 }
548 // -------------------------------------------------------------------------
impl_getIdentifierQuoteString_throw()549 ::rtl::OUString ODatabaseMetaData::impl_getIdentifierQuoteString_throw( )
550 {
551 ::rtl::OUString aVal;
552 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_IDENTIFIER_QUOTE_CHAR,aVal,*this,m_pConnection->getTextEncoding());
553 return aVal;
554 }
555 // -------------------------------------------------------------------------
getExtraNameCharacters()556 ::rtl::OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters( ) throw(SQLException, RuntimeException)
557 {
558 ::rtl::OUString aVal;
559 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SPECIAL_CHARACTERS,aVal,*this,m_pConnection->getTextEncoding());
560 return aVal;
561 }
562 // -------------------------------------------------------------------------
supportsDifferentTableCorrelationNames()563 sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames( ) throw(SQLException, RuntimeException)
564 {
565 SQLUSMALLINT nValue;
566 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
567 return nValue != SQL_CN_NONE;
568 }
569 // -------------------------------------------------------------------------
impl_isCatalogAtStart_throw()570 sal_Bool ODatabaseMetaData::impl_isCatalogAtStart_throw( )
571 {
572 SQLUSMALLINT nValue=0;
573 if ( m_bUseCatalog )
574 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_LOCATION,nValue,*this);
575 return nValue == SQL_CL_START;
576 }
577 // -------------------------------------------------------------------------
dataDefinitionIgnoredInTransactions()578 sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionIgnoredInTransactions( ) throw(SQLException, RuntimeException)
579 {
580 SQLUSMALLINT nValue;
581 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_CAPABLE,nValue,*this);
582 return nValue == SQL_TC_DDL_IGNORE;
583 }
584 // -------------------------------------------------------------------------
dataDefinitionCausesTransactionCommit()585 sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionCausesTransactionCommit( ) throw(SQLException, RuntimeException)
586 {
587 SQLUSMALLINT nValue;
588 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_CAPABLE,nValue,*this);
589 return nValue == SQL_TC_DDL_COMMIT;
590 }
591 // -------------------------------------------------------------------------
supportsDataManipulationTransactionsOnly()592 sal_Bool SAL_CALL ODatabaseMetaData::supportsDataManipulationTransactionsOnly( ) throw(SQLException, RuntimeException)
593 {
594 SQLUSMALLINT nValue;
595 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_CAPABLE,nValue,*this);
596 return nValue == SQL_TC_DML;
597 }
598 // -------------------------------------------------------------------------
supportsDataDefinitionAndDataManipulationTransactions()599 sal_Bool SAL_CALL ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions( ) throw(SQLException, RuntimeException)
600 {
601 SQLUSMALLINT nValue;
602 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_CAPABLE,nValue,*this);
603 return nValue == SQL_TC_ALL;
604 }
605 // -------------------------------------------------------------------------
supportsPositionedDelete()606 sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedDelete( ) throw(SQLException, RuntimeException)
607 {
608 SQLUINTEGER nValue;
609 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DYNAMIC_CURSOR_ATTRIBUTES1,nValue,*this);
610 return (nValue & SQL_CA1_POS_DELETE) == SQL_CA1_POS_DELETE;
611 }
612 // -------------------------------------------------------------------------
supportsPositionedUpdate()613 sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedUpdate( ) throw(SQLException, RuntimeException)
614 {
615 SQLUINTEGER nValue;
616 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DYNAMIC_CURSOR_ATTRIBUTES1,nValue,*this);
617 return (nValue & SQL_CA1_POS_UPDATE) == SQL_CA1_POS_UPDATE;
618 }
619 // -------------------------------------------------------------------------
supportsOpenStatementsAcrossRollback()620 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossRollback( ) throw(SQLException, RuntimeException)
621 {
622 SQLUSMALLINT nValue;
623 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CURSOR_ROLLBACK_BEHAVIOR,nValue,*this);
624 return nValue == SQL_CB_PRESERVE || nValue == SQL_CB_CLOSE;
625 }
626 // -------------------------------------------------------------------------
supportsOpenStatementsAcrossCommit()627 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossCommit( ) throw(SQLException, RuntimeException)
628 {
629 SQLUSMALLINT nValue;
630 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CURSOR_COMMIT_BEHAVIOR,nValue,*this);
631 return nValue == SQL_CB_PRESERVE || nValue == SQL_CB_CLOSE;
632 }
633 // -------------------------------------------------------------------------
supportsOpenCursorsAcrossCommit()634 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossCommit( ) throw(SQLException, RuntimeException)
635 {
636 SQLUSMALLINT nValue;
637 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CURSOR_COMMIT_BEHAVIOR,nValue,*this);
638 return nValue == SQL_CB_PRESERVE;
639 }
640 // -------------------------------------------------------------------------
supportsOpenCursorsAcrossRollback()641 sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossRollback( ) throw(SQLException, RuntimeException)
642 {
643 SQLUSMALLINT nValue;
644 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CURSOR_ROLLBACK_BEHAVIOR,nValue,*this);
645 return nValue == SQL_CB_PRESERVE;
646 }
647 // -------------------------------------------------------------------------
supportsTransactionIsolationLevel(sal_Int32 level)648 sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 level ) throw(SQLException, RuntimeException)
649 {
650 SQLUINTEGER nValue;
651 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_ISOLATION_OPTION,nValue,*this);
652 return (nValue & static_cast<SQLUINTEGER>(level)) == static_cast<SQLUINTEGER>(level);
653 }
654 // -------------------------------------------------------------------------
impl_supportsSchemasInDataManipulation_throw()655 sal_Bool ODatabaseMetaData::impl_supportsSchemasInDataManipulation_throw( )
656 {
657 SQLUINTEGER nValue;
658 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_USAGE,nValue,*this);
659 return (nValue & SQL_SU_DML_STATEMENTS) == SQL_SU_DML_STATEMENTS;
660 }
661 // -------------------------------------------------------------------------
supportsANSI92FullSQL()662 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92FullSQL( ) throw(SQLException, RuntimeException)
663 {
664 SQLUINTEGER nValue;
665 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SQL_CONFORMANCE,nValue,*this);
666 return nValue == SQL_SC_SQL92_FULL;
667 }
668 // -------------------------------------------------------------------------
supportsANSI92EntryLevelSQL()669 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92EntryLevelSQL( ) throw(SQLException, RuntimeException)
670 {
671 SQLUINTEGER nValue;
672 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SQL_CONFORMANCE,nValue,*this);
673 return nValue == SQL_SC_SQL92_ENTRY;
674 }
675 // -------------------------------------------------------------------------
supportsIntegrityEnhancementFacility()676 sal_Bool SAL_CALL ODatabaseMetaData::supportsIntegrityEnhancementFacility( ) throw(SQLException, RuntimeException)
677 {
678 ::rtl::OUString aStr;
679 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_INTEGRITY,aStr,*this,m_pConnection->getTextEncoding());
680 return aStr.toChar() == 'Y';
681 }
682 // -------------------------------------------------------------------------
supportsSchemasInIndexDefinitions()683 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInIndexDefinitions( ) throw(SQLException, RuntimeException)
684 {
685 SQLUINTEGER nValue;
686 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_USAGE,nValue,*this);
687 return (nValue & SQL_SU_INDEX_DEFINITION) == SQL_SU_INDEX_DEFINITION;
688 }
689 // -------------------------------------------------------------------------
impl_supportsSchemasInTableDefinitions_throw()690 sal_Bool ODatabaseMetaData::impl_supportsSchemasInTableDefinitions_throw( )
691 {
692 SQLUINTEGER nValue;
693 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_USAGE,nValue,*this);
694 return (nValue & SQL_SU_TABLE_DEFINITION) == SQL_SU_TABLE_DEFINITION;
695 }
696 // -------------------------------------------------------------------------
impl_supportsCatalogsInTableDefinitions_throw()697 sal_Bool ODatabaseMetaData::impl_supportsCatalogsInTableDefinitions_throw( )
698 {
699 SQLUINTEGER nValue=0;
700 if(m_bUseCatalog)
701 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_USAGE,nValue,*this);
702 return (nValue & SQL_CU_TABLE_DEFINITION) == SQL_CU_TABLE_DEFINITION;
703 }
704 // -------------------------------------------------------------------------
supportsCatalogsInIndexDefinitions()705 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInIndexDefinitions( ) throw(SQLException, RuntimeException)
706 {
707 SQLUINTEGER nValue=0;
708 if(m_bUseCatalog)
709 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_USAGE,nValue,*this);
710 return (nValue & SQL_CU_INDEX_DEFINITION) == SQL_CU_INDEX_DEFINITION;
711 }
712 // -------------------------------------------------------------------------
impl_supportsCatalogsInDataManipulation_throw()713 sal_Bool ODatabaseMetaData::impl_supportsCatalogsInDataManipulation_throw( )
714 {
715 SQLUINTEGER nValue=0;
716 if(m_bUseCatalog)
717 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_USAGE,nValue,*this);
718 return (nValue & SQL_CU_DML_STATEMENTS) == SQL_CU_DML_STATEMENTS;
719 }
720 // -------------------------------------------------------------------------
supportsOuterJoins()721 sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins( ) throw(SQLException, RuntimeException)
722 {
723 SQLUINTEGER nValue;
724 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_OJ_CAPABILITIES,nValue,*this);
725 return ((nValue & (SQL_OJ_FULL|SQL_OJ_LEFT|SQL_OJ_RIGHT|SQL_OJ_NESTED|SQL_OJ_NOT_ORDERED|SQL_OJ_ALL_COMPARISON_OPS|SQL_OJ_INNER)) != 0);
726 }
727 // -------------------------------------------------------------------------
getTableTypes()728 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) throw(SQLException, RuntimeException)
729 {
730
731 // there exists no possibility to get table types so we have to check
732 static ::rtl::OUString sTableTypes[] =
733 {
734 ::rtl::OUString::createFromAscii("TABLE"),
735 ::rtl::OUString::createFromAscii("VIEW"),
736 ::rtl::OUString::createFromAscii("SYSTEM TABLE"),
737 ::rtl::OUString::createFromAscii("GLOBAL TEMPORARY"),
738 ::rtl::OUString::createFromAscii("LOCAL TEMPORARY"),
739 ::rtl::OUString::createFromAscii("ALIAS"),
740 ::rtl::OUString::createFromAscii("SYNONYM")
741 };
742 sal_Int32 nSize = sizeof(sTableTypes) / sizeof(::rtl::OUString);
743 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes);
744 Reference< XResultSet > xRef = pResult;
745 SQLUINTEGER nValue = 0;
746 try
747 {
748 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CREATE_VIEW,nValue,*this);
749 }
750 catch(const Exception&)
751 {
752 }
753 sal_Bool bViewsSupported = (nValue & SQL_CV_CREATE_VIEW) == SQL_CV_CREATE_VIEW;
754
755 ::connectivity::ODatabaseMetaDataResultSet::ORows aRows;
756 for(sal_Int32 i=0;i < nSize;++i)
757 {
758 if( !bViewsSupported && i == 1)
759 continue; // no views supported
760 ::connectivity::ODatabaseMetaDataResultSet::ORow aRow;
761 aRow.push_back(::connectivity::ODatabaseMetaDataResultSet::getEmptyValue());
762 aRow.push_back(new ::connectivity::ORowSetValueDecorator(sTableTypes[i]));
763 aRows.push_back(aRow);
764 }
765 pResult->setRows(aRows);
766 return xRef;
767 }
768 // -------------------------------------------------------------------------
impl_getMaxStatements_throw()769 sal_Int32 ODatabaseMetaData::impl_getMaxStatements_throw( )
770 {
771 SQLUSMALLINT nValue;
772 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_CONCURRENT_ACTIVITIES,nValue,*this);
773 return nValue;
774 }
775 // -------------------------------------------------------------------------
getMaxProcedureNameLength()776 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxProcedureNameLength( ) throw(SQLException, RuntimeException)
777 {
778 SQLUSMALLINT nValue;
779 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_PROCEDURE_NAME_LEN,nValue,*this);
780 return nValue;
781 }
782 // -------------------------------------------------------------------------
getMaxSchemaNameLength()783 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxSchemaNameLength( ) throw(SQLException, RuntimeException)
784 {
785 SQLUSMALLINT nValue;
786 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_SCHEMA_NAME_LEN,nValue,*this);
787 return nValue;
788 }
789 // -------------------------------------------------------------------------
supportsTransactions()790 sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactions( ) throw(SQLException, RuntimeException)
791 {
792 SQLUSMALLINT nValue;
793 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TXN_CAPABLE,nValue,*this);
794 return nValue != SQL_TC_NONE;
795 }
796 // -------------------------------------------------------------------------
allProceduresAreCallable()797 sal_Bool SAL_CALL ODatabaseMetaData::allProceduresAreCallable( ) throw(SQLException, RuntimeException)
798 {
799 ::rtl::OUString aValue;
800 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ACCESSIBLE_PROCEDURES,aValue,*this,m_pConnection->getTextEncoding());
801 return aValue.toChar() == 'Y';
802 }
803 // -------------------------------------------------------------------------
supportsStoredProcedures()804 sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredProcedures( ) throw(SQLException, RuntimeException)
805 {
806 ::rtl::OUString aValue;
807 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_PROCEDURES,aValue,*this,m_pConnection->getTextEncoding());
808 return aValue.toChar() == 'Y';
809 }
810 // -------------------------------------------------------------------------
supportsSelectForUpdate()811 sal_Bool SAL_CALL ODatabaseMetaData::supportsSelectForUpdate( ) throw(SQLException, RuntimeException)
812 {
813 SQLUINTEGER nValue;
814 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DYNAMIC_CURSOR_ATTRIBUTES1,nValue,*this);
815 return (nValue & SQL_CA1_POSITIONED_UPDATE) == SQL_CA1_POSITIONED_UPDATE;
816 }
817 // -------------------------------------------------------------------------
allTablesAreSelectable()818 sal_Bool SAL_CALL ODatabaseMetaData::allTablesAreSelectable( ) throw(SQLException, RuntimeException)
819 {
820 ::rtl::OUString aValue;
821 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ACCESSIBLE_TABLES,aValue,*this,m_pConnection->getTextEncoding());
822 return aValue.toChar() == 'Y';
823 }
824 // -------------------------------------------------------------------------
isReadOnly()825 sal_Bool SAL_CALL ODatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException)
826 {
827 return m_pConnection->isReadOnly();
828 }
829 // -------------------------------------------------------------------------
usesLocalFiles()830 sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFiles( ) throw(SQLException, RuntimeException)
831 {
832 SQLUSMALLINT nValue;
833 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_FILE_USAGE,nValue,*this);
834 return nValue == SQL_FILE_CATALOG;
835 }
836 // -------------------------------------------------------------------------
usesLocalFilePerTable()837 sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFilePerTable( ) throw(SQLException, RuntimeException)
838 {
839 SQLUSMALLINT nValue;
840 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_FILE_USAGE,nValue,*this);
841 return nValue == SQL_FILE_TABLE;
842 }
843 // -------------------------------------------------------------------------
supportsTypeConversion()844 sal_Bool SAL_CALL ODatabaseMetaData::supportsTypeConversion( ) throw(SQLException, RuntimeException)
845 {
846 SQLUINTEGER nValue;
847 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_FUNCTIONS,nValue,*this);
848 return (nValue & SQL_FN_CVT_CONVERT) == SQL_FN_CVT_CONVERT;
849 }
850 // -------------------------------------------------------------------------
nullPlusNonNullIsNull()851 sal_Bool SAL_CALL ODatabaseMetaData::nullPlusNonNullIsNull( ) throw(SQLException, RuntimeException)
852 {
853 SQLUSMALLINT nValue;
854 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONCAT_NULL_BEHAVIOR,nValue,*this);
855 return nValue == SQL_CB_NULL;
856 }
857 // -------------------------------------------------------------------------
supportsColumnAliasing()858 sal_Bool SAL_CALL ODatabaseMetaData::supportsColumnAliasing( ) throw(SQLException, RuntimeException)
859 {
860 ::rtl::OUString aValue;
861 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_COLUMN_ALIAS,aValue,*this,m_pConnection->getTextEncoding());
862 return aValue.toChar() == 'Y';
863 }
864 // -------------------------------------------------------------------------
supportsTableCorrelationNames()865 sal_Bool SAL_CALL ODatabaseMetaData::supportsTableCorrelationNames( ) throw(SQLException, RuntimeException)
866 {
867 SQLUSMALLINT nValue;
868 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
869 return nValue != SQL_CN_NONE;
870 }
871 // -------------------------------------------------------------------------
supportsConvert(sal_Int32 fromType,sal_Int32 toType)872 sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert( sal_Int32 fromType, sal_Int32 toType ) throw(SQLException, RuntimeException)
873 {
874 if(fromType == toType)
875 return sal_True;
876
877 SQLUINTEGER nValue=0;
878 switch(fromType)
879 {
880 case DataType::BIT:
881 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_BIT,nValue,*this);
882 break;
883 case DataType::TINYINT:
884 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_TINYINT,nValue,*this);
885 break;
886 case DataType::SMALLINT:
887 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_SMALLINT,nValue,*this);
888 break;
889 case DataType::INTEGER:
890 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_INTEGER,nValue,*this);
891 break;
892 case DataType::BIGINT:
893 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_BIGINT,nValue,*this);
894 break;
895 case DataType::FLOAT:
896 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_FLOAT,nValue,*this);
897 break;
898 case DataType::REAL:
899 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_REAL,nValue,*this);
900 break;
901 case DataType::DOUBLE:
902 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_DOUBLE,nValue,*this);
903 break;
904 case DataType::NUMERIC:
905 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_NUMERIC,nValue,*this);
906 break;
907 case DataType::DECIMAL:
908 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_DECIMAL,nValue,*this);
909 break;
910 case DataType::CHAR:
911 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_CHAR,nValue,*this);
912 break;
913 case DataType::VARCHAR:
914 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_VARCHAR,nValue,*this);
915 break;
916 case DataType::LONGVARCHAR:
917 case DataType::CLOB:
918 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_LONGVARCHAR,nValue,*this);
919 break;
920 case DataType::DATE:
921 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_DATE,nValue,*this);
922 break;
923 case DataType::TIME:
924 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_TIME,nValue,*this);
925 break;
926 case DataType::TIMESTAMP:
927 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_TIMESTAMP,nValue,*this);
928 break;
929 case DataType::BINARY:
930 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_BINARY,nValue,*this);
931 break;
932 case DataType::VARBINARY:
933 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_VARBINARY,nValue,*this);
934 break;
935 case DataType::LONGVARBINARY:
936 case DataType::BLOB:
937 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CONVERT_LONGVARBINARY,nValue,*this);
938 break;
939 case DataType::SQLNULL:
940 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
941 break;
942 case DataType::OTHER:
943 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
944 break;
945 case DataType::OBJECT:
946 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
947 break;
948 case DataType::DISTINCT:
949 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
950 break;
951 case DataType::STRUCT:
952 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
953 break;
954 case DataType::ARRAY:
955 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
956 break;
957 case DataType::REF:
958 // OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CORRELATION_NAME,nValue,*this);
959 break;
960 }
961 sal_Bool bConvert = sal_False;
962 switch(toType)
963 {
964 case DataType::BIT:
965 bConvert = (nValue & SQL_CVT_BIT) == SQL_CVT_BIT;
966 break;
967 case DataType::TINYINT:
968 bConvert = (nValue & SQL_CVT_TINYINT) == SQL_CVT_TINYINT;
969 break;
970 case DataType::SMALLINT:
971 bConvert = (nValue & SQL_CVT_SMALLINT) == SQL_CVT_SMALLINT;
972 break;
973 case DataType::INTEGER:
974 bConvert = (nValue & SQL_CVT_INTEGER) == SQL_CVT_INTEGER;
975 break;
976 case DataType::BIGINT:
977 bConvert = (nValue & SQL_CVT_BIGINT) == SQL_CVT_BIGINT;
978 break;
979 case DataType::FLOAT:
980 bConvert = (nValue & SQL_CVT_FLOAT) == SQL_CVT_FLOAT;
981 break;
982 case DataType::REAL:
983 bConvert = (nValue & SQL_CVT_REAL) == SQL_CVT_REAL;
984 break;
985 case DataType::DOUBLE:
986 bConvert = (nValue & SQL_CVT_DOUBLE) == SQL_CVT_DOUBLE;
987 break;
988 case DataType::NUMERIC:
989 bConvert = (nValue & SQL_CVT_NUMERIC) == SQL_CVT_NUMERIC;
990 break;
991 case DataType::DECIMAL:
992 bConvert = (nValue & SQL_CVT_DECIMAL) == SQL_CVT_DECIMAL;
993 break;
994 case DataType::CHAR:
995 bConvert = (nValue & SQL_CVT_CHAR) == SQL_CVT_CHAR;
996 break;
997 case DataType::VARCHAR:
998 bConvert = (nValue & SQL_CVT_VARCHAR) == SQL_CVT_VARCHAR;
999 break;
1000 case DataType::LONGVARCHAR:
1001 case DataType::CLOB:
1002 bConvert = (nValue & SQL_CVT_LONGVARCHAR) == SQL_CVT_LONGVARCHAR;
1003 break;
1004 case DataType::DATE:
1005 bConvert = (nValue & SQL_CVT_DATE) == SQL_CVT_DATE;
1006 break;
1007 case DataType::TIME:
1008 bConvert = (nValue & SQL_CVT_TIME) == SQL_CVT_TIME;
1009 break;
1010 case DataType::TIMESTAMP:
1011 bConvert = (nValue & SQL_CVT_TIMESTAMP) == SQL_CVT_TIMESTAMP;
1012 break;
1013 case DataType::BINARY:
1014 bConvert = (nValue & SQL_CVT_BINARY) == SQL_CVT_BINARY;
1015 break;
1016 case DataType::VARBINARY:
1017 bConvert = (nValue & SQL_CVT_VARBINARY) == SQL_CVT_VARBINARY;
1018 break;
1019 case DataType::LONGVARBINARY:
1020 case DataType::BLOB:
1021 bConvert = (nValue & SQL_CVT_LONGVARBINARY) == SQL_CVT_LONGVARBINARY;
1022 break;
1023 }
1024
1025 return bConvert;
1026 }
1027 // -------------------------------------------------------------------------
supportsExpressionsInOrderBy()1028 sal_Bool SAL_CALL ODatabaseMetaData::supportsExpressionsInOrderBy( ) throw(SQLException, RuntimeException)
1029 {
1030 ::rtl::OUString aValue;
1031 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_EXPRESSIONS_IN_ORDERBY,aValue,*this,m_pConnection->getTextEncoding());
1032 return aValue.toChar() == 'Y';
1033 }
1034 // -------------------------------------------------------------------------
supportsGroupBy()1035 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupBy( ) throw(SQLException, RuntimeException)
1036 {
1037 SQLUSMALLINT nValue;
1038 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_GROUP_BY,nValue,*this);
1039 return nValue != SQL_GB_NOT_SUPPORTED;
1040 }
1041 // -------------------------------------------------------------------------
supportsGroupByBeyondSelect()1042 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByBeyondSelect( ) throw(SQLException, RuntimeException)
1043 {
1044 SQLUSMALLINT nValue;
1045 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_GROUP_BY,nValue,*this);
1046 return nValue != SQL_GB_GROUP_BY_CONTAINS_SELECT;
1047 }
1048 // -------------------------------------------------------------------------
supportsGroupByUnrelated()1049 sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByUnrelated( ) throw(SQLException, RuntimeException)
1050 {
1051 SQLUSMALLINT nValue;
1052 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_GROUP_BY,nValue,*this);
1053 return nValue == SQL_GB_NO_RELATION;
1054 }
1055 // -------------------------------------------------------------------------
supportsMultipleTransactions()1056 sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleTransactions( ) throw(SQLException, RuntimeException)
1057 {
1058 ::rtl::OUString aValue;
1059 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MULTIPLE_ACTIVE_TXN,aValue,*this,m_pConnection->getTextEncoding());
1060 return aValue.toChar() == 'Y';
1061 }
1062 // -------------------------------------------------------------------------
supportsMultipleResultSets()1063 sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets( ) throw(SQLException, RuntimeException)
1064 {
1065 ::rtl::OUString aValue;
1066 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MULT_RESULT_SETS,aValue,*this,m_pConnection->getTextEncoding());
1067 return aValue.toChar() == 'Y';
1068 }
1069 // -------------------------------------------------------------------------
supportsLikeEscapeClause()1070 sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause( ) throw(SQLException, RuntimeException)
1071 {
1072 ::rtl::OUString aValue;
1073 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_LIKE_ESCAPE_CLAUSE,aValue,*this,m_pConnection->getTextEncoding());
1074 return aValue.toChar() == 'Y';
1075 }
1076 // -------------------------------------------------------------------------
supportsOrderByUnrelated()1077 sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated( ) throw(SQLException, RuntimeException)
1078 {
1079 ::rtl::OUString aValue;
1080 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ORDER_BY_COLUMNS_IN_SELECT,aValue,*this,m_pConnection->getTextEncoding());
1081 return aValue.toChar() == 'N';
1082 }
1083 // -------------------------------------------------------------------------
supportsUnion()1084 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion( ) throw(SQLException, RuntimeException)
1085 {
1086 SQLUINTEGER nValue;
1087 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_UNION,nValue,*this);
1088 return (nValue & SQL_U_UNION) == SQL_U_UNION;
1089 }
1090 // -------------------------------------------------------------------------
supportsUnionAll()1091 sal_Bool SAL_CALL ODatabaseMetaData::supportsUnionAll( ) throw(SQLException, RuntimeException)
1092 {
1093 SQLUINTEGER nValue;
1094 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_UNION,nValue,*this);
1095 return (nValue & SQL_U_UNION_ALL) == SQL_U_UNION_ALL;
1096 }
1097 // -------------------------------------------------------------------------
supportsMixedCaseIdentifiers()1098 sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseIdentifiers( ) throw(SQLException, RuntimeException)
1099 {
1100 SQLUSMALLINT nValue;
1101 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_IDENTIFIER_CASE,nValue,*this);
1102 return nValue == SQL_IC_MIXED;
1103 }
1104 // -------------------------------------------------------------------------
impl_supportsMixedCaseQuotedIdentifiers_throw()1105 sal_Bool ODatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw( )
1106 {
1107 SQLUSMALLINT nValue;
1108 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_QUOTED_IDENTIFIER_CASE,nValue,*this);
1109 return nValue == SQL_IC_MIXED;
1110 }
1111 // -------------------------------------------------------------------------
nullsAreSortedAtEnd()1112 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtEnd( ) throw(SQLException, RuntimeException)
1113 {
1114 SQLUSMALLINT nValue;
1115 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NULL_COLLATION,nValue,*this);
1116 return nValue == SQL_NC_END;
1117 }
1118 // -------------------------------------------------------------------------
nullsAreSortedAtStart()1119 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtStart( ) throw(SQLException, RuntimeException)
1120 {
1121 SQLUSMALLINT nValue;
1122 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NULL_COLLATION,nValue,*this);
1123 return nValue == SQL_NC_START;
1124 }
1125 // -------------------------------------------------------------------------
nullsAreSortedHigh()1126 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedHigh( ) throw(SQLException, RuntimeException)
1127 {
1128 SQLUSMALLINT nValue;
1129 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NULL_COLLATION,nValue,*this);
1130 return nValue == SQL_NC_HIGH;
1131 }
1132 // -------------------------------------------------------------------------
nullsAreSortedLow()1133 sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedLow( ) throw(SQLException, RuntimeException)
1134 {
1135 SQLUSMALLINT nValue;
1136 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NULL_COLLATION,nValue,*this);
1137 return nValue == SQL_NC_LOW;
1138 }
1139 // -------------------------------------------------------------------------
supportsSchemasInProcedureCalls()1140 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInProcedureCalls( ) throw(SQLException, RuntimeException)
1141 {
1142 SQLUINTEGER nValue;
1143 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_USAGE,nValue,*this);
1144 return (nValue & SQL_SU_PROCEDURE_INVOCATION) == SQL_SU_PROCEDURE_INVOCATION;
1145 }
1146 // -------------------------------------------------------------------------
supportsSchemasInPrivilegeDefinitions()1147 sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions( ) throw(SQLException, RuntimeException)
1148 {
1149 SQLUINTEGER nValue;
1150 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_USAGE,nValue,*this);
1151 return (nValue & SQL_SU_PRIVILEGE_DEFINITION) == SQL_SU_PRIVILEGE_DEFINITION;
1152 }
1153 // -------------------------------------------------------------------------
supportsCatalogsInProcedureCalls()1154 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInProcedureCalls( ) throw(SQLException, RuntimeException)
1155 {
1156 SQLUINTEGER nValue=0;
1157 if(m_bUseCatalog)
1158 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_USAGE,nValue,*this);
1159 return (nValue & SQL_CU_PROCEDURE_INVOCATION) == SQL_CU_PROCEDURE_INVOCATION;
1160 }
1161 // -------------------------------------------------------------------------
supportsCatalogsInPrivilegeDefinitions()1162 sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions( ) throw(SQLException, RuntimeException)
1163 {
1164 SQLUINTEGER nValue=0;
1165 if(m_bUseCatalog)
1166 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CATALOG_USAGE,nValue,*this);
1167 return (nValue & SQL_CU_PRIVILEGE_DEFINITION) == SQL_CU_PRIVILEGE_DEFINITION;
1168 }
1169 // -------------------------------------------------------------------------
supportsCorrelatedSubqueries()1170 sal_Bool SAL_CALL ODatabaseMetaData::supportsCorrelatedSubqueries( ) throw(SQLException, RuntimeException)
1171 {
1172 SQLUINTEGER nValue;
1173 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1174 return (nValue & SQL_SQ_CORRELATED_SUBQUERIES) == SQL_SQ_CORRELATED_SUBQUERIES;
1175 }
1176 // -------------------------------------------------------------------------
supportsSubqueriesInComparisons()1177 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInComparisons( ) throw(SQLException, RuntimeException)
1178 {
1179 SQLUINTEGER nValue;
1180 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1181 return (nValue & SQL_SQ_COMPARISON) == SQL_SQ_COMPARISON;
1182 }
1183 // -------------------------------------------------------------------------
supportsSubqueriesInExists()1184 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInExists( ) throw(SQLException, RuntimeException)
1185 {
1186 SQLUINTEGER nValue;
1187 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1188 return (nValue & SQL_SQ_EXISTS) == SQL_SQ_EXISTS;
1189 }
1190 // -------------------------------------------------------------------------
supportsSubqueriesInIns()1191 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInIns( ) throw(SQLException, RuntimeException)
1192 {
1193 SQLUINTEGER nValue;
1194 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1195 return (nValue & SQL_SQ_IN) == SQL_SQ_IN;
1196 }
1197 // -------------------------------------------------------------------------
supportsSubqueriesInQuantifieds()1198 sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInQuantifieds( ) throw(SQLException, RuntimeException)
1199 {
1200 SQLUINTEGER nValue;
1201 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1202 return (nValue & SQL_SQ_QUANTIFIED) == SQL_SQ_QUANTIFIED;
1203 }
1204 // -------------------------------------------------------------------------
supportsANSI92IntermediateSQL()1205 sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL( ) throw(SQLException, RuntimeException)
1206 {
1207 SQLUINTEGER nValue;
1208 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SQL_CONFORMANCE,nValue,*this);
1209 return nValue == SQL_SC_SQL92_INTERMEDIATE;
1210 }
1211 // -----------------------------------------------------------------------------
getURLImpl()1212 ::rtl::OUString ODatabaseMetaData::getURLImpl()
1213 {
1214 ::rtl::OUString aValue;
1215 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DATA_SOURCE_NAME,aValue,*this,m_pConnection->getTextEncoding());
1216 return aValue;
1217 }
1218 // -------------------------------------------------------------------------
getURL()1219 ::rtl::OUString SAL_CALL ODatabaseMetaData::getURL( ) throw(SQLException, RuntimeException)
1220 {
1221 ::rtl::OUString aValue = m_pConnection->getURL();
1222 if ( !aValue.getLength() )
1223 {
1224 aValue = ::rtl::OUString::createFromAscii("sdbc:odbc:");
1225 aValue += getURLImpl();
1226 }
1227 return aValue;
1228 }
1229 // -------------------------------------------------------------------------
getUserName()1230 ::rtl::OUString SAL_CALL ODatabaseMetaData::getUserName( ) throw(SQLException, RuntimeException)
1231 {
1232 ::rtl::OUString aValue;
1233 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_USER_NAME,aValue,*this,m_pConnection->getTextEncoding());
1234 return aValue;
1235 }
1236 // -------------------------------------------------------------------------
getDriverName()1237 ::rtl::OUString SAL_CALL ODatabaseMetaData::getDriverName( ) throw(SQLException, RuntimeException)
1238 {
1239 ::rtl::OUString aValue;
1240 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_NAME,aValue,*this,m_pConnection->getTextEncoding());
1241 return aValue;
1242 }
1243 // -------------------------------------------------------------------------
getDriverVersion()1244 ::rtl::OUString SAL_CALL ODatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException)
1245 {
1246 ::rtl::OUString aValue;
1247 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_ODBC_VER,aValue,*this,m_pConnection->getTextEncoding());
1248 return aValue;
1249 }
1250 // -------------------------------------------------------------------------
getDatabaseProductVersion()1251 ::rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion( ) throw(SQLException, RuntimeException)
1252 {
1253 ::rtl::OUString aValue;
1254 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding());
1255 return aValue;
1256 }
1257 // -------------------------------------------------------------------------
getDatabaseProductName()1258 ::rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName( ) throw(SQLException, RuntimeException)
1259 {
1260 ::rtl::OUString aValue;
1261 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DBMS_NAME,aValue,*this,m_pConnection->getTextEncoding());
1262 return aValue;
1263 }
1264 // -------------------------------------------------------------------------
getProcedureTerm()1265 ::rtl::OUString SAL_CALL ODatabaseMetaData::getProcedureTerm( ) throw(SQLException, RuntimeException)
1266 {
1267 ::rtl::OUString aValue;
1268 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_PROCEDURE_TERM,aValue,*this,m_pConnection->getTextEncoding());
1269 return aValue;
1270 }
1271 // -------------------------------------------------------------------------
getSchemaTerm()1272 ::rtl::OUString SAL_CALL ODatabaseMetaData::getSchemaTerm( ) throw(SQLException, RuntimeException)
1273 {
1274 ::rtl::OUString aValue;
1275 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SCHEMA_TERM,aValue,*this,m_pConnection->getTextEncoding());
1276 return aValue;
1277 }
1278 // -------------------------------------------------------------------------
getDriverMajorVersion()1279 sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion( ) throw(RuntimeException)
1280 {
1281 ::rtl::OUString aValue;
1282 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding());
1283 return aValue.copy(0,aValue.indexOf('.')).toInt32();
1284 }
1285 // -------------------------------------------------------------------------
getDefaultTransactionIsolation()1286 sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation( ) throw(SQLException, RuntimeException)
1287 {
1288 SQLUINTEGER nValue;
1289 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SUBQUERIES,nValue,*this);
1290 return nValue;
1291 }
1292 // -------------------------------------------------------------------------
getDriverMinorVersion()1293 sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion( ) throw(RuntimeException)
1294 {
1295 ::rtl::OUString aValue;
1296 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding());
1297 return aValue.copy(0,aValue.lastIndexOf('.')).toInt32();
1298 }
1299 // -------------------------------------------------------------------------
getSQLKeywords()1300 ::rtl::OUString SAL_CALL ODatabaseMetaData::getSQLKeywords( ) throw(SQLException, RuntimeException)
1301 {
1302 ::rtl::OUString aValue;
1303 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_KEYWORDS,aValue,*this,m_pConnection->getTextEncoding());
1304 return aValue;
1305 }
1306 // -------------------------------------------------------------------------
getSearchStringEscape()1307 ::rtl::OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape( ) throw(SQLException, RuntimeException)
1308 {
1309 ::rtl::OUString aValue;
1310 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SEARCH_PATTERN_ESCAPE,aValue,*this,m_pConnection->getTextEncoding());
1311 return aValue;
1312 }
1313 // -------------------------------------------------------------------------
getStringFunctions()1314 ::rtl::OUString SAL_CALL ODatabaseMetaData::getStringFunctions( ) throw(SQLException, RuntimeException)
1315 {
1316 SQLUINTEGER nValue;
1317 ::rtl::OUStringBuffer aValue;
1318 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_STRING_FUNCTIONS,nValue,*this);
1319 if(nValue & SQL_FN_STR_ASCII)
1320 aValue.appendAscii("ASCII,");
1321 if(nValue & SQL_FN_STR_BIT_LENGTH)
1322 aValue.appendAscii("BIT_LENGTH,");
1323 if(nValue & SQL_FN_STR_CHAR)
1324 aValue.appendAscii("CHAR,");
1325 if(nValue & SQL_FN_STR_CHAR_LENGTH)
1326 aValue.appendAscii("CHAR_LENGTH,");
1327 if(nValue & SQL_FN_STR_CHARACTER_LENGTH)
1328 aValue.appendAscii("CHARACTER_LENGTH,");
1329 if(nValue & SQL_FN_STR_CONCAT)
1330 aValue.appendAscii("CONCAT,");
1331 if(nValue & SQL_FN_STR_DIFFERENCE)
1332 aValue.appendAscii("DIFFERENCE,");
1333 if(nValue & SQL_FN_STR_INSERT)
1334 aValue.appendAscii("INSERT,");
1335 if(nValue & SQL_FN_STR_LCASE)
1336 aValue.appendAscii("LCASE,");
1337 if(nValue & SQL_FN_STR_LEFT)
1338 aValue.appendAscii("LEFT,");
1339 if(nValue & SQL_FN_STR_LENGTH)
1340 aValue.appendAscii("LENGTH,");
1341 if(nValue & SQL_FN_STR_LOCATE)
1342 aValue.appendAscii("LOCATE,");
1343 if(nValue & SQL_FN_STR_LOCATE_2)
1344 aValue.appendAscii("LOCATE_2,");
1345 if(nValue & SQL_FN_STR_LTRIM)
1346 aValue.appendAscii("LTRIM,");
1347 if(nValue & SQL_FN_STR_OCTET_LENGTH)
1348 aValue.appendAscii("OCTET_LENGTH,");
1349 if(nValue & SQL_FN_STR_POSITION)
1350 aValue.appendAscii("POSITION,");
1351 if(nValue & SQL_FN_STR_REPEAT)
1352 aValue.appendAscii("REPEAT,");
1353 if(nValue & SQL_FN_STR_REPLACE)
1354 aValue.appendAscii("REPLACE,");
1355 if(nValue & SQL_FN_STR_RIGHT)
1356 aValue.appendAscii("RIGHT,");
1357 if(nValue & SQL_FN_STR_RTRIM)
1358 aValue.appendAscii("RTRIM,");
1359 if(nValue & SQL_FN_STR_SOUNDEX)
1360 aValue.appendAscii("SOUNDEX,");
1361 if(nValue & SQL_FN_STR_SPACE)
1362 aValue.appendAscii("SPACE,");
1363 if(nValue & SQL_FN_STR_SUBSTRING)
1364 aValue.appendAscii("SUBSTRING,");
1365 if(nValue & SQL_FN_STR_UCASE)
1366 aValue.appendAscii("UCASE,");
1367
1368
1369 if ( aValue.getLength() )
1370 aValue.setLength(aValue.getLength()-1);
1371
1372 return aValue.makeStringAndClear();
1373 }
1374 // -------------------------------------------------------------------------
getTimeDateFunctions()1375 ::rtl::OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( ) throw(SQLException, RuntimeException)
1376 {
1377 SQLUINTEGER nValue;
1378 ::rtl::OUStringBuffer aValue;
1379 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_TIMEDATE_FUNCTIONS,nValue,*this);
1380
1381 if(nValue & SQL_FN_TD_CURRENT_DATE)
1382 aValue.appendAscii("CURRENT_DATE,");
1383 if(nValue & SQL_FN_TD_CURRENT_TIME)
1384 aValue.appendAscii("CURRENT_TIME,");
1385 if(nValue & SQL_FN_TD_CURRENT_TIMESTAMP)
1386 aValue.appendAscii("CURRENT_TIMESTAMP,");
1387 if(nValue & SQL_FN_TD_CURDATE)
1388 aValue.appendAscii("CURDATE,");
1389 if(nValue & SQL_FN_TD_CURTIME)
1390 aValue.appendAscii("CURTIME,");
1391 if(nValue & SQL_FN_TD_DAYNAME)
1392 aValue.appendAscii("DAYNAME,");
1393 if(nValue & SQL_FN_TD_DAYOFMONTH)
1394 aValue.appendAscii("DAYOFMONTH,");
1395 if(nValue & SQL_FN_TD_DAYOFWEEK)
1396 aValue.appendAscii("DAYOFWEEK,");
1397 if(nValue & SQL_FN_TD_DAYOFYEAR)
1398 aValue.appendAscii("DAYOFYEAR,");
1399 if(nValue & SQL_FN_TD_EXTRACT)
1400 aValue.appendAscii("EXTRACT,");
1401 if(nValue & SQL_FN_TD_HOUR)
1402 aValue.appendAscii("HOUR,");
1403 if(nValue & SQL_FN_TD_MINUTE)
1404 aValue.appendAscii("MINUTE,");
1405 if(nValue & SQL_FN_TD_MONTH)
1406 aValue.appendAscii("MONTH,");
1407 if(nValue & SQL_FN_TD_MONTHNAME)
1408 aValue.appendAscii("MONTHNAME,");
1409 if(nValue & SQL_FN_TD_NOW)
1410 aValue.appendAscii("NOW,");
1411 if(nValue & SQL_FN_TD_QUARTER)
1412 aValue.appendAscii("QUARTER,");
1413 if(nValue & SQL_FN_TD_SECOND)
1414 aValue.appendAscii("SECOND,");
1415 if(nValue & SQL_FN_TD_TIMESTAMPADD)
1416 aValue.appendAscii("TIMESTAMPADD,");
1417 if(nValue & SQL_FN_TD_TIMESTAMPDIFF)
1418 aValue.appendAscii("TIMESTAMPDIFF,");
1419 if(nValue & SQL_FN_TD_WEEK)
1420 aValue.appendAscii("WEEK,");
1421 if(nValue & SQL_FN_TD_YEAR)
1422 aValue.appendAscii("YEAR,");
1423
1424 if ( aValue.getLength() )
1425 aValue.setLength(aValue.getLength()-1);
1426
1427 return aValue.makeStringAndClear();
1428 }
1429 // -------------------------------------------------------------------------
getSystemFunctions()1430 ::rtl::OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( ) throw(SQLException, RuntimeException)
1431 {
1432 SQLUINTEGER nValue;
1433 ::rtl::OUStringBuffer aValue;
1434 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_SYSTEM_FUNCTIONS,nValue,*this);
1435
1436 if(nValue & SQL_FN_SYS_DBNAME)
1437 aValue.appendAscii("DBNAME,");
1438 if(nValue & SQL_FN_SYS_IFNULL)
1439 aValue.appendAscii("IFNULL,");
1440 if(nValue & SQL_FN_SYS_USERNAME)
1441 aValue.appendAscii("USERNAME,");
1442
1443 if ( aValue.getLength() )
1444 aValue.setLength(aValue.getLength()-1);
1445
1446 return aValue.makeStringAndClear();
1447 }
1448 // -------------------------------------------------------------------------
getNumericFunctions()1449 ::rtl::OUString SAL_CALL ODatabaseMetaData::getNumericFunctions( ) throw(SQLException, RuntimeException)
1450 {
1451 SQLUINTEGER nValue;
1452 ::rtl::OUStringBuffer aValue;
1453 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_NUMERIC_FUNCTIONS,nValue,*this);
1454
1455 if(nValue & SQL_FN_NUM_ABS)
1456 aValue.appendAscii("ABS,");
1457 if(nValue & SQL_FN_NUM_ACOS)
1458 aValue.appendAscii("ACOS,");
1459 if(nValue & SQL_FN_NUM_ASIN)
1460 aValue.appendAscii("ASIN,");
1461 if(nValue & SQL_FN_NUM_ATAN)
1462 aValue.appendAscii("ATAN,");
1463 if(nValue & SQL_FN_NUM_ATAN2)
1464 aValue.appendAscii("ATAN2,");
1465 if(nValue & SQL_FN_NUM_CEILING)
1466 aValue.appendAscii("CEILING,");
1467 if(nValue & SQL_FN_NUM_COS)
1468 aValue.appendAscii("COS,");
1469 if(nValue & SQL_FN_NUM_COT)
1470 aValue.appendAscii("COT,");
1471 if(nValue & SQL_FN_NUM_DEGREES)
1472 aValue.appendAscii("DEGREES,");
1473 if(nValue & SQL_FN_NUM_EXP)
1474 aValue.appendAscii("EXP,");
1475 if(nValue & SQL_FN_NUM_FLOOR)
1476 aValue.appendAscii("FLOOR,");
1477 if(nValue & SQL_FN_NUM_LOG)
1478 aValue.appendAscii("LOGF,");
1479 if(nValue & SQL_FN_NUM_LOG10)
1480 aValue.appendAscii("LOG10,");
1481 if(nValue & SQL_FN_NUM_MOD)
1482 aValue.appendAscii("MOD,");
1483 if(nValue & SQL_FN_NUM_PI)
1484 aValue.appendAscii("PI,");
1485 if(nValue & SQL_FN_NUM_POWER)
1486 aValue.appendAscii("POWER,");
1487 if(nValue & SQL_FN_NUM_RADIANS)
1488 aValue.appendAscii("RADIANS,");
1489 if(nValue & SQL_FN_NUM_RAND)
1490 aValue.appendAscii("RAND,");
1491 if(nValue & SQL_FN_NUM_ROUND)
1492 aValue.appendAscii("ROUND,");
1493 if(nValue & SQL_FN_NUM_SIGN)
1494 aValue.appendAscii("SIGN,");
1495 if(nValue & SQL_FN_NUM_SIN)
1496 aValue.appendAscii("SIN,");
1497 if(nValue & SQL_FN_NUM_SQRT)
1498 aValue.appendAscii("SQRT,");
1499 if(nValue & SQL_FN_NUM_TAN)
1500 aValue.appendAscii("TAN,");
1501 if(nValue & SQL_FN_NUM_TRUNCATE)
1502 aValue.appendAscii("TRUNCATE,");
1503
1504 if ( aValue.getLength() )
1505 aValue.setLength(aValue.getLength()-1);
1506
1507 return aValue.makeStringAndClear();
1508 }
1509 // -------------------------------------------------------------------------
supportsExtendedSQLGrammar()1510 sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar( ) throw(SQLException, RuntimeException)
1511 {
1512 SQLUINTEGER nValue;
1513 if(m_bOdbc3)
1514 {
1515 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_INTERFACE_CONFORMANCE,nValue,*this);
1516 return nValue == SQL_OIC_LEVEL2;
1517 }
1518 else
1519 {
1520 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_INTERFACE_CONFORMANCE,nValue,*this);
1521 return nValue == SQL_OAC_LEVEL2;
1522 }
1523 }
1524 // -------------------------------------------------------------------------
supportsCoreSQLGrammar()1525 sal_Bool SAL_CALL ODatabaseMetaData::supportsCoreSQLGrammar( ) throw(SQLException, RuntimeException)
1526 {
1527 SQLUINTEGER nValue;
1528 if(m_bOdbc3)
1529 {
1530 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_INTERFACE_CONFORMANCE,nValue,*this);
1531 return nValue == SQL_OIC_CORE || nValue == SQL_OIC_LEVEL2 || nValue == SQL_OIC_LEVEL1;
1532 }
1533 else
1534 {
1535 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_SQL_CONFORMANCE,nValue,*this);
1536 return nValue == SQL_OSC_CORE || nValue == SQL_OAC_LEVEL1 || nValue == SQL_OAC_LEVEL2;
1537 }
1538 }
1539 // -------------------------------------------------------------------------
supportsMinimumSQLGrammar()1540 sal_Bool SAL_CALL ODatabaseMetaData::supportsMinimumSQLGrammar( ) throw(SQLException, RuntimeException)
1541 {
1542 SQLUINTEGER nValue;
1543 if(m_bOdbc3)
1544 {
1545 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_INTERFACE_CONFORMANCE,nValue,*this);
1546 return nValue == SQL_OIC_LEVEL1 || nValue == SQL_OIC_LEVEL2;
1547 }
1548 else
1549 {
1550 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_ODBC_INTERFACE_CONFORMANCE,nValue,*this);
1551 return nValue == SQL_OAC_LEVEL1 || nValue == SQL_OAC_LEVEL2;
1552 }
1553 }
1554 // -------------------------------------------------------------------------
supportsFullOuterJoins()1555 sal_Bool SAL_CALL ODatabaseMetaData::supportsFullOuterJoins( ) throw(SQLException, RuntimeException)
1556 {
1557 SQLUINTEGER nValue;
1558 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_OJ_CAPABILITIES,nValue,*this);
1559 return (nValue & SQL_OJ_FULL) == SQL_OJ_FULL;
1560 }
1561 // -------------------------------------------------------------------------
supportsLimitedOuterJoins()1562 sal_Bool SAL_CALL ODatabaseMetaData::supportsLimitedOuterJoins( ) throw(SQLException, RuntimeException)
1563 {
1564 return supportsFullOuterJoins( );
1565 }
1566 // -------------------------------------------------------------------------
getMaxColumnsInGroupBy()1567 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInGroupBy( ) throw(SQLException, RuntimeException)
1568 {
1569 SQLUSMALLINT nValue;
1570 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMNS_IN_GROUP_BY,nValue,*this);
1571 return nValue;
1572 }
1573 // -------------------------------------------------------------------------
getMaxColumnsInOrderBy()1574 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInOrderBy( ) throw(SQLException, RuntimeException)
1575 {
1576 SQLUSMALLINT nValue;
1577 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMNS_IN_ORDER_BY,nValue,*this);
1578 return nValue;
1579 }
1580 // -------------------------------------------------------------------------
getMaxColumnsInSelect()1581 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInSelect( ) throw(SQLException, RuntimeException)
1582 {
1583 SQLUSMALLINT nValue;
1584 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_COLUMNS_IN_SELECT,nValue,*this);
1585 return nValue;
1586 }
1587 // -------------------------------------------------------------------------
getMaxUserNameLength()1588 sal_Int32 SAL_CALL ODatabaseMetaData::getMaxUserNameLength( ) throw(SQLException, RuntimeException)
1589 {
1590 SQLUSMALLINT nValue;
1591 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_MAX_USER_NAME_LEN,nValue,*this);
1592 return nValue;
1593 }
1594 // -------------------------------------------------------------------------
supportsResultSetType(sal_Int32 setType)1595 sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetType( sal_Int32 setType ) throw(SQLException, RuntimeException)
1596 {
1597 SQLUINTEGER nValue;
1598 OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_CURSOR_SENSITIVITY,nValue,*this);
1599 return (nValue & static_cast<SQLUINTEGER>(setType)) == static_cast<SQLUINTEGER>(setType);
1600 }
1601 // -------------------------------------------------------------------------
supportsResultSetConcurrency(sal_Int32 setType,sal_Int32 concurrency)1602 sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) throw(SQLException, RuntimeException)
1603 {
1604 SQLUINTEGER nValue;
1605 SQLUSMALLINT nAskFor( SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 );
1606 switch(setType)
1607 {
1608 default:
1609 case ResultSetType::FORWARD_ONLY:
1610 nAskFor = SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2;
1611 break;
1612 case ResultSetType::SCROLL_INSENSITIVE:
1613 nAskFor = SQL_STATIC_CURSOR_ATTRIBUTES2;
1614 break;
1615 case ResultSetType::SCROLL_SENSITIVE:
1616 nAskFor = SQL_DYNAMIC_CURSOR_ATTRIBUTES2;
1617 break;
1618 }
1619
1620 OTools::GetInfo(m_pConnection,m_aConnectionHandle,nAskFor,nValue,*this);
1621 sal_Bool bRet = sal_False;
1622 switch(concurrency)
1623 {
1624 case ResultSetConcurrency::READ_ONLY:
1625 bRet = (nValue & SQL_CA2_READ_ONLY_CONCURRENCY) == SQL_CA2_READ_ONLY_CONCURRENCY;
1626 break;
1627 case ResultSetConcurrency::UPDATABLE:
1628 bRet = (nValue & SQL_CA2_OPT_VALUES_CONCURRENCY) == SQL_CA2_OPT_VALUES_CONCURRENCY;
1629 break;
1630 }
1631 return bRet;
1632 }
1633 // -------------------------------------------------------------------------
ownUpdatesAreVisible(sal_Int32 setType)1634 sal_Bool SAL_CALL ODatabaseMetaData::ownUpdatesAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1635 {
1636 SQLUINTEGER nValue;
1637 SQLUSMALLINT nAskFor( SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 );
1638 switch(setType)
1639 {
1640 default:
1641 case ResultSetType::FORWARD_ONLY:
1642 nAskFor = SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2;
1643 break;
1644 case ResultSetType::SCROLL_INSENSITIVE:
1645 nAskFor = SQL_STATIC_CURSOR_ATTRIBUTES2;
1646 break;
1647 case ResultSetType::SCROLL_SENSITIVE:
1648 nAskFor = SQL_DYNAMIC_CURSOR_ATTRIBUTES2;
1649 break;
1650 }
1651
1652 OTools::GetInfo(m_pConnection,m_aConnectionHandle,nAskFor,nValue,*this);
1653 return (nValue & SQL_CA2_SENSITIVITY_UPDATES) == SQL_CA2_SENSITIVITY_UPDATES;
1654 }
1655 // -------------------------------------------------------------------------
ownDeletesAreVisible(sal_Int32 setType)1656 sal_Bool SAL_CALL ODatabaseMetaData::ownDeletesAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1657 {
1658 SQLUINTEGER nValue;
1659 SQLUSMALLINT nAskFor( SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 );
1660 switch(setType)
1661 {
1662 default:
1663 case ResultSetType::FORWARD_ONLY:
1664 nAskFor = SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2;
1665 break;
1666 case ResultSetType::SCROLL_INSENSITIVE:
1667 nAskFor = SQL_STATIC_CURSOR_ATTRIBUTES2;
1668 break;
1669 case ResultSetType::SCROLL_SENSITIVE:
1670 nAskFor = SQL_DYNAMIC_CURSOR_ATTRIBUTES2;
1671 break;
1672 }
1673
1674 OTools::GetInfo(m_pConnection,m_aConnectionHandle,nAskFor,nValue,*this);
1675 return (nValue & SQL_CA2_SENSITIVITY_DELETIONS) != SQL_CA2_SENSITIVITY_DELETIONS;
1676 }
1677 // -------------------------------------------------------------------------
ownInsertsAreVisible(sal_Int32 setType)1678 sal_Bool SAL_CALL ODatabaseMetaData::ownInsertsAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1679 {
1680 SQLUINTEGER nValue;
1681 SQLUSMALLINT nAskFor( SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 );
1682 switch(setType)
1683 {
1684 default:
1685 case ResultSetType::FORWARD_ONLY:
1686 nAskFor = SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2;
1687 break;
1688 case ResultSetType::SCROLL_INSENSITIVE:
1689 nAskFor = SQL_STATIC_CURSOR_ATTRIBUTES2;
1690 break;
1691 case ResultSetType::SCROLL_SENSITIVE:
1692 nAskFor = SQL_DYNAMIC_CURSOR_ATTRIBUTES2;
1693 break;
1694 }
1695
1696 OTools::GetInfo(m_pConnection,m_aConnectionHandle,nAskFor,nValue,*this);
1697 return (nValue & SQL_CA2_SENSITIVITY_ADDITIONS) == SQL_CA2_SENSITIVITY_ADDITIONS;
1698 }
1699 // -------------------------------------------------------------------------
othersUpdatesAreVisible(sal_Int32 setType)1700 sal_Bool SAL_CALL ODatabaseMetaData::othersUpdatesAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1701 {
1702 return ownUpdatesAreVisible(setType);
1703 }
1704 // -------------------------------------------------------------------------
othersDeletesAreVisible(sal_Int32 setType)1705 sal_Bool SAL_CALL ODatabaseMetaData::othersDeletesAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1706 {
1707 return ownDeletesAreVisible(setType);
1708 }
1709 // -------------------------------------------------------------------------
othersInsertsAreVisible(sal_Int32 setType)1710 sal_Bool SAL_CALL ODatabaseMetaData::othersInsertsAreVisible( sal_Int32 setType ) throw(SQLException, RuntimeException)
1711 {
1712 return ownInsertsAreVisible(setType);
1713 }
1714 // -------------------------------------------------------------------------
updatesAreDetected(sal_Int32)1715 sal_Bool SAL_CALL ODatabaseMetaData::updatesAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException)
1716 {
1717 return sal_False;
1718 }
1719 // -------------------------------------------------------------------------
deletesAreDetected(sal_Int32)1720 sal_Bool SAL_CALL ODatabaseMetaData::deletesAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException)
1721 {
1722 return sal_False;
1723 }
1724 // -------------------------------------------------------------------------
insertsAreDetected(sal_Int32)1725 sal_Bool SAL_CALL ODatabaseMetaData::insertsAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException)
1726 {
1727 return sal_False;
1728 }
1729 // -------------------------------------------------------------------------
supportsBatchUpdates()1730 sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates( ) throw(SQLException, RuntimeException)
1731 {
1732 return sal_False;
1733 }
1734 // -------------------------------------------------------------------------
getUDTs(const Any &,const::rtl::OUString &,const::rtl::OUString &,const Sequence<sal_Int32> &)1735 Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs( const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, const ::rtl::OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ ) throw(SQLException, RuntimeException)
1736 {
1737 return NULL;
1738 }
1739 // -----------------------------------------------------------------------------
1740