gooderp18绿色标准版
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

502 lignes
13KB

  1. /* contrib/citext/citext--1.4.sql */
  2. -- complain if script is sourced in psql, rather than via CREATE EXTENSION
  3. \echo Use "CREATE EXTENSION citext" to load this file. \quit
  4. --
  5. -- PostgreSQL code for CITEXT.
  6. --
  7. -- Most I/O functions, and a few others, piggyback on the "text" type
  8. -- functions via the implicit cast to text.
  9. --
  10. --
  11. -- Shell type to keep things a bit quieter.
  12. --
  13. CREATE TYPE citext;
  14. --
  15. -- Input and output functions.
  16. --
  17. CREATE FUNCTION citextin(cstring)
  18. RETURNS citext
  19. AS 'textin'
  20. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  21. CREATE FUNCTION citextout(citext)
  22. RETURNS cstring
  23. AS 'textout'
  24. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  25. CREATE FUNCTION citextrecv(internal)
  26. RETURNS citext
  27. AS 'textrecv'
  28. LANGUAGE internal STABLE STRICT PARALLEL SAFE;
  29. CREATE FUNCTION citextsend(citext)
  30. RETURNS bytea
  31. AS 'textsend'
  32. LANGUAGE internal STABLE STRICT PARALLEL SAFE;
  33. --
  34. -- The type itself.
  35. --
  36. CREATE TYPE citext (
  37. INPUT = citextin,
  38. OUTPUT = citextout,
  39. RECEIVE = citextrecv,
  40. SEND = citextsend,
  41. INTERNALLENGTH = VARIABLE,
  42. STORAGE = extended,
  43. -- make it a non-preferred member of string type category
  44. CATEGORY = 'S',
  45. PREFERRED = false,
  46. COLLATABLE = true
  47. );
  48. --
  49. -- Type casting functions for those situations where the I/O casts don't
  50. -- automatically kick in.
  51. --
  52. CREATE FUNCTION citext(bpchar)
  53. RETURNS citext
  54. AS 'rtrim1'
  55. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  56. CREATE FUNCTION citext(boolean)
  57. RETURNS citext
  58. AS 'booltext'
  59. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  60. CREATE FUNCTION citext(inet)
  61. RETURNS citext
  62. AS 'network_show'
  63. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  64. --
  65. -- Implicit and assignment type casts.
  66. --
  67. CREATE CAST (citext AS text) WITHOUT FUNCTION AS IMPLICIT;
  68. CREATE CAST (citext AS varchar) WITHOUT FUNCTION AS IMPLICIT;
  69. CREATE CAST (citext AS bpchar) WITHOUT FUNCTION AS ASSIGNMENT;
  70. CREATE CAST (text AS citext) WITHOUT FUNCTION AS ASSIGNMENT;
  71. CREATE CAST (varchar AS citext) WITHOUT FUNCTION AS ASSIGNMENT;
  72. CREATE CAST (bpchar AS citext) WITH FUNCTION citext(bpchar) AS ASSIGNMENT;
  73. CREATE CAST (boolean AS citext) WITH FUNCTION citext(boolean) AS ASSIGNMENT;
  74. CREATE CAST (inet AS citext) WITH FUNCTION citext(inet) AS ASSIGNMENT;
  75. --
  76. -- Operator Functions.
  77. --
  78. CREATE FUNCTION citext_eq( citext, citext )
  79. RETURNS bool
  80. AS 'MODULE_PATHNAME'
  81. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  82. CREATE FUNCTION citext_ne( citext, citext )
  83. RETURNS bool
  84. AS 'MODULE_PATHNAME'
  85. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  86. CREATE FUNCTION citext_lt( citext, citext )
  87. RETURNS bool
  88. AS 'MODULE_PATHNAME'
  89. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  90. CREATE FUNCTION citext_le( citext, citext )
  91. RETURNS bool
  92. AS 'MODULE_PATHNAME'
  93. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  94. CREATE FUNCTION citext_gt( citext, citext )
  95. RETURNS bool
  96. AS 'MODULE_PATHNAME'
  97. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  98. CREATE FUNCTION citext_ge( citext, citext )
  99. RETURNS bool
  100. AS 'MODULE_PATHNAME'
  101. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  102. --
  103. -- Operators.
  104. --
  105. CREATE OPERATOR = (
  106. LEFTARG = CITEXT,
  107. RIGHTARG = CITEXT,
  108. COMMUTATOR = =,
  109. NEGATOR = <>,
  110. PROCEDURE = citext_eq,
  111. RESTRICT = eqsel,
  112. JOIN = eqjoinsel,
  113. HASHES,
  114. MERGES
  115. );
  116. CREATE OPERATOR <> (
  117. LEFTARG = CITEXT,
  118. RIGHTARG = CITEXT,
  119. NEGATOR = =,
  120. COMMUTATOR = <>,
  121. PROCEDURE = citext_ne,
  122. RESTRICT = neqsel,
  123. JOIN = neqjoinsel
  124. );
  125. CREATE OPERATOR < (
  126. LEFTARG = CITEXT,
  127. RIGHTARG = CITEXT,
  128. NEGATOR = >=,
  129. COMMUTATOR = >,
  130. PROCEDURE = citext_lt,
  131. RESTRICT = scalarltsel,
  132. JOIN = scalarltjoinsel
  133. );
  134. CREATE OPERATOR <= (
  135. LEFTARG = CITEXT,
  136. RIGHTARG = CITEXT,
  137. NEGATOR = >,
  138. COMMUTATOR = >=,
  139. PROCEDURE = citext_le,
  140. RESTRICT = scalarltsel,
  141. JOIN = scalarltjoinsel
  142. );
  143. CREATE OPERATOR >= (
  144. LEFTARG = CITEXT,
  145. RIGHTARG = CITEXT,
  146. NEGATOR = <,
  147. COMMUTATOR = <=,
  148. PROCEDURE = citext_ge,
  149. RESTRICT = scalargtsel,
  150. JOIN = scalargtjoinsel
  151. );
  152. CREATE OPERATOR > (
  153. LEFTARG = CITEXT,
  154. RIGHTARG = CITEXT,
  155. NEGATOR = <=,
  156. COMMUTATOR = <,
  157. PROCEDURE = citext_gt,
  158. RESTRICT = scalargtsel,
  159. JOIN = scalargtjoinsel
  160. );
  161. --
  162. -- Support functions for indexing.
  163. --
  164. CREATE FUNCTION citext_cmp(citext, citext)
  165. RETURNS int4
  166. AS 'MODULE_PATHNAME'
  167. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  168. CREATE FUNCTION citext_hash(citext)
  169. RETURNS int4
  170. AS 'MODULE_PATHNAME'
  171. LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
  172. --
  173. -- The btree indexing operator class.
  174. --
  175. CREATE OPERATOR CLASS citext_ops
  176. DEFAULT FOR TYPE CITEXT USING btree AS
  177. OPERATOR 1 < (citext, citext),
  178. OPERATOR 2 <= (citext, citext),
  179. OPERATOR 3 = (citext, citext),
  180. OPERATOR 4 >= (citext, citext),
  181. OPERATOR 5 > (citext, citext),
  182. FUNCTION 1 citext_cmp(citext, citext);
  183. --
  184. -- The hash indexing operator class.
  185. --
  186. CREATE OPERATOR CLASS citext_ops
  187. DEFAULT FOR TYPE citext USING hash AS
  188. OPERATOR 1 = (citext, citext),
  189. FUNCTION 1 citext_hash(citext);
  190. --
  191. -- Aggregates.
  192. --
  193. CREATE FUNCTION citext_smaller(citext, citext)
  194. RETURNS citext
  195. AS 'MODULE_PATHNAME'
  196. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  197. CREATE FUNCTION citext_larger(citext, citext)
  198. RETURNS citext
  199. AS 'MODULE_PATHNAME'
  200. LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
  201. CREATE AGGREGATE min(citext) (
  202. SFUNC = citext_smaller,
  203. STYPE = citext,
  204. SORTOP = <,
  205. PARALLEL = SAFE,
  206. COMBINEFUNC = citext_smaller
  207. );
  208. CREATE AGGREGATE max(citext) (
  209. SFUNC = citext_larger,
  210. STYPE = citext,
  211. SORTOP = >,
  212. PARALLEL = SAFE,
  213. COMBINEFUNC = citext_larger
  214. );
  215. --
  216. -- CITEXT pattern matching.
  217. --
  218. CREATE FUNCTION texticlike(citext, citext)
  219. RETURNS bool AS 'texticlike'
  220. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  221. CREATE FUNCTION texticnlike(citext, citext)
  222. RETURNS bool AS 'texticnlike'
  223. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  224. CREATE FUNCTION texticregexeq(citext, citext)
  225. RETURNS bool AS 'texticregexeq'
  226. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  227. CREATE FUNCTION texticregexne(citext, citext)
  228. RETURNS bool AS 'texticregexne'
  229. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  230. CREATE OPERATOR ~ (
  231. PROCEDURE = texticregexeq,
  232. LEFTARG = citext,
  233. RIGHTARG = citext,
  234. NEGATOR = !~,
  235. RESTRICT = icregexeqsel,
  236. JOIN = icregexeqjoinsel
  237. );
  238. CREATE OPERATOR ~* (
  239. PROCEDURE = texticregexeq,
  240. LEFTARG = citext,
  241. RIGHTARG = citext,
  242. NEGATOR = !~*,
  243. RESTRICT = icregexeqsel,
  244. JOIN = icregexeqjoinsel
  245. );
  246. CREATE OPERATOR !~ (
  247. PROCEDURE = texticregexne,
  248. LEFTARG = citext,
  249. RIGHTARG = citext,
  250. NEGATOR = ~,
  251. RESTRICT = icregexnesel,
  252. JOIN = icregexnejoinsel
  253. );
  254. CREATE OPERATOR !~* (
  255. PROCEDURE = texticregexne,
  256. LEFTARG = citext,
  257. RIGHTARG = citext,
  258. NEGATOR = ~*,
  259. RESTRICT = icregexnesel,
  260. JOIN = icregexnejoinsel
  261. );
  262. CREATE OPERATOR ~~ (
  263. PROCEDURE = texticlike,
  264. LEFTARG = citext,
  265. RIGHTARG = citext,
  266. NEGATOR = !~~,
  267. RESTRICT = iclikesel,
  268. JOIN = iclikejoinsel
  269. );
  270. CREATE OPERATOR ~~* (
  271. PROCEDURE = texticlike,
  272. LEFTARG = citext,
  273. RIGHTARG = citext,
  274. NEGATOR = !~~*,
  275. RESTRICT = iclikesel,
  276. JOIN = iclikejoinsel
  277. );
  278. CREATE OPERATOR !~~ (
  279. PROCEDURE = texticnlike,
  280. LEFTARG = citext,
  281. RIGHTARG = citext,
  282. NEGATOR = ~~,
  283. RESTRICT = icnlikesel,
  284. JOIN = icnlikejoinsel
  285. );
  286. CREATE OPERATOR !~~* (
  287. PROCEDURE = texticnlike,
  288. LEFTARG = citext,
  289. RIGHTARG = citext,
  290. NEGATOR = ~~*,
  291. RESTRICT = icnlikesel,
  292. JOIN = icnlikejoinsel
  293. );
  294. --
  295. -- Matching citext to text.
  296. --
  297. CREATE FUNCTION texticlike(citext, text)
  298. RETURNS bool AS 'texticlike'
  299. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  300. CREATE FUNCTION texticnlike(citext, text)
  301. RETURNS bool AS 'texticnlike'
  302. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  303. CREATE FUNCTION texticregexeq(citext, text)
  304. RETURNS bool AS 'texticregexeq'
  305. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  306. CREATE FUNCTION texticregexne(citext, text)
  307. RETURNS bool AS 'texticregexne'
  308. LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
  309. CREATE OPERATOR ~ (
  310. PROCEDURE = texticregexeq,
  311. LEFTARG = citext,
  312. RIGHTARG = text,
  313. NEGATOR = !~,
  314. RESTRICT = icregexeqsel,
  315. JOIN = icregexeqjoinsel
  316. );
  317. CREATE OPERATOR ~* (
  318. PROCEDURE = texticregexeq,
  319. LEFTARG = citext,
  320. RIGHTARG = text,
  321. NEGATOR = !~*,
  322. RESTRICT = icregexeqsel,
  323. JOIN = icregexeqjoinsel
  324. );
  325. CREATE OPERATOR !~ (
  326. PROCEDURE = texticregexne,
  327. LEFTARG = citext,
  328. RIGHTARG = text,
  329. NEGATOR = ~,
  330. RESTRICT = icregexnesel,
  331. JOIN = icregexnejoinsel
  332. );
  333. CREATE OPERATOR !~* (
  334. PROCEDURE = texticregexne,
  335. LEFTARG = citext,
  336. RIGHTARG = text,
  337. NEGATOR = ~*,
  338. RESTRICT = icregexnesel,
  339. JOIN = icregexnejoinsel
  340. );
  341. CREATE OPERATOR ~~ (
  342. PROCEDURE = texticlike,
  343. LEFTARG = citext,
  344. RIGHTARG = text,
  345. NEGATOR = !~~,
  346. RESTRICT = iclikesel,
  347. JOIN = iclikejoinsel
  348. );
  349. CREATE OPERATOR ~~* (
  350. PROCEDURE = texticlike,
  351. LEFTARG = citext,
  352. RIGHTARG = text,
  353. NEGATOR = !~~*,
  354. RESTRICT = iclikesel,
  355. JOIN = iclikejoinsel
  356. );
  357. CREATE OPERATOR !~~ (
  358. PROCEDURE = texticnlike,
  359. LEFTARG = citext,
  360. RIGHTARG = text,
  361. NEGATOR = ~~,
  362. RESTRICT = icnlikesel,
  363. JOIN = icnlikejoinsel
  364. );
  365. CREATE OPERATOR !~~* (
  366. PROCEDURE = texticnlike,
  367. LEFTARG = citext,
  368. RIGHTARG = text,
  369. NEGATOR = ~~*,
  370. RESTRICT = icnlikesel,
  371. JOIN = icnlikejoinsel
  372. );
  373. --
  374. -- Matching citext in string comparison functions.
  375. -- XXX TODO Ideally these would be implemented in C.
  376. --
  377. CREATE FUNCTION regexp_match( citext, citext ) RETURNS TEXT[] AS $$
  378. SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
  379. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  380. CREATE FUNCTION regexp_match( citext, citext, text ) RETURNS TEXT[] AS $$
  381. SELECT pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
  382. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  383. CREATE FUNCTION regexp_matches( citext, citext ) RETURNS SETOF TEXT[] AS $$
  384. SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
  385. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1;
  386. CREATE FUNCTION regexp_matches( citext, citext, text ) RETURNS SETOF TEXT[] AS $$
  387. SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
  388. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 10;
  389. CREATE FUNCTION regexp_replace( citext, citext, text ) returns TEXT AS $$
  390. SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, 'i');
  391. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  392. CREATE FUNCTION regexp_replace( citext, citext, text, text ) returns TEXT AS $$
  393. SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, CASE WHEN pg_catalog.strpos($4, 'c') = 0 THEN $4 || 'i' ELSE $4 END);
  394. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  395. CREATE FUNCTION regexp_split_to_array( citext, citext ) RETURNS TEXT[] AS $$
  396. SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
  397. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  398. CREATE FUNCTION regexp_split_to_array( citext, citext, text ) RETURNS TEXT[] AS $$
  399. SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
  400. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  401. CREATE FUNCTION regexp_split_to_table( citext, citext ) RETURNS SETOF TEXT AS $$
  402. SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
  403. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  404. CREATE FUNCTION regexp_split_to_table( citext, citext, text ) RETURNS SETOF TEXT AS $$
  405. SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
  406. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  407. CREATE FUNCTION strpos( citext, citext ) RETURNS INT AS $$
  408. SELECT pg_catalog.strpos( pg_catalog.lower( $1::pg_catalog.text ), pg_catalog.lower( $2::pg_catalog.text ) );
  409. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  410. CREATE FUNCTION replace( citext, citext, citext ) RETURNS TEXT AS $$
  411. SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), $3::pg_catalog.text, 'gi' );
  412. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  413. CREATE FUNCTION split_part( citext, citext, int ) RETURNS TEXT AS $$
  414. SELECT (pg_catalog.regexp_split_to_array( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), 'i'))[$3];
  415. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
  416. CREATE FUNCTION translate( citext, citext, text ) RETURNS TEXT AS $$
  417. SELECT pg_catalog.translate( pg_catalog.translate( $1::pg_catalog.text, pg_catalog.lower($2::pg_catalog.text), $3), pg_catalog.upper($2::pg_catalog.text), $3);
  418. $$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
上海开阖软件有限公司 沪ICP备12045867号-1