]> granicus.if.org Git - postgis/commitdiff
Additional refactoring of rtpg_getSR().
authorBborie Park <bkpark at ucdavis.edu>
Fri, 4 May 2012 02:54:21 +0000 (02:54 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Fri, 4 May 2012 02:54:21 +0000 (02:54 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@9710 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rt_pg.c

index d6bfba14988f732fe94c31fc293d9d027c2276b9..59e66940a5e04bd8cfde1ad1244d5e35ed87fe2a 100644 (file)
@@ -494,7 +494,7 @@ rtpg_getSR(int srid)
        char *tmp = NULL;
        char *srs = NULL;
 
-       len = sizeof(char) * (strlen("SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, COALESCE(proj4text, ''), COALESCE(srtext, '') FROM spatial_ref_sys WHERE srid =  LIMIT 1") + MAX_INT_CHARLEN + 1);
+       len = sizeof(char) * (strlen("SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid =  LIMIT 1") + MAX_INT_CHARLEN + 1);
        sql = (char *) palloc(len);
        if (NULL == sql) {
                elog(ERROR, "rtpg_getSR: Unable to allocate memory for sql\n");
@@ -509,7 +509,7 @@ rtpg_getSR(int srid)
        }
 
        /* execute query */
-       snprintf(sql, len, "SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, COALESCE(proj4text, ''), COALESCE(srtext, '') FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid);
+       snprintf(sql, len, "SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid);
        POSTGIS_RT_DEBUGF(4, "SRS query: %s", sql);
        spi_result = SPI_execute(sql, TRUE, 0);
        SPI_pfree(sql);
@@ -527,20 +527,17 @@ rtpg_getSR(int srid)
        /* which column to use? */
        for (i = 1; i < 4; i++) {
                tmp = SPI_getvalue(tuple, tupdesc, i);
-               if (NULL == tmp) {
-                       elog(ERROR, "rtpg_getSR: Cannot find SRID (%d) in spatial_ref_sys", srid);
-                       if (SPI_tuptable) SPI_freetuptable(tuptable);
-                       SPI_finish();
-                       return NULL;
-               }
-
-               POSTGIS_RT_DEBUGF(4, "Value for column %d is %s", i, tmp);
 
                /* value AND GDAL supports this SR */
                if (
+                       SPI_result != SPI_ERROR_NOATTRIBUTE &&
+                       SPI_result != SPI_ERROR_NOOUTFUNC &&
+                       tmp != NULL &&
                        strlen(tmp) &&
                        rt_util_gdal_supported_sr(tmp)
                ) {
+                       POSTGIS_RT_DEBUGF(4, "Value for column %d is %s", i, tmp);
+
                        len = strlen(tmp) + 1;
                        srs = SPI_palloc(sizeof(char) * len);
                        if (NULL == srs) {
@@ -556,7 +553,8 @@ rtpg_getSR(int srid)
                        break;
                }
 
-               pfree(tmp);
+               if (tmp != NULL)
+                       pfree(tmp);
                continue;
        }