diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tutorial/funcs.c | 20 | ||||
-rw-r--r-- | src/tutorial/funcs.source | 24 |
2 files changed, 39 insertions, 5 deletions
diff --git a/src/tutorial/funcs.c b/src/tutorial/funcs.c index f597777a1ff..4a61177567c 100644 --- a/src/tutorial/funcs.c +++ b/src/tutorial/funcs.c @@ -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); diff --git a/src/tutorial/funcs.source b/src/tutorial/funcs.source index 542b5c81ec9..eb561537542 100644 --- a/src/tutorial/funcs.source +++ b/src/tutorial/funcs.source @@ -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); |