Update ooo320-m1
[ooovba.git] / connectivity / source / drivers / dbase / DDatabaseMetaData.cxx
blob2cecb7bce8b35e71cc73cb549cc7e9bb62371528
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: DDatabaseMetaData.cxx,v $
10 * $Revision: 1.35.56.1 $
12 * This file is part of OpenOffice.org.
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.
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).
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.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_connectivity.hxx"
35 #ifndef _CONNECTIVITY_DBASE_ODbaseDatabaseMetaData_HXX_
36 #include "dbase/DDatabaseMetaData.hxx"
37 #endif
38 #include <com/sun/star/sdbc/DataType.hpp>
39 #include <com/sun/star/sdbc/ResultSetType.hpp>
40 #include <com/sun/star/sdbc/ColumnValue.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
43 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
44 #include <com/sun/star/sdbcx/XIndexesSupplier.hpp>
45 #include <tools/urlobj.hxx>
46 #include "FDatabaseMetaDataResultSet.hxx"
47 #include <com/sun/star/lang/XUnoTunnel.hpp>
48 #include "dbase/DIndex.hxx"
49 #include "connectivity/FValue.hxx"
50 #include <comphelper/extract.hxx>
51 #include <comphelper/types.hxx>
52 #include <ucbhelper/content.hxx>
53 #include <rtl/logfile.hxx>
55 using namespace ::comphelper;
56 using namespace connectivity::dbase;
57 using namespace connectivity;
58 using namespace ::com::sun::star::uno;
59 using namespace ::com::sun::star::beans;
60 using namespace ::com::sun::star::sdbcx;
61 using namespace ::com::sun::star::sdbc;
62 using namespace ::com::sun::star::container;
63 using namespace ::com::sun::star::ucb;
64 using namespace ::com::sun::star::lang;
66 ODbaseDatabaseMetaData::ODbaseDatabaseMetaData(::connectivity::file::OConnection* _pCon) :ODatabaseMetaData(_pCon)
68 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::ODbaseDatabaseMetaData" );
70 // -------------------------------------------------------------------------
71 ODbaseDatabaseMetaData::~ODbaseDatabaseMetaData()
74 // -------------------------------------------------------------------------
75 Reference< XResultSet > ODbaseDatabaseMetaData::impl_getTypeInfo_throw( )
77 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_getTypeInfo_throw" );
78 ::osl::MutexGuard aGuard( m_aMutex );
80 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
81 Reference< XResultSet > xRef = pResult;
83 static ODatabaseMetaDataResultSet::ORows aRows;
84 if(aRows.empty())
86 ODatabaseMetaDataResultSet::ORow aRow;
87 aRow.reserve(18);
89 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
90 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("VARCHAR")));
91 aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR));
92 aRow.push_back(new ORowSetValueDecorator((sal_Int32)254));
93 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue());
94 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue());
95 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("length")));
96 aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnValue::NULLABLE));
97 aRow.push_back(ODatabaseMetaDataResultSet::get1Value());
98 aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnSearch::FULL));
99 aRow.push_back(ODatabaseMetaDataResultSet::get1Value());
100 aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
101 aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
102 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("C"))));
103 aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
104 aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
105 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
106 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
107 aRow.push_back(new ORowSetValueDecorator((sal_Int32)10));
109 aRows.push_back(aRow);
111 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("LONGVARCHAR"));
112 aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR);
113 aRow[3] = new ORowSetValueDecorator((sal_Int32)2147483647);
114 aRow[6] = new ORowSetValueDecorator();
115 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("M")));
116 aRows.push_back(aRow);
118 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DATE"));
119 aRow[2] = new ORowSetValueDecorator(DataType::DATE);
120 aRow[3] = new ORowSetValueDecorator((sal_Int32)10);
121 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("D")));
122 aRows.push_back(aRow);
124 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("BOOLEAN"));
125 aRow[2] = new ORowSetValueDecorator(DataType::BIT);
126 aRow[3] = ODatabaseMetaDataResultSet::get1Value();
127 aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue();
128 aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
129 aRow[6] = new ORowSetValueDecorator(::rtl::OUString());
130 aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
131 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("L")));
132 aRows.push_back(aRow);
134 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DOUBLE"));
135 aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE);
136 aRow[3] = new ORowSetValueDecorator((sal_Int32)8);
137 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("B")));
138 aRows.push_back(aRow);
140 aRow[11] = new ORowSetValueDecorator(sal_True);
141 aRow[13] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("Y"));
142 aRows.push_back(aRow);
144 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP"));
145 aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
146 aRow[11] = new ORowSetValueDecorator(sal_False);
147 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("T")));
148 aRows.push_back(aRow);
150 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("INTEGER"));
151 aRow[2] = new ORowSetValueDecorator(DataType::INTEGER);
152 aRow[3] = new ORowSetValueDecorator((sal_Int32)10);
153 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("I")));
154 aRows.push_back(aRow);
156 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DECIMAL"));
157 aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
158 aRow[3] = new ORowSetValueDecorator((sal_Int32)20);
159 aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("length,scale"));
160 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("F")));
161 aRows.push_back(aRow);
163 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("NUMERIC"));
164 aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
165 aRow[3] = new ORowSetValueDecorator((sal_Int32)16);
166 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("N")));
167 aRow[15] = new ORowSetValueDecorator((sal_Int32)16);
168 aRows.push_back(aRow);
171 pResult->setRows(aRows);
172 return xRef;
174 // -------------------------------------------------------------------------
175 Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
176 const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, const ::rtl::OUString& tableNamePattern,
177 const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException)
179 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getColumns" );
180 ::osl::MutexGuard aGuard( m_aMutex );
183 Reference< XTablesSupplier > xTables = m_pConnection->createCatalog();
184 if(!xTables.is())
185 throw SQLException();
187 Reference< XNameAccess> xNames = xTables->getTables();
188 if(!xNames.is())
189 throw SQLException();
191 ODatabaseMetaDataResultSet::ORows aRows;
192 ODatabaseMetaDataResultSet::ORow aRow(19);
194 aRow[10] = new ORowSetValueDecorator((sal_Int32)10);
195 Sequence< ::rtl::OUString> aTabNames(xNames->getElementNames());
196 const ::rtl::OUString* pTabBegin = aTabNames.getConstArray();
197 const ::rtl::OUString* pTabEnd = pTabBegin + aTabNames.getLength();
198 for(;pTabBegin != pTabEnd;++pTabBegin)
200 if(match(tableNamePattern,*pTabBegin,'\0'))
202 Reference< XColumnsSupplier> xTable;
203 ::cppu::extractInterface(xTable,xNames->getByName(*pTabBegin));
204 OSL_ENSURE(xTable.is(),"Table not found! Normallya exception had to be thrown here!");
205 aRow[3] = new ORowSetValueDecorator(*pTabBegin);
207 Reference< XNameAccess> xColumns = xTable->getColumns();
208 if(!xColumns.is())
209 throw SQLException();
211 Sequence< ::rtl::OUString> aColNames(xColumns->getElementNames());
213 const ::rtl::OUString* pBegin = aColNames.getConstArray();
214 const ::rtl::OUString* pEnd = pBegin + aColNames.getLength();
215 Reference< XPropertySet> xColumn;
216 for(sal_Int32 i=1;pBegin != pEnd;++pBegin,++i)
218 if(match(columnNamePattern,*pBegin,'\0'))
220 aRow[4] = new ORowSetValueDecorator(*pBegin);
222 ::cppu::extractInterface(xColumn,xColumns->getByName(*pBegin));
223 OSL_ENSURE(xColumn.is(),"Columns contains a column who isn't a fastpropertyset!");
224 aRow[5] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))));
225 aRow[6] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME))));
226 aRow[7] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))));
227 aRow[9] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE))));
228 aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))));
229 aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))));
230 switch((sal_Int32)aRow[5]->getValue())
232 case DataType::CHAR:
233 case DataType::VARCHAR:
234 aRow[16] = new ORowSetValueDecorator((sal_Int32)254);
235 break;
236 case DataType::LONGVARCHAR:
237 aRow[16] = new ORowSetValueDecorator((sal_Int32)65535);
238 break;
239 default:
240 aRow[16] = new ORowSetValueDecorator((sal_Int32)0);
242 aRow[17] = new ORowSetValueDecorator(i);
243 switch(sal_Int32(aRow[11]->getValue()))
245 case ColumnValue::NO_NULLS:
246 aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("NO"));
247 break;
248 case ColumnValue::NULLABLE:
249 aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("YES"));
250 break;
251 default:
252 aRow[18] = new ORowSetValueDecorator(::rtl::OUString());
254 aRows.push_back(aRow);
259 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns);
260 Reference< XResultSet > xRef = pResult;
261 pResult->setRows(aRows);
263 return xRef;
265 // -------------------------------------------------------------------------
266 Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo(
267 const Any& /*catalog*/, const ::rtl::OUString& /*schema*/, const ::rtl::OUString& table,
268 sal_Bool unique, sal_Bool /*approximate*/ ) throw(SQLException, RuntimeException)
270 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getIndexInfo" );
271 ::osl::MutexGuard aGuard( m_aMutex );
273 Reference< XTablesSupplier > xTables = m_pConnection->createCatalog();
274 if(!xTables.is())
275 throw SQLException();
277 Reference< XNameAccess> xNames = xTables->getTables();
278 if(!xNames.is())
279 throw SQLException();
281 ODatabaseMetaDataResultSet::ORows aRows;
282 ODatabaseMetaDataResultSet::ORow aRow(14);
284 aRow[5] = new ORowSetValueDecorator(::rtl::OUString());
285 aRow[10] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("A"));
287 Reference< XIndexesSupplier> xTable;
288 ::cppu::extractInterface(xTable,xNames->getByName(table));
289 aRow[3] = new ORowSetValueDecorator(table);
290 aRow[7] = new ORowSetValueDecorator((sal_Int32)3);
292 Reference< XNameAccess> xIndexes = xTable->getIndexes();
293 if(!xIndexes.is())
294 throw SQLException();
296 Sequence< ::rtl::OUString> aIdxNames(xIndexes->getElementNames());
298 const ::rtl::OUString* pBegin = aIdxNames.getConstArray();
299 const ::rtl::OUString* pEnd = pBegin + aIdxNames.getLength();
300 Reference< XPropertySet> xIndex;
301 for(;pBegin != pEnd;++pBegin)
303 ::cppu::extractInterface(xIndex,xIndexes->getByName(*pBegin));
304 OSL_ENSURE(xIndex.is(),"Indexes contains a column who isn't a fastpropertyset!");
306 if(unique && !getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE))))
307 continue;
308 aRow[4] = new ORowSetValueDecorator(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE))));
309 aRow[6] = new ORowSetValueDecorator(*pBegin);
311 Reference< XUnoTunnel> xTunnel(xIndex,UNO_QUERY);
312 if(xTunnel.is())
314 ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelImplementationId()) );
315 if(pIndex)
317 aRow[11] = new ORowSetValueDecorator((sal_Int32)pIndex->getHeader().db_maxkeys);
318 aRow[12] = new ORowSetValueDecorator((sal_Int32)pIndex->getHeader().db_pagecount);
322 Reference<XColumnsSupplier> xColumnsSup(xIndex,UNO_QUERY);
323 Reference< XNameAccess> xColumns = xColumnsSup->getColumns();
324 Sequence< ::rtl::OUString> aColNames(xColumns->getElementNames());
326 const ::rtl::OUString* pColBegin = aColNames.getConstArray();
327 const ::rtl::OUString* pColEnd = pColBegin + aColNames.getLength();
328 Reference< XPropertySet> xColumn;
329 for(sal_Int32 j=1;pColBegin != pColEnd;++pColBegin,++j)
331 // xColumns->getByName(*pColBegin) >>= xColumn;
332 aRow[8] = new ORowSetValueDecorator(j);
333 aRow[9] = new ORowSetValueDecorator(*pColBegin);
334 aRows.push_back(aRow);
338 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo);
339 Reference< XResultSet > xRef = pResult;
340 pResult->setRows(aRows);
341 return xRef;
343 // -------------------------------------------------------------------------
344 ::rtl::OUString SAL_CALL ODbaseDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException)
346 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getURL" );
347 ::osl::MutexGuard aGuard( m_aMutex );
348 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:dbase:")) + m_pConnection->getURL();
350 // -------------------------------------------------------------------------
351 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException)
353 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxBinaryLiteralLength" );
354 return STRING_MAXLEN;
356 // -------------------------------------------------------------------------
357 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException)
359 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxCharLiteralLength" );
360 return 254;
362 // -------------------------------------------------------------------------
363 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException)
365 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnNameLength" );
366 return 10;
368 // -------------------------------------------------------------------------
369 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException)
371 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnsInIndex" );
372 return 1;
374 // -------------------------------------------------------------------------
375 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException)
377 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnsInTable" );
378 return 128;
380 // -----------------------------------------------------------------------------
381 sal_Bool SAL_CALL ODbaseDatabaseMetaData::supportsAlterTableWithAddColumn( ) throw(SQLException, RuntimeException)
383 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::supportsAlterTableWithAddColumn" );
384 return sal_True;
386 // -------------------------------------------------------------------------
387 sal_Bool SAL_CALL ODbaseDatabaseMetaData::supportsAlterTableWithDropColumn( ) throw(SQLException, RuntimeException)
389 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::supportsAlterTableWithDropColumn" );
390 return sal_False;
392 // -----------------------------------------------------------------------------
393 sal_Bool SAL_CALL ODbaseDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException)
395 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::isReadOnly" );
396 ::osl::MutexGuard aGuard( m_aMutex );
398 sal_Bool bReadOnly = sal_False;
399 static ::rtl::OUString sReadOnly = ::rtl::OUString::createFromAscii("IsReadOnly");
400 ::ucbhelper::Content aFile(m_pConnection->getContent(),Reference< XCommandEnvironment >());
401 aFile.getPropertyValue(sReadOnly) >>= bReadOnly;
403 return bReadOnly;
405 // -----------------------------------------------------------------------------
406 sal_Bool ODbaseDatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw( )
408 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw" );
409 return sal_True;
411 // -----------------------------------------------------------------------------
412 sal_Bool ODbaseDatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw( )
414 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw" );
415 return sal_True;
417 // -----------------------------------------------------------------------------