LibreOffice Module connectivity (master) 1
FDatabaseMetaData.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <config_fuzzers.h>
21
24#include <com/sun/star/sdbc/ResultSetType.hpp>
25#include <com/sun/star/ucb/UniversalContentBroker.hpp>
26#include <com/sun/star/ucb/SortedDynamicResultSetFactory.hpp>
27#include <tools/urlobj.hxx>
28#include <sal/log.hxx>
29#include <file/FDriver.hxx>
30#include <file/FTable.hxx>
34#include <ucbhelper/content.hxx>
35
36using namespace com::sun::star::ucb;
37using namespace connectivity::file;
38using namespace connectivity;
39using namespace com::sun::star::uno;
40using namespace com::sun::star::lang;
41using namespace com::sun::star::beans;
42using namespace com::sun::star::sdbc;
43using namespace com::sun::star::sdbcx;
44using namespace com::sun::star::container;
45
46ODatabaseMetaData::ODatabaseMetaData(OConnection* _pCon) : ::connectivity::ODatabaseMetaDataBase(_pCon,_pCon->getConnectionInfo())
47 ,m_pConnection(_pCon)
48{
49}
50
52{
53}
54
56{
58}
59
61{
62 return OUString();
63}
64
66 const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/,
67 const OUString& /*columnNamePattern*/ )
68{
69 SAL_WARN("connectivity.drivers", "ODatabaseMetaData::getColumns() should be overridden!");
71}
72
73
74namespace
75{
76#if !ENABLE_FUZZERS
77 sal_Int16 isCaseSensitiveParentFolder( const OUString& _rFolderOrDoc, std::u16string_view _rDocName )
78 {
79 sal_Int16 nIsCS = 1;
80 try
81 {
82 // first get the real content for the URL
83 INetURLObject aContentURL( _rFolderOrDoc );
84 ::ucbhelper::Content aContent1;
85 {
87 if ( aFolderOrDoc.isDocument() )
88 aContent1 = aFolderOrDoc;
89 else
90 {
91 aContentURL = INetURLObject( _rFolderOrDoc, INetURLObject::EncodeMechanism::WasEncoded );
92 aContentURL.Append( _rDocName );
94 }
95 }
96
97 // get two extensions which differ by case only
98 OUString sExtension1(aContentURL.getExtension());
99 OUString sExtension2(sExtension1.toAsciiLowerCase());
100 if (sExtension2 == sExtension1)
101 {
102 // the extension was already in lower case
103 sExtension2 = sExtension2.toAsciiUpperCase();
104 }
105
106 // the complete URL for the second extension
107 INetURLObject aURL2( aContentURL );
108 if (!sExtension2.isEmpty())
109 aURL2.SetExtension( sExtension2 );
110 if ( aURL2.GetMainURL(INetURLObject::DecodeMechanism::NONE) == aContentURL.GetMainURL(INetURLObject::DecodeMechanism::NONE) )
111 return -1;
112
113 // the second context
114 bool bCanAccess = false;
115 ::ucbhelper::Content aContent2;
116 try
117 {
119 bCanAccess = aContent2.isDocument();
120 }
121 catch( const Exception& )
122 {
123 }
124
125 if ( bCanAccess )
126 {
127 // here we have two contents whose URLs differ by case only.
128 // Now let's check if both really refer to the same object...
129 Reference< XContent > xContent1 = aContent1.get();
130 Reference< XContent > xContent2 = aContent2.get();
131 OSL_ENSURE( xContent1.is() && xContent2.is(), "isCaseSensitiveParentFolder: invalid content interfaces!" );
132 if ( xContent1.is() && xContent2.is() )
133 {
134 Reference< XContentIdentifier > xID1 = xContent1->getIdentifier();
135 Reference< XContentIdentifier > xID2 = xContent2->getIdentifier();
136 OSL_ENSURE( xID1.is() && xID2.is(), "isCaseSensitiveParentFolder: invalid ID interfaces!" );
137 if ( xID1.is() && xID2.is()
138 && ( UniversalContentBroker::create(
140 compareContentIds( xID1, xID2 ) == 0 ) )
141 {
142 // finally, we know that the folder is not case-sensitive...
143 nIsCS = 0;
144 }
145 }
146 }
147 }
148 catch( const Exception& )
149 {
150 TOOLS_WARN_EXCEPTION( "connectivity.drivers", "isCaseSensitiveParentFolder" );
151 }
152
153 return nIsCS;
154 }
155#endif
156}
157
158
160 const Any& /*catalog*/, const OUString& /*schemaPattern*/,
161 const OUString& tableNamePattern, const Sequence< OUString >& types )
162{
163 ::osl::MutexGuard aGuard( m_aMutex );
164
166
167 // check if any type is given
168 // when no types are given then we have to return all tables e.g. TABLE
169
170 static constexpr OUStringLiteral aTable = u"TABLE";
171
172 bool bTableFound = true;
173 sal_Int32 nLength = types.getLength();
174 if(nLength)
175 {
176 bTableFound = false;
177
178 const OUString* pBegin = types.getConstArray();
179 const OUString* pEnd = pBegin + nLength;
180 for(;pBegin != pEnd;++pBegin)
181 {
182 if(*pBegin == aTable)
183 {
184 bTableFound = true;
185 break;
186 }
187 }
188 }
189 if(!bTableFound)
190 return pResult;
191
194 SortedDynamicResultSetFactory::create( m_pConnection->getDriver()->getComponentContext() );
195
196 Sequence< NumberedSortingInfo > aSortInfo( 1 );
197 NumberedSortingInfo* pInfo = aSortInfo.getArray();
198 pInfo[ 0 ].ColumnIndex = 1;
199 pInfo[ 0 ].Ascending = true;
200
202 Reference< XDynamicResultSet > xDynamicResultSet = xSRSFac->createSortedDynamicResultSet( xContent, aSortInfo, xFactory );
203 Reference<XResultSet> xResultSet = xDynamicResultSet->getStaticResultSet();
204
205 Reference<XRow> xRow(xResultSet,UNO_QUERY);
206
207 OUString aFilenameExtension = m_pConnection->getExtension();
208 OUString sThisContentExtension;
210 // scan the directory for tables
211 OUString aName;
213 xResultSet->beforeFirst();
214
215 bool bKnowCaseSensitivity = false;
216 bool bCaseSensitiveDir = true;
217 bool bCheckEnabled = m_pConnection->isCheckEnabled();
218
219 while(xResultSet->next())
220 {
221 aName = xRow->getString(1);
222 aURL.SetSmartProtocol(INetProtocol::File);
223 OUString sUrl = m_pConnection->getURL() + "/" + aName;
224 aURL.SetSmartURL( sUrl );
225 sThisContentExtension = aURL.getExtension();
226
227 ODatabaseMetaDataResultSet::ORow aRow { nullptr, nullptr, nullptr };
228 aRow.reserve(6);
229 bool bNewRow = false;
230
231 if ( !bKnowCaseSensitivity )
232 {
233 bKnowCaseSensitivity = true;
234#if ENABLE_FUZZERS
235 sal_Int16 nCase = 1;
236#else
237 sal_Int16 nCase = isCaseSensitiveParentFolder( m_pConnection->getURL(), aURL.getName() );
238#endif
239 switch( nCase )
240 {
241 case 1:
242 bCaseSensitiveDir = true;
243 break;
244 case -1:
245 bKnowCaseSensitivity = false;
246 [[fallthrough]];
247 case 0:
248 bCaseSensitiveDir = false;
249 }
250 if ( bKnowCaseSensitivity )
251 {
253 if ( !bCaseSensitiveDir )
254 {
255 aFilenameExtension = aFilenameExtension.toAsciiLowerCase();
256 }
257 }
258 }
259
260 if (!aFilenameExtension.isEmpty())
261 {
262 if ( !bCaseSensitiveDir )
263 {
264 sThisContentExtension = sThisContentExtension.toAsciiLowerCase();
265 }
266
267 if ( sThisContentExtension == aFilenameExtension )
268 {
269 aName = aName.copy(0, (aName.getLength()-(aFilenameExtension.getLength()+1)));
270 sal_Unicode nChar = aName.toChar();
271 if ( match(tableNamePattern,aName,'\0') && ( !bCheckEnabled || (nChar < '0' || nChar > '9')) )
272 {
273 aRow.push_back(new ORowSetValueDecorator(aName));
274 bNewRow = true;
275 }
276 }
277 }
278 else // no extension, filter myself
279 {
280 for (;;)
281 {
282 if (aURL.getExtension().isEmpty())
283 {
284 sal_Unicode nChar = aURL.getBase()[0];
285 if( match(tableNamePattern,aURL.getBase(),'\0') && ( !bCheckEnabled || nChar < '0' || nChar > '9' ) )
286 {
287 aRow.push_back(new ORowSetValueDecorator(aURL.getBase()));
288 bNewRow = true;
289 }
290 break;
291 }
292 if ( !xResultSet->next() )
293 {
294 break;
295 }
296 aName = xRow->getString(1);
297 aURL.SetSmartURL(aName);
298 }
299 }
300 if(bNewRow)
301 {
302 aRow.push_back(new ORowSetValueDecorator(OUString(aTable)));
304
305 aRows.push_back(aRow);
306 }
307 }
308
309 pResult->setRows(std::move(aRows));
310
311 return pResult;
312}
313
315{
316 return 0;
317}
318
320{
321 return 0;
322}
323
325{
326 return 0;
327}
328
330{
331 return SAL_MAX_INT32;
332}
333
335{
336 return 0;
337}
338
340{
341 return 0;
342}
343
345{
346 return 0;
347}
348
350{
351 return 0;
352}
353
355{
356 return 0;
357}
358
360{
361 return 0;
362}
363
365{
366 return 0;
367}
368
370{
371 return 1;
372}
373
375 const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& tableNamePattern )
376{
377 ::osl::MutexGuard aGuard( m_aMutex );
378
381
383 if( xTabSup.is())
384 {
385 Reference< XNameAccess> xNames = xTabSup->getTables();
386 Sequence< OUString > aNames = xNames->getElementNames();
387 const OUString* pBegin = aNames.getConstArray();
388 const OUString* pEnd = pBegin + aNames.getLength();
389 for(;pBegin != pEnd;++pBegin)
390 {
391 if(match(tableNamePattern,*pBegin,'\0'))
392 {
394
395 aRow[2] = new ORowSetValueDecorator(*pBegin);
397 aRow[7] = new ORowSetValueDecorator(OUString("NO"));
398 aRows.push_back(aRow);
399
401 xNames->getByName(*pBegin), css::uno::UNO_QUERY);
402 if(xTable.is())
403 {
404 auto pTable = dynamic_cast<OFileTable*>(xTable.get());
405 if(pTable && !pTable->isReadOnly())
406 {
408 aRows.push_back(aRow);
410 {
412 aRows.push_back(aRow);
413 }
415 aRows.push_back(aRow);
417 aRows.push_back(aRow);
419 aRows.push_back(aRow);
421 aRows.push_back(aRow);
423 aRows.push_back(aRow);
424 }
425 }
426 }
427 }
428 }
429
430 pResult->setRows(std::move(aRows));
431 return pResult;
432}
433
435{
436 return true;
437}
438
440{
441 return false;
442}
443
445{
446 return false;
447}
448
450{
451 return false;
452}
453
455{
456 return false;
457}
458
460{
461 return false;
462}
463
465{
466 return false;
467}
468
470{
471 return false;
472}
473
475{
476 return false;
477}
478
480{
481 return 0;
482}
483
485{
486 return false;
487}
488
490{
491 return OUString();
492}
493
495{
496 return "\"";
497}
498
500{
501 return OUString();
502}
503
505{
506 return true;
507}
508
510{
511 return true;
512}
513
515{
516 return true;
517}
518
520{
521 return true;
522}
523
525{
526 return false;
527}
528
530{
531 return false;
532}
533
535{
536 return false;
537}
538
540{
541 return false;
542}
543
545{
546 return false;
547}
548
550{
551 return false;
552}
553
555{
556 return false;
557}
558
560{
561 return false;
562}
563
565{
566 return false;
567}
568
570{
571 return false;
572}
573
575{
576 return false;
577}
578
580{
581 return false;
582}
583
585{
586 return false;
587}
588
590{
591 return false;
592}
593
595{
596 return false;
597}
598
600{
601 return false;
602}
603
605{
606 return false;
607}
608
610{
611 return false;
612}
613
615{
616 return false;
617}
618
620{
622 static ODatabaseMetaDataResultSet::ORows aRows = []()
623 {
625 aTmp.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } );
626 return aTmp;
627 }();
628 pResult->setRows(std::move(aRows));
629 return pResult;
630}
631
633{
634 return 0;
635}
636
638{
639 return 0;
640}
641
643{
644 return 0;
645}
646
648{
649 return false;
650}
651
653{
654 return false;
655}
656
658{
659 return false;
660}
661
663{
664 return false;
665}
666
668{
669 return true;
670}
671
673{
674 return true;
675}
676
678{
679 return true;
680}
681
683{
684 return true;
685}
686
688{
689 return false;
690}
691
693{
694 return true;
695}
696
698{
699 return true;
700}
701
703{
704 return true;
705}
706
707sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert( sal_Int32 /*fromType*/, sal_Int32 /*toType*/ )
708{
709 return false;
710}
711
713{
714 return false;
715}
716
718{
719 return false;
720}
721
723{
724 return false;
725}
726
728{
729 return false;
730}
731
733{
734 return false;
735}
736
738{
739 return false;
740}
741
743{
744 return false;
745}
746
748{
749 return true;
750}
751
753{
754 return false;
755}
756
758{
759 return false;
760}
761
763{
764 return true;
765}
766
768{
769 return false;
770}
771
773{
774 return false;
775}
776
778{
779 return true;
780}
781
783{
784 return false;
785}
786
788{
789 return true;
790}
791
793{
794 return false;
795}
796
798{
799 return false;
800}
801
803{
804 return false;
805}
806
808{
809 return false;
810}
811
813{
814 return false;
815}
816
818{
819 return false;
820}
821
823{
824 return false;
825}
826
828{
829 return false;
830}
831
833{
834 return false;
835}
836
838{
839 return false;
840}
841
842OUString SAL_CALL ODatabaseMetaData::getURL( )
843{
844 return "sdbc:file:";
845}
846
848{
849 return OUString();
850}
851
853{
854 return OUString();
855}
856
858{
859 return OUString::number(1);
860}
861
863{
864 return OUString::number(0);
865}
866
868{
869 return OUString();
870}
871
873{
874 return OUString();
875}
876
878{
879 return OUString();
880}
881
883{
884 return 0;
885}
886
888{
889 return 0;
890}
891
893{
894 return 0;
895}
896
898{
899 return OUString();
900}
901
903{
904 return OUString();
905}
906
908{
909 return "UCASE,LCASE,ASCII,LENGTH,OCTET_LENGTH,CHAR_LENGTH,CHARACTER_LENGTH,CHAR,CONCAT,LOCATE,SUBSTRING,LTRIM,RTRIM,SPACE,REPLACE,REPEAT,INSERT,LEFT,RIGHT";
910}
911
913{
914 return "DAYOFWEEK,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,CURDATE,CURTIME,NOW";
915}
916
918{
919 return OUString();
920}
921
923{
924 return "ABS,SIGN,MOD,FLOOR,CEILING,ROUND,EXP,LN,LOG,LOG10,POWER,SQRT,PI,COS,SIN,TAN,ACOS,ASIN,ATAN,ATAN2,DEGREES,RADIANS";
925}
926
928{
929 return false;
930}
931
933{
934 return false;
935}
936
938{
939 return true;
940}
941
943{
944 return false;
945}
946
948{
949 return false;
950}
951
953{
954 return 0;
955}
956
958{
959 return 0;
960}
961
963{
964 return 0;
965}
966
968{
969 return 0;
970}
971
973{
974 switch(setType)
975 {
976 case ResultSetType::FORWARD_ONLY:
977 return true;
978 case ResultSetType::SCROLL_INSENSITIVE:
979 case ResultSetType::SCROLL_SENSITIVE:
980 break;
981 }
982 return false;
983}
984
985sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 /*concurrency*/ )
986{
987 switch(setType)
988 {
989 case ResultSetType::FORWARD_ONLY:
990 return true;
991 case ResultSetType::SCROLL_INSENSITIVE:
992 case ResultSetType::SCROLL_SENSITIVE:
993 break;
994 }
995 return false;
996}
997
998sal_Bool SAL_CALL ODatabaseMetaData::ownUpdatesAreVisible( sal_Int32 /*setType*/ )
999{
1000 return true;
1001}
1002
1003sal_Bool SAL_CALL ODatabaseMetaData::ownDeletesAreVisible( sal_Int32 /*setType*/ )
1004{
1005 return true;
1006}
1007
1008sal_Bool SAL_CALL ODatabaseMetaData::ownInsertsAreVisible( sal_Int32 /*setType*/ )
1009{
1010 return true;
1011}
1012
1014{
1015 return true;
1016}
1017
1019{
1020 return true;
1021}
1022
1024{
1025 return true;
1026}
1027
1028sal_Bool SAL_CALL ODatabaseMetaData::updatesAreDetected( sal_Int32 /*setType*/ )
1029{
1030 return false;
1031}
1032
1033sal_Bool SAL_CALL ODatabaseMetaData::deletesAreDetected( sal_Int32 /*setType*/ )
1034{
1035 return false;
1036}
1037
1038sal_Bool SAL_CALL ODatabaseMetaData::insertsAreDetected( sal_Int32 /*setType*/ )
1039{
1040 return false;
1041}
1042
1044{
1045 return false;
1046}
1047
1048Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs( const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ )
1049{
1050 return nullptr;
1051}
1052
1053
1054/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static ORowSetValueDecoratorRef const & getEmptyValue()
return an empty ORowSetValueDecorator
static ORowSetValueDecoratorRef const & getAlterValue()
return an ORowSetValueDecorator with string ALTER as value
std::vector< ORowSetValueDecoratorRef > ORow
static ORowSetValueDecoratorRef const & getDeleteValue()
return an ORowSetValueDecorator with string DELETE as value
static ORowSetValueDecoratorRef const & getDropValue()
return an ORowSetValueDecorator with string DROP as value
@ eTableTypes
describes a result set as expected by XDatabaseMetaData::getTableTypes
@ eTypeInfo
describes a result set as expected by XDatabaseMetaData::getTypeInfo
@ eTables
describes a result set as expected by XDatabaseMetaData::getTables
@ eColumns
describes a result set as expected by XDatabaseMetaData::getColumns
@ eTablePrivileges
describes a result set as expected by XDatabaseMetaData::getTablePrivileges
static ORowSetValueDecoratorRef const & getInsertValue()
return an ORowSetValueDecorator with string INSERT as value
static ORowSetValueDecoratorRef const & getReadValue()
return an ORowSetValueDecorator with string READ as value
static ORowSetValueDecoratorRef const & getUpdateValue()
return an ORowSetValueDecorator with string UPDATE as value
static ORowSetValueDecoratorRef const & getCreateValue()
return an ORowSetValueDecorator with string CREATE as value
static ORowSetValueDecoratorRef const & getSelectValue()
return an ORowSetValueDecorator with string SELECT as value
const OUString & getURL() const
Definition: TConnection.hxx:62
ORowSetValueDecorator decorates an ORowSetValue so the value is "refcounted".
Definition: FValue.hxx:402
virtual css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog()
void setCaseSensitiveExtension(bool _bIsCS, GrantAccess)
css::uno::Reference< css::ucb::XDynamicResultSet > getDir() const
const OUString & getExtension() const
OFileDriver * getDriver() const
virtual sal_Bool SAL_CALL ownUpdatesAreVisible(sal_Int32 setType) override
virtual sal_Bool SAL_CALL supportsPositionedDelete() override
virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy() override
virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions() override
virtual sal_Bool SAL_CALL supportsLikeEscapeClause() override
virtual sal_Int32 SAL_CALL getMaxColumnsInIndex() override
virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly() override
virtual sal_Int32 SAL_CALL getMaxIndexLength() override
virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit() override
virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers() override
virtual sal_Int32 SAL_CALL getMaxCatalogNameLength() override
virtual sal_Int32 SAL_CALL getMaxTableNameLength() override
virtual sal_Bool SAL_CALL insertsAreDetected(sal_Int32 setType) override
virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers() override
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables(const css::uno::Any &catalog, const OUString &schemaPattern, const OUString &tableNamePattern, const css::uno::Sequence< OUString > &types) override
virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL() override
virtual OUString SAL_CALL getTimeDateFunctions() override
virtual sal_Bool SAL_CALL nullsAreSortedLow() override
virtual sal_Bool SAL_CALL supportsConvert(sal_Int32 fromType, sal_Int32 toType) override
virtual sal_Int32 SAL_CALL getMaxCursorNameLength() override
virtual OUString SAL_CALL getExtraNameCharacters() override
virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy() override
virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers() override
virtual sal_Int32 SAL_CALL getMaxUserNameLength() override
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes() override
virtual sal_Int32 SAL_CALL getMaxColumnsInTable() override
virtual sal_Bool SAL_CALL supportsMultipleTransactions() override
virtual sal_Bool SAL_CALL supportsResultSetConcurrency(sal_Int32 setType, sal_Int32 concurrency) override
virtual OUString impl_getCatalogSeparator_throw() override
virtual OUString impl_getIdentifierQuoteString_throw() override
virtual bool impl_isCatalogAtStart_throw() override
virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls() override
virtual sal_Int32 SAL_CALL getMaxColumnNameLength() override
virtual sal_Bool SAL_CALL supportsLimitedOuterJoins() override
virtual OUString SAL_CALL getSystemFunctions() override
virtual sal_Int32 SAL_CALL getMaxProcedureNameLength() override
virtual sal_Int32 SAL_CALL getMaxSchemaNameLength() override
virtual sal_Bool SAL_CALL othersDeletesAreVisible(sal_Int32 setType) override
virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit() override
virtual sal_Bool SAL_CALL isReadOnly() override
virtual sal_Bool SAL_CALL supportsGroupByUnrelated() override
virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel(sal_Int32 level) override
virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar() override
virtual sal_Int32 SAL_CALL getMaxCharLiteralLength() override
virtual sal_Bool SAL_CALL supportsPositionedUpdate() override
virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility() override
virtual sal_Bool SAL_CALL nullsAreSortedAtStart() override
virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers() override
virtual bool impl_supportsAlterTableWithAddColumn_throw() override
virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions() override
virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy() override
virtual sal_Bool SAL_CALL supportsFullOuterJoins() override
virtual sal_Bool SAL_CALL nullPlusNonNullIsNull() override
virtual sal_Bool SAL_CALL othersInsertsAreVisible(sal_Int32 setType) override
virtual sal_Bool SAL_CALL supportsCoreSQLGrammar() override
virtual sal_Bool SAL_CALL nullsAreSortedHigh() override
virtual sal_Bool SAL_CALL allProceduresAreCallable() override
virtual sal_Int32 SAL_CALL getMaxColumnsInSelect() override
virtual bool impl_supportsCatalogsInDataManipulation_throw() override
virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers() override
virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback() override
virtual sal_Int32 SAL_CALL getDriverMinorVersion() override
virtual OUString SAL_CALL getSchemaTerm() override
virtual sal_Bool SAL_CALL nullsAreSortedAtEnd() override
virtual bool impl_supportsMixedCaseQuotedIdentifiers_throw() override
virtual OUString SAL_CALL getDriverVersion() override
virtual sal_Bool SAL_CALL ownDeletesAreVisible(sal_Int32 setType) override
virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL() override
virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit() override
virtual sal_Int32 SAL_CALL getMaxStatementLength() override
virtual sal_Bool SAL_CALL supportsANSI92FullSQL() override
virtual sal_Bool SAL_CALL allTablesAreSelectable() override
virtual sal_Bool SAL_CALL supportsSelectForUpdate() override
virtual OUString SAL_CALL getURL() override
virtual sal_Bool SAL_CALL supportsResultSetType(sal_Int32 setType) override
virtual OUString SAL_CALL getCatalogTerm() override
virtual sal_Bool SAL_CALL supportsMultipleResultSets() override
virtual OUString SAL_CALL getUserName() override
virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation() override
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs(const css::uno::Any &catalog, const OUString &schemaPattern, const OUString &typeNamePattern, const css::uno::Sequence< sal_Int32 > &types) override
virtual OUString SAL_CALL getDatabaseProductVersion() override
virtual bool impl_supportsSchemasInTableDefinitions_throw() override
virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar() override
virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect() override
virtual OUString SAL_CALL getStringFunctions() override
virtual sal_Int32 SAL_CALL getDriverMajorVersion() override
virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs() override
virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength() override
virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback() override
virtual sal_Bool SAL_CALL supportsTypeConversion() override
virtual sal_Int32 SAL_CALL getMaxConnections() override
virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers() override
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges(const css::uno::Any &catalog, const OUString &schemaPattern, const OUString &tableNamePattern) override
virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions() override
virtual bool impl_storesMixedCaseQuotedIdentifiers_throw() override
virtual OUString SAL_CALL getSQLKeywords() override
virtual OUString SAL_CALL getDatabaseProductName() override
virtual bool impl_supportsCatalogsInTableDefinitions_throw() override
virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons() override
virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds() override
virtual sal_Int32 impl_getMaxTablesInSelect_throw() override
virtual sal_Bool SAL_CALL supportsUnionAll() override
virtual sal_Bool SAL_CALL supportsOrderByUnrelated() override
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns(const css::uno::Any &catalog, const OUString &schemaPattern, const OUString &tableNamePattern, const OUString &columnNamePattern) override
virtual sal_Bool SAL_CALL othersUpdatesAreVisible(sal_Int32 setType) override
virtual bool impl_supportsAlterTableWithDropColumn_throw() override
virtual sal_Bool SAL_CALL ownInsertsAreVisible(sal_Int32 setType) override
virtual sal_Bool SAL_CALL supportsSubqueriesInIns() override
virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions() override
virtual sal_Bool SAL_CALL usesLocalFilePerTable() override
virtual sal_Bool SAL_CALL supportsColumnAliasing() override
virtual sal_Bool SAL_CALL deletesAreDetected(sal_Int32 setType) override
virtual sal_Int32 SAL_CALL getMaxRowSize() override
virtual OUString SAL_CALL getProcedureTerm() override
virtual sal_Bool SAL_CALL supportsGroupBy() override
virtual bool impl_supportsSchemasInDataManipulation_throw() override
virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions() override
virtual sal_Bool SAL_CALL supportsBatchUpdates() override
virtual sal_Bool SAL_CALL supportsNonNullableColumns() override
virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames() override
virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries() override
virtual sal_Bool SAL_CALL supportsUnion() override
virtual OUString SAL_CALL getDriverName() override
virtual sal_Bool SAL_CALL supportsTableCorrelationNames() override
virtual sal_Bool SAL_CALL supportsStoredProcedures() override
virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls() override
virtual sal_Bool SAL_CALL supportsOuterJoins() override
virtual sal_Bool SAL_CALL updatesAreDetected(sal_Int32 setType) override
virtual sal_Int32 impl_getMaxStatements_throw() override
virtual sal_Bool SAL_CALL supportsSubqueriesInExists() override
virtual OUString SAL_CALL getNumericFunctions() override
virtual sal_Bool SAL_CALL usesLocalFiles() override
virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions() override
virtual OUString SAL_CALL getSearchStringEscape() override
virtual sal_Bool SAL_CALL supportsTransactions() override
virtual css::uno::Reference< css::sdbc::XResultSet > impl_getTypeInfo_throw() override
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
Definition: FDriver.hxx:66
mutable::osl::Mutex m_aMutex
css::uno::Reference< css::ucb::XContent > get() const
#define TOOLS_WARN_EXCEPTION(area, stream)
URL aURL
float u
Reference< XSingleServiceFactory > xFactory
OUString aName
#define SAL_WARN(area, stream)
Reference< XComponentContext > getProcessComponentContext()
bool match(const sal_Unicode *pWild, const sal_Unicode *pStr, const sal_Unicode cEscape)
Definition: CommonTools.cxx:51
#define SAL_MAX_INT32
unsigned char sal_Bool
sal_uInt16 sal_Unicode
sal_Int32 nLength