224 if (ARR_ELEMTYPE(arr) != CSTRINGOID)
226 (errcode(ERRCODE_ARRAY_ELEMENT_ERROR),
227 errmsg(
"typmod array must be type cstring[]")));
229 if (ARR_NDIM(arr) != 1)
231 (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
232 errmsg(
"typmod array must be one-dimensional")));
234 if (ARR_HASNULL(arr))
236 (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
237 errmsg(
"typmod array must not contain nulls")));
239 deconstruct_array(arr,
240 CSTRINGOID, -2,
false,
'c',
241 &elem_values, NULL, &n);
249 for (i = 0; i < n; i++)
253 char *
s = DatumGetCString(elem_values[i]);
261 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
262 errmsg(
"Invalid geometry type modifier: %s",
s)));
275 char *int_string = DatumGetCString(elem_values[i]);
281 l = strtol(int_string, &endp, 10);
283 if (int_string == endp)
285 (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
286 errmsg(
"invalid input syntax for type %s: \"%s\"",
287 "integer", int_string)));
289 if (errno == ERANGE || l < INT_MIN || l > INT_MAX)
291 (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
292 errmsg(
"value \"%s\" is out of range for type %s", int_string,
297 (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
298 errmsg(
"invalid input syntax for type %s: \"%s\"",
299 "integer", int_string)));
302 POSTGIS_DEBUGF(3,
"srid: %d", srid);
#define TYPMOD_SET_SRID(typmod, srid)
int geometry_type_from_string(const char *str, uint8_t *type, int *z, int *m)
Utility function to get type number from string.
#define TYPMOD_SET_TYPE(typmod, type)
#define TYPMOD_SET_M(typmod)
#define SRID_UNKNOWN
Unknown SRID value.
#define TYPMOD_SET_Z(typmod)
int32_t clamp_srid(int32_t srid)
Return a valid SRID from an arbitrary integer Raises a notice if what comes out is different from wha...