From e0852543e2ac8ec78f138dfecde5a1ac491272cb Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sat, 30 Oct 1999 16:18:54 +0000
Subject: Add 0.98.

---
 src/bin/pgaccess/lib/help/create_function.hlp | 69 +++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 src/bin/pgaccess/lib/help/create_function.hlp

(limited to 'src/bin/pgaccess/lib/help/create_function.hlp')

diff --git a/src/bin/pgaccess/lib/help/create_function.hlp b/src/bin/pgaccess/lib/help/create_function.hlp
new file mode 100644
index 00000000000..828f157c618
--- /dev/null
+++ b/src/bin/pgaccess/lib/help/create_function.hlp
@@ -0,0 +1,69 @@
+.pgaw:Help.f.t insert end \
+"Synopsis" {bold} "
+
+CREATE FUNCTION name ( \[ ftype \[, ...\] \] )
+RETURNS rtype
+AS definition
+LANGUAGE 'langname'
+" {code} "
+
+name" {italic} "
+	The name of a function to create. 
+
+" {} "ftype" {italic} "
+	The data type of function arguments. 
+
+" {} "rtype" {italic} "
+	The return data type. 
+
+" {} "definition" {italic} "
+	A string defining the function; the meaning depends on the language. It may be an internal function name, the path to an object file, an SQL query, or text in a procedural language. 
+
+" {} "langname" {italic} "
+	may be 'C', 'sql', 'internal' or 'plname', where 'plname' is the name of a created procedural language. See CREATE LANGUAGE for details. 
+
+" {} "Outputs" {bold} "
+
+CREATE
+	This is returned if the command completes successfully. 
+
+CREATE FUNCTION allows a Postgres user to register a function with a database. Subsequently, this user is treated as the owner of the function. 
+
+" {} "Notes:" {italic} "Refer to the chapter on functions in the PostgreSQL Programmer's Guide for further information. 
+
+Use " {} "DROP FUNCTION" {link drop_function} " to drop user-defined functions. 
+
+Postgres allows function \"overloading\"; that is, the same name can be used for several different functions so long as they have distinct argument types. This facility must be used with caution for INTERNAL and C-language functions, however. 
+
+Two INTERNAL functions cannot have the same C name without causing errors at link time. To get around that, give them different C names (for example, use the argument types as part of the C names), then specify those names in the AS clause of CREATE FUNCTION. If the AS clause is left empty then CREATE FUNCTION assumes the C name of the function is the same as the SQL name. 
+
+For dynamically-loaded C functions, the SQL name of the function must be the same as the C function name, because the AS clause is used to give the path name of the object file containing the C code. In this situation it is best not to try to overload SQL function names. It might work to load a C function that has the same C name as an internal function or another dynamically-loaded function --- or it might not. On some platforms the dynamic loader may botch the load in interesting ways if there is a conflict of C function names. So, even if it works for you today, you might regret overloading names later when you try to run the code somewhere else. 
+
+" {} "Usage" {bold} "
+
+To create a simple SQL function: 
+" {} "
+CREATE FUNCTION product_price(int4) RETURNS float8 AS
+	'SELECT price FROM products where id = \$1'
+LANGUAGE 'sql';
+
+SELECT product_price(314) AS answer;
+
+answer 
+------
+15.25
+" {code} "
+
+To create a C function, calling a routine from a user-created shared library. This particular routine calculates a check digit and returns TRUE if the check digit in the function parameters is correct. It is intended for use in a CHECK contraint. 
+" {} "
+CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool
+AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c';
+
+CREATE TABLE product (
+	id        char(8) PRIMARY KEY,
+	eanprefix char(8) CHECK (eanprefix ~ '\[0-9\]{2}-\[0-9\]{5}')
+	REFERENCES brandname(ean_prefix),
+	eancode   char(6) CHECK (eancode ~ '\[0-9\]{6}'),
+	CONSTRAINT ean    CHECK (ean_checkdigit(eanprefix, eancode))
+);
+" {code}
-- 
cgit v1.2.3

