[Git][debian-gis-team/mapserver][upstream] New upstream version 7.2.0~beta2

Bas Couwenberg gitlab at salsa.debian.org
Wed Jun 13 18:12:35 BST 2018


Bas Couwenberg pushed to branch upstream at Debian GIS Project / mapserver


Commits:
36afb4bd by Bas Couwenberg at 2018-06-13T18:12:53+02:00
New upstream version 7.2.0~beta2
- - - - -


7 changed files:

- CMakeLists.txt
- HISTORY.TXT
- mapdraw.c
- mapmssql2008.c
- mapmvt.c
- mappostgis.c
- mapwcs20.c


Changes:

=====================================
CMakeLists.txt
=====================================
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@ include(CheckCSourceCompiles)
 set (MapServer_VERSION_MAJOR 7)
 set (MapServer_VERSION_MINOR 2)
 set (MapServer_VERSION_REVISION 0)
-set (MapServer_VERSION_SUFFIX "-beta1")
+set (MapServer_VERSION_SUFFIX "-beta2")
 
 set(TARGET_VERSION_MAJOR ${MapServer_VERSION_MAJOR})
 set(TARGET_VERSION_MINOR ${MapServer_VERSION_MINOR})


=====================================
HISTORY.TXT
=====================================
--- a/HISTORY.TXT
+++ b/HISTORY.TXT
@@ -12,6 +12,11 @@ For a complete change history, please see the Git log comments.  For more
 details about recent point releases, please see the online changelog at:
 http://mapserver.org/development/changelog/
 
+7.2.0-beta2 release (2018-6-13)
+
+- Update beta1 release notes to remove reference to PHP7 support
+- No other major changes, see detailed changelog for bug fixes
+
 7.2.0-beta1 release (2018-5-9)
 --------------------
 
