@@ -16,6 +16,7 @@ HTAB *relations = NULL;
16
16
HTAB * range_restrictions = NULL ;
17
17
bool initialization_needed = true;
18
18
19
+ static FmgrInfo * qsort_type_cmp_func ;
19
20
20
21
static bool validate_range_constraint (Expr * ,PartRelationInfo * ,Datum * ,Datum * );
21
22
static bool validate_hash_constraint (Expr * expr ,PartRelationInfo * prel ,int * hash );
@@ -279,7 +280,12 @@ load_check_constraints(Oid parent_oid)
279
280
280
281
if (prel -> parttype == PT_RANGE )
281
282
{
283
+ TypeCacheEntry * tce ;
284
+
282
285
/* Sort ascending */
286
+ tce = lookup_type_cache (prel -> atttype ,
287
+ TYPECACHE_CMP_PROC |TYPECACHE_CMP_PROC_FINFO );
288
+ qsort_type_cmp_func = & tce -> cmp_proc_finfo ;
283
289
qsort (ranges ,proc ,sizeof (RangeEntry ),cmp_range_entries );
284
290
285
291
/* Copy oids to prel */
@@ -308,11 +314,7 @@ cmp_range_entries(const void *p1, const void *p2)
308
314
const RangeEntry * v1 = (const RangeEntry * )p1 ;
309
315
const RangeEntry * v2 = (const RangeEntry * )p2 ;
310
316
311
- if (v1 -> min < v2 -> min )
312
- return -1 ;
313
- if (v1 -> min > v2 -> min )
314
- return 1 ;
315
- return 0 ;
317
+ return FunctionCall2 (qsort_type_cmp_func ,v1 -> min ,v2 -> min );
316
318
}
317
319
318
320
/*