Null-safe GiST interface (proposal)

Started by Oleg Bartunovover 24 years ago5 messages
#1Oleg Bartunov
oleg@sai.msu.su

Hi,

we're getting back to GiST development and would like to discuss
our plans for 7.2. This discussion doesn't touch any changes in system tables
to solve index_formtuple problem.
We want to discuss implementation of null-safe interface to GiST
(for reference see thread http://fts.postgresql.org/db/mw/msg.html?mid=1025848 )

There are seven user-defined functions one should write to create GiST opclass:

1. equal - it's already null-safe. GiST core will not call 'equal'
function if any parameter is NULL

2,3. compress/decompress - always return NULL for NULL, so we could also
handle them inside GiST core as for 'equal'

4. penalty - accepts 2 parameters and never returns NULL. In existed
implementations we've seen penalty returns 0 (zero) if
any of the parameters is NULL. For this case we propose
not to call 'penalty' if it's marked as isstrict.

5. consistent - returns 'false' if any of the parameters is NULL.
it never returns NULL.

6. union - accepts array of keys and returns their union. If all keys are NULL
then returns NULL, so we don't need to call this function.
If not all keys are NULL we could:
a) Clean up NULLs from array
b) don't touch this array and require 'union' function to
handle NULL's. In this case we need an additional array
to point NULLs if we want to support parameters pass-by-value

7. picksplit - accepts structure GIST_SPLITVEC and array of keys. It never
returns NULL.
there are 2 variants:
a) Clean up NULLs from array
don't need to change existed opclasses
b) Require 'picksplit' to handle NULL'
To support arguments passed by value we need additional
array as in case 6.b

Summary:

1. Only for one function - penalty, 'isstrict' mark could be required.
in that case 'penalty' will be not called for NULL keys,
otherwise, it's users responsibility to write null-safe code.
Other functions could be handled inside GiST core without
bothering of user. This is quite easy task.

2. For union and picksplit we propose to clean up NULLs from array of
keys, so support of arguments 'passed-by-value' will not require
changes of user interface. It would require some modification of current
algorithm of splitting, but this wouldn't be a complex task for us.

