Skip to content

Commit d615b08

Browse files
committed
rename rebuild_mat_view + optimize it when the object_id is known
1 parent 97a0f75 commit d615b08

2 files changed

Lines changed: 45 additions & 12 deletions

File tree

other/mysql/bbdata2-structure.sql

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-- MySQL Script generated by MySQL Workbench
2-
-- Tue Sep 15 19:58:14 2020
2+
-- Tue Sep 15 20:27:02 2020
33
-- Model: New Model Version: 1.0
44
-- MySQL Workbench Forward Engineering
55

@@ -363,15 +363,15 @@ END$$
363363
DELIMITER ;
364364

365365
-- -----------------------------------------------------
366-
-- procedure rebuild_mat_view
366+
-- procedure rebuild_userperms
367367
-- -----------------------------------------------------
368368

369369
USE `bbdata2`;
370-
DROP procedure IF EXISTS `rebuild_mat_view`;
370+
DROP procedure IF EXISTS `rebuild_userperms`;
371371

372372
DELIMITER $$
373373
USE `bbdata2`$$
374-
CREATE PROCEDURE `rebuild_mat_view`()
374+
CREATE PROCEDURE `rebuild_userperms`()
375375
BEGIN
376376
DELETE FROM userperms; -- don't use truncate: aises an error when called from a trigger
377377
INSERT IGNORE INTO userperms
@@ -418,6 +418,39 @@ END$$
418418

419419
DELIMITER ;
420420

421+
-- -----------------------------------------------------
422+
-- procedure rebuild_userperms_oid
423+
-- -----------------------------------------------------
424+
425+
USE `bbdata2`;
426+
DROP procedure IF EXISTS `rebuild_userperms_oid`;
427+
428+
DELIMITER $$
429+
USE `bbdata2`$$
430+
CREATE PROCEDURE `rebuild_userperms_oid`(IN oid INT)
431+
BEGIN
432+
-- same as rebuild_userperms, but delete/insert only lines with the given object
433+
-- this is an optimisation: objects are often created/altered so it is worth it !
434+
DELETE FROM userperms WHERE object_id = oid;
435+
INSERT IGNORE INTO userperms
436+
SELECT DISTINCT * FROM (
437+
-- all admin members of the ugrp owner of the object have write permission
438+
SELECT ug.user_id, o.id, ug.is_admin
439+
FROM users_ugrps ug INNER JOIN objects o ON o.ugrp_id = ug.ugrp_id
440+
WHERE o.id = oid
441+
UNION
442+
-- all members of an ugrp added to an object group having the object have read permission
443+
SELECT ug.user_id, og.object_id, 0
444+
FROM users_ugrps ug
445+
INNER JOIN rights r ON ug.ugrp_id = r.ugrp_id
446+
INNER JOIN objects_ogrps og ON r.ogrp_id = og.ogrp_id
447+
INNER JOIN objects o ON og.object_id = o.id AND o.id = oid
448+
WHERE ug.ugrp_id <> o.ugrp_id
449+
) tmp;
450+
END$$
451+
452+
DELIMITER ;
453+
421454
-- -----------------------------------------------------
422455
-- View `ogrps_read`
423456
-- -----------------------------------------------------
@@ -476,7 +509,7 @@ USE `bbdata2`$$
476509
CREATE TRIGGER `objects_AINS` AFTER INSERT ON `objects` FOR EACH ROW
477510
-- DAFUCK ???!!!!
478511
-- INSERT IGNORE INTO objects_ogrps(ogrp_id, object_id) VALUES (NEW.ugrp_id, NEW.id);
479-
CALL rebuild_mat_view();$$
512+
CALL rebuild_userperms_oid(NEW.id);$$
480513

481514

482515
USE `bbdata2`$$
@@ -494,49 +527,49 @@ USE `bbdata2`$$
494527
DROP TRIGGER IF EXISTS `objects_ADEL` $$
495528
USE `bbdata2`$$
496529
CREATE TRIGGER `objects_ADEL` AFTER DELETE ON `objects` FOR EACH ROW
497-
CALL rebuild_mat_view();$$
530+
CALL rebuild_userperms_oid(OLD.id);$$
498531

499532

500533
USE `bbdata2`$$
501534
DROP TRIGGER IF EXISTS `objects_ogrps_AINS` $$
502535
USE `bbdata2`$$
503536
CREATE TRIGGER `objects_ogrps_AINS` AFTER INSERT ON `objects_ogrps` FOR EACH ROW
504-
CALL rebuild_mat_view();$$
537+
CALL rebuild_userperms_oid(NEW.object_id);$$
505538

506539

507540
USE `bbdata2`$$
508541
DROP TRIGGER IF EXISTS `objects_ogrps_ADEL` $$
509542
USE `bbdata2`$$
510543
CREATE TRIGGER `objects_ogrps_ADEL` AFTER DELETE ON `objects_ogrps` FOR EACH ROW
511-
CALL rebuild_mat_view();$$
544+
CALL rebuild_userperms_oid(OLD.object_id);$$
512545

513546

514547
USE `bbdata2`$$
515548
DROP TRIGGER IF EXISTS `rights_AINS` $$
516549
USE `bbdata2`$$
517550
CREATE TRIGGER `rights_AINS` AFTER INSERT ON `rights` FOR EACH ROW
518-
CALL rebuild_mat_view();$$
551+
CALL rebuild_userperms();$$
519552

520553

521554
USE `bbdata2`$$
522555
DROP TRIGGER IF EXISTS `rights_ADEL` $$
523556
USE `bbdata2`$$
524557
CREATE TRIGGER `rights_ADEL` AFTER DELETE ON `rights` FOR EACH ROW
525-
CALL rebuild_mat_view();$$
558+
CALL rebuild_userperms();$$
526559

527560

528561
USE `bbdata2`$$
529562
DROP TRIGGER IF EXISTS `users_ugrps_AINS` $$
530563
USE `bbdata2`$$
531564
CREATE TRIGGER `users_ugrps_AINS` AFTER INSERT ON `users_ugrps` FOR EACH ROW
532-
CALL rebuild_mat_view()$$
565+
CALL rebuild_userperms();$$
533566

534567

535568
USE `bbdata2`$$
536569
DROP TRIGGER IF EXISTS `users_ugrps_ADEL` $$
537570
USE `bbdata2`$$
538571
CREATE TRIGGER `users_ugrps_ADEL` AFTER DELETE ON `users_ugrps` FOR EACH ROW
539-
CALL rebuild_mat_view();$$
572+
CALL rebuild_userperms();$$
540573

541574

542575
DELIMITER ;

other/mysql/bbdata2.mwb

299 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)