gooderp18绿色标准版
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

873 Zeilen
19KB

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