1818#include "access/heapam.h"
1919#include "storage/ipc.h"
2020#include "catalog/pg_operator.h"
21+ #include "catalog/pg_type.h"
2122
2223PG_MODULE_MAGIC ;
2324
@@ -367,7 +368,10 @@ handle_binary_opexpr(const PartRelationInfo *prel, const OpExpr *expr,
367368return ALL ;
368369}
369370case PT_RANGE :
370- value = c -> constvalue ;
371+ if (c -> consttype == DATEOID )
372+ value = TimeTzADTPGetDatum (date2timestamp_no_overflow (c -> constvalue ));
373+ else
374+ value = c -> constvalue ;
371375rangerel = (RangeRelation * )
372376hash_search (range_restrictions , (const void * )& prel -> oid ,HASH_FIND ,NULL );
373377if (rangerel != NULL )
@@ -391,16 +395,19 @@ handle_binary_opexpr(const PartRelationInfo *prel, const OpExpr *expr,
391395if (i >=0 && i < rangerel -> nranges )
392396{
393397re = & rangerel -> ranges [i ];
394- if (re -> min <=value && value < re -> max )
398+ if (re -> min <=value && value <= re -> max )
395399{
396400found = true;
397401break ;
398402}
399403else if (value < re -> min )
400404endidx = i - 1 ;
401- else if (value >=re -> max )
405+ // else if (value >= re->max)
406+ else if (value > re -> max )
402407startidx = i + 1 ;
403408}
409+ else
410+ break ;
404411/* for debug's sake */
405412Assert (++ counter < 100 );
406413}
@@ -425,7 +432,7 @@ handle_binary_opexpr(const PartRelationInfo *prel, const OpExpr *expr,
425432endidx = rangerel -> nranges - 1 ;
426433break ;
427434case OP_STRATEGY_GT :
428- startidx = (re -> min == value ) ?i + 1 :i ;
435+ startidx = (re -> max == value ) ?i + 1 :i ;
429436endidx = rangerel -> nranges - 1 ;
430437}
431438for (j = startidx ;j <=endidx ;j ++ )
@@ -690,11 +697,7 @@ Datum
690697on_partitions_created (PG_FUNCTION_ARGS ) {
691698/* Reload config */
692699LWLockAcquire (AddinShmemInitLock ,LW_EXCLUSIVE );
693-
694700load_part_relations_hashtable ();
695- // load_hash_restrictions_hashtable();
696- // load_range_restrictions_hashtable();
697-
698701LWLockRelease (AddinShmemInitLock );
699702
700703PG_RETURN_NULL ();
@@ -708,15 +711,12 @@ on_partitions_updated(PG_FUNCTION_ARGS) {
708711int i ;
709712
710713LWLockAcquire (AddinShmemInitLock ,LW_EXCLUSIVE );
711-
712714/* parent relation oid */
713715relid = DatumGetInt32 (PG_GETARG_DATUM (0 ));
714-
715716prel = (PartRelationInfo * )
716717hash_search (relations , (const void * )& relid ,HASH_FIND ,0 );
717718prel -> children_count = 0 ;
718719load_part_relations_hashtable ();
719-
720720LWLockRelease (AddinShmemInitLock );
721721
722722PG_RETURN_NULL ();
@@ -733,7 +733,6 @@ on_partitions_removed(PG_FUNCTION_ARGS) {
733733
734734/* parent relation oid */
735735relid = DatumGetInt32 (PG_GETARG_DATUM (0 ));
736-
737736prel = (PartRelationInfo * )
738737hash_search (relations , (const void * )& relid ,HASH_FIND ,0 );
739738