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.

repo_foreigntable_for_es.sql 23 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. -- 要处理项目从私有变为公有,并且从公有变成私有的情况
  2. DROP FOREIGN table if exists public.repository_es;
  3. CREATE FOREIGN TABLE public.repository_es (
  4. id bigint NOT NULL,
  5. owner_id bigint,
  6. owner_name character varying(255),
  7. lower_name character varying(255) NOT NULL,
  8. name character varying(255) NOT NULL,
  9. description text,
  10. website character varying(2048),
  11. original_service_type integer,
  12. original_url character varying(2048),
  13. default_branch character varying(255),
  14. num_watches integer,
  15. num_stars integer,
  16. num_forks integer,
  17. num_issues integer,
  18. num_closed_issues integer,
  19. num_pulls integer,
  20. num_closed_pulls integer,
  21. num_milestones integer DEFAULT 0 NOT NULL,
  22. num_closed_milestones integer DEFAULT 0 NOT NULL,
  23. is_private boolean,
  24. is_empty boolean,
  25. is_archived boolean,
  26. is_mirror boolean,
  27. status integer DEFAULT 0 NOT NULL,
  28. is_fork boolean DEFAULT false NOT NULL,
  29. fork_id bigint,
  30. is_template boolean DEFAULT false NOT NULL,
  31. template_id bigint,
  32. size bigint DEFAULT 0 NOT NULL,
  33. is_fsck_enabled boolean DEFAULT true NOT NULL,
  34. close_issues_via_commit_in_any_branch boolean DEFAULT false NOT NULL,
  35. topics text,
  36. avatar character varying(64),
  37. created_unix bigint,
  38. updated_unix bigint,
  39. contract_address character varying(255),
  40. block_chain_status integer DEFAULT 0 NOT NULL,
  41. balance character varying(255) DEFAULT '0'::character varying NOT NULL,
  42. clone_cnt bigint DEFAULT 0 NOT NULL,
  43. license character varying(100),
  44. download_cnt bigint DEFAULT 0 NOT NULL,
  45. num_commit bigint DEFAULT 0 NOT NULL,
  46. git_clone_cnt bigint DEFAULT 0 NOT NULL,
  47. creator_id bigint NOT NULL DEFAULT 0,
  48. repo_type integer NOT NULL DEFAULT 0,
  49. lang character varying(2048),
  50. alias character varying(255),
  51. lower_alias character varying(255)
  52. ) SERVER multicorn_es
  53. OPTIONS
  54. (
  55. host '192.168.207.94',
  56. port '9200',
  57. index 'repository-es-index',
  58. rowid_column 'id',
  59. default_sort '_id'
  60. )
  61. ;
  62. delete from public.repository_es;
  63. INSERT INTO public.repository_es (id,
  64. owner_id,
  65. owner_name,
  66. lower_name,
  67. name,
  68. description,
  69. website,
  70. original_service_type,
  71. original_url,
  72. default_branch,
  73. num_watches,
  74. num_stars,
  75. num_forks,
  76. num_issues,
  77. num_closed_issues,
  78. num_pulls,
  79. num_closed_pulls,
  80. num_milestones,
  81. num_closed_milestones,
  82. is_private,
  83. is_empty,
  84. is_archived,
  85. is_mirror,
  86. status,
  87. is_fork,
  88. fork_id,
  89. is_template,
  90. template_id,
  91. size,
  92. is_fsck_enabled,
  93. close_issues_via_commit_in_any_branch,
  94. topics,
  95. avatar,
  96. created_unix,
  97. updated_unix,
  98. contract_address,
  99. block_chain_status,
  100. balance,
  101. clone_cnt,
  102. num_commit,
  103. git_clone_cnt,
  104. creator_id,
  105. repo_type,
  106. lang,
  107. alias,
  108. lower_alias
  109. )
  110. SELECT
  111. id,
  112. owner_id,
  113. owner_name,
  114. lower_name,
  115. name,
  116. description,
  117. website,
  118. original_service_type,
  119. original_url,
  120. default_branch,
  121. num_watches,
  122. num_stars,
  123. num_forks,
  124. num_issues,
  125. num_closed_issues,
  126. num_pulls,
  127. num_closed_pulls,
  128. num_milestones,
  129. num_closed_milestones,
  130. is_private,
  131. is_empty,
  132. is_archived,
  133. is_mirror,
  134. status,
  135. is_fork,
  136. fork_id,
  137. is_template,
  138. template_id,
  139. size,
  140. is_fsck_enabled,
  141. close_issues_via_commit_in_any_branch,
  142. topics,
  143. avatar,
  144. created_unix,
  145. updated_unix,
  146. contract_address,
  147. block_chain_status,
  148. balance,
  149. clone_cnt,
  150. num_commit,
  151. git_clone_cnt,
  152. creator_id,
  153. repo_type,
  154. (select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat a where a.repo_id=b.id),
  155. alias,
  156. lower_alias
  157. FROM public.repository b where b.is_private=false;
  158. DROP TRIGGER IF EXISTS es_insert_repository on public.repository;
  159. CREATE OR REPLACE FUNCTION public.insert_repository_data() RETURNS trigger AS
  160. $def$
  161. BEGIN
  162. if not NEW.is_private then
  163. INSERT INTO public.repository_es (id,
  164. owner_id,
  165. owner_name,
  166. lower_name,
  167. name,
  168. description,
  169. website,
  170. original_service_type,
  171. original_url,
  172. default_branch,
  173. num_watches,
  174. num_stars,
  175. num_forks,
  176. num_issues,
  177. num_closed_issues,
  178. num_pulls,
  179. num_closed_pulls,
  180. num_milestones,
  181. num_closed_milestones,
  182. is_private,
  183. is_empty,
  184. is_archived,
  185. is_mirror,
  186. status,
  187. is_fork,
  188. fork_id,
  189. is_template,
  190. template_id,
  191. size,
  192. is_fsck_enabled,
  193. close_issues_via_commit_in_any_branch,
  194. topics,
  195. avatar,
  196. created_unix,
  197. updated_unix,
  198. contract_address,
  199. block_chain_status,
  200. balance,
  201. clone_cnt,
  202. num_commit,
  203. git_clone_cnt,
  204. creator_id,
  205. repo_type,
  206. alias,
  207. lower_alias) VALUES
  208. (NEW.id,
  209. NEW.owner_id,
  210. NEW.owner_name,
  211. NEW.lower_name,
  212. NEW.name,
  213. NEW.description,
  214. NEW.website,
  215. NEW.original_service_type,
  216. NEW.original_url,
  217. NEW.default_branch,
  218. NEW.num_watches,
  219. NEW.num_stars,
  220. NEW.num_forks,
  221. NEW.num_issues,
  222. NEW.num_closed_issues,
  223. NEW.num_pulls,
  224. NEW.num_closed_pulls,
  225. NEW.num_milestones,
  226. NEW.num_closed_milestones,
  227. NEW.is_private,
  228. NEW.is_empty,
  229. NEW.is_archived,
  230. NEW.is_mirror,
  231. NEW.status,
  232. NEW.is_fork,
  233. NEW.fork_id,
  234. NEW.is_template,
  235. NEW.template_id,
  236. NEW.size,
  237. NEW.is_fsck_enabled,
  238. NEW.close_issues_via_commit_in_any_branch,
  239. NEW.topics,
  240. NEW.avatar,
  241. NEW.created_unix,
  242. NEW.updated_unix,
  243. NEW.contract_address,
  244. NEW.block_chain_status,
  245. NEW.balance,
  246. NEW.clone_cnt,
  247. NEW.num_commit,
  248. NEW.git_clone_cnt,
  249. NEW.creator_id,
  250. NEW.repo_type,
  251. NEW.alias,
  252. NEW.lower_alias);
  253. end if;
  254. RETURN NEW;
  255. END;
  256. $def$
  257. LANGUAGE plpgsql;
  258. CREATE TRIGGER es_insert_repository
  259. AFTER INSERT ON public.repository
  260. FOR EACH ROW EXECUTE PROCEDURE insert_repository_data();
  261. ALTER TABLE public.repository ENABLE ALWAYS TRIGGER es_insert_repository;
  262. DROP TRIGGER IF EXISTS es_update_repository on public.repository;
  263. CREATE OR REPLACE FUNCTION public.update_repository() RETURNS trigger AS
  264. $def$
  265. BEGIN
  266. if OLD.is_private != NEW.is_private then
  267. if OLD.is_private and not NEW.is_private then
  268. --insert
  269. INSERT INTO public.repository_es (id,
  270. owner_id,
  271. owner_name,
  272. lower_name,
  273. name,
  274. description,
  275. website,
  276. original_service_type,
  277. original_url,
  278. default_branch,
  279. num_watches,
  280. num_stars,
  281. num_forks,
  282. num_issues,
  283. num_closed_issues,
  284. num_pulls,
  285. num_closed_pulls,
  286. num_milestones,
  287. num_closed_milestones,
  288. is_private,
  289. is_empty,
  290. is_archived,
  291. is_mirror,
  292. status,
  293. is_fork,
  294. fork_id,
  295. is_template,
  296. template_id,
  297. size,
  298. is_fsck_enabled,
  299. close_issues_via_commit_in_any_branch,
  300. topics,
  301. avatar,
  302. created_unix,
  303. updated_unix,
  304. contract_address,
  305. block_chain_status,
  306. balance,
  307. clone_cnt,
  308. num_commit,
  309. git_clone_cnt,
  310. creator_id,
  311. repo_type,
  312. lang,
  313. alias,
  314. lower_alias)
  315. SELECT
  316. id,
  317. owner_id,
  318. owner_name,
  319. lower_name,
  320. name,
  321. description,
  322. website,
  323. original_service_type,
  324. original_url,
  325. default_branch,
  326. num_watches,
  327. num_stars,
  328. num_forks,
  329. num_issues,
  330. num_closed_issues,
  331. num_pulls,
  332. num_closed_pulls,
  333. num_milestones,
  334. num_closed_milestones,
  335. is_private,
  336. is_empty,
  337. is_archived,
  338. is_mirror,
  339. status,
  340. is_fork,
  341. fork_id,
  342. is_template,
  343. template_id,
  344. size,
  345. is_fsck_enabled,
  346. close_issues_via_commit_in_any_branch,
  347. topics,
  348. avatar,
  349. created_unix,
  350. updated_unix,
  351. contract_address,
  352. block_chain_status,
  353. balance,
  354. clone_cnt,
  355. num_commit,
  356. git_clone_cnt,
  357. creator_id,
  358. repo_type,
  359. (select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat a where a.repo_id=b.id),
  360. alias,
  361. lower_alias
  362. FROM public.repository b where b.id=NEW.id;
  363. INSERT INTO public.dataset_es(
  364. id,
  365. title,
  366. status,
  367. category,
  368. description,
  369. download_times,
  370. license, task,
  371. release_id,
  372. user_id,
  373. repo_id,
  374. created_unix,
  375. updated_unix,file_name)
  376. SELECT
  377. b.id,
  378. b.title,
  379. b.status,
  380. b.category,
  381. b.description,
  382. b.download_times,
  383. b.license,
  384. b.task,
  385. b.release_id,
  386. b.user_id,
  387. b.repo_id,
  388. b.created_unix,
  389. b.updated_unix,(select array_to_string(array_agg(name order by created_unix desc),',') from public.attachment a where a.dataset_id=b.id and a.is_private=false)
  390. FROM public.dataset b where b.repo_id=NEW.id;
  391. INSERT INTO public.issue_es(
  392. id,
  393. repo_id,
  394. index,
  395. poster_id,
  396. original_author,
  397. original_author_id,
  398. name,
  399. content,
  400. milestone_id,
  401. priority,
  402. is_closed,
  403. is_pull,
  404. num_comments,
  405. ref,
  406. deadline_unix,
  407. created_unix,
  408. updated_unix,
  409. closed_unix,
  410. is_locked,
  411. amount,
  412. is_transformed,comment,pr_id)
  413. SELECT
  414. b.id,
  415. b.repo_id,
  416. b.index,
  417. b.poster_id,
  418. b.original_author,
  419. b.original_author_id,
  420. b.name,
  421. b.content,
  422. b.milestone_id,
  423. b.priority,
  424. b.is_closed,
  425. b.is_pull,
  426. b.num_comments,
  427. b.ref,
  428. b.deadline_unix,
  429. b.created_unix,
  430. b.updated_unix,
  431. b.closed_unix,
  432. b.is_locked,
  433. b.amount,
  434. b.is_transformed,
  435. (select array_to_string(array_agg(content order by created_unix desc),',') from public.comment a where a.issue_id=b.id),
  436. (select id from public.pull_request d where d.issue_id=b.id)
  437. FROM public.issue b where b.repo_id=NEW.id;
  438. end if;
  439. if not OLD.is_private and NEW.is_private then
  440. delete from public.issue_es where repo_id=NEW.id;
  441. delete from public.dataset_es where repo_id=NEW.id;
  442. delete from public.repository_es where id=NEW.id;
  443. end if;
  444. end if;
  445. if not NEW.is_private then
  446. raise notice 'update repo,the updated_unix is %',NEW.updated_unix;
  447. update public.repository_es SET description=NEW.description,
  448. name=NEW.name,
  449. lower_name=NEW.lower_name,
  450. owner_name=NEW.owner_name,
  451. website=NEW.website,
  452. updated_unix=NEW.updated_unix,
  453. num_watches=NEW.num_watches,
  454. num_stars=NEW.num_stars,
  455. num_forks=NEW.num_forks,
  456. topics=NEW.topics,
  457. alias = NEW.alias,
  458. lower_alias = NEW.lower_alias,
  459. avatar=NEW.avatar
  460. where id=NEW.id;
  461. end if;
  462. return new;
  463. END
  464. $def$
  465. LANGUAGE plpgsql;
  466. CREATE TRIGGER es_update_repository
  467. AFTER UPDATE ON public.repository
  468. FOR EACH ROW EXECUTE PROCEDURE update_repository();
  469. ALTER TABLE public.repository ENABLE ALWAYS TRIGGER es_update_repository;
  470. DROP TRIGGER IF EXISTS es_delete_repository on public.repository;
  471. CREATE OR REPLACE FUNCTION public.delete_repository() RETURNS trigger AS
  472. $def$
  473. declare
  474. BEGIN
  475. delete from public.issue_es where repo_id=OLD.id;
  476. delete from public.dataset_es where repo_id=OLD.id;
  477. DELETE FROM public.repository_es where id=OLD.id;
  478. return new;
  479. END
  480. $def$
  481. LANGUAGE plpgsql;
  482. CREATE TRIGGER es_delete_repository
  483. AFTER DELETE ON public.repository
  484. FOR EACH ROW EXECUTE PROCEDURE delete_repository();
  485. ALTER TABLE public.repository ENABLE ALWAYS TRIGGER es_delete_repository;
  486. DROP TRIGGER IF EXISTS es_udpate_repository_lang on public.language_stat;
  487. CREATE OR REPLACE FUNCTION public.udpate_repository_lang() RETURNS trigger AS
  488. $def$
  489. BEGIN
  490. if (TG_OP = 'UPDATE') then
  491. update public.repository_es SET lang=(select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat where repo_id=NEW.repo_id) where id=NEW.repo_id;
  492. elsif (TG_OP = 'INSERT') then
  493. update public.repository_es SET lang=(select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat where repo_id=NEW.repo_id) where id=NEW.repo_id;
  494. elsif (TG_OP = 'DELETE') then
  495. if exists(select 1 from public.repository where id=OLD.repo_id) then
  496. update public.repository_es SET lang=(select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat where repo_id=OLD.repo_id) where id=OLD.repo_id;
  497. end if;
  498. end if;
  499. return null;
  500. END;
  501. $def$
  502. LANGUAGE plpgsql;
  503. CREATE TRIGGER es_udpate_repository_lang
  504. AFTER INSERT OR UPDATE OR DELETE ON public.language_stat
  505. FOR EACH ROW EXECUTE PROCEDURE udpate_repository_lang();
  506. ALTER TABLE public.language_stat ENABLE ALWAYS TRIGGER es_udpate_repository_lang;