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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  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. CREATE OR REPLACE FUNCTION public.insert_repository_data() RETURNS trigger AS
  159. $def$
  160. BEGIN
  161. if not NEW.is_private then
  162. INSERT INTO public.repository_es (id,
  163. owner_id,
  164. owner_name,
  165. lower_name,
  166. name,
  167. description,
  168. website,
  169. original_service_type,
  170. original_url,
  171. default_branch,
  172. num_watches,
  173. num_stars,
  174. num_forks,
  175. num_issues,
  176. num_closed_issues,
  177. num_pulls,
  178. num_closed_pulls,
  179. num_milestones,
  180. num_closed_milestones,
  181. is_private,
  182. is_empty,
  183. is_archived,
  184. is_mirror,
  185. status,
  186. is_fork,
  187. fork_id,
  188. is_template,
  189. template_id,
  190. size,
  191. is_fsck_enabled,
  192. close_issues_via_commit_in_any_branch,
  193. topics,
  194. avatar,
  195. created_unix,
  196. updated_unix,
  197. contract_address,
  198. block_chain_status,
  199. balance,
  200. clone_cnt,
  201. num_commit,
  202. git_clone_cnt,
  203. creator_id,
  204. repo_type,
  205. alias,
  206. lower_alias) VALUES
  207. (NEW.id,
  208. NEW.owner_id,
  209. NEW.owner_name,
  210. NEW.lower_name,
  211. NEW.name,
  212. NEW.description,
  213. NEW.website,
  214. NEW.original_service_type,
  215. NEW.original_url,
  216. NEW.default_branch,
  217. NEW.num_watches,
  218. NEW.num_stars,
  219. NEW.num_forks,
  220. NEW.num_issues,
  221. NEW.num_closed_issues,
  222. NEW.num_pulls,
  223. NEW.num_closed_pulls,
  224. NEW.num_milestones,
  225. NEW.num_closed_milestones,
  226. NEW.is_private,
  227. NEW.is_empty,
  228. NEW.is_archived,
  229. NEW.is_mirror,
  230. NEW.status,
  231. NEW.is_fork,
  232. NEW.fork_id,
  233. NEW.is_template,
  234. NEW.template_id,
  235. NEW.size,
  236. NEW.is_fsck_enabled,
  237. NEW.close_issues_via_commit_in_any_branch,
  238. NEW.topics,
  239. NEW.avatar,
  240. NEW.created_unix,
  241. NEW.updated_unix,
  242. NEW.contract_address,
  243. NEW.block_chain_status,
  244. NEW.balance,
  245. NEW.clone_cnt,
  246. NEW.num_commit,
  247. NEW.git_clone_cnt,
  248. NEW.creator_id,
  249. NEW.repo_type,
  250. NEW.alias,
  251. NEW.lower_alias);
  252. end if;
  253. RETURN NEW;
  254. END;
  255. $def$
  256. LANGUAGE plpgsql;
  257. DROP TRIGGER IF EXISTS es_insert_repository on public.repository;
  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. CREATE OR REPLACE FUNCTION public.update_repository() RETURNS trigger AS
  263. $def$
  264. BEGIN
  265. if OLD.is_private != NEW.is_private then
  266. if OLD.is_private and not NEW.is_private then
  267. --insert
  268. INSERT INTO public.repository_es (id,
  269. owner_id,
  270. owner_name,
  271. lower_name,
  272. name,
  273. description,
  274. website,
  275. original_service_type,
  276. original_url,
  277. default_branch,
  278. num_watches,
  279. num_stars,
  280. num_forks,
  281. num_issues,
  282. num_closed_issues,
  283. num_pulls,
  284. num_closed_pulls,
  285. num_milestones,
  286. num_closed_milestones,
  287. is_private,
  288. is_empty,
  289. is_archived,
  290. is_mirror,
  291. status,
  292. is_fork,
  293. fork_id,
  294. is_template,
  295. template_id,
  296. size,
  297. is_fsck_enabled,
  298. close_issues_via_commit_in_any_branch,
  299. topics,
  300. avatar,
  301. created_unix,
  302. updated_unix,
  303. contract_address,
  304. block_chain_status,
  305. balance,
  306. clone_cnt,
  307. num_commit,
  308. git_clone_cnt,
  309. creator_id,
  310. repo_type,
  311. lang,
  312. alias,
  313. lower_alias)
  314. SELECT
  315. id,
  316. owner_id,
  317. owner_name,
  318. lower_name,
  319. name,
  320. description,
  321. website,
  322. original_service_type,
  323. original_url,
  324. default_branch,
  325. num_watches,
  326. num_stars,
  327. num_forks,
  328. num_issues,
  329. num_closed_issues,
  330. num_pulls,
  331. num_closed_pulls,
  332. num_milestones,
  333. num_closed_milestones,
  334. is_private,
  335. is_empty,
  336. is_archived,
  337. is_mirror,
  338. status,
  339. is_fork,
  340. fork_id,
  341. is_template,
  342. template_id,
  343. size,
  344. is_fsck_enabled,
  345. close_issues_via_commit_in_any_branch,
  346. topics,
  347. avatar,
  348. created_unix,
  349. updated_unix,
  350. contract_address,
  351. block_chain_status,
  352. balance,
  353. clone_cnt,
  354. num_commit,
  355. git_clone_cnt,
  356. creator_id,
  357. repo_type,
  358. (select array_to_string(array_agg(language order by percentage desc),',') from public.language_stat a where a.repo_id=b.id),
  359. alias,
  360. lower_alias
  361. FROM public.repository b where b.id=NEW.id;
  362. INSERT INTO public.dataset_es(
  363. id,
  364. title,
  365. status,
  366. category,
  367. description,
  368. download_times,
  369. license, task,
  370. release_id,
  371. user_id,
  372. repo_id,
  373. created_unix,
  374. updated_unix,file_name)
  375. SELECT
  376. b.id,
  377. b.title,
  378. b.status,
  379. b.category,
  380. b.description,
  381. b.download_times,
  382. b.license,
  383. b.task,
  384. b.release_id,
  385. b.user_id,
  386. b.repo_id,
  387. b.created_unix,
  388. 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)
  389. FROM public.dataset b where b.repo_id=NEW.id;
  390. INSERT INTO public.issue_es(
  391. id,
  392. repo_id,
  393. index,
  394. poster_id,
  395. original_author,
  396. original_author_id,
  397. name,
  398. content,
  399. milestone_id,
  400. priority,
  401. is_closed,
  402. is_pull,
  403. num_comments,
  404. ref,
  405. deadline_unix,
  406. created_unix,
  407. updated_unix,
  408. closed_unix,
  409. is_locked,
  410. amount,
  411. is_transformed,comment,pr_id)
  412. SELECT
  413. b.id,
  414. b.repo_id,
  415. b.index,
  416. b.poster_id,
  417. b.original_author,
  418. b.original_author_id,
  419. b.name,
  420. b.content,
  421. b.milestone_id,
  422. b.priority,
  423. b.is_closed,
  424. b.is_pull,
  425. b.num_comments,
  426. b.ref,
  427. b.deadline_unix,
  428. b.created_unix,
  429. b.updated_unix,
  430. b.closed_unix,
  431. b.is_locked,
  432. b.amount,
  433. b.is_transformed,
  434. (select array_to_string(array_agg(content order by created_unix desc),',') from public.comment a where a.issue_id=b.id),
  435. (select id from public.pull_request d where d.issue_id=b.id)
  436. FROM public.issue b where b.repo_id=NEW.id;
  437. end if;
  438. if not OLD.is_private and NEW.is_private then
  439. delete from public.issue_es where repo_id=NEW.id;
  440. delete from public.dataset_es where repo_id=NEW.id;
  441. delete from public.repository_es where id=NEW.id;
  442. end if;
  443. end if;
  444. if not NEW.is_private then
  445. update public.repository_es SET description=NEW.description,
  446. name=NEW.name,
  447. lower_name=NEW.lower_name,
  448. owner_name=NEW.owner_name,
  449. website=NEW.website,
  450. updated_unix=NEW.updated_unix,
  451. num_watches=NEW.num_watches,
  452. num_stars=NEW.num_stars,
  453. num_forks=NEW.num_forks,
  454. topics=NEW.topics,
  455. alias = NEW.alias,
  456. lower_alias = NEW.lower_alias
  457. where id=NEW.id;
  458. end if;
  459. return new;
  460. END
  461. $def$
  462. LANGUAGE plpgsql;
  463. DROP TRIGGER IF EXISTS es_update_repository on public.repository;
  464. CREATE TRIGGER es_update_repository
  465. AFTER UPDATE ON public.repository
  466. FOR EACH ROW EXECUTE PROCEDURE update_repository();
  467. ALTER TABLE public.repository ENABLE ALWAYS TRIGGER es_update_repository;
  468. CREATE OR REPLACE FUNCTION public.delete_repository() RETURNS trigger AS
  469. $def$
  470. declare
  471. BEGIN
  472. delete from public.issue_es where repo_id=OLD.id;
  473. delete from public.dataset_es where repo_id=OLD.id;
  474. DELETE FROM public.repository_es where id=OLD.id;
  475. return new;
  476. END
  477. $def$
  478. LANGUAGE plpgsql;
  479. DROP TRIGGER IF EXISTS es_delete_repository on public.repository;
  480. CREATE TRIGGER es_delete_repository
  481. AFTER DELETE ON public.repository
  482. FOR EACH ROW EXECUTE PROCEDURE delete_repository();
  483. ALTER TABLE public.repository ENABLE ALWAYS TRIGGER es_delete_repository;
  484. CREATE OR REPLACE FUNCTION public.udpate_repository_lang() RETURNS trigger AS
  485. $def$
  486. BEGIN
  487. if (TG_OP = 'UPDATE') then
  488. 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;
  489. elsif (TG_OP = 'INSERT') then
  490. 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;
  491. end if;
  492. return null;
  493. END;
  494. $def$
  495. LANGUAGE plpgsql;
  496. DROP TRIGGER IF EXISTS es_udpate_repository_lang on public.language_stat;
  497. CREATE TRIGGER es_udpate_repository_lang
  498. AFTER INSERT OR UPDATE OR DELETE ON public.language_stat
  499. FOR EACH ROW EXECUTE PROCEDURE udpate_repository_lang();
  500. ALTER TABLE public.language_stat ENABLE ALWAYS TRIGGER es_udpate_repository_lang;