+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+
+
+
+
+
+
+
+
+
+$$::text);
+ERROR: xslt_process() is not available without libxslt
+CREATE TABLE xpath_test (id integer NOT NULL, t xml);
+INSERT INTO xpath_test VALUES (1, '1');
+SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
+as t(id int4);
+ id
+----
+(0 rows)
+
+SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
+as t(id int4, doc int4);
+ id | doc
+----+-----
+ 1 | 1
+(1 row)
+
+DROP TABLE xpath_test;
+CREATE TABLE xpath_test (id integer NOT NULL, t text);
+INSERT INTO xpath_test VALUES (1, '1');
+SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
+as t(id int4);
+ id
+----
+(0 rows)
+
+SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
+as t(id int4, doc int4);
+ id | doc
+----+-----
+ 1 | 1
+(1 row)
+
+create table articles (article_id integer, article_xml xml, date_entered date);
+insert into articles (article_id, article_xml, date_entered)
+values (2, '
test37', now());
+SELECT * FROM
+xpath_table('article_id',
+ 'article_xml',
+ 'articles',
+ '/article/author|/article/pages|/article/title',
+ 'date_entered > ''2003-01-01'' ')
+AS t(article_id integer, author text, page_count integer, title text);
+ article_id | author | page_count | title
+------------+--------+------------+-------
+ 2 | test | 37 |
+(1 row)
+
+-- this used to fail when invoked a second time
+select xslt_process('
',$$
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+
+
+
+$$)::xml;
+ERROR: xslt_process() is not available without libxslt
+select xslt_process('
',$$
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+
+
+
+$$)::xml;
+ERROR: xslt_process() is not available without libxslt
+create table t1 (id integer, xml_data xml);
+insert into t1 (id, xml_data)
+values
+Value');
+create index idx_xpath on t1 ( xpath_string
+('/attributes/attribute[@name="attr_1"]/text()', xml_data::text));
-/* $PostgreSQL: pgsql/contrib/xml2/pgxml.sql.in,v 1.11 2007/11/13 04:24:29 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/xml2/pgxml.sql.in,v 1.12 2010/03/01 18:07:59 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-
CREATE OR REPLACE FUNCTION xpath_list(text,text) RETURNS text
AS 'SELECT xpath_list($1,$2,'','')'
LANGUAGE SQL STRICT IMMUTABLE;
-
-
-- Wrapper functions for nodeset where no tags needed
-
CREATE OR REPLACE FUNCTION xpath_nodeset(text,text)
RETURNS text
AS 'SELECT xpath_nodeset($1,$2,'''','''')'
LANGUAGE SQL STRICT IMMUTABLE;
-
CREATE OR REPLACE FUNCTION xpath_nodeset(text,text,text)
RETURNS text
AS 'SELECT xpath_nodeset($1,$2,'''',$3)'
LANGUAGE C STRICT STABLE;
-- XSLT functions
--- Delete from here to the end of the file if you are not compiling with
--- XSLT support.
-
CREATE OR REPLACE FUNCTION xslt_process(text,text,text)
RETURNS text
LANGUAGE C STRICT VOLATILE;
-- the function checks for the correct argument count
-
CREATE OR REPLACE FUNCTION xslt_process(text,text)
RETURNS text
AS 'MODULE_PATHNAME'
/*
- * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.18 2010/03/01 05:16:35 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.19 2010/03/01 18:07:59 tgl Exp $
*
* XSLT processing functions (requiring libxslt)
*
#include "miscadmin.h"
#include "utils/builtins.h"
+#ifdef USE_LIBXSLT
+
/* libxml includes */
#include
#include
#include
+#endif /* USE_LIBXSLT */
+
/* externally accessible functions */
Datum xslt_process(PG_FUNCTION_ARGS);
+#ifdef USE_LIBXSLT
+
/* declarations to come from xpath.c */
extern void elog_error(const char *explain, bool force);
extern void pgxml_parser_init(void);
#define MAXPARAMS 20 /* must be even, see parse_params() */
+#endif /* USE_LIBXSLT */
+
PG_FUNCTION_INFO_V1(xslt_process);
Datum
xslt_process(PG_FUNCTION_ARGS)
{
+#ifdef USE_LIBXSLT
+
text *doct = PG_GETARG_TEXT_P(0);
text *ssheet = PG_GETARG_TEXT_P(1);
text *paramstr;
PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text_with_len((char *) resstr, reslen));
+
+#else /* !USE_LIBXSLT */
+
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("xslt_process() is not available without libxslt")));
+ PG_RETURN_NULL();
+
+#endif /* USE_LIBXSLT */
}
+#ifdef USE_LIBXSLT
static void
parse_params(const char **params, text *paramstr)
params[i] = NULL;
}
+
+#endif /* USE_LIBXSLT */