| 422 | |
| 423 | За освежување на погледите, имајќи предвид дека се со динамички генерирано име, потребно беше решение со кое на истиот начин истоте ќе се освежат. За таа цел, во базата креиравме соодветни функции кои го освежуваат погледот со id зададено како параметар |
| 424 | {{{#!sql |
| 425 | create or replace function public.refresh_view_for_lists_realizations(real_id bigint) |
| 426 | returns void |
| 427 | language plpgsql |
| 428 | as |
| 429 | $$ |
| 430 | declare |
| 431 | view_name text; |
| 432 | result record; |
| 433 | begin |
| 434 | |
| 435 | view_name := format('lists_results_per_polling_stations_%s', real_id); |
| 436 | raise notice '%', view_name; |
| 437 | execute format('refresh materialized view %s;', view_name); |
| 438 | |
| 439 | view_name := format('lists_results_per_municipalities_%s', real_id); |
| 440 | raise notice '%', view_name; |
| 441 | execute format('refresh materialized view %s;', view_name); |
| 442 | |
| 443 | end; |
| 444 | $$; |
| 445 | }}} |
| 446 | |
| 447 | {{{#!sql |
| 448 | create function refresh_view_for_candidacy_realizations(real_id bigint) returns void |
| 449 | language plpgsql |
| 450 | as |
| 451 | $$ |
| 452 | declare |
| 453 | view_name text; |
| 454 | result record; |
| 455 | begin |
| 456 | |
| 457 | view_name := format('results_per_polling_stations_%s', real_id); |
| 458 | raise notice '%', view_name; |
| 459 | execute format('refresh materialized view %s;', view_name); |
| 460 | |
| 461 | view_name := format('results_per_municipalities_%s', real_id); |
| 462 | raise notice '%', view_name; |
| 463 | execute format('refresh materialized view %s;', view_name); |
| 464 | end; |
| 465 | $$; |
| 466 | }}} |
| 467 | За ова соодветно да се поврзе со програмската имплементација, имплементиравме метод кој се извршува на секои 30 секунди и ги освежува погледите за реализацијата која се одржува на денот на извршување на програмата |
| 468 | {{{!#java |
| 469 | @Scheduled(cron = "*/30 * * * *") |
| 470 | private void refreshMaterializedViews() { |
| 471 | ElectionRealization er = electionRealizationService.findTodaysRealization(); |
| 472 | turnoutRepository.refreshCandidatesResults(er.id); |
| 473 | System.out.println("REFRESHED VIEW"); |
| 474 | } |
| 475 | }}} |
| 516 | {{{#!sql |
| 517 | DO |
| 518 | $$ |
| 519 | DECLARE |
| 520 | new_kl_id BIGINT; |
| 521 | BEGIN |
| 522 | INSERT INTO kandidatski_listi (ie_id, p_id, ri_id, kl_opis, o_id) |
| 523 | VALUES (1, 1, 1, 'kandidatura_opis', 1) |
| 524 | RETURNING kl_id INTO new_kl_id; |
| 525 | |
| 526 | INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (1, kl_id); |
| 527 | INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (2, kl_id); |
| 528 | INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (3, kl_id); |
| 529 | INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (4, kl_id); |
| 530 | INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (5, kl_id); |
| 531 | |
| 532 | COMMIT; |
| 533 | END |
| 534 | $$; |
| 535 | }}} |