@@ -29,8 +34,6 @@ http://mapserver.org/development/changelog/
 
 - Support C-style multi-line content types (#5362)
 
-- PHP 7 MapScript Support Through SWIG (RFC117)
-
 - Python 3.x support (#5561)
 
 - Support Vendor-Specific OGC FILTER parameter in WMS requests (RFC118)


=====================================
mapdraw.c
=====================================
--- a/mapdraw.c
+++ b/mapdraw.c
@@ -1683,14 +1683,29 @@ int pointLayerDrawShape(mapObj *map, imageObj *image, layerObj *layer, shapeObj 
 {
   int l, c = shape->classindex, j, i, s;
   pointObj *point;
+  int ret = MS_FAILURE;
 
 #ifdef USE_PROJ
   if (layer->project && layer->transform == MS_TRUE)
     msProjectShape(&layer->projection, &map->projection, shape);
 #endif
 
-  for (l = 0; l < layer->class[c]->numlabels; l++)
-    if (layer->class[c]->labels[l]->angle != 0) layer->class[c]->labels[l]->angle -= map->gt.rotation_angle; /* TODO: is this right???? */
+  // Only take into account map rotation if the label and style angles are
+  // non-zero.
+  if( map->gt.rotation_angle )
+  {
+    for (l = 0; l < layer->class[c]->numlabels; l++)
+    {
+        if( layer->class[c]->labels[l]->angle != 0 )
+            layer->class[c]->labels[l]->angle -= map->gt.rotation_angle;
+    }
+
+    for (s = 0; s < layer->class[c]->numstyles; s++)
+    {
+        if( layer->class[c]->styles[s]->angle != 0 )
+            layer->class[c]->styles[s]->angle -= map->gt.rotation_angle;
+    }
+  }
 
   for (j = 0; j < shape->numlines; j++) {
     for (i = 0; i < shape->line[j].numpoints; i++) {
@@ -1707,26 +1722,44 @@ int pointLayerDrawShape(mapObj *map, imageObj *image, layerObj *layer, shapeObj 
               layer->class[c]->styles[s]->minscaledenom,
               layer->class[c]->styles[s]->maxscaledenom))
             if(UNLIKELY(MS_FAILURE == msDrawMarkerSymbol(map, image, point, layer->class[c]->styles[s], layer->scalefactor))) {
-              return MS_FAILURE;
+              goto end;
             }
         }
       }
       if(MS_DRAW_LABELS(drawmode)) {
         if (layer->labelcache) {
-          if (msAddLabelGroup(map, image, layer, c, shape, point, -1) != MS_SUCCESS) return (MS_FAILURE);
+          if (msAddLabelGroup(map, image, layer, c, shape, point, -1) != MS_SUCCESS) goto end;
         } else {
           for (l = 0; l < layer->class[c]->numlabels; l++)
             if(msGetLabelStatus(map,layer,shape,layer->class[c]->labels[l]) == MS_ON) {
               char *annotext = msShapeGetLabelAnnotation(layer,shape,layer->class[c]->labels[l]);
               if(UNLIKELY(MS_FAILURE == msDrawLabel(map, image, *point, annotext, layer->class[c]->labels[l], layer->scalefactor))) {
-                return MS_FAILURE;
+                goto end;
               }
             }
         }
       }
     }
   }
-  return MS_SUCCESS;
+  ret = MS_SUCCESS;
+
+end:
+  if( map->gt.rotation_angle )
+  {
+    for (l = 0; l < layer->class[c]->numlabels; l++)
+    {
+        if( layer->class[c]->labels[l]->angle != 0 )
+            layer->class[c]->labels[l]->angle += map->gt.rotation_angle;
+    }
+
+    for (s = 0; s < layer->class[c]->numstyles; s++)
+    {
+        if( layer->class[c]->styles[s]->angle != 0 )
+            layer->class[c]->styles[s]->angle += map->gt.rotation_angle;
+    }
+  }
+
+  return ret;
 }
 
 int lineLayerDrawShape(mapObj *map, imageObj *image, layerObj *layer, shapeObj *shape,


=====================================
mapmssql2008.c
=====================================
--- a/mapmssql2008.c
+++ b/mapmssql2008.c
@@ -193,15 +193,15 @@ typedef struct msODBCconn_t {
 } msODBCconn;
 
 typedef struct ms_MSSQL2008_layer_info_t {
-  char        *sql;           /* sql query to send to DB */
-  long        row_num;        /* what row is the NEXT to be read (for random access) */
-  char    *geom_column; /* name of the actual geometry column parsed from the LAYER's DATA field */
-  char    *geom_column_type;  /* the type of the geometry column */
-  char    *geom_table;  /* the table name or sub-select decalred in the LAYER's DATA field */
-  char        *urid_name;     /* name of user-specified unique identifier or OID */
-  char        *user_srid;     /* zero length = calculate, non-zero means using this value! */
-  char    *index_name;  /* hopefully this isn't necessary - but if the optimizer ain't cuttin' it... */
-  char    *sort_spec;  /* the sort by specification which should be applied to the generated select statement */
+  char *sql;           /* sql query to send to DB */
+  long row_num;        /* what row is the NEXT to be read (for random access) */
+  char *geom_column; /* name of the actual geometry column parsed from the LAYER's DATA field */
+  char *geom_column_type;  /* the type of the geometry column */
+  char *geom_table;  /* the table name or sub-select decalred in the LAYER's DATA field */
+  char *urid_name;     /* name of user-specified unique identifier or OID */
+  char *user_srid;     /* zero length = calculate, non-zero means using this value! */
+  char *index_name;  /* hopefully this isn't necessary - but if the optimizer ain't cuttin' it... */
+  char *sort_spec;  /* the sort by specification which should be applied to the generated select statement */
   SQLSMALLINT *itemtypes; /* storing the sql field types for further reference */
 
   msODBCconn * conn;          /* Connection to db */
@@ -908,7 +908,8 @@ int msMSSQL2008LayerGetExtent(layerObj *layer, rectObj *extent)
 int msMSSQL2008LayerGetNumFeatures(layerObj *layer)
 {
     msMSSQL2008LayerInfo *layerinfo;
-    char query_string_temp[10000];       /* Should be big enough */
+    char *query = 0;
+    char result_data[256];
     SQLLEN retLen;
     SQLRETURN rc;
 
@@ -924,21 +925,28 @@ int msMSSQL2008LayerGetNumFeatures(layerObj *layer)
     }
 
     /* set up statement */
+    query = msStringConcatenate(query, "SELECT count(*) FROM ");
+    query = msStringConcatenate(query, layerinfo->geom_table);
+
+    /* adding attribute filter */
     if (layer->filter.native_string) {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT count(*) from %s WHERE (%s)", layerinfo->geom_table, layer->filter.native_string);
-    }
-    else if (msLayerGetProcessingKey(layer, "NATIVE_FILTER") == NULL) {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT count(*) from %s", layerinfo->geom_table);
+        query = msStringConcatenate(query, " WHERE (");
+        query = msStringConcatenate(query, layer->filter.native_string);
+        query = msStringConcatenate(query, ")");
     }
-    else {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT count(*) from %s WHERE (%s)", layerinfo->geom_table, msLayerGetProcessingKey(layer, "NATIVE_FILTER"));
+    else if (msLayerGetProcessingKey(layer, "NATIVE_FILTER") != NULL) {
+        query = msStringConcatenate(query, " WHERE (");
+        query = msStringConcatenate(query, msLayerGetProcessingKey(layer, "NATIVE_FILTER"));
+        query = msStringConcatenate(query, ")");
     }
 
-    if (!executeSQL(layerinfo->conn, query_string_temp)) {
-
+    if (!executeSQL(layerinfo->conn, query)) {
+        msFree(query);
         return -1;
     }
 
+    msFree(query);
+
     rc = SQLFetch(layerinfo->conn->hstmt);
 
     if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
@@ -949,37 +957,37 @@ int msMSSQL2008LayerGetNumFeatures(layerObj *layer)
         return -1;
     }
 
-    rc = SQLGetData(layerinfo->conn->hstmt, 1, SQL_C_CHAR, query_string_temp, sizeof(query_string_temp), &retLen);
+    rc = SQLGetData(layerinfo->conn->hstmt, 1, SQL_C_CHAR, result_data, sizeof(result_data), &retLen);
 
     if (rc == SQL_ERROR) {
         msSetError(MS_QUERYERR, "Failed to get feature count", "msMSSQL2008LayerGetNumFeatures()");
         return -1;
     }
 
-    query_string_temp[retLen] = 0;
+    result_data[retLen] = 0;
 
-    return atoi(query_string_temp);
+    return atoi(result_data);
 }
 
 /* Prepare and execute the SQL statement for this layer */
 static int prepare_database(layerObj *layer, rectObj rect, char **query_string)
 {
   msMSSQL2008LayerInfo *layerinfo;
-  char        *columns_wanted = 0;
-  char        *data_source = 0;
-  char        *f_table_name = 0;
-  char    *geom_table = 0;
+  char *query = 0;
+  char *data_source = 0;
+  char *f_table_name = 0;
+  char *geom_table = 0;
   /*
     "Geometry::STGeomFromText('POLYGON(())',)" + terminator = 40 chars
     Plus 10 formatted doubles (15 digits of precision, a decimal point, a space/comma delimiter each = 17 chars each)
     Plus SRID + comma - if SRID is a long...we'll be safe with 10 chars
   */
   char        box3d[40 + 10 * 22 + 11];
-  char        query_string_temp[10000];       /* Should be big enough */
   int         t;
 
   char        *pos_from, *pos_ftab, *pos_space, *pos_paren;
   rectObj     extent;
+  int hasFilter = MS_FALSE;
 
   layerinfo =  getMSSQL2008LayerInfo(layer);
 
@@ -1025,143 +1033,161 @@ static int prepare_database(layerObj *layer, rectObj rect, char **query_string)
     }
   }
 
-  if(layer->numitems == 0) {
-    char buffer[1000];
+  if (rect.minx == rect.maxx || rect.miny == rect.maxy) {
+      /* create point shape for rectangles with zero area */
+      sprintf(box3d, "%s::STGeomFromText('POINT(%.15g %.15g)',%s)", /* %s.STSrid)", */
+          layerinfo->geom_column_type, rect.minx, rect.miny, layerinfo->user_srid);
+  }
+  else {
+      sprintf(box3d, "%s::STGeomFromText('POLYGON((%.15g %.15g,%.15g %.15g,%.15g %.15g,%.15g %.15g,%.15g %.15g))',%s)", /* %s.STSrid)", */
+          layerinfo->geom_column_type,
+          rect.minx, rect.miny,
+          rect.maxx, rect.miny,
+          rect.maxx, rect.maxy,
+          rect.minx, rect.maxy,
+          rect.minx, rect.miny,
+          layerinfo->user_srid
+      );
+  }
 
-    if (layerinfo->geometry_format == MSSQLGEOMETRY_NATIVE)
-      snprintf(buffer, sizeof(buffer), "[%s],convert(varchar(36), [%s])", layerinfo->geom_column, layerinfo->urid_name);
-    else
-      snprintf(buffer, sizeof(buffer), "[%s].STAsBinary(),convert(varchar(36), [%s])", layerinfo->geom_column, layerinfo->urid_name);
+  /* substitute token '!BOX!' in geom_table with the box3d - do an unlimited # of subs */
+  /* to not undo the work here, we need to make sure that data_source is malloc'd here */
 
-    columns_wanted = msStrdup(buffer);
-  } else {
-    char buffer[10000] = "";
+  if (!strstr(geom_table, "!BOX!")) {
+      data_source = (char *)msSmallMalloc(strlen(geom_table) + 1);
+      strcpy(data_source, geom_table);
+  }
+  else {
+      char* result = NULL;
 
-    for(t = 0; t < layer->numitems; t++) {
-      if (layerinfo->itemtypes && (layerinfo->itemtypes[t] == SQL_BINARY || layerinfo->itemtypes[t] == SQL_VARBINARY)) {
-#ifdef USE_ICONV
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "convert(nvarchar(max), convert(varbinary(max),[%s]),2),", layer->items[t]);
-#else
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "convert(varchar(max), convert(varbinary(max),[%s]),2),", layer->items[t]);
-#endif
-      } else {
-#ifdef USE_ICONV
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "convert(nvarchar(max), [%s]),", layer->items[t]);
-#else
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "convert(varchar(max), [%s]),", layer->items[t]);
-#endif
-      }
-    }
+      while (strstr(geom_table, "!BOX!")) {
+          /* need to do a substition */
+          char    *start, *end;
+          char    *oldresult = result;
+          start = strstr(geom_table, "!BOX!");
+          end = start + 5;
 
-    if (layerinfo->geometry_format == MSSQLGEOMETRY_NATIVE)
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "[%s],convert(varchar(36), [%s])", layerinfo->geom_column, layerinfo->urid_name);
-    else
-      snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "[%s].STAsBinary(),convert(varchar(36), [%s])", layerinfo->geom_column, layerinfo->urid_name);
+          result = (char *)msSmallMalloc((start - geom_table) + strlen(box3d) + strlen(end) + 1);
 
