mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
SGML source for new documentation.
This commit is contained in:
52
doc/src/sgml/xoper.sgml
Normal file
52
doc/src/sgml/xoper.sgml
Normal file
@@ -0,0 +1,52 @@
|
||||
<Chapter>
|
||||
<Title>Extending <Acronym>SQL</Acronym>: Operators</Title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName> 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.
|
||||
|
||||
<ProgramListing>
|
||||
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 = +
|
||||
);
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
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.
|
||||
|
||||
<ProgramListing>
|
||||
SELECT (a + b) AS c FROM test_complex;
|
||||
|
||||
+----------------+
|
||||
|c |
|
||||
+----------------+
|
||||
|(5.2,6.05) |
|
||||
+----------------+
|
||||
|(133.42,144.95) |
|
||||
+----------------+
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</Chapter>
|
||||
Reference in New Issue
Block a user