[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mapguide-commits
Subject:    [mapguide-commits] r6799 - branches/2.4/MgDev/Server/src/Services/Feature
From:       svn_mapguide () osgeo ! org
Date:       2012-06-21 15:00:23
Message-ID: 20120621150023.AB327390606 () trac ! osgeo ! org
[Download RAW message or body]

Author: jng
Date: 2012-06-21 08:00:23 -0700 (Thu, 21 Jun 2012)
New Revision: 6799

Modified:
   branches/2.4/MgDev/Server/src/Services/Feature/ServerSelectFeatures.cpp
Log:
The SQL Server implementation of the FDO Join APIs does not properly handle the \
select aggregate cases as I hoped. This submission disables the FDO join optimization \
for select aggregates for all providers except SQLite

Modified: branches/2.4/MgDev/Server/src/Services/Feature/ServerSelectFeatures.cpp
===================================================================
--- branches/2.4/MgDev/Server/src/Services/Feature/ServerSelectFeatures.cpp	2012-06-21 \
                14:59:13 UTC (rev 6798)
+++ branches/2.4/MgDev/Server/src/Services/Feature/ServerSelectFeatures.cpp	2012-06-21 \
15:00:23 UTC (rev 6799) @@ -99,6 +99,22 @@
     bool bFeatureCalculation = FindFeatureCalculation(resource, className);
     //Test for the FDO join optimization, because performance is **substantially** \
                better
     bool bSupportsFdoJoin = SupportsFdoJoin(resource, className, isSelectAggregate);
+
+    // HACK: Sorry, we have to do this for now. Only SQLite provider satisifes the \
original +    // FDO join optimization in both regular select and select aggregate \
modes +    //
+    // SQL Server has problems in aggregate mode. So we'll say the FDO join \
optimization is  +    // not supported when this is in aggregate mode. This means the \
join is handled by the +    // GWS query engine. SQL Server on SQL Server join will \
use the best algorithm (sort merge) +    // as both sides are sortable so we won't \
suffer too much of a performance penalty. +    if (isSelectAggregate)
+    {
+        MdfModel::FeatureSource* featureSource = m_featureSourceCacheItem->Get();
+        const MdfModel::MdfString& providerName = featureSource->GetProvider();
+        if (providerName.find(L"OSGeo.SQLite") == MdfString::npos) //NOXLATE
+            bSupportsFdoJoin = false;
+    }
+
 #ifdef DEBUG_FDO_JOIN
     STRING fsIdStr = resource->ToString();
     ACE_DEBUG((LM_INFO, ACE_TEXT("\n(%t) Testing Feature Source (%W, %W) for FDO \
join optimization"), fsIdStr.c_str(), className.c_str())); @@ -1769,7 +1785,7 @@
     if (NULL == (FdoClassDefinition*)classDef)
     {
         //TODO: Refine message if available
-        throw new MgClassNotFoundException(L"MgServerSelectFeatures.SelectFdoJoin", \
__LINE__, __WFILE__, NULL, L"", NULL); +        throw new \
MgClassNotFoundException(L"MgServerSelectFeatures.IsFunctionOnPrimaryProperty", \
__LINE__, __WFILE__, NULL, L"", NULL);  }
 
     FdoPtr<FdoPropertyDefinitionCollection> properties = classDef->GetProperties();
@@ -1843,7 +1859,7 @@
         if (NULL == (FdoClassDefinition*)classDef)
         {
             //TODO: Refine message if available
-            throw new \
MgClassNotFoundException(L"MgServerSelectFeatures.SelectFdoJoin", __LINE__, \
__WFILE__, NULL, L"", NULL); +            throw new \
MgClassNotFoundException(L"MgServerSelectFeatures.FilterContainsSecondaryProperties", \
__LINE__, __WFILE__, NULL, L"", NULL);  }
 
         FdoPtr<FdoPropertyDefinitionCollection> propDefs = \
classDef->GetProperties(); @@ -2162,7 +2178,7 @@
     if (NULL == (FdoClassDefinition*)classDef)
     {
         //TODO: Refine message if available
-        throw new MgClassNotFoundException(L"MgServerSelectFeatures.SelectFdoJoin", \
__LINE__, __WFILE__, NULL, L"", NULL); +        throw new \
MgClassNotFoundException(L"MgServerSelectFeatures.ApplyClassProperties", __LINE__, \
__WFILE__, NULL, L"", NULL);  }
 
     FdoPtr<FdoIdentifierCollection> propNames = m_command->GetPropertyNames();

_______________________________________________
mapguide-commits mailing list
mapguide-commits@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic