diff --git a/Makefile.in b/Makefile.in index c7859e2397..2c8a4c6ab2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -305,7 +305,7 @@ EXE_LIST = shp2img legend mapserv shptree shptreevis \ # # --- You shouldn't have to edit anything else. --- # -all: $(LIBMAP) $(EXE_LIST) @MAKE_PHP_MAPSCRIPT@ @MAKE_PYTHON_MAPSCRIPT@ +all: $(LIBMAP) $(EXE_LIST) mapscriptvars @MAKE_PHP_MAPSCRIPT@ @MAKE_PYTHON_MAPSCRIPT@ # Explicitly invoke this rule when maplexer.l is altered. We don't do # it automatically for the reasons listed in #2310 @@ -482,7 +482,7 @@ install-module: mod_mapserver.la install-lib $(APXS) -i -a -n "mapserver" mod_mapserver.la clean: @MAKE_PHP_MAPSCRIPT_CLEAN@ @MAKE_PYTHON_MAPSCRIPT_CLEAN@ - rm -rf $(LIBMAP) *.o *.lo *.la .libs $(EXE_LIST) renderers/agg/src/*.o renderers/agg/src/*.lo renderers/agg/src/.libs + rm -rf $(LIBMAP) mapscriptvars *.o *.lo *.la .libs $(EXE_LIST) renderers/agg/src/*.o renderers/agg/src/*.lo renderers/agg/src/.libs exe-clean: rm -f $(EXE_LIST) diff --git a/mapogcfiltercommon.c b/mapogcfiltercommon.c index 0f1f9ae782..3bd93b3a71 100644 --- a/mapogcfiltercommon.c +++ b/mapogcfiltercommon.c @@ -538,6 +538,8 @@ char *FLTGetSpatialComparisonCommonExpression(FilterEncodingNode *psNode, layerO if (strncasecmp(psNode->pszValue, "intersect", 9) == 0) pszTmp = msStrdup("intersects"); + if (strncasecmp(psNode->pszValue, "equals", 9) == 0) + pszTmp = msStrdup("eq"); else pszTmp = msStrdup(psNode->pszValue); msStringToLower(pszTmp); diff --git a/mappostgis.c b/mappostgis.c index 96744ac044..c8a2d7a34d 100644 --- a/mappostgis.c +++ b/mappostgis.c @@ -65,10 +65,6 @@ #include "maptime.h" #include "mappostgis.h" -#ifndef FLT_MAX -#define FLT_MAX 25000000.0 -#endif - #define FP_EPSILON 1e-12 #define FP_EQ(a, b) (fabs((a)-(b)) < FP_EPSILON) #define FP_LEFT -1 @@ -2998,27 +2994,6 @@ int msPostGISLayerGetItems(layerObj *layer) #endif } -/* -** msPostGISLayerGetExtent() -** -** Registered vtable->LayerGetExtent function. -** -** TODO: Update to use proper PostGIS functions to pull -** extent quickly and accurately when available. -*/ -int msPostGISLayerGetExtent(layerObj *layer, rectObj *extent) -{ - if (layer->debug) { - msDebug("msPOSTGISLayerGetExtent called.\n"); - } - - extent->minx = extent->miny = -1.0 * FLT_MAX ; - extent->maxx = extent->maxy = FLT_MAX; - - return MS_SUCCESS; - -} - /* * make sure that the timestring is complete and acceptable * to the date_trunc function : @@ -3373,7 +3348,7 @@ int msPostGISLayerInitializeVirtualTable(layerObj *layer) layer->vtable->LayerGetShape = msPostGISLayerGetShape; layer->vtable->LayerClose = msPostGISLayerClose; layer->vtable->LayerGetItems = msPostGISLayerGetItems; - layer->vtable->LayerGetExtent = msPostGISLayerGetExtent; + /* layer->vtable->LayerGetExtent = msPostGISLayerGetExtent; */ layer->vtable->LayerApplyFilterToLayer = msLayerApplyCondSQLFilterToLayer; /* layer->vtable->LayerGetAutoStyle, not supported for this layer */ layer->vtable->LayerCloseConnection = msPostGISLayerClose; diff --git a/mapprimitive.c b/mapprimitive.c index 0b762daedd..e06131db8a 100644 --- a/mapprimitive.c +++ b/mapprimitive.c @@ -1815,7 +1815,7 @@ void msPolylineLabelPathLineString(mapObj *map, imageObj *img, shapeObj *p, int double kernel_normal = 2.6; /* Must be sum of kernel elements */ int kernel_size = 5; - double letterspacing = 1.25; + double letterspacing = 1.05; /* As per RFC 60, if label->maxoverlapangle == 0 then fall back on pre-6.0 behavior which was to use maxoverlapangle = 0.4*MS_PI ( 40% of 180 degrees ) */ double maxoverlapangle = 0.4 * MS_PI; diff --git a/mapsde.c b/mapsde.c index a056a59d1e..f02e6e8829 100644 --- a/mapsde.c +++ b/mapsde.c @@ -601,6 +601,7 @@ static int sdeGetRecord(layerObj *layer, shapeObj *shape) #ifdef SE_NCLOB_TYPE SE_NCLOB_INFO nclobval; + SE_WCHAR* nclobstring; /* null terminated */ #endif #ifdef SE_NSTRING_TYPE @@ -797,13 +798,29 @@ static int sdeGetRecord(layerObj *layer, shapeObj *shape) #ifdef SE_CLOB_TYPE case SE_NCLOB_TYPE: + memset(&nclobval, 0, sizeof(nclobval)); /* to prevent from the crash in SE_stream_get_nclob */ status = SE_stream_get_nclob(sde->connPoolInfo->stream, (short) (i+1), &nclobval); if(status == SE_SUCCESS) { - shape->values[i] = (char *)msSmallMalloc(sizeof(char)*nclobval.nclob_length); - shape->values[i] = memcpy( shape->values[i], - nclobval.nclob_buffer, - nclobval.nclob_length); + /* the returned string is not null-terminated */ + nclobstring = (SE_WCHAR*)malloc(sizeof(char)*(nclobval.nclob_length+2)); + memcpy(nclobstring, nclobval.nclob_buffer, nclobval.nclob_length); + nclobstring[nclobval.nclob_length / 2] = '\0'; + + if (sde->bBigEndian) + shape->values[i] = msConvertWideStringToUTF8((const wchar_t*) nclobstring, "UTF-16BE"); + else + shape->values[i] = msConvertWideStringToUTF8((const wchar_t*) nclobstring, "UTF-16LE"); + + if (!shape->values[i]) { /* There was an error */ + msSetError( MS_SDEERR, + "msConvertWideStringToUTF8()==NULL.", + "sdeGetRecord()"); + shape->values[i] = (char *)malloc(itemdefs[i].size*sizeof(char)+1); + shape->values[i][0] = '\0'; /* empty string */ + } + SE_nclob_free(&nclobval); + msFree(nclobstring); } else if (status == SE_NULL_VALUE) { shape->values[i] = msStrdup(MS_SDE_NULLSTRING); } else { diff --git a/mapserver.h b/mapserver.h index b894408fa3..4246bde598 100644 --- a/mapserver.h +++ b/mapserver.h @@ -635,20 +635,20 @@ extern "C" { /* expressionObj & tokenObj */ /************************************************************************/ - enum MS_TOKEN_LOGICAL_ENUM { MS_TOKEN_LOGICAL_AND=100, MS_TOKEN_LOGICAL_OR, MS_TOKEN_LOGICAL_NOT }; - enum MS_TOKEN_LITERAL_ENUM { MS_TOKEN_LITERAL_NUMBER=110, MS_TOKEN_LITERAL_STRING, MS_TOKEN_LITERAL_TIME, MS_TOKEN_LITERAL_SHAPE }; + enum MS_TOKEN_LOGICAL_ENUM { MS_TOKEN_LOGICAL_AND=300, MS_TOKEN_LOGICAL_OR, MS_TOKEN_LOGICAL_NOT }; + enum MS_TOKEN_LITERAL_ENUM { MS_TOKEN_LITERAL_NUMBER=310, MS_TOKEN_LITERAL_STRING, MS_TOKEN_LITERAL_TIME, MS_TOKEN_LITERAL_SHAPE }; enum MS_TOKEN_COMPARISON_ENUM { - MS_TOKEN_COMPARISON_EQ=120, MS_TOKEN_COMPARISON_NE, MS_TOKEN_COMPARISON_GT, MS_TOKEN_COMPARISON_LT, MS_TOKEN_COMPARISON_LE, MS_TOKEN_COMPARISON_GE, MS_TOKEN_COMPARISON_IEQ, + MS_TOKEN_COMPARISON_EQ=320, MS_TOKEN_COMPARISON_NE, MS_TOKEN_COMPARISON_GT, MS_TOKEN_COMPARISON_LT, MS_TOKEN_COMPARISON_LE, MS_TOKEN_COMPARISON_GE, MS_TOKEN_COMPARISON_IEQ, MS_TOKEN_COMPARISON_RE, MS_TOKEN_COMPARISON_IRE, MS_TOKEN_COMPARISON_IN, MS_TOKEN_COMPARISON_LIKE, MS_TOKEN_COMPARISON_INTERSECTS, MS_TOKEN_COMPARISON_DISJOINT, MS_TOKEN_COMPARISON_TOUCHES, MS_TOKEN_COMPARISON_OVERLAPS, MS_TOKEN_COMPARISON_CROSSES, MS_TOKEN_COMPARISON_WITHIN, MS_TOKEN_COMPARISON_CONTAINS, MS_TOKEN_COMPARISON_BEYOND, MS_TOKEN_COMPARISON_DWITHIN }; enum MS_TOKEN_FUNCTION_ENUM { - MS_TOKEN_FUNCTION_LENGTH=140, MS_TOKEN_FUNCTION_TOSTRING, MS_TOKEN_FUNCTION_COMMIFY, MS_TOKEN_FUNCTION_AREA, MS_TOKEN_FUNCTION_ROUND, MS_TOKEN_FUNCTION_FROMTEXT, + MS_TOKEN_FUNCTION_LENGTH=340, MS_TOKEN_FUNCTION_TOSTRING, MS_TOKEN_FUNCTION_COMMIFY, MS_TOKEN_FUNCTION_AREA, MS_TOKEN_FUNCTION_ROUND, MS_TOKEN_FUNCTION_FROMTEXT, MS_TOKEN_FUNCTION_BUFFER, MS_TOKEN_FUNCTION_DIFFERENCE }; - enum MS_TOKEN_BINDING_ENUM { MS_TOKEN_BINDING_DOUBLE=150, MS_TOKEN_BINDING_INTEGER, MS_TOKEN_BINDING_STRING, MS_TOKEN_BINDING_TIME, MS_TOKEN_BINDING_SHAPE }; + enum MS_TOKEN_BINDING_ENUM { MS_TOKEN_BINDING_DOUBLE=350, MS_TOKEN_BINDING_INTEGER, MS_TOKEN_BINDING_STRING, MS_TOKEN_BINDING_TIME, MS_TOKEN_BINDING_SHAPE }; enum MS_PARSE_TYPE_ENUM { MS_PARSE_TYPE_BOOLEAN, MS_PARSE_TYPE_STRING, MS_PARSE_TYPE_SHAPE }; #ifndef SWIG diff --git a/mapwms.c b/mapwms.c index 83a96a4cb4..2d630f66dc 100644 --- a/mapwms.c +++ b/mapwms.c @@ -1540,7 +1540,7 @@ this request. Check wms/ows_enable_request settings.", int numlayers =0; layerObj *lp = NULL; - tokens = msStringSplit(styles, ',' ,&n); + tokens = msStringSplitComplex(styles, ",",&n,MS_ALLOWEMPTYTOKENS); for (i=0; i 0 && strcasecmp(tokens[i],"default") != 0) {