[mapguide-commits] r9006 - trunk/MgDev/Web/src/mapviewernet

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Jul 27 06:54:52 PDT 2016


Author: jng
Date: 2016-07-27 06:54:52 -0700 (Wed, 27 Jul 2016)
New Revision: 9006

Modified:
   trunk/MgDev/Web/src/mapviewernet/buffer.aspx
   trunk/MgDev/Web/src/mapviewernet/common.aspx
   trunk/MgDev/Web/src/mapviewernet/search.aspx
   trunk/MgDev/Web/src/mapviewernet/selectwithin.aspx
Log:
#2732: Use explicit property lists where MgFeatureQueryOptions is used.

This is to ensure that a "select * from featureclass" query from relational FDO providers will have its column list bounded to what is recognized in the class definition returned by the provider. Some providers are known to produce "select * from table" queries that "leak" out column types that the provider does not know how to process. Using an explicit property list from its class definition will allow us to avoid such issues.

This is for the ASP.net implementation of the AJAX viewer

Modified: trunk/MgDev/Web/src/mapviewernet/buffer.aspx
===================================================================
--- trunk/MgDev/Web/src/mapviewernet/buffer.aspx	2016-07-27 13:46:08 UTC (rev 9005)
+++ trunk/MgDev/Web/src/mapviewernet/buffer.aspx	2016-07-27 13:54:52 UTC (rev 9006)
@@ -254,7 +254,8 @@
             if (filter == null || filter.Length == 0)
                 continue;
 
-            MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+            MgClassDefinition clsDef = selLayer.GetClassDefinition();
+            MgFeatureQueryOptions query = BuildFeatureQueryOptions(clsDef);
             query.SetFilter(filter);
 
             MgResourceIdentifier featureSource = new MgResourceIdentifier(selLayer.GetFeatureSourceId());

Modified: trunk/MgDev/Web/src/mapviewernet/common.aspx
===================================================================
--- trunk/MgDev/Web/src/mapviewernet/common.aspx	2016-07-27 13:46:08 UTC (rev 9005)
+++ trunk/MgDev/Web/src/mapviewernet/common.aspx	2016-07-27 13:54:52 UTC (rev 9006)
@@ -292,4 +292,54 @@
     return validColorString;
 }
 
+MgFeatureQueryOptions BuildFeatureQueryOptions(MgClassDefinition classDef)
+{
+    MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+    String geomPropName = classDef.GetDefaultGeometryPropertyName();
+    MgPropertyDefinitionCollection propertyList = classDef.GetProperties();
+    for (int i = 0; i < propertyList.GetCount(); i++)
+    {
+        MgPropertyDefinition propertyDef = propertyList.GetItem(i);
+        String property = propertyDef.GetName();
+
+        if ((property != geomPropName) && (propertyDef.GetPropertyType() == MgFeaturePropertyType.DataProperty)) 
+        {
+            MgDataPropertyDefinition dp = (MgDataPropertyDefinition)propertyDef;
+            int propertyType = dp.GetDataType();
+            switch (propertyType) {
+                case MgPropertyType.Boolean:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Byte:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.DateTime:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Single:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Double:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int16:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int32:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int64:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.String:
+                    query.AddFeatureProperty(property);
+                    break;
+            }
+        } else if (property == geomPropName) { 
+            query.AddFeatureProperty(property);
+        } 
+    }
+    return query;
+}
+
 </script>

Modified: trunk/MgDev/Web/src/mapviewernet/search.aspx
===================================================================
--- trunk/MgDev/Web/src/mapviewernet/search.aspx	2016-07-27 13:46:08 UTC (rev 9005)
+++ trunk/MgDev/Web/src/mapviewernet/search.aspx	2016-07-27 13:54:52 UTC (rev 9006)
@@ -103,7 +103,8 @@
             bool displayAll = (resProps.Count == 0);
 
             //query the features
-            MgFeatureQueryOptions opts = new MgFeatureQueryOptions();
+            MgClassDefinition clsDef = layer.GetClassDefinition();
+            MgFeatureQueryOptions opts = BuildFeatureQueryOptions(clsDef);
             opts.SetFilter(filter);
             String featureClassName = layer.GetFeatureClassName();
             features = layer.SelectFeatures(opts);

Modified: trunk/MgDev/Web/src/mapviewernet/selectwithin.aspx
===================================================================
--- trunk/MgDev/Web/src/mapviewernet/selectwithin.aspx	2016-07-27 13:46:08 UTC (rev 9005)
+++ trunk/MgDev/Web/src/mapviewernet/selectwithin.aspx	2016-07-27 13:54:52 UTC (rev 9006)
@@ -113,7 +113,8 @@
         MgLayer layer = (MgLayer) selLayers.GetItem(i);
         String filter = sel.GenerateFilter(layer, layer.GetFeatureClassName());
 
-        MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+        MgClassDefinition clsDef = layer.GetClassDefinition();
+        MgFeatureQueryOptions query = BuildFeatureQueryOptions(clsDef);
         query.SetFilter(filter);
         MgResourceIdentifier featureSource = new MgResourceIdentifier(layer.GetFeatureSourceId());
         MgFeatureReader features = featureSrvc.SelectFeatures(featureSource, layer.GetFeatureClassName(), query);



More information about the mapguide-commits mailing list