mirror of https://github.com/postgres/postgres
71 lines
1.9 KiB
HTML
71 lines
1.9 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>The POSTGRES95 User Manual - THE QUERY LANGUAGE</TITLE>
|
|
</HEAD>
|
|
|
|
<BODY>
|
|
|
|
<font size=-1>
|
|
<A HREF="pg95user.html">[ TOC ]</A>
|
|
<A HREF="xtypes.html">[ Previous ]</A>
|
|
<A HREF="xaggr.html">[ Next ]</A>
|
|
</font>
|
|
<HR>
|
|
<H1>9. EXTENDING SQL: OPERATORS</H1>
|
|
<HR>
|
|
POSTGRES supports left unary, right unary and binary
|
|
operators. Operators can be overloaded, or re-used
|
|
with different numbers and types of arguments. If
|
|
there is an ambiguous situation and the system cannot
|
|
determine the correct operator to use, it will return
|
|
an error and you may have to typecast the left and/or
|
|
right operands to help it understand which operator you
|
|
meant to use.
|
|
To create an operator for adding two complex numbers
|
|
can be done as follows. First we need to create a
|
|
function to add the new types. Then, we can create the
|
|
operator with the function.
|
|
|
|
<pre>
|
|
CREATE FUNCTION complex_add(complex, complex)
|
|
RETURNS complex
|
|
AS '$PWD/obj/complex.so'
|
|
LANGUAGE 'c';
|
|
|
|
|
|
CREATE OPERATOR + (
|
|
leftarg = complex,
|
|
rightarg = complex,
|
|
procedure = complex_add,
|
|
commutator = +
|
|
);
|
|
</pre>
|
|
|
|
We've shown how to create a binary operator here. To
|
|
create unary operators, just omit one of leftarg (for
|
|
left unary) or rightarg (for right unary).
|
|
If we give the system enough type information, it can
|
|
automatically figure out which operators to use.
|
|
|
|
<pre>
|
|
SELECT (a + b) AS c FROM test_complex;
|
|
|
|
|
|
+----------------+
|
|
|c |
|
|
+----------------+
|
|
|(5.2,6.05) |
|
|
+----------------+
|
|
|(133.42,144.95) |
|
|
+----------------+
|
|
</pre>
|
|
<HR>
|
|
<font size=-1>
|
|
<A HREF="pg95user.html">[ TOC ]</A>
|
|
<A HREF="xtypes.html">[ Previous ]</A>
|
|
<A HREF="xaggr.html">[ Next ]</A>
|
|
</font>
|
|
</BODY>
|
|
</HTML>
|
|
|