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");
}
/* 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);
/* 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) {
break;
}
- pfree(tmp);
+ if (tmp != NULL)
+ pfree(tmp);
continue;
}