mirror of https://github.com/citusdata/citus.git
commit
7aaf6b2cb3
|
@ -454,8 +454,14 @@ QueryContainsAggregateWithHLL(Query *query)
|
|||
Oid hllId = get_extension_oid(HLL_EXTENSION_NAME, false);
|
||||
Oid hllSchemaOid = get_extension_schema(hllId);
|
||||
const char *hllSchemaName = get_namespace_name(hllSchemaOid);
|
||||
Oid addFunctionId = FunctionOid(hllSchemaName, HLL_ADD_AGGREGATE_NAME,
|
||||
argCount);
|
||||
|
||||
/*
|
||||
* If the obtained oid is InvalidOid for addFunctionId, that means
|
||||
* we don't have an hll_add_agg function with the given argument count.
|
||||
* So, we don't need to double check whether the obtained id is valid.
|
||||
*/
|
||||
Oid addFunctionId = FunctionOidExtended(hllSchemaName, HLL_ADD_AGGREGATE_NAME,
|
||||
argCount, true);
|
||||
Oid unionFunctionId = FunctionOid(hllSchemaName, HLL_UNION_AGGREGATE_NAME, 1);
|
||||
|
||||
if (aggref->aggfnoid == addFunctionId || aggref->aggfnoid == unionFunctionId)
|
||||
|
|
|
@ -18,11 +18,27 @@
|
|||
#endif
|
||||
|
||||
/*
|
||||
* FunctionOid looks for a function that has the given name and the given number
|
||||
* of arguments, and returns the corresponding function's oid.
|
||||
* FunctionOid searches for a function that has the given name and the given
|
||||
* number of arguments, and returns the corresponding function's oid. The
|
||||
* function reports error if the target function is not found, or it found more
|
||||
* matching instances.
|
||||
*/
|
||||
Oid
|
||||
FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
|
||||
{
|
||||
return FunctionOidExtended(schemaName, functionName, argumentCount, false);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FunctionOidExtended searches for a given function identified by schema,
|
||||
* functionName, and argumentCount. It reports error if the function is not
|
||||
* found or there are more than one match. If the missingOK parameter is set
|
||||
* and there are no matches, then the function returns InvalidOid.
|
||||
*/
|
||||
Oid
|
||||
FunctionOidExtended(const char *schemaName, const char *functionName, int argumentCount,
|
||||
bool missingOK)
|
||||
{
|
||||
FuncCandidateList functionList = NULL;
|
||||
Oid functionOid = InvalidOid;
|
||||
|
@ -32,14 +48,18 @@ FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
|
|||
List *argumentList = NIL;
|
||||
const bool findVariadics = false;
|
||||
const bool findDefaults = false;
|
||||
const bool missingOK = true;
|
||||
|
||||
functionList = FuncnameGetCandidates(qualifiedFunctionNameList, argumentCount,
|
||||
argumentList, findVariadics,
|
||||
findDefaults, missingOK);
|
||||
findDefaults, true);
|
||||
|
||||
if (functionList == NULL)
|
||||
{
|
||||
if (missingOK)
|
||||
{
|
||||
return InvalidOid;
|
||||
}
|
||||
|
||||
ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION),
|
||||
errmsg("function \"%s\" does not exist", functionName)));
|
||||
}
|
||||
|
@ -51,6 +71,7 @@ FunctionOid(const char *schemaName, const char *functionName, int argumentCount)
|
|||
|
||||
/* get function oid from function list's head */
|
||||
functionOid = functionList->oid;
|
||||
|
||||
return functionOid;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,5 +14,7 @@
|
|||
/* Function declaration for getting oid for the given function name */
|
||||
extern Oid FunctionOid(const char *schemaName, const char *functionName,
|
||||
int argumentCount);
|
||||
extern Oid FunctionOidExtended(const char *schemaName, const char *functionName, int
|
||||
argumentCount, bool missingOK);
|
||||
extern ReturnSetInfo * FunctionCallGetTupleStore1(PGFunction function, Oid functionId,
|
||||
Datum argument);
|
||||
|
|
Loading…
Reference in New Issue