Proposed solution solves the problem with 'pass-by-value' interface,
while we don't see where it could be used because in GiST
key for index type of int4 is 8-byte.

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Oleg Bartunov (#1)
Re: Null-safe GiST interface (proposal)

Oleg Bartunov <oleg@sai.msu.su> writes:

2. For union and picksplit we propose to clean up NULLs from array of
keys, so support of arguments 'passed-by-value' will not require
changes of user interface. It would require some modification of current
algorithm of splitting, but this wouldn't be a complex task for us.

Seems reasonable. Would there ever be a union or picksplit method that
would want to do anything with nulls except ignore them? I can't think
of a reason to do differently, so you're just centralizing the logic to
ignore nulls in these methods.

regards, tom lane

#3Oleg Bartunov
oleg@sai.msu.su
In reply to: Tom Lane (#2)
2 attachment(s)
Re: Re: Null-safe GiST interface (proposal)

Hi,

please apply patch to current CVS which implements:

1. null-safe interface to GiST
(as proposed in http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

2. support for 'pass-by-value' arguments - to test this
we used special opclass for int4 with values in range [0-2^15]
More testing will be done after resolving problem with
index_formtuple and implementation of B-tree using GiST

3. small patch to contrib modules (seg,cube,rtree_gist,intarray) -
mark functions as 'isstrict' where needed.

Patch was intensively tested (attached test.tgz contains test suite):

This is a generic test suite for GiST (7.2):

1. tests GiST multi-key indexes
2. tests null-safe interface to GiST
(see proposal http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

USAGE:

Create db and install contrib modules: intarray, rtree_gist, seg, cube.
Edit gen.pl for $pgsqlsrc
% perl gen.pl > /tmp/data
% psql TESTDB < test.sql

Regards,
Oleg

On Fri, 3 Aug 2001, Tom Lane wrote:

Oleg Bartunov <oleg@sai.msu.su> writes:

2. For union and picksplit we propose to clean up NULLs from array of
keys, so support of arguments 'passed-by-value' will not require
changes of user interface. It would require some modification of current
algorithm of splitting, but this wouldn't be a complex task for us.

Seems reasonable. Would there ever be a union or picksplit method that
would want to do anything with nulls except ignore them? I can't think
of a reason to do differently, so you're just centralizing the logic to
ignore nulls in these methods.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

Attachments:

patch.gzapplication/octet-stream; name=patch.gzDownload
�5�o;patch�=kS�X��=��P[El��cf�MH������k.E[6"��Jr�L������t$��g�25�-�G��O�������K�Nz��N��E�������A�*��O������?pwX�^w��������h�j�?��Z
��b�[����m��X��� <����u�����o�g�O�q����=����a������~<����Igh+��*7A0�T:q|���3�����v���C�0����	U�������������C+�nc�q���nch�����J�����a��r�}���}F�1*��c��2]
p	3x0f�Mnr�Gq�1�������&K��h2�����G^|6���B��@�n�CD�������E,���l0*b����XA����'���"�FB����4L�+H�&bXLDh�U�x~o��3�p��*��8����N��
�`2F�������.��y�b/�/����~������*�f����a��	R���o��TX���}��r�@4F@K��������l�sC���7���_��������%,p~Z����!����"�x�QK���#����|��c`$/�!��{��a��z���>�j�\�lK��4e��~t"�td�^������z	��>��
�x�[y����c����4�I�fi#�z���wP��{�������K��TR�28���~�}�C1
�\���4���d�������0_��t\N�C��L5�o5�E�1�W�k`t��85���8�I�R������;������^������������%�^k�tL��	�R�����f���v�X�4��}:���=��?���?�����_/��_�>y]��7�W�p��xSe�N��b��C��5�����.o���"����,�
BPo�
��lyh����N�n�^�7�q[O���V��K����9}�����}��2F��+$��O06!����JN�~g��m�?d���j�������C��L#d5���h$k����w�)hE�UM[Zcu��#���w�
#�<s`X0r�Z��((�����w���z�z
~����oU�{������������GIOE	������/��Y�P������%Z2*kl�u����A��
�O�6�����H��8b��p�V���8&2@�p������:�}��*[�@@�7�K�_q{?V�=������x]q\_|�����R���6���� ��_��a7���[�����;�M(�����Z���c�h�a�/�~,�
�#��}�@��m�m^���){P��2�	$m������z#,���:�bog����
Ci$�T����&DS�Y�#���:�� �
�U��^�bvN5x���3C�5	 =A0^{���qA
D�Uf���@A��A��$4����!�3	���@�S�ST|z��d��4����O���-���������]��iK
_e��G`khW��E��(fg��H-��$)�SF������Tv[�F�LC6�0����$�:�t�Nc��\������\�t���������[���B xN,�lrg��5�������#V?d>��QB���e4���e����&��~'!H���Y��7���b�e������i"P�D�F�-��D!c��0����`0�E�/�?���������1�6'��y�kU+6�F2�V�E�4BsG��	cz�\�7�)0���5?�E�E��+(�����Gy������"K	?�q�w�������y�E����O�9C��j����_�������_�7�����(��C����XK
9,�<���� �E^H�Th��f8�_;�XQ��t�"CV�b����W��0�:�v���x���%�F�=�bH-�S6#P������l3vF���8��{�m������;q�V6�Bt7�5�q0���R���@-�� Bo�6|Q�2��-
@Ea�$y&/B����|p
���� ,t��t
?�Q��9h��m0��Q	�t���K���\@o)L�
h���������El���$�R��05$Z�j<7��s��R�����9�vFH2C�"����o IH3D�l���������G�������x�����^����_@��J��*�`2�m��A�&~(��r�jY�k��<!H�0�y6�yK���f�H��{�|�~�^��]��}���������.��Z��V�i��*>Z�z!��8nrR��[7�GX[T�n��p�����j��	Fy�gMe��l�V��U���>�]���]	k�����(��u�f��+I'K��E��8��V.�De�=/��=���~��y�	��� ��aO���x�zB�;���`��`d�D1A��2U"V	������C�����O-�{�d���]�����T�b�0�4��6|��� ����!���D���&P�;�*��EG]�l�h��?��>?��t~v�������yJPr"���!*��=\L��ZVN�i������E�d�&/�-��-B�K�����4wNs71�������cH��������F�������T����N��2� ����`hC�1�-|M��/r�t�]&D���C�T6��y_��`O�$*��7v���@e�Sr��������)�g��|����&�{
\<����Z�z���<��7�U-���*k����
��C��7�J|'������a'��J\��&�������/����/��5��c�Ak�+K�I�����Y������'�����|SS�B\y��p�1�'��S����%��W�F���X�>�<����e���0�Of�b�����%����l��O��'���s/�NC�L
��.��]�zX�3�&�a�`�n���`������e�N���d�E��Ym��/\�f������@]!6��-,���rk:�+�M4d0���x@\�������[�u=��)���$����Cit	�af/�����|B�[`�*zxY�i�~���D��T�E�%j�Y�*#/"��u&�5#7��#.r����tZ�Z7������a�7D��n��U���#��g��Y�y4MiG0��<�0��#MB��~�t{���C�M���h�������@k%��4i
��&T�b��jh��
gS���r����;��9,�77���P/q,POL6�c�Y9��ES&�����l�GW�h�S�"^9�:�����Z�P).Y'�dX���U�S�K��U��d���[)�|7��s`.�����T�cP[�_<2��8W$0w(������ALjP���$��:��:�R���kO����u��A]k������w�VS/��3�������?��[���E���M^�'Mh�������}�L�x��h�Bw���[��w�V��q�6�>V����6C���5�5Lj@fyk�n����eb4P��LGJ5�	V�����V���D�N��.�v)��ukfn���V��t�Q��="���>$���e����D�������������'��9�B���I�X-�6,�
v����jv�4�Y��F
J$����T�2v	iKy)=���XfH��I�)����*��wp��`J�x����/�L�dl&�(�;�%b_��0g(�Sc2��	�e��������w������m��\�L�,���*��B�r:K�v��R�V*;��Aa���l� ���v[�����*�'��3�)\���nF�%U]K#(��-��>�0��]`B�LP2�3�E%��+L�8^���9}�TW��Y8��9��U|��'F��P��L��(n5�K�������Kn���`b���bs�!���!�Xg�����H����^�uv�o�s@��]y�M-������T�H��[Zm����i�������<]K�������O
���d9<��L0f�����0����O��V��;�Db+��{��1���ZD���/�P�����~5�c`dbP��b�To��U=���:���EX?�%��L$���<+���6)'�����-�e��XN:N�������c�����g�TZ&���L��N��M��y5�(�+Qn/��+�OX�D�V<�`���21��G~�2�g��M%�8�l�F�:��,Y4�0�T������lvf������fs��:��������V�}��X��r ���rnZ��0i�a��U^��L%�������Kq�#?����6��/���EZ�����^yi2;1�!d�������*�u8�b�T��R7��dl���w���3>er>eVpy��_�2��%�XQR~������������E{g#�K���jx�8��?�w��	�j�R��E����S_K��\6���H��l����������	��3�%�m��~�������7g�?=�os������CO�1�����Yf0�:�t��P�QK��K���Y��\�;���P ���)���}�����S1Y����C��K�x�������N�
�����D�@�\���.
w��8f�2|���.�-��N(@%�x������b���2��G��<~L�
��Ov.��"���l"�����
��d��H�td�%K��I�zr�5XmqY��L����������\����H�#���F�iY��
�w��?�=�b���[�:������
E�U<�Bo.�9����� ,�����i{1���eh�������	��9�x>�tZ��~F�
#w�;��N��
����+�-���f������$��|������J�WD�u�����5���l"��&��
�L6�����4)��|9V���������3��*�O��r����Y���:mwOOe��v���-�"�"���[J�5��,��n�8`tM�2�(�C��{���O�p�N�5N`�_�=���9C�w����^������N��<[X$����U6���q�@<��F��zT�w5�<��Y���*A�tj�����7�ofSLO����/oq���;w�=9�)�����>� �8_q@��$���
G�Roh!����|\�B�$���P�/��H�Q�4���?()��5��&KN7s����	�O�|+�:
��^������A�� �0�E�D���4�y[\�%I�������^b	W�J.��KIs���XG!������deT���+�������M�����,o�L�������R�F�)�4�,|Om�&#$��I��M�2�gWB ���AP����Wi�8���D�S7o��������t��������	�0�����~��
�q�>Ml����6�r)�W<������-^U����:}��%��X��Y�-��d���5��d�m,��RS�����V��r��u�����~]R������\87r�B�gA.�!�'k�p��*���o@�?��Lb��&����l�g�!!&����#Cn5��%2���'��+�fd�z�:4#FF�JJ��3�2���$��M��Q��b��fYF�`����W���rQQG�����r��u�!��e��d��;R�,�R}�,�L���jV�q����������A��"�P��<�V����.��)��h
�[���Ej�P��qjf�&L�M�_�������I����Us������<*�T����_*�JN��m7�hJl���k��D_:�W��
O�����O|7��"{�c�����*���&�-�{��N��_�Pwr�X<�xP/"���*]4���a  qe��Gr������Z�[2���}^��i�L�T�,A.���
��l��#k'0���L]���B�z�����3
"��o�[B����H�������E\��p\w�H{�GYjK�y�s�VZ��)X�|lJ�����"k����
:
������=�����[��|�]�m��3u=�����q����4�.������:�U���B����g����~��'��'OO��q�t#�8`���a�=��i���	&#:�&��o�����~��[w[��;�L�<8{b���������T�:��3���
d(U�����f���0}D�sD����|�D��Q�����L�cz'���A&�	����%�,*����|{�O{�s�����yyhzY���"s������l4�=���($2�r��-���3�J�E^Y��y�m�X��t������z0�RfZU3�<����)�*J�L�m5����0#��;Ym��<��
s��u3��U��-������2oe��2��Jc�e`�N6o	��n��s&�E�eS��x���D� ��x��x������d��=o���B����������<7.�w� �_\��E�U^J��m������gQ �{����R ���MU����M����rQ���5"[�V���iu�L�VV�����{�M&x"0kE%t�����\s�JP%?w=�*���
R%��Ja�[5'����w)��_��6</�-�(�:��w��H�nVe��T|�$"�)���K�s~���Y:M'��.U���t�7��M�M)�L��X7I&�n���K��j&;K��:�{k�.�2;��'����2mm�T9������\YB��M���@����=,�l:��~��+y7��i��-�5%y
0���.&���)L��o�JY��D%��4\�q
���U�1xO�c�C��j>�� ��u��
�G
-������v\w�8��m4��n�.c�}z�+����W�qZE���B��JlI.�B��{~��U�>4������o�u��G�"�FA4�t�*�
����$�sM\c�y3^���v�1��;��0�� BiC>�!�>���a����D���v3����S���m��)����v��d0Osv���wwGj�5��&��wW�&�]d�i�B�I}�x����'}V���4���v����s�d��]��l�}��KT*��w/�����zU5/���A[7�G8�����=L���K�WS�@��,�v��[8;`X��P��F�����\���aJ��|B��Ay��T�3"�3�/����um��a�{�����#�U.������S#��=t�:<��[ue��0��0�e�fhj����Z�:��2��m���p�����!� �]t������%���J%��C�|W��w������<��;b��ID+�Z
�����uq 5g�}�[��aq�:a�9��������H@KO��RN��y��s�
�@��O��Xq�������[o�is,1���1�������
n�5[�}�GL�l��_1����-��2����j�h��G����R�*SM\��t�Q�a7��)�I�E�U�i�<����t�z��h��5�@�<��f�S����6!�D}A�D����$u�E-��C�uin�e��M��G���s�n��EI��������`���+�B$��aJ��c��2�>M����Dr�'p	8d		(�[���Vk���puW�^H8v[{����������� ��8�V��U���������r	WNz�Wn��XVO�[����zmm�����PN�h�B?<�K��OI�)��a�0�Kx{>�x0M��{�8�3l������p��c��w�	���VWh��^�Rja�8��&�e���>P&�`�f�&Mf���pC,f����7��j����DT��F��'��sv�z
�#f�$���m'���{���o�&n�����C�MZcL/�&�w�O��@b�����jju�n��k�M�+������3p
������U��\p~{�=�b�Nz��nif*�%�je��YSKhZwI��Zxd]����������p����-����o������K����G��C��G���\#��s���$�P����l��ad��a�7p��;�]q>����x��Xm�E7iA��N���YIn�O�^8��usF�L�;�|�s���F���c�>�_�M����%1�M���k^$���g��E�j�m/�`����5�9�2:��>N��i���a����E��q�I^�!������qL�K�D�.�5Fhv*�0U���R��t�����q��gX�8\$��="�L,~�C�S���cBeK���Y)�W��l/�p�����*���D���`��.I���&(�n���8�v��[������g
�h��q[��Z!��T\6���F�J���������
��"�k�R�J�E�����E��������y}B���_>��7n�i�U���1��|Y��B#��{3���'	��M�l�]"��N&���m2���@��3DT�E��<#>���������g�c���D\�>A;�b��F��bU�����L�h5u�Jgu�TQ,������9��3��?�n�2(�?��S�D�p+��l5����I�Os
(�����O����e�rR�2�_.*�U������5�Q���Ig��Q����:#{B�������Q T1�&h�MDw��L#Q~���jW
?�2%7z��z������8��1 {��@
�U��l�H�FR�A+3U�;�N'�!���������N��������yy�;��p�m�?�\N<v<0�bn���<h��F�����^1]g����ul)�������C���~����o�{�m�����:?A�y�������3�]_���8U����j��������/�X_��?����������g��O^�w�go?�=a/�/��|���{&MO���*��#�/Yg����Ucy��*�eC��$.�S����G��\6s�g�
����?���}U?���c��<���h��s�����}���u�z�0�DwB?��e�.�jg��!�g�mgT,#K5~�@�q������2I6��lz��S�6X&�Y��p�"�<]}�`Z����%��z�0�GB���40����${����4�:���T�.|�:�`�UJK���P�����:zy:�=��|>��V�>#��f�g�sE,��`?�����s���C���z�a-�A���\�a��x�1�I2��
���?��M�XP�3�HK�<s���q���h��;��4����7vF^0)��@Y��c��z����&T��\(t��LB��K��z�����TB4�������Ys����h������a�������$������Q>����!�c9������rG�j��-�8��Gwr��G��G�}��f'?�U�S&����?�C#��?z��1eA7��cV=�p�N�|w��������n����E�����x,��,���O@�z��1�+�T���HU��j�UgV�VP�fEa^������g�rZ.�������0YEuK�m`��L*�j�<�Ra��R.e��zOf���Y(e�0)��H"�I��U�l�R��P*�DUu�g�������4�D�B��������������1fs���m���Y���?���������o�#s������_�IlQ�bi����<j��9����u��V���F��3T�mE�����^�K����Y�{K�r��,�OM5�g���q|����Aq��.Dqg������p��,=\3'�]��F}��	�k���R����'�%A�d_A����B 3��������Z��`����&���I��w������m���.���~E��>�*I���E�ZX�0���
����Z���M�m
���)�	�)��s��O�s\�(��
���SP�T���0�<�D�]�${���)[�T���A����������H
�8�pg�T������%�s��� NQ7����jps�=<!T=w?\��;yu��� ����s������b�#mK��j[NCh
�������������>��fQ������>�]��p_�L$ha�����sM���+A�JX�PC$8�%E�)�^�D��`��f�i��J�h�Q(K�2� �C�p�����"�<H�&;����*�P	j��������R���&O���� C�$���^�q)G���iA?3��x�kA=���������|v����d��Qr��@��.BM�c,j�&�{�?�bM��
/�\QJg��C��=!*���
test.tgzapplication/octet-stream; name=test.tgzDownload
#4Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Oleg Bartunov (#3)
Re: Re: Null-safe GiST interface (proposal)

Your patch has been added to the PostgreSQL unapplied patches list at:

http://candle.pha.pa.us/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

Hi,

please apply patch to current CVS which implements:

1. null-safe interface to GiST
(as proposed in http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

2. support for 'pass-by-value' arguments - to test this
we used special opclass for int4 with values in range [0-2^15]
More testing will be done after resolving problem with
index_formtuple and implementation of B-tree using GiST

3. small patch to contrib modules (seg,cube,rtree_gist,intarray) -
mark functions as 'isstrict' where needed.

Patch was intensively tested (attached test.tgz contains test suite):

This is a generic test suite for GiST (7.2):

1. tests GiST multi-key indexes
2. tests null-safe interface to GiST
(see proposal http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

USAGE:

Create db and install contrib modules: intarray, rtree_gist, seg, cube.
Edit gen.pl for $pgsqlsrc
% perl gen.pl > /tmp/data
% psql TESTDB < test.sql

Regards,
Oleg

On Fri, 3 Aug 2001, Tom Lane wrote:

Oleg Bartunov <oleg@sai.msu.su> writes:

2. For union and picksplit we propose to clean up NULLs from array of
keys, so support of arguments 'passed-by-value' will not require
changes of user interface. It would require some modification of current
algorithm of splitting, but this wouldn't be a complex task for us.

Seems reasonable. Would there ever be a union or picksplit method that
would want to do anything with nulls except ignore them? I can't think
of a reason to do differently, so you're just centralizing the logic to
ignore nulls in these methods.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

Content-Description:

[ Attachment, skipping... ]

Content-Description:

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#5Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Oleg Bartunov (#3)
Re: Re: Null-safe GiST interface (proposal)

Main patch applied. I did not apply the test code patch. Thanks.

Hi,

please apply patch to current CVS which implements:

1. null-safe interface to GiST
(as proposed in http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

2. support for 'pass-by-value' arguments - to test this
we used special opclass for int4 with values in range [0-2^15]
More testing will be done after resolving problem with
index_formtuple and implementation of B-tree using GiST

3. small patch to contrib modules (seg,cube,rtree_gist,intarray) -
mark functions as 'isstrict' where needed.

Patch was intensively tested (attached test.tgz contains test suite):

This is a generic test suite for GiST (7.2):

1. tests GiST multi-key indexes
2. tests null-safe interface to GiST
(see proposal http://fts.postgresql.org/db/mw/msg.html?mid=1028327)

USAGE:

Create db and install contrib modules: intarray, rtree_gist, seg, cube.
Edit gen.pl for $pgsqlsrc
% perl gen.pl > /tmp/data
% psql TESTDB < test.sql

Regards,
Oleg

On Fri, 3 Aug 2001, Tom Lane wrote:

Oleg Bartunov <oleg@sai.msu.su> writes:

2. For union and picksplit we propose to clean up NULLs from array of
keys, so support of arguments 'passed-by-value' will not require
changes of user interface. It would require some modification of current
algorithm of splitting, but this wouldn't be a complex task for us.

Seems reasonable. Would there ever be a union or picksplit method that
would want to do anything with nulls except ignore them? I can't think
of a reason to do differently, so you're just centralizing the logic to
ignore nulls in these methods.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

Content-Description:

[ Attachment, skipping... ]

Content-Description:

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026