head	1.5;
access;
symbols
	REL7_2_8:1.4
	REL7_2_7:1.4
	REL7_2_6:1.4
	REL7_2_5:1.4
	REL7_2_4:1.4
	REL7_2_3:1.4
	REL7_2_STABLE:1.4.0.6
	REL7_2:1.4
	REL7_2_RC2:1.4
	REL7_2_RC1:1.4
	REL7_2_BETA5:1.4
	REL7_2_BETA4:1.4
	REL7_2_BETA3:1.4
	REL7_2_BETA2:1.4
	REL7_2_BETA1:1.4
	REL7_1_2:1.4
	REL7_1_STABLE:1.4.0.4
	REL7_1_BETA:1.4
	REL7_1_BETA3:1.4
	REL7_1_BETA2:1.4
	REL7_1:1.4
	REL7_0_PATCHES:1.4.0.2
	REL7_0:1.4
	REL6_5_PATCHES:1.1.0.2;
locks; strict;
comment	@# @;


1.5
date	2002.08.30.16.48.43;	author momjian;	state dead;
branches;
next	1.4;

1.4
date	99.10.30.16.18.50;	author momjian;	state Exp;
branches;
next	1.3;

1.3
date	99.10.30.16.01.13;	author momjian;	state dead;
branches;
next	1.2;

1.2
date	99.09.20.22.30.47;	author scrappy;	state Exp;
branches;
next	1.1;

1.1
date	99.09.13.18.47.30;	author momjian;	state dead;
branches
	1.1.2.1;
next	;

1.1.2.1
date	99.09.13.18.47.30;	author momjian;	state Exp;
branches;
next	;


desc
@@


1.5
log
@Remove pgaccess from CVS.  It has its own home now.
@
text
@.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}
@


1.4
log
@Add 0.98.
@
text
@@


1.3
log
@Remove 0.96 for update to 0.98
@
text
@@


1.2
log
@
bring it all into -current again
@
text
@@


1.1
log
@file create_function.hlp was initially added on branch REL6_5_PATCHES.
@
text
@d1 69
@


1.1.2.1
log
@Update pgaccess 0.98
@
text
@a0 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}
@
