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

List:       fdo-commits
Subject:    [fdo-commits] r4846 - trunk/Providers/WFS/Src/Provider
From:       svn_fdo () osgeo ! org
Date:       2009-07-16 14:04:49
Message-ID: 20090716140449.E38D7E01B9C () lists ! osgeo ! org
[Download RAW message or body]

Author: brentrobinson
Date: 2009-07-16 10:04:48 -0400 (Thu, 16 Jul 2009)
New Revision: 4846

Modified:
   trunk/Providers/WFS/Src/Provider/FdoWfsCommandCapabilities.cpp
   trunk/Providers/WFS/Src/Provider/FdoWfsExpressionCapabilities.cpp
   trunk/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp
Log:
Ticket#540: Fixed linux compile error in FdoWfsSelectCommand.

Modified: trunk/Providers/WFS/Src/Provider/FdoWfsCommandCapabilities.cpp
===================================================================
--- trunk/Providers/WFS/Src/Provider/FdoWfsCommandCapabilities.cpp	2009-07-16 \
                13:47:26 UTC (rev 4845)
+++ trunk/Providers/WFS/Src/Provider/FdoWfsCommandCapabilities.cpp	2009-07-16 \
14:04:48 UTC (rev 4846) @@ -80,7 +80,7 @@
 /// <returns>Returns true if the feature provider supports select simple \
functions.</returns>   bool FdoWfsCommandCapabilities::SupportsSelectFunctions()
 {
-    return (false);
+    return (true);
 }
 
 /// <summary>Determines if Distinct can be used with SelectAggregates. This can be \
true only 

Modified: trunk/Providers/WFS/Src/Provider/FdoWfsExpressionCapabilities.cpp
===================================================================
--- trunk/Providers/WFS/Src/Provider/FdoWfsExpressionCapabilities.cpp	2009-07-16 \
                13:47:26 UTC (rev 4845)
+++ trunk/Providers/WFS/Src/Provider/FdoWfsExpressionCapabilities.cpp	2009-07-16 \
14:04:48 UTC (rev 4846) @@ -17,6 +17,11 @@
  */
 
 #include "stdafx.h"
+#include <FdoExpressionEngine.h>
+#include <Functions/Geometry/FdoFunctionX.h>
+#include <Functions/Geometry/FdoFunctionY.h>
+#include <Functions/Geometry/FdoFunctionZ.h>
+#include <Functions/Geometry/FdoFunctionM.h>
 
 FdoWfsExpressionCapabilities::FdoWfsExpressionCapabilities ()
 {
@@ -57,5 +62,24 @@
 	FdoPtr<FdoFunctionDefinition> wellKnownFunction = \
wellKnownFunctions->GetItem(FDO_FUNCTION_SPATIALEXTENTS);  \
ret->Add(wellKnownFunction);  
+    // Add function X to the list of supported function
+    FdoPtr<FdoExpressionEngineIFunction> funcX = FdoFunctionX::Create();
+    ret->Add(FdoPtr<FdoFunctionDefinition>(funcX->GetFunctionDefinition()));
+
+    // Add function Y to the list of supported function
+    FdoPtr<FdoExpressionEngineIFunction> funcY = FdoFunctionY::Create();
+    ret->Add(FdoPtr<FdoFunctionDefinition>(funcY->GetFunctionDefinition()));
+
+    // Add function Z to the list of supported function
+    FdoPtr<FdoExpressionEngineIFunction> funcZ = FdoFunctionZ::Create();
+    ret->Add(FdoPtr<FdoFunctionDefinition>(funcZ->GetFunctionDefinition()));
+
+    // Add function M to the list of supported function
+    FdoPtr<FdoExpressionEngineIFunction> funcM = FdoFunctionM::Create();
+    ret->Add(FdoPtr<FdoFunctionDefinition>(funcM->GetFunctionDefinition()));
+
+    //TODO: it would be possible to support all functions handled by the Expression \
Engine. +    //However, need modifications to FdoWfsSelectAggregatesCommand first.
+
     return (FDO_SAFE_ADDREF (ret.p));
 }

Modified: trunk/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp
===================================================================
--- trunk/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp	2009-07-16 13:47:26 UTC \
                (rev 4845)
+++ trunk/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp	2009-07-16 14:04:48 UTC \
(rev 4846) @@ -23,6 +23,9 @@
 #include "FdoWfsFeatureType.h"
 #include "FdoWfsServiceMetadata.h"
 #include "FdoWfsDelegate.h"
+#include <FdoExpressionEngine.h>
+#include <Util/FdoExpressionEngineUtilDataReader.h>
+#include <Util/FdoExpressionEngineUtilFeatureReader.h>
 
 #include <malloc.h>
 
@@ -216,18 +219,25 @@
         }
     }
 
+    bool bHasComputedProperties = false;
+
 	FdoPtr<FdoStringCollection> props = FdoStringCollection::Create();
 	if (mPropertiesToSelect != NULL) {
 		FdoInt32 count = mPropertiesToSelect->GetCount();
 		for (int i = 0; i < count; i++) {
 			FdoPtr<FdoIdentifier> identifier = mPropertiesToSelect->GetItem(i);
-			FdoStringP propName = identifier->GetName();
-			if (propName.Contains(FdoWfsGlobals::Dot)) {
-				FdoStringP propName1 = propName.Replace(FdoWfsGlobals::Dot, L".");
-				props->Add(propName1);
-			} else {
-				props->Add(propName);
-			}
+            if ( dynamic_cast<FdoComputedIdentifier*>(identifier.p) == NULL ) {
+			    FdoStringP propName = identifier->GetName();
+			    if (propName.Contains(FdoWfsGlobals::Dot)) {
+				    FdoStringP propName1 = propName.Replace(FdoWfsGlobals::Dot, L".");
+				    props->Add(propName1);
+			    } else {
+				    props->Add(propName);
+			    }
+            }
+            else {
+                bHasComputedProperties = true;
+            }
 		}
 	}
     if (sPropName.GetLength() != 0)
@@ -244,7 +254,16 @@
 
 	// yeah, all the parameters that WfsDeleget::GetFeature needs are ready
 	FdoPtr<FdoWfsDelegate> delegate = mConnection->GetWfsDelegate();
-	FdoPtr<FdoIFeatureReader> ret = delegate->GetFeature(schemas, mappings, \
targetNamespace, srsName, props, featureTypeName, mFilter, schemaFeatureName); \
+	FdoPtr<FdoIFeatureReader> ret = delegate->GetFeature( +        schemas, 
+        mappings, 
+        targetNamespace, 
+        srsName, 
+        bHasComputedProperties ? FdoPtr<FdoStringCollection>() : props, // Computed \
properties may reference other properties so retrieve all of them. +        \
featureTypeName,  +        mFilter, 
+        schemaFeatureName
+    );
 
 	FdoWfsFeatureReader* reader = dynamic_cast<FdoWfsFeatureReader *>(ret.p);
 	if (reader)
@@ -260,6 +279,20 @@
 		}
 	}
 
+    if ( bHasComputedProperties ) {
+        // WFS does not support computed properties in the select list so always \
need +        // to evaluate them using expression engine.
+
+        //TODO: Use Expression Engine to handle filters that reference functions not \
supported +        //by the WFS. Need to parse out function list from WFS \
capabilities first. +        ret =  new FdoExpressionEngineUtilFeatureReader(
+            clsdef,
+            ret, 
+            NULL,
+            mPropertiesToSelect,
+            NULL);
+    }
+
     return (FDO_SAFE_ADDREF (ret.p));
 }
 

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


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

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