/* use in array iterator */
-extern PGDLLEXPORT Datum ltree_isparent(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltree_risparent(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltq_regex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltq_rregex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum lt_q_regex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum lt_q_rregex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltxtq_exec(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltxtq_rexec(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltq_regex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltq_rregex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _lt_q_regex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _lt_q_rregex(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltxtq_exec(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltxtq_rexec(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltree_isparent(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum _ltree_risparent(PG_FUNCTION_ARGS);
+Datum ltree_isparent(PG_FUNCTION_ARGS);
+Datum ltree_risparent(PG_FUNCTION_ARGS);
+Datum ltq_regex(PG_FUNCTION_ARGS);
+Datum ltq_rregex(PG_FUNCTION_ARGS);
+Datum lt_q_regex(PG_FUNCTION_ARGS);
+Datum lt_q_rregex(PG_FUNCTION_ARGS);
+Datum ltxtq_exec(PG_FUNCTION_ARGS);
+Datum ltxtq_rexec(PG_FUNCTION_ARGS);
+Datum _ltq_regex(PG_FUNCTION_ARGS);
+Datum _ltq_rregex(PG_FUNCTION_ARGS);
+Datum _lt_q_regex(PG_FUNCTION_ARGS);
+Datum _lt_q_rregex(PG_FUNCTION_ARGS);
+Datum _ltxtq_exec(PG_FUNCTION_ARGS);
+Datum _ltxtq_rexec(PG_FUNCTION_ARGS);
+Datum _ltree_isparent(PG_FUNCTION_ARGS);
+Datum _ltree_risparent(PG_FUNCTION_ARGS);
/* Concatenation functions */
-extern PGDLLEXPORT Datum ltree_addltree(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltree_addtext(PG_FUNCTION_ARGS);
-extern PGDLLEXPORT Datum ltree_textadd(PG_FUNCTION_ARGS);
+Datum ltree_addltree(PG_FUNCTION_ARGS);
+Datum ltree_addtext(PG_FUNCTION_ARGS);
+Datum ltree_textadd(PG_FUNCTION_ARGS);
/* Util function */
-extern PGDLLEXPORT Datum ltree_in(PG_FUNCTION_ARGS);
+Datum ltree_in(PG_FUNCTION_ARGS);
bool ltree_execute(ITEM *curitem, void *checkval,
bool calcnot, bool (*chkcond) (void *checkval, ITEM *val));
error messages to this effect.
-
-
- To work correctly on Windows, C>-language functions need
- to be marked with PGDLLEXPORT>, unless you use a build
- process that marks all global functions that way. In simple cases
- this detail will be handled transparently by
- the PG_FUNCTION_INFO_V1> macro. However, if you write
- explicit external declarations (perhaps in header files), be sure
- to write them like this:
-extern PGDLLEXPORT Datum funcname(PG_FUNCTION_ARGS);
-
- or you'll get compiler complaints when building on Windows. (On
- other platforms, the PGDLLEXPORT> macro does nothing.)
-
-
*
* On Windows, the function and info function must be exported. Our normal
* build processes take care of that via .DEF files or --export-all-symbols.
- * Module authors using a different build process might do it differently,
- * so we declare these functions PGDLLEXPORT for their convenience.
+ * Module authors using a different build process might need to manually
+ * declare the function PGDLLEXPORT. We do that automatically here for the
+ * info function, since authors shouldn't need to be explicitly aware of it.
*/
#define PG_FUNCTION_INFO_V1(funcname) \
-extern PGDLLEXPORT Datum funcname(PG_FUNCTION_ARGS); \
+extern Datum funcname(PG_FUNCTION_ARGS); \
extern PGDLLEXPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \
const Pg_finfo_record * \
CppConcat(pg_finfo_,funcname) (void) \