2181{
2185 uint32_t uwhere = 0;
2186
2187 POSTGIS_DEBUGF(2, "%s called.", __func__);
2188
2189 pglwg1 = PG_GETARG_GSERIALIZED_P(0);
2190 pglwg2 = PG_GETARG_GSERIALIZED_P(1);
2191
2193 {
2194 elog(ERROR, "First argument must be a LINESTRING");
2195 PG_RETURN_NULL();
2196 }
2197
2199 {
2200 elog(ERROR, "Second argument must be a POINT");
2201 PG_RETURN_NULL();
2202 }
2203
2205
2206 if (PG_NARGS() <= 2)
2207 {
2209 }
2210 else
2211 {
2212 int32 where = PG_GETARG_INT32(2);
2213 if (where == -1)
2214 {
2216 }
2218 {
2219 elog(ERROR, "%s: Invalid offset", __func__);
2220 PG_RETURN_NULL();
2221 }
2222 else
2223 {
2224 uwhere = where;
2225 }
2226 }
2227
2231
2233 {
2234 elog(ERROR, "Point insert failed");
2235 PG_RETURN_NULL();
2236 }
2237
2239
2240
2241 PG_FREE_IF_COPY(pglwg1, 0);
2242 PG_FREE_IF_COPY(pglwg2, 1);
2244
2245 PG_RETURN_POINTER(result);
2246}
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
uint32_t gserialized_get_type(const GSERIALIZED *g)
Extract the geometry type from the serialized form (it hides in the anonymous data area,...
void lwpoint_free(LWPOINT *pt)
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
LWGEOM * lwline_as_lwgeom(const LWLINE *obj)
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
void lwline_free(LWLINE *line)
int lwline_add_lwpoint(LWLINE *line, LWPOINT *point, uint32_t where)
Add a LWPOINT to an LWLINE.
LWGEOM * lwgeom_clone_deep(const LWGEOM *lwgeom)
Deep clone an LWGEOM, everything is copied.
static LWPOINT * lwgeom_as_lwpoint(const LWGEOM *lwgeom)
GSERIALIZED * geometry_serialize(LWGEOM *lwgeom)