-    columns_wanted = msStrdup(buffer);
-  }
+          strlcpy(result, geom_table, start - geom_table + 1);
+          strcpy(result + (start - geom_table), box3d);
+          strcat(result, end);
 
-  if (rect.minx == rect.maxx || rect.miny == rect.maxy) {
-    /* create point shape for rectangles with zero area */
-    sprintf(box3d, "%s::STGeomFromText('POINT(%.15g %.15g)',%s)", /* %s.STSrid)", */
-            layerinfo->geom_column_type, rect.minx, rect.miny, layerinfo->user_srid);
-  } else {
-    sprintf(box3d, "%s::STGeomFromText('POLYGON((%.15g %.15g,%.15g %.15g,%.15g %.15g,%.15g %.15g,%.15g %.15g))',%s)", /* %s.STSrid)", */
-            layerinfo->geom_column_type,
-            rect.minx, rect.miny,
-            rect.maxx, rect.miny,
-            rect.maxx, rect.maxy,
-            rect.minx, rect.maxy,
-            rect.minx, rect.miny,
-            layerinfo->user_srid
-           );
+          geom_table = result;
+          msFree(oldresult);
+      }
+
+      /* if we're here, this will be a malloc'd string, so no need to copy it */
+      data_source = (char *)geom_table;
   }
 
