You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

issue_foreigntable_for_es.sql 6.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. delete from public.issue_es;
  2. DROP FOREIGN TABLE public.issue_es;
  3. DROP TRIGGER IF EXISTS es_insert_issue on public.issue;
  4. DROP FUNCTION public.insert_issue_data;
  5. DROP TRIGGER IF EXISTS es_udpate_issue_comment on public.comment;
  6. DROP FUNCTION udpate_issue_comment;
  7. DROP TRIGGER IF EXISTS es_update_issue on public.issue;
  8. DROP FUNCTION public.update_issue;
  9. DROP TRIGGER IF EXISTS es_delete_issue on public.issue;
  10. DROP FUNCTION public.delete_issue;
  11. CREATE FOREIGN TABLE public.issue_es
  12. (
  13. id bigint NOT NULL,
  14. repo_id bigint,
  15. index bigint,
  16. poster_id bigint,
  17. original_author character varying(255),
  18. original_author_id bigint,
  19. name character varying(255) ,
  20. content text,
  21. comment text,
  22. milestone_id bigint,
  23. priority integer,
  24. is_closed boolean,
  25. is_pull boolean,
  26. pr_id bigint,
  27. num_comments integer,
  28. ref character varying(255),
  29. deadline_unix bigint,
  30. created_unix bigint,
  31. updated_unix bigint,
  32. closed_unix bigint,
  33. is_locked boolean NOT NULL,
  34. amount bigint,
  35. is_transformed boolean NOT NULL
  36. )SERVER multicorn_es
  37. OPTIONS
  38. (
  39. host '192.168.207.94',
  40. port '9200',
  41. index 'issue-es-index',
  42. rowid_column 'id',
  43. default_sort '_id'
  44. )
  45. ;
  46. delete from public.issue_es;
  47. INSERT INTO public.issue_es(
  48. id,
  49. repo_id,
  50. index,
  51. poster_id,
  52. original_author,
  53. original_author_id,
  54. name,
  55. content,
  56. milestone_id,
  57. priority,
  58. is_closed,
  59. is_pull,
  60. num_comments,
  61. ref,
  62. deadline_unix,
  63. created_unix,
  64. updated_unix,
  65. closed_unix,
  66. is_locked,
  67. amount,
  68. is_transformed,comment,pr_id)
  69. SELECT
  70. b.id,
  71. b.repo_id,
  72. b.index,
  73. b.poster_id,
  74. b.original_author,
  75. b.original_author_id,
  76. b.name,
  77. b.content,
  78. b.milestone_id,
  79. b.priority,
  80. b.is_closed,
  81. b.is_pull,
  82. b.num_comments,
  83. b.ref,
  84. b.deadline_unix,
  85. b.created_unix,
  86. b.updated_unix,
  87. b.closed_unix,
  88. b.is_locked,
  89. b.amount,
  90. b.is_transformed,
  91. (select array_to_string(array_agg(content order by created_unix desc),',') from public.comment a where a.issue_id=b.id),
  92. (select id from public.pull_request d where b.id=d.issue_id and b.is_pull=true)
  93. FROM public.issue b,public.repository c where b.repo_id=c.id and c.is_private=false;
  94. CREATE OR REPLACE FUNCTION public.insert_issue_data() RETURNS trigger AS
  95. $def$
  96. DECLARE
  97. privateValue boolean=false;
  98. BEGIN
  99. select into privateValue is_private from public.repository where id=NEW.repo_id;
  100. if not privateValue then
  101. INSERT INTO public.issue_es(
  102. id,
  103. repo_id,
  104. index,
  105. poster_id,
  106. original_author,
  107. original_author_id,
  108. name,
  109. content,
  110. milestone_id,
  111. priority,
  112. is_closed,
  113. is_pull,
  114. num_comments,
  115. ref,
  116. deadline_unix,
  117. created_unix,
  118. updated_unix,
  119. closed_unix,
  120. is_locked,
  121. amount,
  122. is_transformed)
  123. VALUES (
  124. NEW.id,
  125. NEW.repo_id,
  126. NEW.index,
  127. NEW.poster_id,
  128. NEW.original_author,
  129. NEW.original_author_id,
  130. NEW.name,
  131. NEW.content,
  132. NEW.milestone_id,
  133. NEW.priority,
  134. NEW.is_closed,
  135. NEW.is_pull,
  136. NEW.num_comments,
  137. NEW.ref,
  138. NEW.deadline_unix,
  139. NEW.created_unix,
  140. NEW.updated_unix,
  141. NEW.closed_unix,
  142. NEW.is_locked,
  143. NEW.amount,
  144. NEW.is_transformed
  145. );
  146. end if;
  147. RETURN NEW;
  148. END;
  149. $def$
  150. LANGUAGE plpgsql;
  151. DROP TRIGGER IF EXISTS es_insert_issue on public.issue;
  152. CREATE TRIGGER es_insert_issue
  153. AFTER INSERT ON public.issue
  154. FOR EACH ROW EXECUTE PROCEDURE insert_issue_data();
  155. ALTER TABLE public.issue ENABLE ALWAYS TRIGGER es_insert_issue;
  156. CREATE OR REPLACE FUNCTION public.udpate_issue_comment() RETURNS trigger AS
  157. $def$
  158. BEGIN
  159. if (TG_OP = 'DELETE') then
  160. update public.issue_es SET comment=(select array_to_string(array_agg(content order by created_unix desc),',') from public.comment where issue_id=OLD.issue_id) where id=OLD.issue_id;
  161. elsif (TG_OP = 'UPDATE') then
  162. update public.issue_es SET comment=(select array_to_string(array_agg(content order by created_unix desc),',') from public.comment where issue_id=NEW.issue_id) where id=NEW.issue_id;
  163. end if;
  164. return null;
  165. END;
  166. $def$
  167. LANGUAGE plpgsql;
  168. DROP TRIGGER IF EXISTS es_udpate_issue_comment on public.comment;
  169. CREATE TRIGGER es_udpate_issue_comment
  170. AFTER DELETE OR UPDATE ON public.comment
  171. FOR EACH ROW EXECUTE PROCEDURE udpate_issue_comment();
  172. ALTER TABLE public.comment ENABLE ALWAYS TRIGGER es_udpate_issue_comment;
  173. CREATE OR REPLACE FUNCTION public.update_issue() RETURNS trigger AS
  174. $def$
  175. declare
  176. BEGIN
  177. UPDATE public.issue_es
  178. SET content=NEW.content,
  179. name=NEW.name,
  180. is_closed=NEW.is_closed,
  181. num_comments=NEW.num_comments,
  182. updated_unix=NEW.updated_unix,
  183. comment=(select array_to_string(array_agg(content order by created_unix desc),',') from public.comment where issue_id=NEW.id)
  184. where id=NEW.id;
  185. return new;
  186. END
  187. $def$
  188. LANGUAGE plpgsql;
  189. DROP TRIGGER IF EXISTS es_update_issue on public.issue;
  190. CREATE TRIGGER es_update_issue
  191. AFTER UPDATE ON public.issue
  192. FOR EACH ROW EXECUTE PROCEDURE update_issue();
  193. ALTER TABLE public.issue ENABLE ALWAYS TRIGGER es_update_issue;
  194. CREATE OR REPLACE FUNCTION public.delete_issue() RETURNS trigger AS
  195. $def$
  196. declare
  197. BEGIN
  198. DELETE FROM public.issue_es where id=OLD.id;
  199. return new;
  200. END
  201. $def$
  202. LANGUAGE plpgsql;
  203. DROP TRIGGER IF EXISTS es_delete_issue on public.issue;
  204. CREATE TRIGGER es_delete_issue
  205. AFTER DELETE ON public.issue
  206. FOR EACH ROW EXECUTE PROCEDURE delete_issue();
  207. ALTER TABLE public.issue ENABLE ALWAYS TRIGGER es_delete_issue;