<div dir="ltr">Some code :<div>_first a cast from topogeometry to int[]</div><div>_second an = operator for topogeometry, there is 2 possibilities regarding the behavior with NULL value.</div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
my prefered behavior is that NULL is just another int value<br>the other behavior (commented code) is the int=int behavior with null value, that is when one or more null, returns null.<br><br></blockquote>I tested manually both.</div>
<div>Comments welcome</div><div>Cheers,</div><div>Rémi-C</div><div class="gmail_extra"><br></div><div class="gmail_extra">_first a cast from topogeometry to int[]<br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div class="gmail_extra"><div class="gmail_extra"><br></div></div><div class="gmail_extra"><div class="gmail_extra">--creating a cast from topology.topogeom to int[]</div></div><div class="gmail_extra"><div class="gmail_extra">
DROP FUNCTION IF EXISTS topology.topogeometry_CastToIntArr(tg1 topology.topogeometry);</div></div><div class="gmail_extra"><div class="gmail_extra">CREATE FUNCTION topology.topogeometry_CastToIntArr(tg1 topology.topogeometry)</div>
</div><div class="gmail_extra"><div class="gmail_extra"> RETURNS int[] AS</div></div><div class="gmail_extra"><div class="gmail_extra"> $BODY$</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>-- This function rast a topology.topogeom into an int[]</div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>DECLARE</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>BEGIN</div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>RETURN ARRAY[(tg1).topology_id, (tg1).layer_id,(tg1).id,(tg1).type];</div></div><div class="gmail_extra"><div class="gmail_extra">
<span class="" style="white-space:pre"> </span>END;</div></div><div class="gmail_extra"><div class="gmail_extra"> $BODY$</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>LANGUAGE plpgsql IMMUTABLE;</div>
</div><div class="gmail_extra"><div class="gmail_extra"><br></div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>SELECT topology.topogeometry_CastToIntArr((NULL,2,3,4)::topology.topogeometry);</div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span></div></div><div class="gmail_extra"><div class="gmail_extra">CREATE CAST (topology.topogeometry AS int[])</div></div>
<div class="gmail_extra"><div class="gmail_extra"> WITH FUNCTION topology.topogeometry_CastToIntArr(topology.topogeometry)</div></div><div class="gmail_extra"><div class="gmail_extra"> AS IMPLICIT ;</div></div><div class="gmail_extra">
<div class="gmail_extra"><br></div></div><div class="gmail_extra"><div class="gmail_extra">SELECT (1,2,3,4)::topogeometry::int[];</div></div></blockquote><div class="gmail_extra"><div class="gmail_extra"> </div></div><div class="gmail_extra">
_second an = operator for topogeometry<br></div><div class="gmail_extra"><div class="gmail_extra"><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_extra">
--creating the egal operator for topology.topogeometry type</div></div><div class="gmail_extra"><div class="gmail_extra">DROP FUNCTION IF EXISTS topology.topogeometry_egal(tg1 topology.topogeometry,tg2 topology.topogeometry) CASCADE;</div>
</div><div class="gmail_extra"><div class="gmail_extra">CREATE FUNCTION topology.topogeometry_egal(tg1 topology.topogeometry,tg2 topology.topogeometry)</div></div><div class="gmail_extra"><div class="gmail_extra"> RETURNS boolean AS</div>
</div><div class="gmail_extra"><div class="gmail_extra"> $BODY$</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>-- This function returns true if every field of topogeom1 are egal to topogeom2 (int = meaning) in the same order, false else.</div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>--returns null if any field is NULL, whatever the others.</div></div><div class="gmail_extra"><div class="gmail_extra">
<span class="" style="white-space:pre"> </span>DECLARE</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>BEGIN</div></div><div class="gmail_extra"><div class="gmail_extra">
<span class="" style="white-space:pre"> </span>--<span class="" style="white-space:pre"> </span>RETURN </div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>--<span class="" style="white-space:pre"> </span>(tg1).topology_id=(tg2).topology_id </div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>--<span class="" style="white-space:pre"> </span>AND (tg1).layer_id=(tg2).layer_id </div></div><div class="gmail_extra">
<div class="gmail_extra"><span class="" style="white-space:pre"> </span>--<span class="" style="white-space:pre"> </span>AND (tg1).id=(tg2).id </div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>--<span class="" style="white-space:pre"> </span>AND (tg1).type=(tg2).type;</div>
</div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>RETURN tg1::int[]=tg2::int[];</div></div><div class="gmail_extra"><div class="gmail_extra"><span class="" style="white-space:pre"> </span>END;</div>
</div><div class="gmail_extra"><div class="gmail_extra"> $BODY$</div></div><div class="gmail_extra"><div class="gmail_extra">LANGUAGE plpgsql IMMUTABLE;</div></div><div class="gmail_extra"><div class="gmail_extra"><br>
</div></div><div class="gmail_extra"><div class="gmail_extra">CREATE OPERATOR = (</div></div><div class="gmail_extra"><div class="gmail_extra"> leftarg = topology.topogeometry,</div></div><div class="gmail_extra"><div class="gmail_extra">
rightarg = topology.topogeometry,</div></div><div class="gmail_extra"><div class="gmail_extra"> procedure = topology.topogeometry_egal,</div></div><div class="gmail_extra"><div class="gmail_extra"> commutator = =</div>
</div><div class="gmail_extra"><div class="gmail_extra">);</div></div></blockquote></div>