@@ -166,6 +166,24 @@ get_cmp_func(Oid type1, Oid type2)
166
166
return cmp_func ;
167
167
}
168
168
169
+ // Datums
170
+ // get_range_min(range, size_t idx, bool byVal)
171
+ // {
172
+ // if (byVal)
173
+ // return (Datum)range[idx].min;
174
+ // else
175
+ // return PointerGetDatum(&range[idx].min);
176
+ // }
177
+
178
+ // Datum
179
+ // get_range_max(range, size_t idx, bool byVal)
180
+ // {
181
+ // if (byVal)
182
+ // return (Datum)range[idx].max;
183
+ // else
184
+ // return PointerGetDatum(&range[idx].max);
185
+ // }
186
+
169
187
/*
170
188
* Planner hook. It disables inheritance for tables that have been partitioned
171
189
* by pathman to prevent standart PostgreSQL partitioning mechanism from
@@ -702,6 +720,7 @@ handle_binary_opexpr(const PartRelationInfo *prel, WrapperNode *result,
702
720
cmp_max ,
703
721
endidx = rangerel -> ranges .length - 1 ;
704
722
RangeEntry * ranges = dsm_array_get_pointer (& rangerel -> ranges );
723
+ bool byVal = rangerel -> by_val ;
705
724
706
725
/* Check boundaries */
707
726
if (rangerel -> ranges .length == 0 )
@@ -712,8 +731,12 @@ handle_binary_opexpr(const PartRelationInfo *prel, WrapperNode *result,
712
731
else
713
732
{
714
733
/* Corner cases */
715
- cmp_min = FunctionCall2 (& cmp_func ,value ,ranges [0 ].min ),
716
- cmp_max = FunctionCall2 (& cmp_func ,value ,ranges [rangerel -> ranges .length - 1 ].max );
734
+ // cmp_min = FunctionCall2(&cmp_func, value, ranges[0].min),
735
+ // cmp_max = FunctionCall2(&cmp_func, value, ranges[rangerel->ranges.length - 1].max);
736
+ cmp_min = FunctionCall2 (& cmp_func ,value ,
737
+ PATHMAN_GET_DATUM (ranges [0 ].min ,byVal )),
738
+ cmp_max = FunctionCall2 (& cmp_func ,value ,
739
+ PATHMAN_GET_DATUM (ranges [rangerel -> ranges .length - 1 ].max ,byVal ));
717
740
718
741
if ((cmp_min < 0 &&
719
742
(strategy == BTLessEqualStrategyNumber ||
@@ -753,8 +776,11 @@ handle_binary_opexpr(const PartRelationInfo *prel, WrapperNode *result,
753
776
i = startidx + (endidx - startidx ) /2 ;
754
777
Assert (i >=0 && i < rangerel -> ranges .length );
755
778
re = & ranges [i ];
756
- cmp_min = FunctionCall2 (& cmp_func ,value ,re -> min );
757
- cmp_max = FunctionCall2 (& cmp_func ,value ,re -> max );
779
+ // cmp_min = FunctionCall2(&cmp_func, value, re->min);
780
+ // cmp_max = FunctionCall2(&cmp_func, value, re->max);
781
+ cmp_min = FunctionCall2 (& cmp_func ,value ,PATHMAN_GET_DATUM (re -> min ,byVal ));
782
+ cmp_max = FunctionCall2 (& cmp_func ,value ,PATHMAN_GET_DATUM (re -> max ,byVal ));
783
+
758
784
is_less = (cmp_min < 0 || (cmp_min == 0 && strategy == BTLessStrategyNumber ));
759
785
is_greater = (cmp_max > 0 || (cmp_max >=0 && strategy != BTLessStrategyNumber ));
760
786
@@ -854,6 +880,7 @@ range_binary_search(const RangeRelation *rangerel, FmgrInfo *cmp_func, Datum val
854
880
{
855
881
RangeEntry * ranges = dsm_array_get_pointer (& rangerel -> ranges );
856
882
RangeEntry * re ;
883
+ bool byVal = rangerel -> by_val ;
857
884
int cmp_min ,
858
885
cmp_max ,
859
886
i = 0 ,
@@ -866,8 +893,11 @@ range_binary_search(const RangeRelation *rangerel, FmgrInfo *cmp_func, Datum val
866
893
* foundPtr = false;
867
894
868
895
/* Check boundaries */
869
- cmp_min = FunctionCall2 (cmp_func ,value ,ranges [0 ].min ),
870
- cmp_max = FunctionCall2 (cmp_func ,value ,ranges [rangerel -> ranges .length - 1 ].max );
896
+ // cmp_min = FunctionCall2(cmp_func, value, ranges[0].min),
897
+ // cmp_max = FunctionCall2(cmp_func, value, ranges[rangerel->ranges.length - 1].max);
898
+ cmp_min = FunctionCall2 (cmp_func ,value ,PATHMAN_GET_DATUM (ranges [0 ].min ,byVal )),
899
+ cmp_max = FunctionCall2 (cmp_func ,value ,PATHMAN_GET_DATUM (ranges [rangerel -> ranges .length - 1 ].max ,byVal ));
900
+
871
901
if (cmp_min < 0 || cmp_max > 0 )
872
902
{
873
903
return i ;
@@ -878,8 +908,10 @@ range_binary_search(const RangeRelation *rangerel, FmgrInfo *cmp_func, Datum val
878
908
i = startidx + (endidx - startidx ) /2 ;
879
909
Assert (i >=0 && i < rangerel -> ranges .length );
880
910
re = & ranges [i ];
881
- cmp_min = FunctionCall2 (cmp_func ,value ,re -> min );
882
- cmp_max = FunctionCall2 (cmp_func ,value ,re -> max );
911
+ // cmp_min = FunctionCall2(cmp_func, value, re->min);
912
+ // cmp_max = FunctionCall2(cmp_func, value, re->max);
913
+ cmp_min = FunctionCall2 (cmp_func ,value ,PATHMAN_GET_DATUM (re -> min ,byVal ));
914
+ cmp_max = FunctionCall2 (cmp_func ,value ,PATHMAN_GET_DATUM (re -> max ,byVal ));
883
915
884
916
if (cmp_min >=0 && cmp_max < 0 )
885
917
{