1/* contrib/ltree/ltree--1.1.sql */ 2 3-- complain if script is sourced in psql, rather than via CREATE EXTENSION 4\echo Use "CREATE EXTENSION ltree" to load this file. \quit 5 6CREATE FUNCTION ltree_in(cstring) 7RETURNS ltree 8AS 'MODULE_PATHNAME' 9LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 10 11CREATE FUNCTION ltree_out(ltree) 12RETURNS cstring 13AS 'MODULE_PATHNAME' 14LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 15 16CREATE TYPE ltree ( 17 INTERNALLENGTH = -1, 18 INPUT = ltree_in, 19 OUTPUT = ltree_out, 20 STORAGE = extended 21); 22 23 24--Compare function for ltree 25CREATE FUNCTION ltree_cmp(ltree,ltree) 26RETURNS int4 27AS 'MODULE_PATHNAME' 28LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 29 30CREATE FUNCTION ltree_lt(ltree,ltree) 31RETURNS bool 32AS 'MODULE_PATHNAME' 33LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 34 35CREATE FUNCTION ltree_le(ltree,ltree) 36RETURNS bool 37AS 'MODULE_PATHNAME' 38LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 39 40CREATE FUNCTION ltree_eq(ltree,ltree) 41RETURNS bool 42AS 'MODULE_PATHNAME' 43LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 44 45CREATE FUNCTION ltree_ge(ltree,ltree) 46RETURNS bool 47AS 'MODULE_PATHNAME' 48LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 49 50CREATE FUNCTION ltree_gt(ltree,ltree) 51RETURNS bool 52AS 'MODULE_PATHNAME' 53LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 54 55CREATE FUNCTION ltree_ne(ltree,ltree) 56RETURNS bool 57AS 'MODULE_PATHNAME' 58LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 59 60 61CREATE OPERATOR < ( 62 LEFTARG = ltree, 63 RIGHTARG = ltree, 64 PROCEDURE = ltree_lt, 65 COMMUTATOR = '>', 66 NEGATOR = '>=', 67 RESTRICT = contsel, 68 JOIN = contjoinsel 69); 70 71CREATE OPERATOR <= ( 72 LEFTARG = ltree, 73 RIGHTARG = ltree, 74 PROCEDURE = ltree_le, 75 COMMUTATOR = '>=', 76 NEGATOR = '>', 77 RESTRICT = contsel, 78 JOIN = contjoinsel 79); 80 81CREATE OPERATOR >= ( 82 LEFTARG = ltree, 83 RIGHTARG = ltree, 84 PROCEDURE = ltree_ge, 85 COMMUTATOR = '<=', 86 NEGATOR = '<', 87 RESTRICT = contsel, 88 JOIN = contjoinsel 89); 90 91CREATE OPERATOR > ( 92 LEFTARG = ltree, 93 RIGHTARG = ltree, 94 PROCEDURE = ltree_gt, 95 COMMUTATOR = '<', 96 NEGATOR = '<=', 97 RESTRICT = contsel, 98 JOIN = contjoinsel 99); 100 101CREATE OPERATOR = ( 102 LEFTARG = ltree, 103 RIGHTARG = ltree, 104 PROCEDURE = ltree_eq, 105 COMMUTATOR = '=', 106 NEGATOR = '<>', 107 RESTRICT = eqsel, 108 JOIN = eqjoinsel, 109 SORT1 = '<', 110 SORT2 = '<' 111); 112 113CREATE OPERATOR <> ( 114 LEFTARG = ltree, 115 RIGHTARG = ltree, 116 PROCEDURE = ltree_ne, 117 COMMUTATOR = '<>', 118 NEGATOR = '=', 119 RESTRICT = neqsel, 120 JOIN = neqjoinsel 121); 122 123--util functions 124 125CREATE FUNCTION subltree(ltree,int4,int4) 126RETURNS ltree 127AS 'MODULE_PATHNAME' 128LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 129 130CREATE FUNCTION subpath(ltree,int4,int4) 131RETURNS ltree 132AS 'MODULE_PATHNAME' 133LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 134 135CREATE FUNCTION subpath(ltree,int4) 136RETURNS ltree 137AS 'MODULE_PATHNAME' 138LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 139 140CREATE FUNCTION index(ltree,ltree) 141RETURNS int4 142AS 'MODULE_PATHNAME', 'ltree_index' 143LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 144 145CREATE FUNCTION index(ltree,ltree,int4) 146RETURNS int4 147AS 'MODULE_PATHNAME', 'ltree_index' 148LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 149 150CREATE FUNCTION nlevel(ltree) 151RETURNS int4 152AS 'MODULE_PATHNAME' 153LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 154 155CREATE FUNCTION ltree2text(ltree) 156RETURNS text 157AS 'MODULE_PATHNAME' 158LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 159 160CREATE FUNCTION text2ltree(text) 161RETURNS ltree 162AS 'MODULE_PATHNAME' 163LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 164 165CREATE FUNCTION lca(_ltree) 166RETURNS ltree 167AS 'MODULE_PATHNAME','_lca' 168LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 169 170CREATE FUNCTION lca(ltree,ltree) 171RETURNS ltree 172AS 'MODULE_PATHNAME' 173LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 174 175CREATE FUNCTION lca(ltree,ltree,ltree) 176RETURNS ltree 177AS 'MODULE_PATHNAME' 178LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 179 180CREATE FUNCTION lca(ltree,ltree,ltree,ltree) 181RETURNS ltree 182AS 'MODULE_PATHNAME' 183LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 184 185CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree) 186RETURNS ltree 187AS 'MODULE_PATHNAME' 188LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 189 190CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree) 191RETURNS ltree 192AS 'MODULE_PATHNAME' 193LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 194 195CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree) 196RETURNS ltree 197AS 'MODULE_PATHNAME' 198LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 199 200CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree,ltree) 201RETURNS ltree 202AS 'MODULE_PATHNAME' 203LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 204 205CREATE FUNCTION ltree_isparent(ltree,ltree) 206RETURNS bool 207AS 'MODULE_PATHNAME' 208LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 209 210CREATE FUNCTION ltree_risparent(ltree,ltree) 211RETURNS bool 212AS 'MODULE_PATHNAME' 213LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 214 215CREATE FUNCTION ltree_addltree(ltree,ltree) 216RETURNS ltree 217AS 'MODULE_PATHNAME' 218LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 219 220CREATE FUNCTION ltree_addtext(ltree,text) 221RETURNS ltree 222AS 'MODULE_PATHNAME' 223LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 224 225CREATE FUNCTION ltree_textadd(text,ltree) 226RETURNS ltree 227AS 'MODULE_PATHNAME' 228LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 229 230CREATE FUNCTION ltreeparentsel(internal, oid, internal, integer) 231RETURNS float8 232AS 'MODULE_PATHNAME' 233LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 234 235CREATE OPERATOR @> ( 236 LEFTARG = ltree, 237 RIGHTARG = ltree, 238 PROCEDURE = ltree_isparent, 239 COMMUTATOR = '<@', 240 RESTRICT = ltreeparentsel, 241 JOIN = contjoinsel 242); 243 244CREATE OPERATOR ^@> ( 245 LEFTARG = ltree, 246 RIGHTARG = ltree, 247 PROCEDURE = ltree_isparent, 248 COMMUTATOR = '^<@', 249 RESTRICT = contsel, 250 JOIN = contjoinsel 251); 252 253CREATE OPERATOR <@ ( 254 LEFTARG = ltree, 255 RIGHTARG = ltree, 256 PROCEDURE = ltree_risparent, 257 COMMUTATOR = '@>', 258 RESTRICT = ltreeparentsel, 259 JOIN = contjoinsel 260); 261 262CREATE OPERATOR ^<@ ( 263 LEFTARG = ltree, 264 RIGHTARG = ltree, 265 PROCEDURE = ltree_risparent, 266 COMMUTATOR = '^@>', 267 RESTRICT = contsel, 268 JOIN = contjoinsel 269); 270 271CREATE OPERATOR || ( 272 LEFTARG = ltree, 273 RIGHTARG = ltree, 274 PROCEDURE = ltree_addltree 275); 276 277CREATE OPERATOR || ( 278 LEFTARG = ltree, 279 RIGHTARG = text, 280 PROCEDURE = ltree_addtext 281); 282 283CREATE OPERATOR || ( 284 LEFTARG = text, 285 RIGHTARG = ltree, 286 PROCEDURE = ltree_textadd 287); 288 289 290-- B-tree support 291 292CREATE OPERATOR CLASS ltree_ops 293 DEFAULT FOR TYPE ltree USING btree AS 294 OPERATOR 1 < , 295 OPERATOR 2 <= , 296 OPERATOR 3 = , 297 OPERATOR 4 >= , 298 OPERATOR 5 > , 299 FUNCTION 1 ltree_cmp(ltree, ltree); 300 301 302--lquery type 303CREATE FUNCTION lquery_in(cstring) 304RETURNS lquery 305AS 'MODULE_PATHNAME' 306LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 307 308CREATE FUNCTION lquery_out(lquery) 309RETURNS cstring 310AS 'MODULE_PATHNAME' 311LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 312 313CREATE TYPE lquery ( 314 INTERNALLENGTH = -1, 315 INPUT = lquery_in, 316 OUTPUT = lquery_out, 317 STORAGE = extended 318); 319 320CREATE FUNCTION ltq_regex(ltree,lquery) 321RETURNS bool 322AS 'MODULE_PATHNAME' 323LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 324 325CREATE FUNCTION ltq_rregex(lquery,ltree) 326RETURNS bool 327AS 'MODULE_PATHNAME' 328LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 329 330CREATE OPERATOR ~ ( 331 LEFTARG = ltree, 332 RIGHTARG = lquery, 333 PROCEDURE = ltq_regex, 334 COMMUTATOR = '~', 335 RESTRICT = contsel, 336 JOIN = contjoinsel 337); 338 339CREATE OPERATOR ~ ( 340 LEFTARG = lquery, 341 RIGHTARG = ltree, 342 PROCEDURE = ltq_rregex, 343 COMMUTATOR = '~', 344 RESTRICT = contsel, 345 JOIN = contjoinsel 346); 347 348--not-indexed 349CREATE OPERATOR ^~ ( 350 LEFTARG = ltree, 351 RIGHTARG = lquery, 352 PROCEDURE = ltq_regex, 353 COMMUTATOR = '^~', 354 RESTRICT = contsel, 355 JOIN = contjoinsel 356); 357 358CREATE OPERATOR ^~ ( 359 LEFTARG = lquery, 360 RIGHTARG = ltree, 361 PROCEDURE = ltq_rregex, 362 COMMUTATOR = '^~', 363 RESTRICT = contsel, 364 JOIN = contjoinsel 365); 366 367CREATE FUNCTION lt_q_regex(ltree,_lquery) 368RETURNS bool 369AS 'MODULE_PATHNAME' 370LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 371 372CREATE FUNCTION lt_q_rregex(_lquery,ltree) 373RETURNS bool 374AS 'MODULE_PATHNAME' 375LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 376 377CREATE OPERATOR ? ( 378 LEFTARG = ltree, 379 RIGHTARG = _lquery, 380 PROCEDURE = lt_q_regex, 381 COMMUTATOR = '?', 382 RESTRICT = contsel, 383 JOIN = contjoinsel 384); 385 386CREATE OPERATOR ? ( 387 LEFTARG = _lquery, 388 RIGHTARG = ltree, 389 PROCEDURE = lt_q_rregex, 390 COMMUTATOR = '?', 391 RESTRICT = contsel, 392 JOIN = contjoinsel 393); 394 395--not-indexed 396CREATE OPERATOR ^? ( 397 LEFTARG = ltree, 398 RIGHTARG = _lquery, 399 PROCEDURE = lt_q_regex, 400 COMMUTATOR = '^?', 401 RESTRICT = contsel, 402 JOIN = contjoinsel 403); 404 405CREATE OPERATOR ^? ( 406 LEFTARG = _lquery, 407 RIGHTARG = ltree, 408 PROCEDURE = lt_q_rregex, 409 COMMUTATOR = '^?', 410 RESTRICT = contsel, 411 JOIN = contjoinsel 412); 413 414CREATE FUNCTION ltxtq_in(cstring) 415RETURNS ltxtquery 416AS 'MODULE_PATHNAME' 417LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 418 419CREATE FUNCTION ltxtq_out(ltxtquery) 420RETURNS cstring 421AS 'MODULE_PATHNAME' 422LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 423 424CREATE TYPE ltxtquery ( 425 INTERNALLENGTH = -1, 426 INPUT = ltxtq_in, 427 OUTPUT = ltxtq_out, 428 STORAGE = extended 429); 430 431-- operations WITH ltxtquery 432 433CREATE FUNCTION ltxtq_exec(ltree, ltxtquery) 434RETURNS bool 435AS 'MODULE_PATHNAME' 436LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 437 438CREATE FUNCTION ltxtq_rexec(ltxtquery, ltree) 439RETURNS bool 440AS 'MODULE_PATHNAME' 441LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 442 443CREATE OPERATOR @ ( 444 LEFTARG = ltree, 445 RIGHTARG = ltxtquery, 446 PROCEDURE = ltxtq_exec, 447 COMMUTATOR = '@', 448 RESTRICT = contsel, 449 JOIN = contjoinsel 450); 451 452CREATE OPERATOR @ ( 453 LEFTARG = ltxtquery, 454 RIGHTARG = ltree, 455 PROCEDURE = ltxtq_rexec, 456 COMMUTATOR = '@', 457 RESTRICT = contsel, 458 JOIN = contjoinsel 459); 460 461--not-indexed 462CREATE OPERATOR ^@ ( 463 LEFTARG = ltree, 464 RIGHTARG = ltxtquery, 465 PROCEDURE = ltxtq_exec, 466 COMMUTATOR = '^@', 467 RESTRICT = contsel, 468 JOIN = contjoinsel 469); 470 471CREATE OPERATOR ^@ ( 472 LEFTARG = ltxtquery, 473 RIGHTARG = ltree, 474 PROCEDURE = ltxtq_rexec, 475 COMMUTATOR = '^@', 476 RESTRICT = contsel, 477 JOIN = contjoinsel 478); 479 480--GiST support for ltree 481CREATE FUNCTION ltree_gist_in(cstring) 482RETURNS ltree_gist 483AS 'MODULE_PATHNAME' 484LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 485 486CREATE FUNCTION ltree_gist_out(ltree_gist) 487RETURNS cstring 488AS 'MODULE_PATHNAME' 489LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 490 491CREATE TYPE ltree_gist ( 492 internallength = -1, 493 input = ltree_gist_in, 494 output = ltree_gist_out, 495 storage = plain 496); 497 498 499CREATE FUNCTION ltree_consistent(internal,ltree,int2,oid,internal) 500RETURNS bool as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 501 502CREATE FUNCTION ltree_compress(internal) 503RETURNS internal as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 504 505CREATE FUNCTION ltree_decompress(internal) 506RETURNS internal as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 507 508CREATE FUNCTION ltree_penalty(internal,internal,internal) 509RETURNS internal as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 510 511CREATE FUNCTION ltree_picksplit(internal, internal) 512RETURNS internal as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 513 514CREATE FUNCTION ltree_union(internal, internal) 515RETURNS ltree_gist as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 516 517CREATE FUNCTION ltree_same(ltree_gist, ltree_gist, internal) 518RETURNS internal as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 519 520CREATE OPERATOR CLASS gist_ltree_ops 521 DEFAULT FOR TYPE ltree USING gist AS 522 OPERATOR 1 < , 523 OPERATOR 2 <= , 524 OPERATOR 3 = , 525 OPERATOR 4 >= , 526 OPERATOR 5 > , 527 OPERATOR 10 @> , 528 OPERATOR 11 <@ , 529 OPERATOR 12 ~ (ltree, lquery) , 530 OPERATOR 13 ~ (lquery, ltree) , 531 OPERATOR 14 @ (ltree, ltxtquery) , 532 OPERATOR 15 @ (ltxtquery, ltree) , 533 OPERATOR 16 ? (ltree, _lquery) , 534 OPERATOR 17 ? (_lquery, ltree) , 535 FUNCTION 1 ltree_consistent (internal, ltree, int2, oid, internal), 536 FUNCTION 2 ltree_union (internal, internal), 537 FUNCTION 3 ltree_compress (internal), 538 FUNCTION 4 ltree_decompress (internal), 539 FUNCTION 5 ltree_penalty (internal, internal, internal), 540 FUNCTION 6 ltree_picksplit (internal, internal), 541 FUNCTION 7 ltree_same (ltree_gist, ltree_gist, internal), 542 STORAGE ltree_gist; 543 544 545-- arrays of ltree 546 547CREATE FUNCTION _ltree_isparent(_ltree,ltree) 548RETURNS bool 549AS 'MODULE_PATHNAME' 550LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 551 552CREATE FUNCTION _ltree_r_isparent(ltree,_ltree) 553RETURNS bool 554AS 'MODULE_PATHNAME' 555LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 556 557CREATE FUNCTION _ltree_risparent(_ltree,ltree) 558RETURNS bool 559AS 'MODULE_PATHNAME' 560LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 561 562CREATE FUNCTION _ltree_r_risparent(ltree,_ltree) 563RETURNS bool 564AS 'MODULE_PATHNAME' 565LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 566 567CREATE FUNCTION _ltq_regex(_ltree,lquery) 568RETURNS bool 569AS 'MODULE_PATHNAME' 570LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 571 572CREATE FUNCTION _ltq_rregex(lquery,_ltree) 573RETURNS bool 574AS 'MODULE_PATHNAME' 575LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 576 577CREATE FUNCTION _lt_q_regex(_ltree,_lquery) 578RETURNS bool 579AS 'MODULE_PATHNAME' 580LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 581 582CREATE FUNCTION _lt_q_rregex(_lquery,_ltree) 583RETURNS bool 584AS 'MODULE_PATHNAME' 585LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 586 587CREATE FUNCTION _ltxtq_exec(_ltree, ltxtquery) 588RETURNS bool 589AS 'MODULE_PATHNAME' 590LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 591 592CREATE FUNCTION _ltxtq_rexec(ltxtquery, _ltree) 593RETURNS bool 594AS 'MODULE_PATHNAME' 595LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 596 597CREATE OPERATOR @> ( 598 LEFTARG = _ltree, 599 RIGHTARG = ltree, 600 PROCEDURE = _ltree_isparent, 601 COMMUTATOR = '<@', 602 RESTRICT = contsel, 603 JOIN = contjoinsel 604); 605 606CREATE OPERATOR <@ ( 607 LEFTARG = ltree, 608 RIGHTARG = _ltree, 609 PROCEDURE = _ltree_r_isparent, 610 COMMUTATOR = '@>', 611 RESTRICT = contsel, 612 JOIN = contjoinsel 613); 614 615CREATE OPERATOR <@ ( 616 LEFTARG = _ltree, 617 RIGHTARG = ltree, 618 PROCEDURE = _ltree_risparent, 619 COMMUTATOR = '@>', 620 RESTRICT = contsel, 621 JOIN = contjoinsel 622); 623 624CREATE OPERATOR @> ( 625 LEFTARG = ltree, 626 RIGHTARG = _ltree, 627 PROCEDURE = _ltree_r_risparent, 628 COMMUTATOR = '<@', 629 RESTRICT = contsel, 630 JOIN = contjoinsel 631); 632 633CREATE OPERATOR ~ ( 634 LEFTARG = _ltree, 635 RIGHTARG = lquery, 636 PROCEDURE = _ltq_regex, 637 COMMUTATOR = '~', 638 RESTRICT = contsel, 639 JOIN = contjoinsel 640); 641 642CREATE OPERATOR ~ ( 643 LEFTARG = lquery, 644 RIGHTARG = _ltree, 645 PROCEDURE = _ltq_rregex, 646 COMMUTATOR = '~', 647 RESTRICT = contsel, 648 JOIN = contjoinsel 649); 650 651CREATE OPERATOR ? ( 652 LEFTARG = _ltree, 653 RIGHTARG = _lquery, 654 PROCEDURE = _lt_q_regex, 655 COMMUTATOR = '?', 656 RESTRICT = contsel, 657 JOIN = contjoinsel 658); 659 660CREATE OPERATOR ? ( 661 LEFTARG = _lquery, 662 RIGHTARG = _ltree, 663 PROCEDURE = _lt_q_rregex, 664 COMMUTATOR = '?', 665 RESTRICT = contsel, 666 JOIN = contjoinsel 667); 668 669CREATE OPERATOR @ ( 670 LEFTARG = _ltree, 671 RIGHTARG = ltxtquery, 672 PROCEDURE = _ltxtq_exec, 673 COMMUTATOR = '@', 674 RESTRICT = contsel, 675 JOIN = contjoinsel 676); 677 678CREATE OPERATOR @ ( 679 LEFTARG = ltxtquery, 680 RIGHTARG = _ltree, 681 PROCEDURE = _ltxtq_rexec, 682 COMMUTATOR = '@', 683 RESTRICT = contsel, 684 JOIN = contjoinsel 685); 686 687 688--not indexed 689CREATE OPERATOR ^@> ( 690 LEFTARG = _ltree, 691 RIGHTARG = ltree, 692 PROCEDURE = _ltree_isparent, 693 COMMUTATOR = '^<@', 694 RESTRICT = contsel, 695 JOIN = contjoinsel 696); 697 698CREATE OPERATOR ^<@ ( 699 LEFTARG = ltree, 700 RIGHTARG = _ltree, 701 PROCEDURE = _ltree_r_isparent, 702 COMMUTATOR = '^@>', 703 RESTRICT = contsel, 704 JOIN = contjoinsel 705); 706 707CREATE OPERATOR ^<@ ( 708 LEFTARG = _ltree, 709 RIGHTARG = ltree, 710 PROCEDURE = _ltree_risparent, 711 COMMUTATOR = '^@>', 712 RESTRICT = contsel, 713 JOIN = contjoinsel 714); 715 716CREATE OPERATOR ^@> ( 717 LEFTARG = ltree, 718 RIGHTARG = _ltree, 719 PROCEDURE = _ltree_r_risparent, 720 COMMUTATOR = '^<@', 721 RESTRICT = contsel, 722 JOIN = contjoinsel 723); 724 725CREATE OPERATOR ^~ ( 726 LEFTARG = _ltree, 727 RIGHTARG = lquery, 728 PROCEDURE = _ltq_regex, 729 COMMUTATOR = '^~', 730 RESTRICT = contsel, 731 JOIN = contjoinsel 732); 733 734CREATE OPERATOR ^~ ( 735 LEFTARG = lquery, 736 RIGHTARG = _ltree, 737 PROCEDURE = _ltq_rregex, 738 COMMUTATOR = '^~', 739 RESTRICT = contsel, 740 JOIN = contjoinsel 741); 742 743CREATE OPERATOR ^? ( 744 LEFTARG = _ltree, 745 RIGHTARG = _lquery, 746 PROCEDURE = _lt_q_regex, 747 COMMUTATOR = '^?', 748 RESTRICT = contsel, 749 JOIN = contjoinsel 750); 751 752CREATE OPERATOR ^? ( 753 LEFTARG = _lquery, 754 RIGHTARG = _ltree, 755 PROCEDURE = _lt_q_rregex, 756 COMMUTATOR = '^?', 757 RESTRICT = contsel, 758 JOIN = contjoinsel 759); 760 761CREATE OPERATOR ^@ ( 762 LEFTARG = _ltree, 763 RIGHTARG = ltxtquery, 764 PROCEDURE = _ltxtq_exec, 765 COMMUTATOR = '^@', 766 RESTRICT = contsel, 767 JOIN = contjoinsel 768); 769 770CREATE OPERATOR ^@ ( 771 LEFTARG = ltxtquery, 772 RIGHTARG = _ltree, 773 PROCEDURE = _ltxtq_rexec, 774 COMMUTATOR = '^@', 775 RESTRICT = contsel, 776 JOIN = contjoinsel 777); 778 779--extractors 780CREATE FUNCTION _ltree_extract_isparent(_ltree,ltree) 781RETURNS ltree 782AS 'MODULE_PATHNAME' 783LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 784 785CREATE OPERATOR ?@> ( 786 LEFTARG = _ltree, 787 RIGHTARG = ltree, 788 PROCEDURE = _ltree_extract_isparent 789); 790 791CREATE FUNCTION _ltree_extract_risparent(_ltree,ltree) 792RETURNS ltree 793AS 'MODULE_PATHNAME' 794LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 795 796CREATE OPERATOR ?<@ ( 797 LEFTARG = _ltree, 798 RIGHTARG = ltree, 799 PROCEDURE = _ltree_extract_risparent 800); 801 802CREATE FUNCTION _ltq_extract_regex(_ltree,lquery) 803RETURNS ltree 804AS 'MODULE_PATHNAME' 805LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 806 807CREATE OPERATOR ?~ ( 808 LEFTARG = _ltree, 809 RIGHTARG = lquery, 810 PROCEDURE = _ltq_extract_regex 811); 812 813CREATE FUNCTION _ltxtq_extract_exec(_ltree,ltxtquery) 814RETURNS ltree 815AS 'MODULE_PATHNAME' 816LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; 817 818CREATE OPERATOR ?@ ( 819 LEFTARG = _ltree, 820 RIGHTARG = ltxtquery, 821 PROCEDURE = _ltxtq_extract_exec 822); 823 824--GiST support for ltree[] 825CREATE FUNCTION _ltree_consistent(internal,_ltree,int2,oid,internal) 826RETURNS bool 827AS 'MODULE_PATHNAME' 828LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 829 830CREATE FUNCTION _ltree_compress(internal) 831RETURNS internal 832AS 'MODULE_PATHNAME' 833LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 834 835CREATE FUNCTION _ltree_penalty(internal,internal,internal) 836RETURNS internal 837AS 'MODULE_PATHNAME' 838LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 839 840CREATE FUNCTION _ltree_picksplit(internal, internal) 841RETURNS internal 842AS 'MODULE_PATHNAME' 843LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 844 845CREATE FUNCTION _ltree_union(internal, internal) 846RETURNS ltree_gist 847AS 'MODULE_PATHNAME' 848LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 849 850CREATE FUNCTION _ltree_same(ltree_gist, ltree_gist, internal) 851RETURNS internal 852AS 'MODULE_PATHNAME' 853LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; 854 855CREATE OPERATOR CLASS gist__ltree_ops 856 DEFAULT FOR TYPE _ltree USING gist AS 857 OPERATOR 10 <@ (_ltree, ltree), 858 OPERATOR 11 @> (ltree, _ltree), 859 OPERATOR 12 ~ (_ltree, lquery), 860 OPERATOR 13 ~ (lquery, _ltree), 861 OPERATOR 14 @ (_ltree, ltxtquery), 862 OPERATOR 15 @ (ltxtquery, _ltree), 863 OPERATOR 16 ? (_ltree, _lquery), 864 OPERATOR 17 ? (_lquery, _ltree), 865 FUNCTION 1 _ltree_consistent (internal, _ltree, int2, oid, internal), 866 FUNCTION 2 _ltree_union (internal, internal), 867 FUNCTION 3 _ltree_compress (internal), 868 FUNCTION 4 ltree_decompress (internal), 869 FUNCTION 5 _ltree_penalty (internal, internal, internal), 870 FUNCTION 6 _ltree_picksplit (internal, internal), 871 FUNCTION 7 _ltree_same (ltree_gist, ltree_gist, internal), 872 STORAGE ltree_gist; 873