<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>