{"id":765,"date":"2014-01-30T11:29:17","date_gmt":"2014-01-30T19:29:17","guid":{"rendered":"http:\/\/galencharlton.com\/blog\/?p=765"},"modified":"2014-01-30T11:29:17","modified_gmt":"2014-01-30T19:29:17","slug":"duplicate-holidays-and-a-question","status":"publish","type":"post","link":"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/","title":{"rendered":"Duplicate holidays, and a question"},"content":{"rendered":"<p>One can, in fact, have too many holidays.<\/p>\n<p>Koha uses the <code>DateTime::Set<\/code> Perl module when (among other things) calculating the next day the library is open.  Unfortunately, the more special holidays you have in a Koha database, the more time <code>DateTime::Set<\/code> takes to initialize itself &#8212; and the time appears to grow faster than linearly with the number of holidays.<\/p>\n<p>Jonathan Druart partially addressed this with his patch for <a href=\"http:\/\/bugs.koha-community.org\/bugzilla3\/show_bug.cgi?id=11112\">bug 11112<\/a> by implementing some lazy initialization and caching for <code>Koha::Calendar<\/code>, but that doesn&#8217;t make <code>DateTime::Set<\/code>&#8216;s constructor itself any faster.<\/p>\n<p>Today I happened to be working on a Koha database that turned out to have <strong>duplicate<\/strong> rows in the <code>special_holidays<\/code> table.  In other words, for a given library, there might be four rows all expressing that the library is closed on 15 August 2014.   That database contains hundreds of duplicates, which results in an extra 1-3 seconds per circulation operation.<\/p>\n<p>The duplication is not apparent in the calendar editor, alas.<\/p>\n<p>So here&#8217;s my first question: has anybody else seen this in their Koha database?  The following query will turn up duplicates:<\/p>\n<pre>\r\nSELECT branchcode, year, month, day, isexception, COUNT(*)\r\nFROM special_holidays\r\nGROUP BY 1, 2, 3, 4, 5\r\nHAVING COUNT(*) > 1;                    \r\n<\/pre>\n<p>And my second question: assuming that this somehow came about during normal operation of Koha (as opposed to duplicate rows getting directly loaded into the database), does anybody have any ideas how this happened?<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-765\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>More<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-tumblr\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-tumblr sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=tumblr\" target=\"_blank\" title=\"Click to share on Tumblr\"><span>Tumblr<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/\" target=\"_blank\" title=\"Click to print\"><span>Print<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>One can, in fact, have too many holidays. Koha uses the DateTime::Set Perl module when (among other things) calculating the next day the library is&#8230;<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-765\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>More<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-tumblr\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-tumblr sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=tumblr\" target=\"_blank\" title=\"Click to share on Tumblr\"><span>Tumblr<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2014\/01\/duplicate-holidays-and-a-question\/\" target=\"_blank\" title=\"Click to print\"><span>Print<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"Duplicate holidays, and a question #kohails","jetpack_is_tweetstorm":false},"categories":[4,10],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3gJ9y-cl","_links":{"self":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/765"}],"collection":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/comments?post=765"}],"version-history":[{"count":4,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/765\/revisions"}],"predecessor-version":[{"id":769,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/765\/revisions\/769"}],"wp:attachment":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/media?parent=765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/categories?post=765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/tags?post=765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}