added caches.listing_last_modified; db-changelog fixes

This commit is contained in:
following
2013-03-20 12:06:53 +01:00
parent d5ee4baef8
commit 085c13983f
13 changed files with 102 additions and 44 deletions
+65 -22
View File
@@ -200,6 +200,27 @@
UPDATE `mp3` SET `last_modified`=NOW() WHERE `object_id`=nCacheId;
END;");
// update listing modification date
sql_dropProcedure('sp_update_cache_listingdate');
sql("CREATE PROCEDURE sp_update_cache_listingdate (IN nCacheId INT(10) UNSIGNED)
BEGIN
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `listing_last_modified`=NOW() WHERE `cache_id`=nCacheId LIMIT 1;
END IF;
END;");
sql_dropProcedure('sp_updateall_cache_listingdates');
sql("CREATE PROCEDURE sp_updateall_cache_listingdates (OUT nModified INT)
BEGIN
UPDATE `caches` SET `listing_last_modified` =
GREATEST(`last_modified`,
GREATEST(IFNULL((SELECT MAX(`last_modified`) FROM `cache_desc` WHERE `cache_desc`.`cache_id`=`caches`.`cache_id`),'0'),
GREATEST(IFNULL((SELECT MAX(`last_modified`) FROM `coordinates` WHERE `coordinates`.`type`=1 AND `coordinates`.`cache_id`=`caches`.`cache_id`),'0'),
IFNULL((SELECT MAX(`last_modified`) FROM `pictures` WHERE `pictures`.`object_type`=2 AND `pictures`.`object_id` = `caches`.`cache_id`),'0')
)));
SET nModified = ROW_COUNT();
END;");
// set caches.desc_languages of given cacheid and fill cache_desc_prefered
sql_dropProcedure('sp_update_caches_descLanguages');
sql("CREATE PROCEDURE sp_update_caches_descLanguages (IN nCacheId INT(10) UNSIGNED)
@@ -214,9 +235,8 @@
sql_dropProcedure('sp_updateall_caches_descLanguages');
sql("CREATE PROCEDURE sp_updateall_caches_descLanguages (OUT nModified INT)
BEGIN
SET nModified = 0;
UPDATE `caches`, (SELECT `cache_id`, GROUP_CONCAT(DISTINCT `language` ORDER BY `language` SEPARATOR ',') AS `dl` FROM `cache_desc` GROUP BY `cache_id`) AS `tbl` SET `caches`.`desc_languages`=`tbl`.`dl`, `caches`.`default_desclang`=PREFERED_LANG(`tbl`.`dl`, '&1') WHERE `caches`.`cache_id`=`tbl`.`cache_id`;
SET nModified = nModified + ROW_COUNT() ;
SET nModified = ROW_COUNT() ;
END;", strtoupper($lang . ',EN'));
// update found, last_found, notfound and note of stat_cache_logs, stat_caches and stat_user
@@ -513,6 +533,7 @@
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
SET NEW.`date_created`=NOW();
SET NEW.`last_modified`=NOW();
SET NEW.`listing_last_modified`=NOW();
END IF;
IF NEW.`status` <> 5 THEN
SET NEW.`is_publishdate`=1;
@@ -589,6 +610,7 @@
OLD.`uuid`!=NEW.`uuid` OR
OLD.`node`!=NEW.`node` OR
OLD.`date_created`!=NEW.`date_created` OR
OLD.`is_publishdate`!=NEW.`is_publishdate` OR
OLD.`user_id`!=NEW.`user_id` OR
OLD.`name`!=NEW.`name` OR
OLD.`longitude`!=NEW.`longitude` OR
@@ -612,6 +634,10 @@
SET NEW.`last_modified`=NOW();
END IF;
IF NEW.`last_modified` != OLD.`last_modified` THEN
SET NEW.`listing_last_modified`=NOW();
END IF;
IF OLD.`status`!=NEW.`status` THEN
CALL sp_touch_cache(OLD.`cache_id`, FALSE);
END IF;
@@ -690,6 +716,7 @@
sql("CREATE TRIGGER `cacheDescAfterInsert` AFTER INSERT ON `cache_desc`
FOR EACH ROW
BEGIN
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF (SELECT `date_created` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) < LEFT(NOW(),10) AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=NEW.`cache_id`) != 5 THEN
INSERT IGNORE INTO `cache_desc_modified` (`cache_id`, `language`, `date_modified`, `desc`, `restored_by`) VALUES (NEW.`cache_id`, NEW.`language`, NOW(), NULL, IFNULL(@restoredby,0));
@@ -714,9 +741,11 @@
IF OLD.`language`!=NEW.`language` OR OLD.`cache_id`!=NEW.`cache_id` THEN
IF OLD.`cache_id`!=NEW.`cache_id` THEN
CALL sp_update_caches_descLanguages(OLD.`cache_id`);
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
CALL sp_update_caches_descLanguages(NEW.`cache_id`);
END IF;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
/* changes at date of creation are ignored to save archive space */
IF NEW.`cache_id`=OLD.`cache_id` AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=OLD.`cache_id`) != 5 THEN
@@ -733,6 +762,7 @@
sql("CREATE TRIGGER `cacheDescAfterDelete` AFTER DELETE ON `cache_desc`
FOR EACH ROW
BEGIN
CALL sp_update_cache_listingdate(OLD.`cache_id`);
INSERT IGNORE INTO `removed_objects` (`localId`, `uuid`, `type`, `node`) VALUES (OLD.`id`, OLD.`uuid`, 3, OLD.`node`);
/* changes at date of creation are ignored to save archive space */
IF (OLD.`date_created` < LEFT(NOW(),10)) AND
@@ -979,6 +1009,7 @@
CALL sp_update_cachelog_picturestat(NEW.`object_id`, FALSE);
ELSEIF NEW.`object_type`=2 THEN
CALL sp_update_cache_picturestat(NEW.`object_id`, FALSE);
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
END;");
@@ -1001,21 +1032,28 @@
CALL sp_update_cachelog_picturestat(OLD.`object_id`, TRUE);
ELSEIF OLD.`object_type`=2 THEN
CALL sp_update_cache_picturestat(OLD.`object_id`, TRUE);
CALL sp_update_cache_listingdate(OLD.`object_id`);
END IF;
IF NEW.`object_type`=1 THEN
CALL sp_update_cachelog_picturestat(NEW.`object_id`, FALSE);
ELSEIF NEW.`object_type`=2 THEN
CALL sp_update_cache_picturestat(NEW.`object_id`, FALSE);
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
ELSEIF @archive_picop AND
ELSE
IF NEW.`object_type`=2 THEN
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
IF @archive_picop AND
( ( NEW.`object_type`=2 AND
OLD.`date_created` < LEFT(NOW(),10) AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=OLD.`object_id`) != 5
) OR
NEW.`object_type`=1 ) AND
(NEW.`title` != OLD.`title` OR NEW.`spoiler` != OLD.`spoiler` OR NEW.`display` != OLD.`display`) THEN
INSERT IGNORE INTO `pictures_modified` (`id`, `date_modified`, `operation`, `date_created`, `url`, `title`, `object_id`, `object_type`, `spoiler`, `unknown_format`, `display`, `restored_by`) VALUES (OLD.`id`, NOW(), 'U', OLD.`date_created`, OLD.`url`, OLD.`title`, OLD.`object_id`, OLD.`object_type`, OLD.`spoiler`, OLD.`unknown_format`, OLD.`display`, IFNULL(@restoredby,0));
/* mappreview is not archived, can be safely set to 0 on restore */
INSERT IGNORE INTO `pictures_modified` (`id`, `date_modified`, `operation`, `date_created`, `url`, `title`, `object_id`, `object_type`, `spoiler`, `unknown_format`, `display`, `restored_by`) VALUES (OLD.`id`, NOW(), 'U', OLD.`date_created`, OLD.`url`, OLD.`title`, OLD.`object_id`, OLD.`object_type`, OLD.`spoiler`, OLD.`unknown_format`, OLD.`display`, IFNULL(@restoredby,0));
/* mappreview is not archived, can be safely set to 0 on restore */
END IF;
END IF;
END;");
@@ -1038,6 +1076,7 @@
CALL sp_update_cachelog_picturestat(OLD.`object_id`, TRUE);
ELSEIF OLD.`object_type`=2 THEN
CALL sp_update_cache_picturestat(OLD.`object_id`, TRUE);
CALL sp_update_cache_listingdate(OLD.`object_id`);
END IF;
END;");
@@ -1247,7 +1286,10 @@
sql("CREATE TRIGGER `cacheAttributesAfterInsert` AFTER INSERT ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
END IF;
IF (SELECT `status` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) != 5 AND
(SELECT `date_created` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) < LEFT(NOW(),10) THEN
INSERT IGNORE INTO `caches_attributes_modified` (`cache_id`, `attrib_id`, `date_modified`, `was_set`, `restored_by`) VALUES (NEW.`cache_id`, NEW.`attrib_id`, NOW(), 0, IFNULL(@restoredby,0));
@@ -1258,9 +1300,13 @@
sql("CREATE TRIGGER `cacheAttributesAfterUpdate` AFTER UPDATE ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
IF OLD.`cache_id`!=NEW.`cache_id` THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF OLD.`cache_id`!=NEW.`cache_id` THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
END IF;
/* is not called, otherweise cache_attributes_modified would have to be updated */
END;");
@@ -1269,7 +1315,10 @@
sql("CREATE TRIGGER `cacheAttributesAfterDelete` AFTER DELETE ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
IF (SELECT `status` FROM `caches` WHERE `cache_id`=OLD.`cache_id`) != 5 AND
(SELECT `date_created` FROM `caches` WHERE `cache_id`=OLD.`cache_id`) < LEFT(NOW(),10) THEN
INSERT IGNORE INTO `caches_attributes_modified` (`cache_id`, `attrib_id`, `date_modified`, `was_set`, `restored_by`) VALUES (OLD.`cache_id`, OLD.`attrib_id`, NOW(), 1, IFNULL(@restoredby,0));
@@ -1298,10 +1347,7 @@
sql("CREATE TRIGGER `coordinatesAfterInsert` AFTER INSERT ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND NEW.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=NEW.`cache_id`;
END IF;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
END;");
sql_dropTrigger('coordinatesBeforeUpdate');
@@ -1318,9 +1364,9 @@
sql("CREATE TRIGGER `coordinatesAfterUpdate` AFTER UPDATE ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND NEW.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF OLD.`cache_id`!=NEW.`cache_id` THEN
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
END;");
@@ -1328,17 +1374,14 @@
sql("CREATE TRIGGER `coordinatesAfterDelete` AFTER DELETE ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND OLD.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=OLD.`cache_id`;
END IF;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END;");
sql_dropTrigger('savedTextsBeforeInsert');
sql("CREATE TRIGGER `savedTextsBeforeInsert` BEFORE INSERT ON `saved_texts`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
/* dont overwrite creation date while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
SET NEW.`date_created`=NOW();
END IF;