in GetOperatorFromWellKnownStrategy: *strat = GistTranslateStratnum(opclass, instrat); if (*strat == InvalidStrategy) { HeapTuple tuple; tuple = SearchSysCache1(CLAOID, ObjectIdGetDatum(opclass)); if (!HeapTupleIsValid(tuple)) elog(ERROR, "cache lookup failed for operator class %u", opclass); ereport(ERROR, errcode(ERRCODE_UNDEFINED_OBJECT), errmsg(errstr, format_type_be(opcintype)), errdetail("Could not translate strategy number %d for operator class \"%s\" for access method \"%s\".", instrat, NameStr(((Form_pg_opclass) GETSTRUCT(tuple))->opcname), "gist")); ReleaseSysCache(tuple); }
last `ReleaseSysCache(tuple);` is unreachable? @@ -118,12 +120,17 @@ typedef struct RI_ConstraintInfo int16 confdelsetcols[RI_MAX_NUMKEYS]; /* attnums of cols to set on * delete */ char confmatchtype; /* foreign key's match type */ + bool temporal; /* if the foreign key is temporal */ int nkeys; /* number of key columns */ int16 pk_attnums[RI_MAX_NUMKEYS]; /* attnums of referenced cols */ int16 fk_attnums[RI_MAX_NUMKEYS]; /* attnums of referencing cols */ Oid pf_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (PK = FK) */ Oid pp_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (PK = PK) */ Oid ff_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (FK = FK) */ + Oid period_contained_by_oper; /* operator for PERIOD SQL */ + Oid agged_period_contained_by_oper; /* operator for PERIOD SQL */ + Oid period_referenced_agg_proc; /* proc for PERIOD SQL */ + Oid period_referenced_agg_rettype; /* rettype for previous */ the comment seems not clear to me. Here is my understanding about it: period_contained_by_oper is the operator where a single period/range contained by a single period/range. agged_period_contained_by_oper is the operator oid where a period contained by a bound of periods period_referenced_agg_proc is the oprcode of the agged_period_contained_by_oper. period_referenced_agg_rettype is the function period_referenced_agg_proc returning data type.