Datum pcpatch_from_pcpoint_array(PG_FUNCTION_ARGS) { ArrayType *array; PCPATCH *pa; SERIALIZED_PATCH *serpa; if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); array = DatumGetArrayTypeP(PG_GETARG_DATUM(0)); pa = pcpatch_from_point_array(array, fcinfo); if ( ! pa ) PG_RETURN_NULL(); serpa = pc_patch_serialize(pa, NULL); pc_patch_free(pa); PG_RETURN_POINTER(serpa); }
Datum pcpatch_agg_final_pcpatch(PG_FUNCTION_ARGS) { ArrayType *array; abs_trans *a; PCPATCH *pa; SERIALIZED_PATCH *serpa; if (PG_ARGISNULL(0)) PG_RETURN_NULL(); /* returns null iff no input values */ a = (abs_trans*) PG_GETARG_POINTER(0); array = DatumGetArrayTypeP(pointcloud_agg_final(a, CurrentMemoryContext, fcinfo)); pa = pcpatch_from_patch_array(array, fcinfo); if ( ! pa ) PG_RETURN_NULL(); serpa = pc_patch_serialize(pa, NULL); pc_patch_free(pa); PG_RETURN_POINTER(serpa); }
Datum pcpatch_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); /* Datum geog_oid = PG_GETARG_OID(1); Not needed. */ uint32 typmod = 0, pcid = 0; PCPATCH *patch; SERIALIZED_PATCH *serpatch = NULL; if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) { typmod = PG_GETARG_INT32(2); pcid = pcid_from_typmod(typmod); } /* Empty string. */ if ( str[0] == '\0' ) { ereport(ERROR,(errmsg("pcpatch parse error - empty string"))); } /* Binary or text form? Let's find out. */ if ( str[0] == '0' ) { /* Hex-encoded binary */ patch = pc_patch_from_hexwkb(str, strlen(str), fcinfo); pcid_consistent(patch->schema->pcid, pcid); serpatch = pc_patch_serialize(patch, NULL); pc_patch_free(patch); } else { ereport(ERROR,(errmsg("parse error - support for text format not yet implemented"))); } if ( serpatch ) PG_RETURN_POINTER(serpatch); else PG_RETURN_NULL(); }