gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

396 line
8.0KB

  1. /* contrib/seg/seg--1.1.sql */
  2. -- complain if script is sourced in psql, rather than via CREATE EXTENSION
  3. \echo Use "CREATE EXTENSION seg" to load this file. \quit
  4. -- Create the user-defined type for 1-D floating point intervals (seg)
  5. CREATE FUNCTION seg_in(cstring)
  6. RETURNS seg
  7. AS 'MODULE_PATHNAME'
  8. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  9. CREATE FUNCTION seg_out(seg)
  10. RETURNS cstring
  11. AS 'MODULE_PATHNAME'
  12. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  13. CREATE TYPE seg (
  14. INTERNALLENGTH = 12,
  15. INPUT = seg_in,
  16. OUTPUT = seg_out
  17. );
  18. COMMENT ON TYPE seg IS
  19. 'floating point interval ''FLOAT .. FLOAT'', ''.. FLOAT'', ''FLOAT ..'' or ''FLOAT''';
  20. --
  21. -- External C-functions for R-tree methods
  22. --
  23. -- Left/Right methods
  24. CREATE FUNCTION seg_over_left(seg, seg)
  25. RETURNS bool
  26. AS 'MODULE_PATHNAME'
  27. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  28. COMMENT ON FUNCTION seg_over_left(seg, seg) IS
  29. 'overlaps or is left of';
  30. CREATE FUNCTION seg_over_right(seg, seg)
  31. RETURNS bool
  32. AS 'MODULE_PATHNAME'
  33. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  34. COMMENT ON FUNCTION seg_over_right(seg, seg) IS
  35. 'overlaps or is right of';
  36. CREATE FUNCTION seg_left(seg, seg)
  37. RETURNS bool
  38. AS 'MODULE_PATHNAME'
  39. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  40. COMMENT ON FUNCTION seg_left(seg, seg) IS
  41. 'is left of';
  42. CREATE FUNCTION seg_right(seg, seg)
  43. RETURNS bool
  44. AS 'MODULE_PATHNAME'
  45. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  46. COMMENT ON FUNCTION seg_right(seg, seg) IS
  47. 'is right of';
  48. -- Scalar comparison methods
  49. CREATE FUNCTION seg_lt(seg, seg)
  50. RETURNS bool
  51. AS 'MODULE_PATHNAME'
  52. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  53. COMMENT ON FUNCTION seg_lt(seg, seg) IS
  54. 'less than';
  55. CREATE FUNCTION seg_le(seg, seg)
  56. RETURNS bool
  57. AS 'MODULE_PATHNAME'
  58. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  59. COMMENT ON FUNCTION seg_le(seg, seg) IS
  60. 'less than or equal';
  61. CREATE FUNCTION seg_gt(seg, seg)
  62. RETURNS bool
  63. AS 'MODULE_PATHNAME'
  64. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  65. COMMENT ON FUNCTION seg_gt(seg, seg) IS
  66. 'greater than';
  67. CREATE FUNCTION seg_ge(seg, seg)
  68. RETURNS bool
  69. AS 'MODULE_PATHNAME'
  70. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  71. COMMENT ON FUNCTION seg_ge(seg, seg) IS
  72. 'greater than or equal';
  73. CREATE FUNCTION seg_contains(seg, seg)
  74. RETURNS bool
  75. AS 'MODULE_PATHNAME'
  76. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  77. COMMENT ON FUNCTION seg_contains(seg, seg) IS
  78. 'contains';
  79. CREATE FUNCTION seg_contained(seg, seg)
  80. RETURNS bool
  81. AS 'MODULE_PATHNAME'
  82. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  83. COMMENT ON FUNCTION seg_contained(seg, seg) IS
  84. 'contained in';
  85. CREATE FUNCTION seg_overlap(seg, seg)
  86. RETURNS bool
  87. AS 'MODULE_PATHNAME'
  88. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  89. COMMENT ON FUNCTION seg_overlap(seg, seg) IS
  90. 'overlaps';
  91. CREATE FUNCTION seg_same(seg, seg)
  92. RETURNS bool
  93. AS 'MODULE_PATHNAME'
  94. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  95. COMMENT ON FUNCTION seg_same(seg, seg) IS
  96. 'same as';
  97. CREATE FUNCTION seg_different(seg, seg)
  98. RETURNS bool
  99. AS 'MODULE_PATHNAME'
  100. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  101. COMMENT ON FUNCTION seg_different(seg, seg) IS
  102. 'different';
  103. -- support routines for indexing
  104. CREATE FUNCTION seg_cmp(seg, seg)
  105. RETURNS int4
  106. AS 'MODULE_PATHNAME'
  107. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  108. COMMENT ON FUNCTION seg_cmp(seg, seg) IS 'btree comparison function';
  109. CREATE FUNCTION seg_union(seg, seg)
  110. RETURNS seg
  111. AS 'MODULE_PATHNAME'
  112. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  113. CREATE FUNCTION seg_inter(seg, seg)
  114. RETURNS seg
  115. AS 'MODULE_PATHNAME'
  116. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  117. CREATE FUNCTION seg_size(seg)
  118. RETURNS float4
  119. AS 'MODULE_PATHNAME'
  120. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  121. -- miscellaneous
  122. CREATE FUNCTION seg_center(seg)
  123. RETURNS float4
  124. AS 'MODULE_PATHNAME'
  125. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  126. CREATE FUNCTION seg_upper(seg)
  127. RETURNS float4
  128. AS 'MODULE_PATHNAME'
  129. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  130. CREATE FUNCTION seg_lower(seg)
  131. RETURNS float4
  132. AS 'MODULE_PATHNAME'
  133. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  134. --
  135. -- OPERATORS
  136. --
  137. CREATE OPERATOR < (
  138. LEFTARG = seg,
  139. RIGHTARG = seg,
  140. PROCEDURE = seg_lt,
  141. COMMUTATOR = '>',
  142. NEGATOR = '>=',
  143. RESTRICT = scalarltsel,
  144. JOIN = scalarltjoinsel
  145. );
  146. CREATE OPERATOR <= (
  147. LEFTARG = seg,
  148. RIGHTARG = seg,
  149. PROCEDURE = seg_le,
  150. COMMUTATOR = '>=',
  151. NEGATOR = '>',
  152. RESTRICT = scalarltsel,
  153. JOIN = scalarltjoinsel
  154. );
  155. CREATE OPERATOR > (
  156. LEFTARG = seg,
  157. RIGHTARG = seg,
  158. PROCEDURE = seg_gt,
  159. COMMUTATOR = '<',
  160. NEGATOR = '<=',
  161. RESTRICT = scalargtsel,
  162. JOIN = scalargtjoinsel
  163. );
  164. CREATE OPERATOR >= (
  165. LEFTARG = seg,
  166. RIGHTARG = seg,
  167. PROCEDURE = seg_ge,
  168. COMMUTATOR = '<=',
  169. NEGATOR = '<',
  170. RESTRICT = scalargtsel,
  171. JOIN = scalargtjoinsel
  172. );
  173. CREATE OPERATOR << (
  174. LEFTARG = seg,
  175. RIGHTARG = seg,
  176. PROCEDURE = seg_left,
  177. COMMUTATOR = '>>',
  178. RESTRICT = positionsel,
  179. JOIN = positionjoinsel
  180. );
  181. CREATE OPERATOR &< (
  182. LEFTARG = seg,
  183. RIGHTARG = seg,
  184. PROCEDURE = seg_over_left,
  185. RESTRICT = positionsel,
  186. JOIN = positionjoinsel
  187. );
  188. CREATE OPERATOR && (
  189. LEFTARG = seg,
  190. RIGHTARG = seg,
  191. PROCEDURE = seg_overlap,
  192. COMMUTATOR = '&&',
  193. RESTRICT = areasel,
  194. JOIN = areajoinsel
  195. );
  196. CREATE OPERATOR &> (
  197. LEFTARG = seg,
  198. RIGHTARG = seg,
  199. PROCEDURE = seg_over_right,
  200. RESTRICT = positionsel,
  201. JOIN = positionjoinsel
  202. );
  203. CREATE OPERATOR >> (
  204. LEFTARG = seg,
  205. RIGHTARG = seg,
  206. PROCEDURE = seg_right,
  207. COMMUTATOR = '<<',
  208. RESTRICT = positionsel,
  209. JOIN = positionjoinsel
  210. );
  211. CREATE OPERATOR = (
  212. LEFTARG = seg,
  213. RIGHTARG = seg,
  214. PROCEDURE = seg_same,
  215. COMMUTATOR = '=',
  216. NEGATOR = '<>',
  217. RESTRICT = eqsel,
  218. JOIN = eqjoinsel,
  219. MERGES
  220. );
  221. CREATE OPERATOR <> (
  222. LEFTARG = seg,
  223. RIGHTARG = seg,
  224. PROCEDURE = seg_different,
  225. COMMUTATOR = '<>',
  226. NEGATOR = '=',
  227. RESTRICT = neqsel,
  228. JOIN = neqjoinsel
  229. );
  230. CREATE OPERATOR @> (
  231. LEFTARG = seg,
  232. RIGHTARG = seg,
  233. PROCEDURE = seg_contains,
  234. COMMUTATOR = '<@',
  235. RESTRICT = contsel,
  236. JOIN = contjoinsel
  237. );
  238. CREATE OPERATOR <@ (
  239. LEFTARG = seg,
  240. RIGHTARG = seg,
  241. PROCEDURE = seg_contained,
  242. COMMUTATOR = '@>',
  243. RESTRICT = contsel,
  244. JOIN = contjoinsel
  245. );
  246. -- obsolete:
  247. CREATE OPERATOR @ (
  248. LEFTARG = seg,
  249. RIGHTARG = seg,
  250. PROCEDURE = seg_contains,
  251. COMMUTATOR = '~',
  252. RESTRICT = contsel,
  253. JOIN = contjoinsel
  254. );
  255. CREATE OPERATOR ~ (
  256. LEFTARG = seg,
  257. RIGHTARG = seg,
  258. PROCEDURE = seg_contained,
  259. COMMUTATOR = '@',
  260. RESTRICT = contsel,
  261. JOIN = contjoinsel
  262. );
  263. -- define the GiST support methods
  264. CREATE FUNCTION gseg_consistent(internal,seg,smallint,oid,internal)
  265. RETURNS bool
  266. AS 'MODULE_PATHNAME'
  267. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  268. CREATE FUNCTION gseg_compress(internal)
  269. RETURNS internal
  270. AS 'MODULE_PATHNAME'
  271. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  272. CREATE FUNCTION gseg_decompress(internal)
  273. RETURNS internal
  274. AS 'MODULE_PATHNAME'
  275. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  276. CREATE FUNCTION gseg_penalty(internal,internal,internal)
  277. RETURNS internal
  278. AS 'MODULE_PATHNAME'
  279. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  280. CREATE FUNCTION gseg_picksplit(internal, internal)
  281. RETURNS internal
  282. AS 'MODULE_PATHNAME'
  283. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  284. CREATE FUNCTION gseg_union(internal, internal)
  285. RETURNS seg
  286. AS 'MODULE_PATHNAME'
  287. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  288. CREATE FUNCTION gseg_same(seg, seg, internal)
  289. RETURNS internal
  290. AS 'MODULE_PATHNAME'
  291. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  292. -- Create the operator classes for indexing
  293. CREATE OPERATOR CLASS seg_ops
  294. DEFAULT FOR TYPE seg USING btree AS
  295. OPERATOR 1 < ,
  296. OPERATOR 2 <= ,
  297. OPERATOR 3 = ,
  298. OPERATOR 4 >= ,
  299. OPERATOR 5 > ,
  300. FUNCTION 1 seg_cmp(seg, seg);
  301. CREATE OPERATOR CLASS gist_seg_ops
  302. DEFAULT FOR TYPE seg USING gist
  303. AS
  304. OPERATOR 1 << ,
  305. OPERATOR 2 &< ,
  306. OPERATOR 3 && ,
  307. OPERATOR 4 &> ,
  308. OPERATOR 5 >> ,
  309. OPERATOR 6 = ,
  310. OPERATOR 7 @> ,
  311. OPERATOR 8 <@ ,
  312. OPERATOR 13 @ ,
  313. OPERATOR 14 ~ ,
  314. FUNCTION 1 gseg_consistent (internal, seg, smallint, oid, internal),
  315. FUNCTION 2 gseg_union (internal, internal),
  316. FUNCTION 3 gseg_compress (internal),
  317. FUNCTION 4 gseg_decompress (internal),
  318. FUNCTION 5 gseg_penalty (internal, internal, internal),
  319. FUNCTION 6 gseg_picksplit (internal, internal),
  320. FUNCTION 7 gseg_same (seg, seg, internal);
上海开阖软件有限公司 沪ICP备12045867号-1