diff options
Diffstat (limited to 'doc/src/sgml/xoper.sgml')
-rw-r--r-- | doc/src/sgml/xoper.sgml | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/doc/src/sgml/xoper.sgml b/doc/src/sgml/xoper.sgml new file mode 100644 index 00000000000..fa5e7342f67 --- /dev/null +++ b/doc/src/sgml/xoper.sgml @@ -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> |