]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/1030.function.oils_xslt_process_utf8_fix.sql
LP#1835085: stamp DB update
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 1030.function.oils_xslt_process_utf8_fix.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('1030', :eg_version);
4
5 CREATE OR REPLACE FUNCTION evergreen.oils_xslt_process(TEXT, TEXT) RETURNS TEXT AS $func$
6   use strict;
7
8   use XML::LibXSLT;
9   use XML::LibXML;
10
11   my $doc = shift;
12   my $xslt = shift;
13
14   # The following approach uses the older XML::LibXML 1.69 / XML::LibXSLT 1.68
15   # methods of parsing XML documents and stylesheets, in the hopes of broader
16   # compatibility with distributions
17   my $parser = $_SHARED{'_xslt_process'}{parsers}{xml} || XML::LibXML->new();
18
19   # Cache the XML parser, if we do not already have one
20   $_SHARED{'_xslt_process'}{parsers}{xml} = $parser
21     unless ($_SHARED{'_xslt_process'}{parsers}{xml});
22
23   my $xslt_parser = $_SHARED{'_xslt_process'}{parsers}{xslt} || XML::LibXSLT->new();
24
25   # Cache the XSLT processor, if we do not already have one
26   $_SHARED{'_xslt_process'}{parsers}{xslt} = $xslt_parser
27     unless ($_SHARED{'_xslt_process'}{parsers}{xslt});
28
29   my $stylesheet = $_SHARED{'_xslt_process'}{stylesheets}{$xslt} ||
30     $xslt_parser->parse_stylesheet( $parser->parse_string($xslt) );
31
32   $_SHARED{'_xslt_process'}{stylesheets}{$xslt} = $stylesheet
33     unless ($_SHARED{'_xslt_process'}{stylesheets}{$xslt});
34
35   return $stylesheet->output_as_chars(
36     $stylesheet->transform(
37       $parser->parse_string($doc)
38     )
39   );
40
41 $func$ LANGUAGE 'plperlu' STRICT IMMUTABLE;
42
43 COMMIT;