diff --git a/src/common/backend/parser/parse_type.cpp b/src/common/backend/parser/parse_type.cpp index 34f329f18..f4c1f7e28 100644 --- a/src/common/backend/parser/parse_type.cpp +++ b/src/common/backend/parser/parse_type.cpp @@ -1773,6 +1773,9 @@ Oid LookupTypeInPackage(List* typeNames, const char* typeName, Oid pkgOid, Oid n bool IsBinaryType(Oid typid) { + if (u_sess->hook_cxt.isBinaryType != NULL) { + return ((isBinaryType)(u_sess->hook_cxt.isBinaryType))(typid); + } return ((typid) == BLOBOID || (typid) == BYTEAOID); } @@ -1807,4 +1810,4 @@ TypeTupStatus GetTypeTupStatus(Type typ) return (UNDEFINEDOID == HeapTupleGetOid(typ) ? UndefineTypeTup : NormalTypeTup); } return InvalidTypeTup; -} \ No newline at end of file +} diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index 607d2004c..e89df225e 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -2947,6 +2947,7 @@ typedef struct knl_u_hook_context { void *deparseQueryHook; void *checkSqlFnRetvalHook; void *typeTransfer; + void *isBinaryType; void *forTsdbHook; void *pluginPlannerHook; void *groupingplannerHook; diff --git a/src/include/parser/parse_type.h b/src/include/parser/parse_type.h index 83a21cea6..faabc0dfa 100644 --- a/src/include/parser/parse_type.h +++ b/src/include/parser/parse_type.h @@ -65,6 +65,7 @@ extern HeapTuple FindPkgVariableType(ParseState* pstate, const TypeName* typname TypeDependExtend* depend_extend = NULL); extern char* CastPackageTypeName(const char* typName, Oid pkgOid, bool isPackage, bool isPublic = true); extern bool IsBinaryType(Oid typid); +typedef bool (*isBinaryType)(Oid typid); #define ISCOMPLEX(typeid) (typeidTypeRelid(typeid) != InvalidOid) extern void check_type_supports_multi_charset(Oid typid, bool allow_array); extern char* ParseTypeName(const char* typName, Oid pkgOid);