mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Add documentation about calling version-1 C functions from C.
This topic wasn't really covered before, so fill in some details. Author: Florents Tselai <florents.tselai@gmail.com> Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/90853055-5BBD-493D-91E5-721677C7C59B@gmail.com
This commit is contained in:
@ -11,6 +11,7 @@
|
||||
#include "postgres.h" /* general Postgres declarations */
|
||||
|
||||
#include "executor/executor.h" /* for GetAttributeByName() */
|
||||
#include "utils/fmgrprotos.h" /* for text_starts_with() */
|
||||
#include "utils/geo_decls.h" /* for point type */
|
||||
|
||||
PG_MODULE_MAGIC;
|
||||
@ -102,6 +103,25 @@ concat_text(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_TEXT_P(new_text);
|
||||
}
|
||||
|
||||
/* A wrapper around starts_with(text, text) */
|
||||
|
||||
PG_FUNCTION_INFO_V1(t_starts_with);
|
||||
|
||||
Datum
|
||||
t_starts_with(PG_FUNCTION_ARGS)
|
||||
{
|
||||
text *t1 = PG_GETARG_TEXT_PP(0);
|
||||
text *t2 = PG_GETARG_TEXT_PP(1);
|
||||
Oid collid = PG_GET_COLLATION();
|
||||
bool result;
|
||||
|
||||
result = DatumGetBool(DirectFunctionCall2Coll(text_starts_with,
|
||||
collid,
|
||||
PointerGetDatum(t1),
|
||||
PointerGetDatum(t2)));
|
||||
PG_RETURN_BOOL(result);
|
||||
}
|
||||
|
||||
/* Composite types */
|
||||
|
||||
PG_FUNCTION_INFO_V1(c_overpaid);
|
||||
|
@ -123,16 +123,25 @@ SELECT * FROM EMP;
|
||||
-----------------------------
|
||||
|
||||
CREATE FUNCTION add_one(integer) RETURNS integer
|
||||
AS '_OBJWD_/funcs' LANGUAGE C;
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION add_one(double precision) RETURNS double precision
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION makepoint(point, point) RETURNS point
|
||||
AS '_OBJWD_/funcs' LANGUAGE C;
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION copytext(text) RETURNS text
|
||||
AS '_OBJWD_/funcs' LANGUAGE C;
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION concat_text(text, text) RETURNS text
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION t_starts_with(text, text) RETURNS boolean
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
CREATE FUNCTION c_overpaid(EMP, integer) RETURNS boolean
|
||||
AS '_OBJWD_/funcs' LANGUAGE C;
|
||||
AS '_OBJWD_/funcs' LANGUAGE C STRICT;
|
||||
|
||||
SELECT add_one(3) AS four;
|
||||
|
||||
@ -140,6 +149,8 @@ SELECT makepoint('(1,2)'::point, '(3,4)'::point ) AS newpoint;
|
||||
|
||||
SELECT copytext('hello world!');
|
||||
|
||||
SELECT t_starts_with('foobar', 'foo');
|
||||
|
||||
SELECT name, c_overpaid(EMP, 1500) AS overpaid
|
||||
FROM EMP
|
||||
WHERE name = 'Bill' or name = 'Sam';
|
||||
@ -147,10 +158,13 @@ WHERE name = 'Bill' or name = 'Sam';
|
||||
-- remove functions that were created in this file
|
||||
|
||||
DROP FUNCTION c_overpaid(EMP, integer);
|
||||
DROP FUNCTION t_starts_with(text, text);
|
||||
DROP FUNCTION concat_text(text, text);
|
||||
DROP FUNCTION copytext(text);
|
||||
DROP FUNCTION makepoint(point, point);
|
||||
DROP FUNCTION add_one(double precision);
|
||||
DROP FUNCTION add_one(integer);
|
||||
--DROP FUNCTION clean_EMP();
|
||||
DROP FUNCTION clean_EMP();
|
||||
DROP FUNCTION high_pay();
|
||||
DROP FUNCTION new_emp();
|
||||
DROP FUNCTION add_em(integer, integer);
|
||||
|
Reference in New Issue
Block a user