@@ -114,14 +114,14 @@ rumvalidate(Oid opclassoid)
114114 case GIN_EXTRACTVALUE_PROC :
115115 /* Some opclasses omit nullFlags */
116116 ok = check_amproc_signature (procform -> amproc , INTERNALOID , false,
117- 5 , 5 , opcintype , INTERNALOID ,
117+ 2 , 5 , opcintype , INTERNALOID ,
118118 INTERNALOID , INTERNALOID ,
119119 INTERNALOID );
120120 break ;
121121 case GIN_EXTRACTQUERY_PROC :
122122 /* Some opclasses omit nullFlags and searchMode */
123123 ok = check_amproc_signature (procform -> amproc , INTERNALOID , false,
124- 7 , 7 , opcintype , INTERNALOID ,
124+ 5 , 7 , opcintype , INTERNALOID ,
125125 INT2OID , INTERNALOID , INTERNALOID ,
126126 INTERNALOID , INTERNALOID );
127127 break ;
@@ -151,11 +151,11 @@ rumvalidate(Oid opclassoid)
151151 break ;
152152 case RUM_ORDERING_PROC :
153153 ok = check_amproc_signature (procform -> amproc , FLOAT8OID , false,
154- 9 , 9 , INTERNALOID , INT2OID ,
154+ 10 , 10 , INTERNALOID , INT2OID ,
155155 opcintype , INT4OID ,
156156 INTERNALOID , INTERNALOID ,
157157 INTERNALOID , INTERNALOID ,
158- INTERNALOID );
158+ INTERNALOID , INTERNALOID );
159159 break ;
160160 case RUM_OUTER_ORDERING_PROC :
161161 ok = check_amproc_signature (procform -> amproc , FLOAT8OID , false,
@@ -164,7 +164,7 @@ rumvalidate(Oid opclassoid)
164164 break ;
165165 case RUM_ADDINFO_JOIN :
166166 ok = check_amproc_signature (procform -> amproc , BYTEAOID , false,
167- 2 , 2 , opckeytype , opckeytype );
167+ 2 , 2 , INTERNALOID , INTERNALOID );
168168 break ;
169169 default :
170170 ereport (INFO ,
@@ -207,22 +207,25 @@ rumvalidate(Oid opclassoid)
207207 result = false;
208208 }
209209
210- /* rum doesn't support ORDER BY operators */
211- if (oprform -> amoppurpose != AMOP_SEARCH ||
212- OidIsValid (oprform -> amopsortfamily ))
210+ /* Check ORDER BY operator signature */
211+ if (oprform -> amoppurpose == AMOP_ORDER )
213212 {
214- ereport (INFO ,
215- (errcode (ERRCODE_INVALID_OBJECT_DEFINITION ),
216- errmsg ("rum opfamily %s contains invalid ORDER BY specification for operator %s" ,
217- opfamilyname ,
218- format_operator (oprform -> amopopr ))));
219- result = false;
213+ if (!check_amop_signature (oprform -> amopopr , FLOAT8OID ,
214+ oprform -> amoplefttype ,
215+ oprform -> amoprighttype ))
216+ {
217+ ereport (INFO ,
218+ (errcode (ERRCODE_INVALID_OBJECT_DEFINITION ),
219+ errmsg ("rum opfamily %s contains invalid ORDER BY specification for operator %s" ,
220+ opfamilyname ,
221+ format_operator (oprform -> amopopr ))));
222+ result = false;
223+ }
220224 }
221-
222- /* Check operator signature --- same for all rum strategies */
223- if (!check_amop_signature (oprform -> amopopr , BOOLOID ,
224- oprform -> amoplefttype ,
225- oprform -> amoprighttype ))
225+ /* Check other operator signature */
226+ else if (!check_amop_signature (oprform -> amopopr , BOOLOID ,
227+ oprform -> amoplefttype ,
228+ oprform -> amoprighttype ))
226229 {
227230 ereport (INFO ,
228231 (errcode (ERRCODE_INVALID_OBJECT_DEFINITION ),
@@ -263,9 +266,7 @@ rumvalidate(Oid opclassoid)
263266 continue ; /* got it */
264267 if (i == GIN_COMPARE_PARTIAL_PROC )
265268 continue ; /* optional method */
266- if (i == GIN_CONSISTENT_PROC )
267- continue ;
268- if (i == RUM_PRE_CONSISTENT_PROC )
269+ if (i >= RUM_CONFIG_PROC )
269270 continue ;
270271 ereport (INFO ,
271272 (errcode (ERRCODE_INVALID_OBJECT_DEFINITION ),
0 commit comments