40 const char *extnodename,
41 const void *extnodemethods)
46 if (*p_htable == NULL)
58 elog(
ERROR,
"extensible node name is too long");
66 errmsg(
"extensible node type \"%s\" already exists",
79 "Extensible Node Methods",
91 "Custom Scan Methods",
113 (
errcode(ERRCODE_UNDEFINED_OBJECT),
114 errmsg(
"ExtensibleNodeMethods \"%s\" was not registered",
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
static HTAB * extensible_node_methods
void RegisterExtensibleNodeMethods(const ExtensibleNodeMethods *methods)
static const void * GetExtensibleNodeEntry(HTAB *htable, const char *extnodename, bool missing_ok)
void RegisterCustomScanMethods(const CustomScanMethods *methods)
static HTAB * custom_scan_methods
static void RegisterExtensibleNodeEntry(HTAB **p_htable, const char *htable_label, const char *extnodename, const void *extnodemethods)
const CustomScanMethods * GetCustomScanMethods(const char *CustomName, bool missing_ok)
const ExtensibleNodeMethods * GetExtensibleNodeMethods(const char *extnodename, bool missing_ok)
#define EXTNODENAME_MAX_LEN
#define ERRCODE_DUPLICATE_OBJECT
const void * extnodemethods