470,810 Members | 912 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,810 developers. It's quick & easy.

Is the COMMUTATOR clause required for self commutative operators?

In the command

CREATE OPERATOR name (
PROCEDURE = func_name
[, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ]
[, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
[, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)
Is omitting the COMMUTATOR option a problem at all in case of
self-commutative operators? That is, if I define

CREATE OPERATOR public.+(
PROCEDURE = numeric_add_null,
LEFTARG = numeric,
RIGHTARG = numeric,
COMMUTATOR = +)
(where numeric_add_null is a function that handles in NULLs in a
non-standard, but more useful way), since "+" is self commutative, is it
necessary to include it here? Any advantage or disadvantage to ommitting
or including it?

~Berend Tober


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Nov 12 '05 #1
2 1357
bt****@seaworthysys.com wrote:
In the command

CREATE OPERATOR name (
PROCEDURE = func_name
[, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ]
[, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
[, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)
Is omitting the COMMUTATOR option a problem at all in case of
self-commutative operators?


It's an optimization clause, so if you omit it then you prevent certain
optimizations. See
http://www.postgresql.org/docs/curre....html#AEN29826
for details.
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Nov 12 '05 #2
<bt****@seaworthysys.com> writes:
Is omitting the COMMUTATOR option a problem at all in case of
self-commutative operators?


At the moment it only really matters for operators that are used in
top-level WHERE clauses --- which lets out anything that doesn't return
boolean. But I'd say that as a matter of style, if the operator is
self-commutative you should mark it so. Some day the system might
pay attention.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ma*******@postgresql.org so that your
message can get through to the mailing list cleanly

Nov 12 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by moonman | last post: by
34 posts views Thread by Chris | last post: by
2 posts views Thread by AWasilenko | last post: by
3 posts views Thread by Adam W. | last post: by
5 posts views Thread by Mr.SpOOn | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.