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",
const void * extnodemethods
static void RegisterExtensibleNodeEntry(HTAB **p_htable, const char *htable_label, const char *extnodename, const void *extnodemethods)
static HTAB * extensible_node_methods
int errcode(int sqlerrcode)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
static const void * GetExtensibleNodeEntry(HTAB *htable, const char *extnodename, bool missing_ok)
static HTAB * custom_scan_methods
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
#define ereport(elevel,...)
void RegisterCustomScanMethods(const CustomScanMethods *methods)
int errmsg(const char *fmt,...)
void RegisterExtensibleNodeMethods(const ExtensibleNodeMethods *methods)
#define EXTNODENAME_MAX_LEN
const CustomScanMethods * GetCustomScanMethods(const char *CustomName, bool missing_ok)
#define ERRCODE_DUPLICATE_OBJECT
const ExtensibleNodeMethods * GetExtensibleNodeMethods(const char *extnodename, bool missing_ok)