-  /* substitute token '!BOX!' in geom_table with the box3d - do an unlimited # of subs */
-  /* to not undo the work here, we need to make sure that data_source is malloc'd here */
+  /* start creating the query */
 
-  if(!strstr(geom_table, "!BOX!")) {
-    data_source = (char *) msSmallMalloc(strlen(geom_table) + 1);
-    strcpy(data_source, geom_table);
-  } else {
-    char* result = NULL;
+  query = msStringConcatenate(query, "SELECT ");
 
-    while (strstr(geom_table,"!BOX!")) {
-      /* need to do a substition */
-      char    *start, *end;
-      char    *oldresult = result;
-      start = strstr(geom_table,"!BOX!");
-      end = start+5;
+  /* adding items to the select list */
+  for (t = 0; t < layer->numitems; t++) {
+#ifdef USE_ICONV
+      /* no conversion applied at the database */
+      query = msStringConcatenate(query, "[");
+      query = msStringConcatenate(query, layer->items[t]);
+      query = msStringConcatenate(query, "],");
+#else
+      query = msStringConcatenate(query, "convert(varchar(max), [");
+      query = msStringConcatenate(query, layer->items[t]);
+      query = msStringConcatenate(query, "]),");
+#endif
+  }
 
-      result = (char *)msSmallMalloc((start - geom_table) + strlen(box3d) + strlen(end) +1);
+  /* adding geometry column */
+  query = msStringConcatenate(query, "[");
+  query = msStringConcatenate(query, layerinfo->geom_column);
+  if (layerinfo->geometry_format == MSSQLGEOMETRY_NATIVE)
+      query = msStringConcatenate(query, "],");
+  else
+      query = msStringConcatenate(query, "].STAsBinary(),");
 
-      strlcpy(result, geom_table, start - geom_table + 1);
-      strcpy(result + (start - geom_table), box3d);
-      strcat(result, end);
+  /* adding id column */
+  query = msStringConcatenate(query, "convert(varchar(36), [");
+  query = msStringConcatenate(query, layerinfo->urid_name);
+  query = msStringConcatenate(query, "]) FROM ");
 
-      geom_table= result;
-      msFree(oldresult);
-    }
+  /* adding the source */
+  query = msStringConcatenate(query, data_source);
+  msFree(data_source);
+  msFree(f_table_name);
 
-    /* if we're here, this will be a malloc'd string, so no need to copy it */
-    data_source = (char *)geom_table;
+  /* use the index hint if provided */
+  if (layerinfo->index_name) {
+      query = msStringConcatenate(query, " WITH (INDEX(");
+      query = msStringConcatenate(query, layerinfo->index_name);
+      query = msStringConcatenate(query, "))");
   }
 
-  /* use the index hint if provided */
-  if ( layerinfo->index_name ) {
-    /* given the template - figure out how much to malloc and malloc it */
-    char *with_template = "%s WITH (INDEX(%s))";
-    int need_len = strlen(data_source) + strlen(with_template) + strlen(layerinfo->index_name);
-    char *tmp = (char*) msSmallMalloc( need_len + 1 );
-    sprintf( tmp, with_template, data_source, layerinfo->index_name );
-    msFree(data_source);
-    data_source = tmp;
-  }
-
-  /* test whether we should omit spatial filtering */
-  /* TODO: once this driver supports expression translation then filter->native_string will need to be considered here */
-  msMSSQL2008LayerGetExtent(layer, &extent);
-  if (rect.minx <= extent.minx && rect.miny <= extent.miny && rect.maxx >= extent.maxx && rect.maxy >= extent.maxy) {
-      /* no spatial filter used */
-      if ( layer->filter.native_string ) { 
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s WHERE (%s)", columns_wanted, data_source, layer->filter.native_string );
-      }
-      else if(msLayerGetProcessingKey(layer, "NATIVE_FILTER") == NULL) {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s", columns_wanted, data_source );
-      } else {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s WHERE (%s)", columns_wanted, data_source, msLayerGetProcessingKey(layer, "NATIVE_FILTER"));
-      }
-  } else {
-      if ( layer->filter.native_string ) { 
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s WHERE (%s) and %s.STIntersects(%s) = 1 ", columns_wanted, data_source, layer->filter.native_string, layerinfo->geom_column, box3d );
-      }
-      else if(msLayerGetProcessingKey(layer, "NATIVE_FILTER") == NULL) {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s WHERE %s.STIntersects(%s) = 1 ", columns_wanted, data_source, layerinfo->geom_column, box3d );
-      } else {
-        snprintf(query_string_temp, sizeof(query_string_temp), "SELECT %s from %s WHERE (%s) and %s.STIntersects(%s) = 1 ", columns_wanted, data_source, msLayerGetProcessingKey(layer, "NATIVE_FILTER"), layerinfo->geom_column, box3d );
-      }
+  /* adding attribute filter */
+  if (layer->filter.native_string) {
+      query = msStringConcatenate(query, " WHERE (");
+      query = msStringConcatenate(query, layer->filter.native_string);
+      query = msStringConcatenate(query, ")");
+      hasFilter = MS_TRUE;
   }
+  else if (msLayerGetProcessingKey(layer, "NATIVE_FILTER") != NULL) {
+      query = msStringConcatenate(query, " WHERE (");
+      query = msStringConcatenate(query, msLayerGetProcessingKey(layer, "NATIVE_FILTER"));
+      query = msStringConcatenate(query, ")");
+      hasFilter = MS_TRUE;
+  }
+
+  /* adding spatial filter */
+  msMSSQL2008LayerGetExtent(layer, &extent);
+  if (rect.minx > extent.minx || rect.miny > extent.miny ||
+      rect.maxx < extent.maxx || rect.maxy < extent.maxy) {
+      if (hasFilter == MS_FALSE)
+          query = msStringConcatenate(query, " WHERE ");
+      else
+          query = msStringConcatenate(query, " AND ");
 
-  if (layerinfo->sort_spec) {
-      strcat(query_string_temp, layerinfo->sort_spec);
+      query = msStringConcatenate(query, layerinfo->geom_column);
+      query = msStringConcatenate(query, ".STIntersects(");
+      query = msStringConcatenate(query, box3d);
+      query = msStringConcatenate(query, ") = 1 ");
   }
 
-  msFree(data_source);
-  msFree(f_table_name);
-  msFree(columns_wanted);
+  if (layerinfo->sort_spec)
+      query = msStringConcatenate(query, layerinfo->sort_spec);
 
-  if(layer->debug) {
-    msDebug("query_string_temp:%s\n", query_string_temp);
+  if (layer->debug) {
+      msDebug("query:%s\n", query);
   }
 
-  if (executeSQL(layerinfo->conn, query_string_temp)) {
-    *query_string = msStrdup(query_string_temp);
+  if (executeSQL(layerinfo->conn, query)) {
+      char pass_field_def = 0;
+      int t;
+      const char *value;
+      *query_string = query;
+      /* collect result information */
+      if ((value = msOWSLookupMetadata(&(layer->metadata), "G", "types")) != NULL
+          && strcasecmp(value, "auto") == 0)
+          pass_field_def = 1;
 
-    return MS_SUCCESS;
-  } else {
-    msSetError(MS_QUERYERR, "Error executing MSSQL2008 SQL statement: %s\n-%s\n", "msMSSQL2008LayerGetShape()", query_string_temp, layerinfo->conn->errorMessage);
+      msFree(layerinfo->itemtypes);
+      layerinfo->itemtypes = msSmallMalloc(sizeof(SQLSMALLINT) * (layer->numitems + 1));
+      for (t = 0; t < layer->numitems; t++) {
+          char colBuff[256];
+          SQLSMALLINT itemType;
 
-    return MS_FAILURE;
+          columnName(layerinfo->conn, t + 1, colBuff, sizeof(colBuff), layer, pass_field_def, &itemType);
+          layerinfo->itemtypes[t] = itemType;
+      }
+
+      return MS_SUCCESS;
+  }
+  else {
+      msSetError(MS_QUERYERR, "Error executing MSSQL2008 SQL statement: %s\n-%s\n", "msMSSQL2008LayerGetShape()", query, layerinfo->conn->errorMessage);
+
+      msFree(query);
+
+      return MS_FAILURE;
   }
 }
 


=====================================
mapmvt.c
=====================================
--- a/mapmvt.c
+++ b/mapmvt.c
@@ -315,10 +315,11 @@ int msMVTWriteTile( mapObj *map, int sendheaders ) {
   int iLayer,retcode=MS_SUCCESS;
   unsigned len;
   void *buf;
+  const char *mvt_extent = msGetOutputFormatOption(map->outputformat, "EXTENT", "4096");
   const char *mvt_buffer = msGetOutputFormatOption(map->outputformat, "EDGE_BUFFER", "10");
   int buffer = MS_ABS(atoi(mvt_buffer));
   VectorTile__Tile mvt_tile = VECTOR_TILE__TILE__INIT;
-  mvt_tile.layers = msSmallCalloc(map->numlayers,sizeof(VectorTile__Tile__Layer*));
+  mvt_tile.layers = msSmallCalloc(map->numlayers, sizeof(VectorTile__Tile__Layer*));
 
   /* expand the map->extent so it goes from pixel center (MapServer) to pixel edge (OWS) */
   map->extent.minx -= map->cellsize * 0.5;
@@ -378,8 +379,8 @@ int msMVTWriteTile( mapObj *map, int sendheaders ) {
     vector_tile__tile__layer__init(mvt_layer);
     mvt_layer->version = 2;
     mvt_layer->name = layer->name;
-    mvt_buffer = msGetOutputFormatOption(map->outputformat, "EXTENT", "4096");
-    mvt_layer->extent = MS_ABS(atoi(mvt_buffer));
+
+    mvt_layer->extent = MS_ABS(atoi(mvt_extent));
     mvt_layer->has_extent = 1;
 
     /* -------------------------------------------------------------------- */


=====================================
mappostgis.c
=====================================
--- a/mappostgis.c
+++ b/mappostgis.c
@@ -2003,7 +2003,7 @@ char *msPostGISBuildSQLWhere(layerObj *layer, rectObj *rect, long *uid, rectObj 
     char *strBox = 0;
     char *strSRID = 0;
     size_t strBoxLength = 0;
-    static const char *strRectTemplate = "%s && %s";
+    static const char *strRectTemplate = "\"%s\" && %s";
 
     /* We see to set the SRID on the box, but to what SRID? */
     strSRID = msPostGISBuildSQLSRID(layer);


=====================================
mapwcs20.c
=====================================
--- a/mapwcs20.c
+++ b/mapwcs20.c
@@ -1878,7 +1878,9 @@ static void msWCSPrepareNamespaces20(xmlDocPtr pDoc, xmlNodePtr psRootNode, mapO
   xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, " ");
 
   if (addInspire) {
-    xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, MS_INSPIRE_DLS_NAMESPACE_URI " " MS_INSPIRE_DLS_SCHEMA_LOCATION);
+    xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, MS_INSPIRE_DLS_NAMESPACE_URI " ");
+    xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, msOWSGetInspireSchemasLocation(map));
+    xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, MS_INSPIRE_DLS_SCHEMA_LOCATION);
   }
 
   xmlNewNsProp(psRootNode, psXsiNs, BAD_CAST "schemaLocation", BAD_CAST xsi_schemaLocation);



View it on GitLab: https://salsa.debian.org/debian-gis-team/mapserver/commit/36afb4bd26385de8fc0f2f3f96d349bbcc4ffdf8

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/mapserver/commit/36afb4bd26385de8fc0f2f3f96d349bbcc4ffdf8
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20180613/2de18df3/attachment-0001.html>


More information about the Pkg-grass-devel mailing list