User: vg      
Date: 05/03/10 08:32:13

Modified:
 /dba/dbaccess/source/core/api/
  tablecontainer.cxx

Log:
 INTEGRATION: CWS dba24 (1.58.50); FILE MERGED
 2005/02/10 16:53:11 fs 1.58.50.2: #i15113# introduce a data-source-setting 
which controls which TableTypeFilter to use to obtain *all* tables - IBM's 
Universe database doesn't like our default behaviour
 2005/02/09 08:12:58 oj 1.58.50.1: #i26950# remove the need for XNamed

File Changes:

Directory: /dba/dbaccess/source/core/api/
=========================================

File [changed]: tablecontainer.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/api/tablecontainer.cxx?r1=1.58&r2=1.59
Delta lines:  +69 -24
---------------------
--- tablecontainer.cxx  22 Oct 2004 08:57:55 -0000      1.58
+++ tablecontainer.cxx  10 Mar 2005 16:32:11 -0000      1.59
@@ -181,7 +181,7 @@
                                }
                                catch(Exception)
                                {
-                                       OSL_ENSURE(0,"Exception catched!");
+                    OSL_ENSURE( 0, "lcl_isPropertySetDefaulted: Exception 
caught!" );
                                }
                        }
                        // the code below doesn't function -> I don't kow why
@@ -300,13 +300,13 @@
 // -------------------------------------------------------------------------
 }
 // -------------------------------------------------------------------------
