<div dir="ltr"><div>> We could almost script it!<br><br>What an awesome idea, isn't it?<br>So let's make it real!<br>See bug 17898 (<span id="inbox-inbox-summary_container"><span id="inbox-inbox-short_desc_nonedit_display">Add a way to automatically convert SQL reports)</span></span>.<br><br></div>Have a great week-end!<br><div><br><div><div class="gmail_quote"><div dir="ltr">On Fri, 13 Jan 2017 at 12:33 Jonathan Druart <<a href="mailto:jonathan.druart@bugs.koha-community.org">jonathan.druart@bugs.koha-community.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">Hi devs,<br class="gmail_msg"><br class="gmail_msg"></div>Bug 17196 is on its way to master, that means that some SQL reports from our wiki will be obsolete.<br class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"><a href="https://wiki.koha-community.org/wiki/SQL_Reports_Library#Query_MARC" class="gmail_msg" target="_blank">https://wiki.koha-community.org/wiki/SQL_Reports_Library#Query_MARC</a><br class="gmail_msg"><br class="gmail_msg">We need to provide to libraries the examples of equivalent reports to help them updating their custom reports.<br class="gmail_msg"><br class="gmail_msg">It seems very easy to update the reports from the wiki, but we will need to propose the 2 versions (with and without the biblioitems.marcxml field).<br class="gmail_msg">As the marcxml will be moved to the biblio_metadata.metadata field, the reports are very easy to update, for instance:<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">1/ Simple request on the biblioitems table:<br class="gmail_msg"><br class="gmail_msg">    SELECT biblionumber, ExtractValue(marcxml, 'count(//datafield[@tag="505"])') AS count505<br class="gmail_msg">    FROM biblioitems<br class="gmail_msg">    HAVING count505 > 1;<br class="gmail_msg"><br class="gmail_msg">Will become:<br class="gmail_msg"><br class="gmail_msg">    SELECT biblionumber, ExtractValue(metadata, 'count(//datafield[@tag="505"])') AS count505<br class="gmail_msg">    FROM biblio_metadata<br class="gmail_msg">    HAVING count505 > 1; <br class="gmail_msg"><br class="gmail_msg">2/ With info from the biblio table:<br class="gmail_msg"><br class="gmail_msg">    SELECT biblionumber, substring( ExtractValue(marcxml,'//controlfield[@tag="008"]'), 8,4 ) AS 'PUB DATE', title<br class="gmail_msg">    FROM biblioitems<br class="gmail_msg">    INNER JOIN biblio USING (biblionumber)<br class="gmail_msg">    WHERE biblionumber = 14;<br class="gmail_msg"><br class="gmail_msg">Will become:<br class="gmail_msg"><br class="gmail_msg">    SELECT biblionumber, substring( ExtractValue(metadata,'//controlfield[@tag="008"]'), 8,4 ) AS 'PUB DATE', title<br class="gmail_msg">    FROM biblio_metadata<br class="gmail_msg">    INNER JOIN biblio USING (biblionumber)<br class="gmail_msg">    WHERE biblionumber = 14;<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">3/ Move complex query:<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">    SELECT concat(b.title, ' ', ExtractValue(m.marcxml, '//datafield[@tag="245"]/subfield[@code="b"]')) AS title, b.author, count(h.reservedate) AS 'holds'<br class="gmail_msg">    FROM biblio b<br class="gmail_msg">    LEFT JOIN biblioitems m USING (biblionumber)<br class="gmail_msg">    LEFT JOIN reserves h ON (b.biblionumber=h.biblionumber)<br class="gmail_msg">    GROUP BY b.biblionumber<br class="gmail_msg">    HAVING count(h.reservedate) >= 42;<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Will become:<br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg">    SELECT concat(b.title, ' ', ExtractValue(m.metadata, '//datafield[@tag="245"]/subfield[@code="b"]')) AS title, b.author, count(h.reservedate) AS 'holds'<br class="gmail_msg">    FROM biblio b<br class="gmail_msg">    LEFT JOIN biblio_metadata m USING (biblionumber)<br class="gmail_msg">    LEFT JOIN reserves h ON (b.biblionumber=h.biblionumber)<br class="gmail_msg">    GROUP BY b.biblionumber<br class="gmail_msg">    HAVING count(h.reservedate) >= 42;<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">So basilly "biblioitems" becomes "biblio_metadata" and marcxml becomes "metadata".<br class="gmail_msg"></div><div class="gmail_msg">We could almost script it!<br class="gmail_msg"></div><div class="gmail_msg">The only difficulty I see is when we will need infos from the biblioitems table, we will need to add a join on biblio_metadata.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I was going to add the biblio_metadata version on the wiki, but, the first example of ExtractValue is completely wrong. It says that 2 queries are equivalent ("they are equivalent") and that "they return the whole 952 field". Which is totally wrong.<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">The work is a bit more complex than expected apparently, this wiki page need to be updated and cleaned first. Then we will be able to provide equivalent queries.<br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Cheers,<br class="gmail_msg"></div><div class="gmail_msg">Jonathan</div></div></div></blockquote></div></div></div></div>