diff --git a/src/common/backend/utils/adt/tsrank.cpp b/src/common/backend/utils/adt/tsrank.cpp index 5abf78cf5..58ef32aa0 100644 --- a/src/common/backend/utils/adt/tsrank.cpp +++ b/src/common/backend/utils/adt/tsrank.cpp @@ -342,9 +342,10 @@ static float calc_rank(const float* w, TSVector t, TSQuery q, int4 method) static float* getWeights(ArrayType* win) { - static float ws[lengthof(weights)]; int i; float4* arrdata = NULL; + float* ws = u_sess->utils_cxt.tsrankWs; + Assert(sizeof(u_sess->utils_cxt.tsrankWs) == sizeof(weights)); if (win == NULL) return weights; diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index 871cf6fd4..d57a16f6d 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -70,6 +70,8 @@ #include "tcop/dest.h" #include "og_record_time.h" +#define TSRANK_WEIGHTS_LEN 4 + typedef void (*pg_on_exit_callback)(int code, Datum arg); /* all session level attribute which expose to user. */ @@ -691,6 +693,9 @@ typedef struct knl_u_utils_context { HTAB* set_user_params_htab; DestReceiver* spi_printtupDR; + + /* var in tsrank.cpp */ + float tsrankWs[TSRANK_WEIGHTS_LEN]; } knl_u_utils_context; typedef struct knl_u_security_context {