@ -1,5 +1,5 @@
/*
* $ PostgreSQL : pgsql / contrib / xml2 / xpath . c , v 1.27 2010 / 02 / 28 21 : 31 : 57 tgl Exp $
* $ PostgreSQL : pgsql / contrib / xml2 / xpath . c , v 1.28 2010 / 03 / 01 05 : 16 : 35 tgl Exp $
*
* Parser interface for DOM - based parser ( libxml ) rather than
* stream - based SAX - type parser
@ -145,12 +145,8 @@ xml_is_well_formed(PG_FUNCTION_ARGS)
doctree = xmlParseMemory ( ( char * ) VARDATA ( t ) , docsize ) ;
if ( doctree = = NULL )
{
xmlCleanupParser ( ) ;
PG_RETURN_BOOL ( false ) ; /* i.e. not well-formed */
}
xmlFreeDoc ( doctree ) ;
xmlCleanupParser ( ) ;
PG_RETURN_BOOL ( true ) ;
}
@ -297,7 +293,6 @@ xpath_nodeset(PG_FUNCTION_ARGS)
xpres = pgxml_result_to_text ( pgxml_xpath ( PG_GETARG_TEXT_P ( 0 ) , xpath ) ,
toptag , septag , NULL ) ;
/* xmlCleanupParser(); done by result_to_text routine */
pfree ( xpath ) ;
if ( xpres = = NULL )
@ -332,7 +327,6 @@ xpath_list(PG_FUNCTION_ARGS)
xpres = pgxml_result_to_text ( pgxml_xpath ( PG_GETARG_TEXT_P ( 0 ) , xpath ) ,
NULL , NULL , plainsep ) ;
/* xmlCleanupParser(); done by result_to_text routine */
pfree ( xpath ) ;
if ( xpres = = NULL )
@ -371,7 +365,6 @@ xpath_string(PG_FUNCTION_ARGS)
xpres = pgxml_result_to_text ( pgxml_xpath ( PG_GETARG_TEXT_P ( 0 ) , xpath ) ,
NULL , NULL , NULL ) ;
xmlCleanupParser ( ) ;
pfree ( xpath ) ;
if ( xpres = = NULL )
@ -403,13 +396,10 @@ xpath_number(PG_FUNCTION_ARGS)
pfree ( xpath ) ;
if ( res = = NULL )
{
xmlCleanupParser ( ) ;
PG_RETURN_NULL ( ) ;
}
fRes = xmlXPathCastToNumber ( res ) ;
xmlCleanupParser ( ) ;
if ( xmlXPathIsNaN ( fRes ) )
PG_RETURN_NULL ( ) ;
@ -440,13 +430,10 @@ xpath_bool(PG_FUNCTION_ARGS)
pfree ( xpath ) ;
if ( res = = NULL )
{
xmlCleanupParser ( ) ;
PG_RETURN_BOOL ( false ) ;
}
bRes = xmlXPathCastToBoolean ( res ) ;
xmlCleanupParser ( ) ;
PG_RETURN_BOOL ( bRes ) ;
}
@ -469,9 +456,7 @@ pgxml_xpath(text *document, xmlChar *xpath)
doctree = xmlParseMemory ( ( char * ) VARDATA ( document ) , docsize ) ;
if ( doctree = = NULL )
{ /* not well-formed */
return NULL ;
}
return NULL ; /* not well-formed */
ctxt = xmlXPathNewContext ( doctree ) ;
ctxt - > node = xmlDocGetRootElement ( doctree ) ;
@ -480,7 +465,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
comppath = xmlXPathCompile ( xpath ) ;
if ( comppath = = NULL )
{
xmlCleanupParser ( ) ;
xmlFreeDoc ( doctree ) ;
elog_error ( " XPath Syntax Error " , true ) ;
}
@ -492,7 +476,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
if ( res = = NULL )
{
xmlXPathFreeContext ( ctxt ) ;
/* xmlCleanupParser(); */
xmlFreeDoc ( doctree ) ;
return NULL ;
@ -511,10 +494,8 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
text * xpres ;
if ( res = = NULL )
{
xmlCleanupParser ( ) ;
return NULL ;
}
switch ( res - > type )
{
case XPATH_NODESET :
@ -536,9 +517,6 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
xpres = cstring_to_text ( ( char * ) xpresstr ) ;
/* Free various storage */
xmlCleanupParser ( ) ;
/* xmlFreeDoc(doctree); -- will die at end of tuple anyway */
xmlFree ( xpresstr ) ;
elog_error ( " XPath error " , false ) ;
@ -779,7 +757,6 @@ xpath_table(PG_FUNCTION_ARGS)
comppath = xmlXPathCompile ( xpaths [ j ] ) ;
if ( comppath = = NULL )
{
xmlCleanupParser ( ) ;
xmlFreeDoc ( doctree ) ;
elog_error ( " XPath Syntax Error " , true ) ;
}
@ -844,8 +821,6 @@ xpath_table(PG_FUNCTION_ARGS)
pfree ( xmldoc ) ;
}
xmlCleanupParser ( ) ;
tuplestore_donestoring ( tupstore ) ;
SPI_finish ( ) ;