2274{
2278 uint32_t uwhere = 0;
2279
2280 POSTGIS_DEBUGF(2, "%s called.", __func__);
2281
2282 pglwg1 = PG_GETARG_GSERIALIZED_P(0);
2283 pglwg2 = PG_GETARG_GSERIALIZED_P(1);
2284
2286 {
2287 elog(ERROR, "First argument must be a LINESTRING");
2288 PG_RETURN_NULL();
2289 }
2290
2292 {
2293 elog(ERROR, "Second argument must be a POINT");
2294 PG_RETURN_NULL();
2295 }
2296
2298 {
2299 PG_RETURN_POINTER(pglwg1);
2300 }
2301
2303
2304 if (PG_NARGS() <= 2)
2305 {
2307 }
2308 else
2309 {
2310 int32 where = PG_GETARG_INT32(2);
2311 if (where == -1)
2312 {
2314 }
2316 {
2317 elog(ERROR, "%s: Invalid offset", __func__);
2318 PG_RETURN_NULL();
2319 }
2320 else
2321 {
2322 uwhere = where;
2323 }
2324 }
2325
2329
2331 {
2332 elog(ERROR, "Point insert failed");
2333 PG_RETURN_NULL();
2334 }
2335
2337
2338
2339 PG_FREE_IF_COPY(pglwg1, 0);
2340 PG_FREE_IF_COPY(pglwg2, 1);
2342
2343 PG_RETURN_POINTER(
result);
2344}
char result[OUT_DOUBLE_BUFFER_SIZE]
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
int gserialized_is_empty(const GSERIALIZED *g)
Check if a GSERIALIZED is empty without deserializing first.
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)