-Reference< XNamed > OTableContainer::createObject(const ::rtl::OUString& 
_rName)
+connectivity::sdbcx::ObjectType OTableContainer::createObject(const 
::rtl::OUString& _rName)
 {
        Reference<XColumnsSupplier > xSup;
        if(m_xMasterContainer.is() && m_xMasterContainer->hasByName(_rName))
                xSup.set(m_xMasterContainer->getByName(_rName),UNO_QUERY);
 
-       Reference< XNamed > xRet;
+       connectivity::sdbcx::ObjectType xRet;
        if ( m_xMetaData.is() )
        {
                Reference<XPropertySet> xTableDefinition;
@@ -332,13 +332,8 @@
                        if(sCatalog.getLength())
                                aCatalog <<= sCatalog;
                        ::rtl::OUString sType,sDescription;
-                       Sequence< ::rtl::OUString> aTypeFilter(3);
-                       static const ::rtl::OUString sAll = 
::rtl::OUString::createFromAscii("%");
-                       static const ::rtl::OUString 
s_sTableTypeView(RTL_CONSTASCII_USTRINGPARAM("VIEW"));
-                       static const ::rtl::OUString 
s_sTableTypeTable(RTL_CONSTASCII_USTRINGPARAM("TABLE"));
-                       aTypeFilter[0] = s_sTableTypeView;
-                       aTypeFilter[1] = s_sTableTypeTable;
-                       aTypeFilter[2] = sAll;  // just to be sure to include 
anything else ....
+                       Sequence< ::rtl::OUString> aTypeFilter;
+            getAllTableTypeFilter( aTypeFilter );
 
                        Reference< XResultSet > xRes =  m_xMetaData.is() ? 
m_xMetaData->getTables(aCatalog,sSchema,sTable,aTypeFilter) : Reference< 
XResultSet >();
                        if(xRes.is() && xRes->next())
@@ -441,10 +436,9 @@
        m_bInAppend = sal_False;
        Reference<XPropertySet> xTableDefinition;
        Reference<XNameAccess> xColumnDefinitions;
-       Reference< XNamed > xName(descriptor,UNO_QUERY);
-       if ( xName.is() )
+       if ( descriptor.is() )
        {
-               
lcl_createDefintionObject(xName->getName(),m_xTableDefinitions,xTableDefinition,xColumnDefinitions,sal_False);
+               
lcl_createDefintionObject(getNameForObject(descriptor),m_xTableDefinitions,xTableDefinition,xColumnDefinitions,sal_False);
                Reference<XColumnsSupplier> xSup(descriptor,UNO_QUERY);
                Reference<XDataDescriptorFactory> 
xFac(xColumnDefinitions,UNO_QUERY);
                Reference<XAppend> xAppend(xColumnDefinitions,UNO_QUERY);
@@ -562,7 +556,7 @@
        {
                if(!m_xMasterContainer.is() || 
m_xMasterContainer->hasByName(sName))
                {
-                       Reference<XNamed> xName = createObject(sName);
+                       ObjectType xName = createObject(sName);
                        insertElement(sName,xName);
                        // and notify our listeners
                        ContainerEvent aEvent(static_cast<XContainer*>(this), 
makeAny(sName), makeAny(xName), Any());
@@ -605,21 +599,15 @@
 
 Sequence< ::rtl::OUString > OTableContainer::getTableTypeFilter(const 
Sequence< ::rtl::OUString >& _rTableTypeFilter) const
 {
-       static const ::rtl::OUString sAll = 
::rtl::OUString::createFromAscii("%");
        Sequence< ::rtl::OUString > sTableTypes;
-       if(_rTableTypeFilter.getLength() == 0)
+       if ( _rTableTypeFilter.getLength() == 0 )
        {
-               // we want all catalogues, all schemas, all tables
-               sTableTypes.realloc(3);
-       
-               static const ::rtl::OUString 
s_sTableTypeView(RTL_CONSTASCII_USTRINGPARAM("VIEW"));
-               static const ::rtl::OUString 
s_sTableTypeTable(RTL_CONSTASCII_USTRINGPARAM("TABLE"));
-               sTableTypes[0] = s_sTableTypeView;
-               sTableTypes[1] = s_sTableTypeTable;
-               sTableTypes[2] = sAll;  // just to be sure to include anything 
else ....
+        getAllTableTypeFilter( sTableTypes );
        }
        else
+    {
                sTableTypes = _rTableTypeFilter;
+    }
        return sTableTypes;
 }
 // 
-----------------------------------------------------------------------------
@@ -635,5 +623,62 @@
 {
        // nothing to do here
 }
+
+// 
-----------------------------------------------------------------------------
+// two ways to obtain all tables from XDatabaseMetaData::getTables, via 
passing a particular
+// table type filter:
+// adhere to the standard, which requests to pass a NULL table type filter, if
+// you want to retrieve all tables
+#define FILTER_MODE_STANDARD 0
+// only pass %, which is not allowed by the standard, but understood by some 
drivers
+#define FILTER_MODE_WILDCARD 1
+// only pass TABLE and VIEW
+#define FILTER_MODE_FIXED    2
+// do the thing which showed to be the safest way, understood by nearly all
+// drivers, even the ones which do not understand the standard
+#define FILTER_MODE_MIX_ALL  3
+
+void OTableContainer::getAllTableTypeFilter( Sequence< ::rtl::OUString >& /* 
[out] */ _rFilter ) const
+{
+    sal_Int32 nFilterMode = FILTER_MODE_MIX_ALL;
+        // for compatibility reasons, this is the default: we used this way 
before we
+        // introduced the TableTypeFilterMode setting
+
+    // obtain the data source we belong to, and the TableTypeFilterMode setting
+    Any aFilterModeSetting;
+    if ( getDataSourceSetting( getDataSource( (Reference< XInterface 
>)m_rParent ), "TableTypeFilterMode", aFilterModeSetting ) )
+    {
+        OSL_VERIFY( aFilterModeSetting >>= nFilterMode );
+    }
+
+    const ::rtl::OUString sAll( RTL_CONSTASCII_USTRINGPARAM( "%" ) );
+       const ::rtl::OUString sView( RTL_CONSTASCII_USTRINGPARAM( "VIEW" ) );
+       const ::rtl::OUString sTable( RTL_CONSTASCII_USTRINGPARAM( "TABLE" ) );
+
+    switch ( nFilterMode )
+    {
+    default:
+        OSL_ENSURE( sal_False, "OTableContainer::getAllTableTypeFilter: 
unknown TableTypeFilterMode!" );
+    case FILTER_MODE_MIX_ALL:
+        _rFilter.realloc( 3 );
+        _rFilter[0] = sView;
+        _rFilter[1] = sTable;
+        _rFilter[2] = sAll;
+        break;
+    case FILTER_MODE_FIXED:
+        _rFilter.realloc( 2 );
+        _rFilter[0] = sView;
+        _rFilter[1] = sTable;
+        break;
+    case FILTER_MODE_WILDCARD:
+        _rFilter.realloc( 1 );
+        _rFilter[0] = sAll;
+        break;
+    case FILTER_MODE_STANDARD:
+        _rFilter.realloc( 0 );
+        break;
+    }
+}
+
 // 
-----------------------------------------------------------------------------
 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to