mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Avoid direct cross-module links in hstore_plperl and ltree_plpython, too.
Just turning the crank on the project started in commit d51924be8
.
These cases turn out to be exact subsets of the boilerplate needed
for hstore_plpython.
Discussion: <2652.1475512158@sss.pgh.pa.us>
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#undef _
|
||||
|
||||
#include "fmgr.h"
|
||||
#include "plperl.h"
|
||||
#include "plperl_helpers.h"
|
||||
@ -7,6 +9,58 @@
|
||||
|
||||
PG_MODULE_MAGIC;
|
||||
|
||||
extern void _PG_init(void);
|
||||
|
||||
/* Linkage to functions in hstore module */
|
||||
typedef HStore *(*hstoreUpgrade_t) (Datum orig);
|
||||
static hstoreUpgrade_t hstoreUpgrade_p;
|
||||
typedef int (*hstoreUniquePairs_t) (Pairs *a, int32 l, int32 *buflen);
|
||||
static hstoreUniquePairs_t hstoreUniquePairs_p;
|
||||
typedef HStore *(*hstorePairs_t) (Pairs *pairs, int32 pcount, int32 buflen);
|
||||
static hstorePairs_t hstorePairs_p;
|
||||
typedef size_t (*hstoreCheckKeyLen_t) (size_t len);
|
||||
static hstoreCheckKeyLen_t hstoreCheckKeyLen_p;
|
||||
typedef size_t (*hstoreCheckValLen_t) (size_t len);
|
||||
static hstoreCheckValLen_t hstoreCheckValLen_p;
|
||||
|
||||
|
||||
/*
|
||||
* Module initialize function: fetch function pointers for cross-module calls.
|
||||
*/
|
||||
void
|
||||
_PG_init(void)
|
||||
{
|
||||
/* Asserts verify that typedefs above match original declarations */
|
||||
AssertVariableIsOfType(&hstoreUpgrade, hstoreUpgrade_t);
|
||||
hstoreUpgrade_p = (hstoreUpgrade_t)
|
||||
load_external_function("$libdir/hstore", "hstoreUpgrade",
|
||||
true, NULL);
|
||||
AssertVariableIsOfType(&hstoreUniquePairs, hstoreUniquePairs_t);
|
||||
hstoreUniquePairs_p = (hstoreUniquePairs_t)
|
||||
load_external_function("$libdir/hstore", "hstoreUniquePairs",
|
||||
true, NULL);
|
||||
AssertVariableIsOfType(&hstorePairs, hstorePairs_t);
|
||||
hstorePairs_p = (hstorePairs_t)
|
||||
load_external_function("$libdir/hstore", "hstorePairs",
|
||||
true, NULL);
|
||||
AssertVariableIsOfType(&hstoreCheckKeyLen, hstoreCheckKeyLen_t);
|
||||
hstoreCheckKeyLen_p = (hstoreCheckKeyLen_t)
|
||||
load_external_function("$libdir/hstore", "hstoreCheckKeyLen",
|
||||
true, NULL);
|
||||
AssertVariableIsOfType(&hstoreCheckValLen, hstoreCheckValLen_t);
|
||||
hstoreCheckValLen_p = (hstoreCheckValLen_t)
|
||||
load_external_function("$libdir/hstore", "hstoreCheckValLen",
|
||||
true, NULL);
|
||||
}
|
||||
|
||||
|
||||
/* These defines must be after the module init function */
|
||||
#define hstoreUpgrade hstoreUpgrade_p
|
||||
#define hstoreUniquePairs hstoreUniquePairs_p
|
||||
#define hstorePairs hstorePairs_p
|
||||
#define hstoreCheckKeyLen hstoreCheckKeyLen_p
|
||||
#define hstoreCheckValLen hstoreCheckValLen_p
|
||||
|
||||
|
||||
PG_FUNCTION_INFO_V1(hstore_to_plperl);
|
||||
|
||||
|
Reference in New Issue
Block a user