File tree Expand file tree Collapse file tree 1 file changed +26
-6
lines changed Expand file tree Collapse file tree 1 file changed +26
-6
lines changed Original file line number Diff line number Diff line change 1
1
/*
2
2
* GiST support for ltree
3
3
* Teodor Sigaev <teodor@stack.net>
4
- * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.17 2006/08/07 17:39:04 teodor Exp $
4
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.18 2006/08/08 15:45:18 teodor Exp $
5
5
*/
6
6
7
7
#include "ltree.h"
@@ -456,16 +456,36 @@ gist_isparent(ltree_gist * key, ltree * query)
456
456
return false;
457
457
}
458
458
459
+ static ltree *
460
+ copy_ltree ( ltree * src ) {
461
+ ltree * dst = (ltree * )palloc (src -> len );
462
+ memcpy (dst , src , src -> len );
463
+ return dst ;
464
+ }
465
+
459
466
static bool
460
467
gist_ischild (ltree_gist * key , ltree * query )
461
468
{
462
- if (ltree_compare (query , LTG_GETLNODE (key )) < 0 )
463
- return false;
469
+ ltree * left = copy_ltree (LTG_GETLNODE (key ));
470
+ ltree * right = copy_ltree (LTG_GETRNODE (key ));
471
+ bool res = true;
464
472
465
- if (ltree_compare ( query , LTG_GETRNODE ( key )) > 0 )
466
- return false ;
473
+ if (left -> numlevel > query -> numlevel )
474
+ left -> numlevel = query -> numlevel ;
467
475
468
- return true;
476
+ if (ltree_compare (query , left ) < 0 )
477
+ res = false;
478
+
479
+ if (right -> numlevel > query -> numlevel )
480
+ right -> numlevel = query -> numlevel ;
481
+
482
+ if (res && ltree_compare (query , right ) > 0 )
483
+ res = false;
484
+
485
+ pfree (left );
486
+ pfree (right );
487
+
488
+ return res ;
469
489
}
470
490
471
491
static bool
You can’t perform that action at this time.
0 commit comments