[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