@@ -976,7 +976,11 @@ static int prepare_database(layerObj *layer, rectObj rect, char **query_string)
976
976
char buffer [10000 ] = "" ;
977
977
978
978
for (t = 0 ; t < layer -> numitems ; t ++ ) {
979
+ #ifdef USE_ICONV
980
+ snprintf (buffer + strlen (buffer ), sizeof (buffer ) - strlen (buffer ), "convert(nvarchar(max), [%s])," , layer -> items [t ]);
981
+ #else
979
982
snprintf (buffer + strlen (buffer ), sizeof (buffer ) - strlen (buffer ), "convert(varchar(max), [%s])," , layer -> items [t ]);
983
+ #endif
980
984
}
981
985
982
986
if (layerinfo -> geometry_format == MSSQLGEOMETRY_NATIVE )
@@ -1699,7 +1703,7 @@ int msMSSQL2008LayerGetShapeRandom(layerObj *layer, shapeObj *shape, long *recor
1699
1703
1700
1704
if (needLen > 0 ) {
1701
1705
/* allocate the buffer - this will be a null-terminated string so alloc for the null too */
1702
- valueBuffer = (char * ) msSmallMalloc ( needLen + 1 );
1706
+ valueBuffer = (char * ) msSmallMalloc ( needLen + 2 );
1703
1707
if ( valueBuffer == NULL ) {
1704
1708
msSetError ( MS_QUERYERR , "Could not allocate value buffer." , "msMSSQL2008LayerGetShapeRandom()" );
1705
1709
return MS_FAILURE ;
@@ -1714,7 +1718,13 @@ int msMSSQL2008LayerGetShapeRandom(layerObj *layer, shapeObj *shape, long *recor
1714
1718
valueBuffer [retLen ] = 0 ; /* null terminate it */
1715
1719
1716
1720
/* Pop the value into the shape's value array */
1721
+ #ifdef USE_ICONV
1722
+ valueBuffer [retLen + 1 ] = 0 ;
1723
+ shape -> values [t ] = msConvertWideStringToUTF8 ((wchar_t * )valueBuffer , "UCS-2LE" );
1724
+ msFree (valueBuffer );
1725
+ #else
1717
1726
shape -> values [t ] = valueBuffer ;
1727
+ #endif
1718
1728
} else
1719
1729
/* Copy empty sting for NULL values */
1720
1730
shape -> values [t ] = msStrdup ("" );
0 commit comments