1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_connectivity.hxx" 30 31 32 #ifndef _CONNECTIVITY_DBASE_ODbaseDatabaseMetaData_HXX_ 33 #include "dbase/DDatabaseMetaData.hxx" 34 #endif 35 #include <com/sun/star/sdbc/DataType.hpp> 36 #include <com/sun/star/sdbc/ResultSetType.hpp> 37 #include <com/sun/star/sdbc/ColumnValue.hpp> 38 #include <com/sun/star/beans/XPropertySet.hpp> 39 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> 40 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 41 #include <com/sun/star/sdbcx/XIndexesSupplier.hpp> 42 #include <tools/urlobj.hxx> 43 #include "FDatabaseMetaDataResultSet.hxx" 44 #include <com/sun/star/lang/XUnoTunnel.hpp> 45 #include "dbase/DIndex.hxx" 46 #include "connectivity/FValue.hxx" 47 #include <comphelper/extract.hxx> 48 #include <comphelper/types.hxx> 49 #include <ucbhelper/content.hxx> 50 #include <rtl/logfile.hxx> 51 52 using namespace ::comphelper; 53 using namespace connectivity::dbase; 54 using namespace connectivity; 55 using namespace ::com::sun::star::uno; 56 using namespace ::com::sun::star::beans; 57 using namespace ::com::sun::star::sdbcx; 58 using namespace ::com::sun::star::sdbc; 59 using namespace ::com::sun::star::container; 60 using namespace ::com::sun::star::ucb; 61 using namespace ::com::sun::star::lang; 62 63 ODbaseDatabaseMetaData::ODbaseDatabaseMetaData(::connectivity::file::OConnection* _pCon) :ODatabaseMetaData(_pCon) 64 { 65 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::ODbaseDatabaseMetaData" ); 66 } 67 // ------------------------------------------------------------------------- 68 ODbaseDatabaseMetaData::~ODbaseDatabaseMetaData() 69 { 70 } 71 // ------------------------------------------------------------------------- 72 Reference< XResultSet > ODbaseDatabaseMetaData::impl_getTypeInfo_throw( ) 73 { 74 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_getTypeInfo_throw" ); 75 ::osl::MutexGuard aGuard( m_aMutex ); 76 77 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); 78 Reference< XResultSet > xRef = pResult; 79 80 static ODatabaseMetaDataResultSet::ORows aRows; 81 if(aRows.empty()) 82 { 83 ODatabaseMetaDataResultSet::ORow aRow; 84 aRow.reserve(18); 85 86 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 87 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("VARCHAR"))); 88 aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR)); 89 aRow.push_back(new ORowSetValueDecorator((sal_Int32)254)); 90 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); 91 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); 92 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("length"))); 93 aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnValue::NULLABLE)); 94 aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); 95 aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnSearch::FULL)); 96 aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); 97 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 98 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 99 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("C")))); 100 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 101 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 102 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 103 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 104 aRow.push_back(new ORowSetValueDecorator((sal_Int32)10)); 105 106 aRows.push_back(aRow); 107 108 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("LONGVARCHAR")); 109 aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR); 110 aRow[3] = new ORowSetValueDecorator((sal_Int32)2147483647); 111 aRow[6] = new ORowSetValueDecorator(); 112 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("M"))); 113 aRows.push_back(aRow); 114 115 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DATE")); 116 aRow[2] = new ORowSetValueDecorator(DataType::DATE); 117 aRow[3] = new ORowSetValueDecorator((sal_Int32)10); 118 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("D"))); 119 aRows.push_back(aRow); 120 121 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("BOOLEAN")); 122 aRow[2] = new ORowSetValueDecorator(DataType::BIT); 123 aRow[3] = ODatabaseMetaDataResultSet::get1Value(); 124 aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue(); 125 aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); 126 aRow[6] = new ORowSetValueDecorator(::rtl::OUString()); 127 aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); 128 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("L"))); 129 aRows.push_back(aRow); 130 131 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DOUBLE")); 132 aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE); 133 aRow[3] = new ORowSetValueDecorator((sal_Int32)8); 134 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("B"))); 135 aRows.push_back(aRow); 136 137 aRow[11] = new ORowSetValueDecorator(sal_True); 138 aRow[13] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("Y")); 139 aRows.push_back(aRow); 140 141 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("TIMESTAMP")); 142 aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP); 143 aRow[11] = new ORowSetValueDecorator(sal_False); 144 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("T"))); 145 aRows.push_back(aRow); 146 147 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("INTEGER")); 148 aRow[2] = new ORowSetValueDecorator(DataType::INTEGER); 149 aRow[3] = new ORowSetValueDecorator((sal_Int32)10); 150 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("I"))); 151 aRows.push_back(aRow); 152 153 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("DECIMAL")); 154 aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); 155 aRow[3] = new ORowSetValueDecorator((sal_Int32)20); 156 aRow[6] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("length,scale")); 157 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("F"))); 158 aRows.push_back(aRow); 159 160 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("NUMERIC")); 161 aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); 162 aRow[3] = new ORowSetValueDecorator((sal_Int32)16); 163 aRow[13] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("N"))); 164 aRow[15] = new ORowSetValueDecorator((sal_Int32)16); 165 aRows.push_back(aRow); 166 } 167 168 pResult->setRows(aRows); 169 return xRef; 170 } 171 // ------------------------------------------------------------------------- 172 Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns( 173 const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, const ::rtl::OUString& tableNamePattern, 174 const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException) 175 { 176 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getColumns" ); 177 ::osl::MutexGuard aGuard( m_aMutex ); 178 179 180 Reference< XTablesSupplier > xTables = m_pConnection->createCatalog(); 181 if(!xTables.is()) 182 throw SQLException(); 183 184 Reference< XNameAccess> xNames = xTables->getTables(); 185 if(!xNames.is()) 186 throw SQLException(); 187 188 ODatabaseMetaDataResultSet::ORows aRows; 189 ODatabaseMetaDataResultSet::ORow aRow(19); 190 191 aRow[10] = new ORowSetValueDecorator((sal_Int32)10); 192 Sequence< ::rtl::OUString> aTabNames(xNames->getElementNames()); 193 const ::rtl::OUString* pTabBegin = aTabNames.getConstArray(); 194 const ::rtl::OUString* pTabEnd = pTabBegin + aTabNames.getLength(); 195 for(;pTabBegin != pTabEnd;++pTabBegin) 196 { 197 if(match(tableNamePattern,*pTabBegin,'\0')) 198 { 199 Reference< XColumnsSupplier> xTable; 200 ::cppu::extractInterface(xTable,xNames->getByName(*pTabBegin)); 201 OSL_ENSURE(xTable.is(),"Table not found! Normallya exception had to be thrown here!"); 202 aRow[3] = new ORowSetValueDecorator(*pTabBegin); 203 204 Reference< XNameAccess> xColumns = xTable->getColumns(); 205 if(!xColumns.is()) 206 throw SQLException(); 207 208 Sequence< ::rtl::OUString> aColNames(xColumns->getElementNames()); 209 210 const ::rtl::OUString* pBegin = aColNames.getConstArray(); 211 const ::rtl::OUString* pEnd = pBegin + aColNames.getLength(); 212 Reference< XPropertySet> xColumn; 213 for(sal_Int32 i=1;pBegin != pEnd;++pBegin,++i) 214 { 215 if(match(columnNamePattern,*pBegin,'\0')) 216 { 217 aRow[4] = new ORowSetValueDecorator(*pBegin); 218 219 ::cppu::extractInterface(xColumn,xColumns->getByName(*pBegin)); 220 OSL_ENSURE(xColumn.is(),"Columns contains a column who isn't a fastpropertyset!"); 221 aRow[5] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)))); 222 aRow[6] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)))); 223 aRow[7] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION)))); 224 aRow[9] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)))); 225 aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)))); 226 aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)))); 227 switch((sal_Int32)aRow[5]->getValue()) 228 { 229 case DataType::CHAR: 230 case DataType::VARCHAR: 231 aRow[16] = new ORowSetValueDecorator((sal_Int32)254); 232 break; 233 case DataType::LONGVARCHAR: 234 aRow[16] = new ORowSetValueDecorator((sal_Int32)65535); 235 break; 236 default: 237 aRow[16] = new ORowSetValueDecorator((sal_Int32)0); 238 } 239 aRow[17] = new ORowSetValueDecorator(i); 240 switch(sal_Int32(aRow[11]->getValue())) 241 { 242 case ColumnValue::NO_NULLS: 243 aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("NO")); 244 break; 245 case ColumnValue::NULLABLE: 246 aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("YES")); 247 break; 248 default: 249 aRow[18] = new ORowSetValueDecorator(::rtl::OUString()); 250 } 251 aRows.push_back(aRow); 252 } 253 } 254 } 255 } 256 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); 257 Reference< XResultSet > xRef = pResult; 258 pResult->setRows(aRows); 259 260 return xRef; 261 } 262 // ------------------------------------------------------------------------- 263 Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo( 264 const Any& /*catalog*/, const ::rtl::OUString& /*schema*/, const ::rtl::OUString& table, 265 sal_Bool unique, sal_Bool /*approximate*/ ) throw(SQLException, RuntimeException) 266 { 267 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getIndexInfo" ); 268 ::osl::MutexGuard aGuard( m_aMutex ); 269 270 Reference< XTablesSupplier > xTables = m_pConnection->createCatalog(); 271 if(!xTables.is()) 272 throw SQLException(); 273 274 Reference< XNameAccess> xNames = xTables->getTables(); 275 if(!xNames.is()) 276 throw SQLException(); 277 278 ODatabaseMetaDataResultSet::ORows aRows; 279 ODatabaseMetaDataResultSet::ORow aRow(14); 280 281 aRow[5] = new ORowSetValueDecorator(::rtl::OUString()); 282 aRow[10] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("A")); 283 284 Reference< XIndexesSupplier> xTable; 285 ::cppu::extractInterface(xTable,xNames->getByName(table)); 286 aRow[3] = new ORowSetValueDecorator(table); 287 aRow[7] = new ORowSetValueDecorator((sal_Int32)3); 288 289 Reference< XNameAccess> xIndexes = xTable->getIndexes(); 290 if(!xIndexes.is()) 291 throw SQLException(); 292 293 Sequence< ::rtl::OUString> aIdxNames(xIndexes->getElementNames()); 294 295 const ::rtl::OUString* pBegin = aIdxNames.getConstArray(); 296 const ::rtl::OUString* pEnd = pBegin + aIdxNames.getLength(); 297 Reference< XPropertySet> xIndex; 298 for(;pBegin != pEnd;++pBegin) 299 { 300 ::cppu::extractInterface(xIndex,xIndexes->getByName(*pBegin)); 301 OSL_ENSURE(xIndex.is(),"Indexes contains a column who isn't a fastpropertyset!"); 302 303 if(unique && !getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE)))) 304 continue; 305 aRow[4] = new ORowSetValueDecorator(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE)))); 306 aRow[6] = new ORowSetValueDecorator(*pBegin); 307 308 Reference< XUnoTunnel> xTunnel(xIndex,UNO_QUERY); 309 if(xTunnel.is()) 310 { 311 ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelImplementationId()) ); 312 if(pIndex) 313 { 314 aRow[11] = new ORowSetValueDecorator((sal_Int32)pIndex->getHeader().db_maxkeys); 315 aRow[12] = new ORowSetValueDecorator((sal_Int32)pIndex->getHeader().db_pagecount); 316 } 317 } 318 319 Reference<XColumnsSupplier> xColumnsSup(xIndex,UNO_QUERY); 320 Reference< XNameAccess> xColumns = xColumnsSup->getColumns(); 321 Sequence< ::rtl::OUString> aColNames(xColumns->getElementNames()); 322 323 const ::rtl::OUString* pColBegin = aColNames.getConstArray(); 324 const ::rtl::OUString* pColEnd = pColBegin + aColNames.getLength(); 325 Reference< XPropertySet> xColumn; 326 for(sal_Int32 j=1;pColBegin != pColEnd;++pColBegin,++j) 327 { 328 // xColumns->getByName(*pColBegin) >>= xColumn; 329 aRow[8] = new ORowSetValueDecorator(j); 330 aRow[9] = new ORowSetValueDecorator(*pColBegin); 331 aRows.push_back(aRow); 332 } 333 } 334 335 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo); 336 Reference< XResultSet > xRef = pResult; 337 pResult->setRows(aRows); 338 return xRef; 339 } 340 // ------------------------------------------------------------------------- 341 ::rtl::OUString SAL_CALL ODbaseDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException) 342 { 343 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getURL" ); 344 ::osl::MutexGuard aGuard( m_aMutex ); 345 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:dbase:")) + m_pConnection->getURL(); 346 } 347 // ------------------------------------------------------------------------- 348 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException) 349 { 350 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxBinaryLiteralLength" ); 351 return STRING_MAXLEN; 352 } 353 // ------------------------------------------------------------------------- 354 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException) 355 { 356 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxCharLiteralLength" ); 357 return 254; 358 } 359 // ------------------------------------------------------------------------- 360 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException) 361 { 362 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnNameLength" ); 363 return 10; 364 } 365 // ------------------------------------------------------------------------- 366 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException) 367 { 368 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnsInIndex" ); 369 return 1; 370 } 371 // ------------------------------------------------------------------------- 372 sal_Int32 SAL_CALL ODbaseDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException) 373 { 374 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::getMaxColumnsInTable" ); 375 return 128; 376 } 377 // ----------------------------------------------------------------------------- 378 sal_Bool SAL_CALL ODbaseDatabaseMetaData::supportsAlterTableWithAddColumn( ) throw(SQLException, RuntimeException) 379 { 380 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::supportsAlterTableWithAddColumn" ); 381 return sal_True; 382 } 383 // ------------------------------------------------------------------------- 384 sal_Bool SAL_CALL ODbaseDatabaseMetaData::supportsAlterTableWithDropColumn( ) throw(SQLException, RuntimeException) 385 { 386 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::supportsAlterTableWithDropColumn" ); 387 return sal_False; 388 } 389 // ----------------------------------------------------------------------------- 390 sal_Bool SAL_CALL ODbaseDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException) 391 { 392 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::isReadOnly" ); 393 ::osl::MutexGuard aGuard( m_aMutex ); 394 395 sal_Bool bReadOnly = sal_False; 396 static ::rtl::OUString sReadOnly = ::rtl::OUString::createFromAscii("IsReadOnly"); 397 ::ucbhelper::Content aFile(m_pConnection->getContent(),Reference< XCommandEnvironment >()); 398 aFile.getPropertyValue(sReadOnly) >>= bReadOnly; 399 400 return bReadOnly; 401 } 402 // ----------------------------------------------------------------------------- 403 sal_Bool ODbaseDatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw( ) 404 { 405 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw" ); 406 return sal_True; 407 } 408 // ----------------------------------------------------------------------------- 409 sal_Bool ODbaseDatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw( ) 410 { 411 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseDatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw" ); 412 return sal_True; 413 } 414 // ----------------------------------------------------------------------------- 415 416 417